diff --git a/.gitignore b/.gitignore index b839f4a60..1d846e6a0 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ tmp/artifacts test-output.json .tool-versions .yarnrc.yml +**/.DS_Store diff --git a/dist/generate-custom-parser.js b/dist/generate-custom-parser.js index 1b8967cf9..ccff37538 100644 --- a/dist/generate-custom-parser.js +++ b/dist/generate-custom-parser.js @@ -704,9 +704,9 @@ function paragraphize$1(node, $) { function convertDivs$1($) { $('div').each(function (index, div) { var $div = $(div); - var convertable = $div.children(DIV_TO_P_BLOCK_TAGS$2).length === 0; + var convertible = $div.children(DIV_TO_P_BLOCK_TAGS$2).length === 0; - if (convertable) { + if (convertible) { convertNodeTo$$1($div, $, 'p'); } }); @@ -716,9 +716,9 @@ function convertDivs$1($) { function convertSpans$2($) { $('span').each(function (index, span) { var $span = $(span); - var convertable = $span.parents('p, div').length === 0; + var convertible = $span.parents('p, div, li, figcaption').length === 0; - if (convertable) { + if (convertible) { convertNodeTo$$1($span, $, 'p'); } }); @@ -1711,6 +1711,19 @@ var TAGS_TO_REMOVE = ['script', 'style', 'form'].join(','); // lazy loaded image // the src attribute so the images are no longer lazy loaded. function convertLazyLoadedImages($) { + var extractSrcFromJSON = function extractSrcFromJSON(str) { + try { + var _JSON$parse = JSON.parse(str), + src = _JSON$parse.src; + + if (typeof src === 'string') return src; + } catch (_) { + return false; + } + + return false; + }; + $('img').each(function (_, img) { var attrs = getAttrs$1(img); @@ -1720,7 +1733,14 @@ function convertLazyLoadedImages($) { if (attr !== 'srcset' && IS_LINK.test(value) && IS_SRCSET.test(value)) { $(img).attr('srcset', value); } else if (attr !== 'src' && attr !== 'srcset' && IS_LINK.test(value) && IS_IMAGE.test(value)) { - $(img).attr('src', value); + // Is the value a JSON object? If so, we should attempt to extract the image src from the data. + var existingSrc = extractSrcFromJSON(value); + + if (existingSrc) { + $(img).attr('src', existingSrc); + } else { + $(img).attr('src', value); + } } }); }); @@ -1779,7 +1799,8 @@ var Resource = { }; result = { body: preparedResponse, - response: validResponse + response: validResponse, + alreadyDecoded: true }; _context.next = 9; break; @@ -1819,7 +1840,9 @@ var Resource = { }(), generateDoc: function generateDoc(_ref) { var content = _ref.body, - response = _ref.response; + response = _ref.response, + _ref$alreadyDecoded = _ref.alreadyDecoded, + alreadyDecoded = _ref$alreadyDecoded === void 0 ? false : _ref$alreadyDecoded; var _response$headers$con = response.headers['content-type'], contentType = _response$headers$con === void 0 ? '' : _response$headers$con; // TODO: Implement is_text function from // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57 @@ -1830,7 +1853,8 @@ var Resource = { var $ = this.encodeDoc({ content: content, - contentType: contentType + contentType: contentType, + alreadyDecoded: alreadyDecoded }); if ($.root().children().length === 0) { @@ -1844,7 +1868,14 @@ var Resource = { }, encodeDoc: function encodeDoc(_ref2) { var content = _ref2.content, - contentType = _ref2.contentType; + contentType = _ref2.contentType, + _ref2$alreadyDecoded = _ref2.alreadyDecoded, + alreadyDecoded = _ref2$alreadyDecoded === void 0 ? false : _ref2$alreadyDecoded; + + if (alreadyDecoded) { + return cheerio$1.load(content); + } + var encoding = getEncoding$1(contentType); var decodedContent = iconv.decode(content, encoding); var $ = cheerio$1.load(decodedContent); // after first cheerio.load, check to see if encoding matches @@ -2056,13 +2087,13 @@ var TwitterExtractor = { var NYTimesExtractor = { domain: 'www.nytimes.com', title: { - selectors: ['h1.g-headline', 'h1[itemprop="headline"]', 'h1.headline'] + selectors: ['h1[data-testid="headline"]', 'h1.g-headline', 'h1[itemprop="headline"]', 'h1.headline', 'h1 .balancedHeadline'] }, author: { - selectors: [['meta[name="author"]', 'value'], '.g-byline', '.byline'] + selectors: [['meta[name="author"]', 'value'], '.g-byline', '.byline', ['meta[name="byl"]', 'value']] }, content: { - selectors: ['div.g-blocks', 'article#story'], + selectors: ['div.g-blocks', 'section[name="articleBody"]', 'article#story'], transforms: { 'img.g-lazy': function imgGLazy($node) { var src = $node.attr('src'); @@ -2074,7 +2105,7 @@ var NYTimesExtractor = { clean: ['.ad', 'header#story-header', '.story-body-1 .lede.video', '.visually-hidden', '#newsletter-promo', '.promo', '.comments-button', '.hidden', '.comments', '.supplemental', '.nocontent', '.story-footer-links'] }, date_published: { - selectors: [['meta[name="article:published"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[name="article:published"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2110,7 +2141,7 @@ var TheAtlanticExtractor = { selectors: [['time[itemprop="datePublished"]', 'datetime']] }, lead_image_url: { - selectors: [['img[itemprop="url"]', 'src']] + selectors: [['meta[name="og:image"]', 'value']] }, next_page_url: null, excerpt: null @@ -2121,31 +2152,33 @@ var TheAtlanticExtractor = { var NewYorkerExtractor = { domain: 'www.newyorker.com', title: { - selectors: ['h1[class^="ArticleHeader__hed"]', ['meta[name="og:title"]', 'value']] + selectors: ['h1[class^="content-header"]', 'h1[class^="ArticleHeader__hed"]', 'h1[class*="ContentHeaderHed"]', ['meta[name="og:title"]', 'value']] }, author: { - selectors: ['div[class^="ArticleContributors"] a[rel="author"]', 'article header div[class*="Byline__multipleContributors"]'] + selectors: ['article header div[class^="BylinesWrapper"]', ['meta[name="article:author"]', 'value'], 'div[class^="ArticleContributors"] a[rel="author"]', 'article header div[class*="Byline__multipleContributors"]'] }, content: { - selectors: ['main[class^="Layout__content"]'], + selectors: ['.article__body', 'article.article.main-content', 'main[class^="Layout__content"]'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images - transforms: [], + transforms: { + '.caption__text': 'figcaption', + '.caption__credit': 'figcaption' + }, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['footer[class^="ArticleFooter__footer"]'] + clean: ['footer[class^="ArticleFooter__footer"]', 'aside'] }, date_published: { - selectors: [['meta[name="pubdate"]', 'value']], - format: 'YYYYMMDD', + selectors: [['meta[name="article:published_time"]', 'value'], 'time.content-header__publish-date', ['meta[name="pubdate"]', 'value']], timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, dek: { - selectors: ['h2[class^="ArticleHeader__dek"]'] + selectors: ['div[class^="ContentHeaderDek"]', 'div.content-header__dek', 'h2[class^="ArticleHeader__dek"]'] }, next_page_url: null, excerpt: null @@ -2156,23 +2189,23 @@ var NewYorkerExtractor = { var WiredExtractor = { domain: 'www.wired.com', title: { - selectors: ['h1.post-title'] + selectors: ['h1[data-testId="ContentHeaderHed"]'] }, author: { - selectors: ['a[rel="author"]'] + selectors: [['meta[name="article:author"]', 'value'], 'a[rel="author"]'] }, content: { - selectors: ['article.content'], + selectors: ['article.article.main-content', 'article.content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: [], // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.visually-hidden', 'figcaption img.photo'] + clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2256,14 +2289,15 @@ var YahooExtractor = { var BuzzfeedExtractor = { domain: 'www.buzzfeed.com', + supportedDomains: ['www.buzzfeednews.com'], title: { - selectors: ['h1[id="post-title"]'] + selectors: ['h1.embed-headline-title'] }, author: { - selectors: ['a[data-action="user/username"]', 'byline__author'] + selectors: ['a[data-action="user/username"]', 'byline__author', ['meta[name="author"]', 'value']] }, content: { - selectors: [['.longform_custom_header_media', '#buzz_sub_buzz'], '#buzz_sub_buzz'], + selectors: [['div[class^="featureimage_featureImageWrapper"]', '.js-subbuzz-wrapper'], ['.js-subbuzz-wrapper']], defaultCleaner: false, // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images @@ -2281,16 +2315,16 @@ var BuzzfeedExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.instapaper_ignore', '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline', '.share-box', '.print'] + clean: ['.instapaper_ignore', '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline', '.share-box', '.print', '.js-inline-share-bar', '.js-ad-placement'] }, date_published: { - selectors: ['.buzz-datetime'] + selectors: [['time[datetime]', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, dek: { - selectors: [] + selectors: ['.embed-headline-description'] }, next_page_url: null, excerpt: null @@ -2334,14 +2368,14 @@ var WikiaExtractor = { var LittleThingsExtractor = { domain: 'www.littlethings.com', title: { - selectors: ['h1.post-title'] + selectors: ['h1[class*="PostHeader"]', 'h1.post-title'] }, author: { - selectors: [['meta[name="author"]', 'value']] + selectors: ['div[class^="PostHeader__ScAuthorNameSection"]', ['meta[name="author"]', 'value']] }, content: { selectors: [// enter content selectors - '.mainContentIntro', '.content-wrapper'], + 'section[class*="PostMainArticle"]', '.mainContentIntro', '.content-wrapper'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: [], @@ -2355,54 +2389,42 @@ var LittleThingsExtractor = { }, next_page_url: null, excerpt: null -}; // Rename CustomExtractor -// to fit your publication -// (e.g., NYTimesExtractor) - +}; var PoliticoExtractor = { domain: 'www.politico.com', title: { - selectors: [// enter title selectors - ['meta[name="og:title"]', 'value']] + selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['.story-main-content .byline .vcard'] + selectors: [['div[itemprop="author"] meta[itemprop="name"]', 'value'], '.story-meta__authors .vcard', '.story-main-content .byline .vcard'] }, content: { - selectors: [// enter content selectors - '.story-main-content', '.content-group', '.story-core', '.story-text'], - // Is there anything in the content you selected that needs transformed - // before it's consumable content? E.g., unusual lazy loaded images + selectors: [['.story-text'], '.story-main-content', '.story-core'], transforms: [], - // Is there anything that is in the result that shouldn't be? - // The clean selectors will remove anything that matches from - // the result - clean: ['figcaption'] + clean: ['figcaption', '.story-meta', '.ad'] }, date_published: { - selectors: [['.story-main-content .timestamp time[datetime]', 'datetime']] + selectors: [['time[itemprop="datePublished"]', 'datetime'], ['.story-meta__details time[datetime]', 'datetime'], ['.story-main-content .timestamp time[datetime]', 'datetime']], + timezone: 'America/New_York' }, lead_image_url: { - selectors: [// enter lead_image_url selectors - ['meta[name="og:image"]', 'value']] + selectors: [['meta[name="og:image"]', 'value']] }, dek: { - selectors: [] - }, - next_page_url: null, - excerpt: null + selectors: [['meta[name="og:description"]', 'value']] + } }; var DeadspinExtractor = { domain: 'deadspin.com', supportedDomains: ['jezebel.com', 'lifehacker.com', 'kotaku.com', 'gizmodo.com', 'jalopnik.com', 'kinja.com', 'avclub.com', 'clickhole.com', 'splinternews.com', 'theonion.com', 'theroot.com', 'thetakeout.com', 'theinventory.com'], title: { - selectors: ['h1.headline'] + selectors: ['header h1', 'h1.headline'] }, author: { - selectors: ['.author'] + selectors: ['a[data-ga*="Author"]', '.author'] }, content: { - selectors: ['.post-content', '.entry-content'], + selectors: ['.js_post-content', '.post-content', '.entry-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -2417,7 +2439,7 @@ var DeadspinExtractor = { clean: ['.magnifier', '.lightbox'] }, date_published: { - selectors: [['time.updated[datetime]', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['time.updated[datetime]', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2441,7 +2463,7 @@ var DeadspinExtractor = { var BroadwayWorldExtractor = { domain: 'www.broadwayworld.com', title: { - selectors: ['h1.article-title'] + selectors: ['h1[itemprop=headline]', 'h1.article-title'] }, author: { selectors: ['span[itemprop=author]'] @@ -2533,6 +2555,14 @@ var MediumExtractor = { // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { + // Allow drop cap character. + 'section span:first-of-type': function sectionSpanFirstOfType($node) { + var $text = $node.html(); + + if ($text.length === 1 && /^[a-zA-Z()]+$/.test($text)) { + $node.replaceWith($text); + } + }, // Re-write lazy-loaded youtube videos iframe: function iframe($node) { var ytRe = /https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//; @@ -2574,7 +2604,7 @@ var MediumExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['span', 'svg'] + clean: ['span a', 'svg'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -2599,7 +2629,7 @@ var WwwTmzComExtractor = { }, author: 'TMZ STAFF', date_published: { - selectors: ['.article-posted-date'], + selectors: ['.article__published-at', '.article-posted-date'], timezone: 'America/Los_Angeles' }, dek: { @@ -2610,7 +2640,7 @@ var WwwTmzComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-content', '.all-post-body'], + selectors: ['.article__blocks', '.article-content', '.all-post-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2690,10 +2720,10 @@ var WwwHuffingtonpostComExtractor = { var NewrepublicComExtractor = { domain: 'newrepublic.com', title: { - selectors: ['h1.article-headline', '.minutes-primary h1.minute-title'] + selectors: ['h1.article-headline'] }, author: { - selectors: ['div.author-list', '.minutes-primary h3.minute-byline'] + selectors: ['span.AuthorList'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']], @@ -2706,7 +2736,7 @@ var NewrepublicComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.article-cover', 'div.content-body'], ['.minute-image', '.minutes-primary div.content-body']], + selectors: [['div.article-body']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2722,7 +2752,7 @@ var MoneyCnnComExtractor = { selectors: ['.article-title'] }, author: { - selectors: ['.byline a'] + selectors: [['meta[name="author"]', 'value'], '.byline a'] }, date_published: { selectors: [['meta[name="date"]', 'value']], @@ -2758,7 +2788,7 @@ var WwwThevergeComExtractor = { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['h2.p-dek'] + selectors: ['.p-dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2793,10 +2823,10 @@ var WwwCnnComExtractor = { selectors: ['h1.pg-headline', 'h1'] }, author: { - selectors: ['.metadata__byline__author'] + selectors: [['meta[name="author"]', 'value']] }, date_published: { - selectors: [['meta[name="pubdate"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2867,10 +2897,10 @@ var WwwAolComExtractor = { var WwwYoutubeComExtractor = { domain: 'www.youtube.com', title: { - selectors: ['.watch-title', 'h1.watch-title-container'] + selectors: [['meta[name="title"]', 'value'], '.watch-title', 'h1.watch-title-container'] }, author: { - selectors: ['.yt-user-info'] + selectors: [['link[itemprop="name"]', 'content'], '.yt-user-info'] }, date_published: { selectors: [['meta[itemProp="datePublished"]', 'value']], @@ -2885,13 +2915,18 @@ var WwwYoutubeComExtractor = { }, content: { defaultCleaner: false, - selectors: [['#player-api', '#eow-description']], + selectors: ['#player-container-outer', 'ytd-expandable-video-description-body-renderer #description', ['#player-api', '#description']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { '#player-api': function playerApi($node, $) { var videoId = $('meta[itemProp="videoId"]').attr('value'); $node.html("\n ")); + }, + '#player-container-outer': function playerContainerOuter($node, $) { + var videoId = $('meta[itemProp="videoId"]').attr('value'); + var description = $('meta[itemProp="description"]').attr('value'); + $node.html("\n \n
").concat(description, "
")); } }, // Is there anything that is in the result that shouldn't be? @@ -2903,22 +2938,22 @@ var WwwYoutubeComExtractor = { var WwwTheguardianComExtractor = { domain: 'www.theguardian.com', title: { - selectors: ['.content__headline'] + selectors: ['h1', '.content__headline'] }, author: { - selectors: ['p.byline'] + selectors: ['address[data-link-name="byline"]', 'p.byline'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['.content__standfirst'] + selectors: ['div[data-gu-name="standfirst"]', '.content__standfirst'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.content__article-body'], + selectors: ['#maincontent', '.content__article-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2940,7 +2975,7 @@ var WwwSbnationComExtractor = { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['h2.c-entry-summary.p-dek'] + selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2962,24 +2997,24 @@ var WwwBloombergComExtractor = { selectors: [// normal articles '.lede-headline', // /graphics/ template 'h1.article-title', // /news/ template - 'h1.lede-text-only__hed'] + 'h1[class^="headline"]', 'h1.lede-text-only__hed'] }, author: { selectors: [['meta[name="parsely-author"]', 'value'], '.byline-details__link', // /graphics/ template '.bydek', // /news/ template - '.author'] + '.author', 'p[class*="author"]'] }, date_published: { - selectors: [['time.published-at', 'datetime'], ['time[datetime]', 'datetime'], ['meta[name="date"]', 'value'], ['meta[name="parsely-pub-date"]', 'value']] + selectors: [['time.published-at', 'datetime'], ['time[datetime]', 'datetime'], ['meta[name="date"]', 'value'], ['meta[name="parsely-pub-date"]', 'value'], ['meta[name="parsely-pub-date"]', 'content']] }, dek: { selectors: [] }, lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] + selectors: [['meta[name="og:image"]', 'value'], ['meta[name="og:image"]', 'content']] }, content: { - selectors: ['.article-body__content', // /graphics/ template + selectors: ['.article-body__content', '.body-content', // /graphics/ template ['section.copy-block'], // /news/ template '.body-copy'], // Is there anything in the content you selected that needs transformed @@ -2994,19 +3029,19 @@ var WwwBloombergComExtractor = { var WwwBustleComExtractor = { domain: 'www.bustle.com', title: { - selectors: ['h1.post-page__title'] + selectors: ['h1', 'h1.post-page__title'] }, author: { - selectors: ['div.content-meta__author'] + selectors: ['a[href*="profile"]', 'div.content-meta__author'] }, date_published: { - selectors: [['time.content-meta__published-date[datetime]', 'datetime']] + selectors: [['time', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.post-page__body'], + selectors: ['article', '.post-page__body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3075,26 +3110,26 @@ var WwwRecodeNetExtractor = { var QzComExtractor = { domain: 'qz.com', title: { - selectors: ['header.item-header.content-width-responsive'] + selectors: ['article header h1'] }, author: { selectors: [['meta[name="author"]', 'value']] }, date_published: { - selectors: ['.timestamp'] + selectors: [['meta[name="article:published_time"]', 'value'], ['time[datetime]', 'datetime']] }, lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] + selectors: [['meta[name="og:image"]', 'value'], ['meta[property="og:image"]', 'content'], ['meta[name="twitter:image"]', 'content']] }, content: { - selectors: [['figure.featured-image', '.item-body'], '.item-body'], + selectors: ['#article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.article-aside', '.progressive-image-thumbnail'] + clean: [] } }; var WwwDmagazineComExtractor = { @@ -3108,7 +3143,8 @@ var WwwDmagazineComExtractor = { date_published: { selectors: [// enter selectors '.story__info'], - timezone: 'America/Chicago' + timezone: 'America/Chicago', + format: 'MMMM D, YYYY h:mm a' }, dek: { selectors: ['.story__subhead'] @@ -3130,10 +3166,10 @@ var WwwDmagazineComExtractor = { var WwwReutersComExtractor = { domain: 'www.reuters.com', title: { - selectors: ['h1.article-headline'] + selectors: ['h1[class*="ArticleHeader-headline-"]', 'h1.article-headline'] }, author: { - selectors: ['.author'] + selectors: [['meta[name="og:article:author"]', 'value'], '.author'] }, date_published: { selectors: [['meta[name="og:article:published_time"]', 'value']] @@ -3142,7 +3178,7 @@ var WwwReutersComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#article-text'], + selectors: ['div.ArticleBodyWrapper', '#article-text'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3151,25 +3187,25 @@ var WwwReutersComExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['#article-byline .author'] + clean: ['div[class^="ArticleBody-byline-container-"]', '#article-byline .author'] } }; var MashableComExtractor = { domain: 'mashable.com', title: { - selectors: ['h1.title'] + selectors: ['header h1', 'h1.title'] }, author: { - selectors: ['span.author_name a'] + selectors: [['meta[name="article:author"]', 'value'], 'span.author_name a'] }, date_published: { - selectors: [['meta[name="og:article:published_time"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['section.article-content.blueprint'], + selectors: ['#article', 'section.article-content.blueprint'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3184,19 +3220,19 @@ var MashableComExtractor = { var WwwChicagotribuneComExtractor = { domain: 'www.chicagotribune.com', title: { - selectors: ['h1.trb_ar_hl_t'] + selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['span.trb_ar_by_nm_au'] + selectors: ['div.article_byline span:first-of-type'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: ['time'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.trb_ar_page'], + selectors: ['article'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3290,13 +3326,13 @@ var WwwNationalgeographicComExtractor = { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['.article__deck'] + selectors: ['.Article__Headline__Desc', '.article__deck'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.parsys.content', '.__image-lead__'], '.content'], + selectors: ['section.Article__Content', ['.parsys.content', '.__image-lead__'], '.content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3329,19 +3365,19 @@ var WwwNationalgeographicComExtractor = { var WwwLatimesComExtractor = { domain: 'www.latimes.com', title: { - selectors: ['.trb_ar_hl'] + selectors: ['h1.headline', '.trb_ar_hl'] }, author: { - selectors: [['meta[name="author"]', 'value']] + selectors: ['a[data-click="standardBylineAuthorName"]', ['meta[name="author"]', 'value']] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[itemprop="datePublished"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.trb_ar_main'], + selectors: ['.page-article-body', '.trb_ar_main'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3360,7 +3396,7 @@ var PagesixComExtractor = { domain: 'pagesix.com', supportedDomains: ['nypost.com'], title: { - selectors: ['h1 a'] + selectors: [['meta[name="og:title"]', 'value']] }, author: { selectors: ['.byline'] @@ -3394,7 +3430,7 @@ var ThefederalistpapersOrgExtractor = { selectors: ['h1.entry-title'] }, author: { - selectors: ['main span.entry-author-name'] + selectors: ['.author-meta-title', 'main span.entry-author-name'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -3403,30 +3439,30 @@ var ThefederalistpapersOrgExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-content'], + selectors: ['.content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: [['p[style]']] + clean: ['header', '.article-sharing', '.after-article', '.type-commenting', '.more-posts', ['p[style]']] } }; var WwwCbssportsComExtractor = { domain: 'www.cbssports.com', title: { - selectors: ['.article-headline'] + selectors: ['.Article-headline', '.article-headline'] }, author: { - selectors: ['.author-name'] + selectors: ['.ArticleAuthor-nameText', '.author-name'] }, date_published: { - selectors: [['.date-original-reading-time time', 'datetime']], + selectors: [['meta[itemprop="datePublished"]', 'value']], timezone: 'UTC' }, dek: { - selectors: ['.article-subline'] + selectors: ['.Article-subline', '.article-subline'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -3448,10 +3484,10 @@ var WwwMsnbcComExtractor = { selectors: ['h1', 'h1.is-title-pane'] }, author: { - selectors: ['.author'] + selectors: ['.byline-name', '.author'] }, date_published: { - selectors: [['meta[name="DC.date.issued"]', 'value']] + selectors: [['meta[itemprop="datePublished"]', 'value'], ['meta[name="DC.date.issued"]', 'value']] }, dek: { selectors: [['meta[name="description"]', 'value']] @@ -3460,7 +3496,7 @@ var WwwMsnbcComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.pane-node-body'], + selectors: ['.article-body__content', '.pane-node-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3515,47 +3551,48 @@ var WwwThepoliticalinsiderComExtractor = { var WwwMentalflossComExtractor = { domain: 'www.mentalfloss.com', title: { - selectors: ['h1.title', '.title-group', '.inner'] + selectors: [['meta[name="og:title"]', 'value'], 'h1.title', '.title-group', '.inner'] }, author: { - selectors: ['.field-name-field-enhanced-authors'] + selectors: ['a[data-vars-label*="authors"]', '.field-name-field-enhanced-authors'] }, date_published: { - selectors: ['.date-display-single'], + selectors: [['meta[name="article:published_time"]', 'value'], '.date-display-single'], timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.field.field-name-body'], + selectors: ['article main', 'div.field.field-name-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: [] + clean: ['small'] } }; var AbcnewsGoComExtractor = { domain: 'abcnews.go.com', title: { - selectors: ['.article-header h1'] + selectors: ['div[class*="Article_main__body"] h1', '.article-header h1'] }, author: { - selectors: ['.authors'], + selectors: ['.ShareByline span:nth-child(2)', '.authors'], clean: ['.author-overlay', '.by-text'] }, date_published: { - selectors: ['.timestamp'], + selectors: ['.ShareByline', '.timestamp'], + format: 'MMMM D, YYYY h:mm a', timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-copy'], + selectors: ['article', '.article-copy'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3568,19 +3605,19 @@ var AbcnewsGoComExtractor = { var WwwNydailynewsComExtractor = { domain: 'www.nydailynews.com', title: { - selectors: ['h1#ra-headline'] + selectors: ['h1.headline', 'h1#ra-headline'] }, author: { - selectors: [['meta[name="parsely-author"]', 'value']] + selectors: ['.article_byline span', ['meta[name="parsely-author"]', 'value']] }, date_published: { - selectors: [['meta[name="sailthru.date"]', 'value']] + selectors: ['time', ['meta[name="sailthru.date"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['article#ra-body'], + selectors: ['article', 'article#ra-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3671,19 +3708,22 @@ var ObserverComExtractor = { var PeopleComExtractor = { domain: 'people.com', title: { - selectors: [['meta[name="og:title"]', 'value']] + selectors: ['.article-header h1', ['meta[name="og:title"]', 'value']] }, author: { - selectors: ['a.author.url.fn'] + selectors: [['meta[name="sailthru.author"]', 'value'], 'a.author.url.fn'] }, date_published: { - selectors: [['meta[name="article:published_time"]', 'value']] + selectors: ['.mntl-attribution__item-date', ['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, + dek: { + selectors: ['.article-header h2'] + }, content: { - selectors: ['div.article-body__inner'], + selectors: ['div[class^="loc article-content"]', 'div.article-body__inner'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3699,17 +3739,17 @@ var WwwUsmagazineComExtractor = { selectors: ['header h1'] }, author: { - selectors: ['a.article-byline.tracked-offpage'] + selectors: ['a.author', 'a.article-byline.tracked-offpage'] }, date_published: { timezone: 'America/New_York', - selectors: ['time.article-published-date'] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.article-body-inner'], + selectors: ['div.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3722,30 +3762,30 @@ var WwwUsmagazineComExtractor = { var WwwRollingstoneComExtractor = { domain: 'www.rollingstone.com', title: { - selectors: ['h1.content-title'] + selectors: ['h1.l-article-header__row--title', 'h1.content-title'] }, author: { - selectors: ['a.content-author.tracked-offpage'] + selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'] }, date_published: { - selectors: ['time.content-published-date'], + selectors: [['meta[name="article:published_time"]', 'value'], 'time.content-published-date'], timezone: 'America/New_York' }, dek: { - selectors: ['.content-description'] + selectors: ['h2.l-article-header__row--lead', '.content-description'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.lead-container', '.article-content'], '.article-content'], + selectors: ['.l-article-content', ['.lead-container', '.article-content'], '.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.module-related'] + clean: ['.c-related-links-wrapper', '.module-related'] } }; var twofortysevensportsComExtractor = { @@ -3754,7 +3794,7 @@ var twofortysevensportsComExtractor = { selectors: ['title', 'article header h1'] }, author: { - selectors: ['.author'] + selectors: ['.article-cnt__author', '.author'] }, date_published: { selectors: [['time[data-published]', 'data-published']] @@ -3763,7 +3803,7 @@ var twofortysevensportsComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['section.body.article'], + selectors: ['.article-body', 'section.body.article'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3776,10 +3816,10 @@ var twofortysevensportsComExtractor = { var UproxxComExtractor = { domain: 'uproxx.com', title: { - selectors: ['div.post-top h1'] + selectors: ['div.entry-header h1'] }, author: { - selectors: ['.post-top .authorname'] + selectors: [['meta[name="qc:author"]', 'value']] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -3788,7 +3828,7 @@ var UproxxComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.post-body'], + selectors: ['.entry-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3804,19 +3844,19 @@ var UproxxComExtractor = { var WwwEonlineComExtractor = { domain: 'www.eonline.com', title: { - selectors: ['h1.article__title'] + selectors: ['h1.article-detail__title', 'h1.article__title'] }, author: { - selectors: ['.entry-meta__author a'] + selectors: ['.article-detail__meta__author', '.entry-meta__author a'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[itemprop="datePublished"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.post-content section, .post-content div.post-content__image']], + selectors: [['.article-detail__main-content section'], ['.post-content section, .post-content div.post-content__image']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3892,12 +3932,10 @@ var WwwMacrumorsComExtractor = { selectors: ['h1', 'h1.title'] }, author: { - selectors: ['.author-url'] + selectors: ['article a[rel="author"]', '.author-url'] }, date_published: { - selectors: ['.article .byline'], - // Wednesday January 18, 2017 11:44 am PST - format: 'dddd MMMM D, YYYY h:mm A zz', + selectors: [['time', 'datetime']], timezone: 'America/Los_Angeles' }, dek: { @@ -3907,7 +3945,7 @@ var WwwMacrumorsComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article'], + selectors: ['article', '.article'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3923,19 +3961,19 @@ var WwwAndroidcentralComExtractor = { selectors: ['h1', 'h1.main-title'] }, author: { - selectors: ['.meta-by'] + selectors: [['meta[name="parsely-author"]', 'value']] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: [['meta[name="og:description"]', 'value']] + selectors: [['meta[name="description"]', 'value']] }, lead_image_url: { - selectors: [['.image-large', 'src']] + selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-body'], + selectors: ['#article-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3954,17 +3992,17 @@ var WwwSiComExtractor = { selectors: [['meta[name="author"]', 'value']] }, date_published: { - selectors: ['.timestamp'], + selectors: [['meta[name="published"]', 'value']], timezone: 'America/New_York' }, dek: { - selectors: ['.quick-hit ul'] + selectors: ['.m-detail-header--dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['p', '.marquee_large_2x', '.component.image']], + selectors: ['.m-detail--body', ['p', '.marquee_large_2x', '.component.image']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3987,20 +4025,20 @@ var WwwSiComExtractor = { var WwwRawstoryComExtractor = { domain: 'www.rawstory.com', title: { - selectors: ['.blog-title'] + selectors: [['meta[name="og:title"]', 'value'], '.blog-title'] }, author: { - selectors: ['.blog-author a:first-of-type'] + selectors: ['div.main-post-head .social-author__name', '.blog-author a:first-of-type'] }, date_published: { - selectors: ['.blog-author a:last-of-type'], + selectors: [['meta[name="article:published_time"]', 'value'], '.blog-author a:last-of-type'], timezone: 'EST' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.blog-content'], + selectors: ['.post-body', '.blog-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4016,14 +4054,14 @@ var WwwCnetComExtractor = { selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['a.author'] + selectors: ['span.author', 'a.author'] }, date_published: { selectors: ['time'], timezone: 'America/Los_Angeles' }, dek: { - selectors: ['.article-dek'] + selectors: ['.c-head_dek', '.article-dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -4047,48 +4085,22 @@ var WwwCnetComExtractor = { clean: [] } }; -var WwwCinemablendComExtractor = { - domain: 'www.cinemablend.com', - title: { - selectors: ['.story_title'] - }, - author: { - selectors: ['.author'] - }, - date_published: { - selectors: [['meta[name="article:published_time"]', 'value']], - timezone: 'EST' - }, - lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] - }, - content: { - selectors: ['div#wrap_left_content'], - // Is there anything in the content you selected that needs transformed - // before it's consumable content? E.g., unusual lazy loaded images - transforms: {}, - // Is there anything that is in the result that shouldn't be? - // The clean selectors will remove anything that matches from - // the result - clean: [] - } -}; var WwwTodayComExtractor = { domain: 'www.today.com', title: { - selectors: ['h1.entry-headline'] + selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'] }, author: { - selectors: [['meta[name="author"]', 'value']] + selectors: ['span.byline-name', ['meta[name="author"]', 'value']] }, date_published: { - selectors: [['meta[name="DC.date.issued"]', 'value']] + selectors: ['time[datetime]', ['meta[name="DC.date.issued"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-container'], + selectors: ['div.article-body__content', '.entry-container'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4098,32 +4110,6 @@ var WwwTodayComExtractor = { clean: ['.label-comment'] } }; -var WwwHowtogeekComExtractor = { - domain: 'www.howtogeek.com', - title: { - selectors: ['title'] - }, - author: { - selectors: ['#authorinfobox a'] - }, - date_published: { - selectors: ['#authorinfobox + div li'], - timezone: 'GMT' - }, - lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] - }, - content: { - selectors: ['.thecontent'], - // Is there anything in the content you selected that needs transformed - // before it's consumable content? E.g., unusual lazy loaded images - transforms: {}, - // Is there anything that is in the result that shouldn't be? - // The clean selectors will remove anything that matches from - // the result - clean: [] - } -}; var WwwAlComExtractor = { domain: 'www.al.com', title: { @@ -4165,7 +4151,7 @@ var WwwThepennyhoarderComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.post-img', '.post-text'], '.post-text'], + selectors: [['.post-img', '.post-text'], '.post-text', '.single-post-content-inner'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4203,37 +4189,6 @@ var WwwWesternjournalismComExtractor = { clean: ['.ad-notice-small'] } }; -var FusionNetExtractor = { - domain: 'fusion.net', - title: { - selectors: ['.post-title', '.single-title', '.headline'] - }, - author: { - selectors: ['.show-for-medium .byline'] - }, - date_published: { - selectors: [['time.local-time', 'datetime']] - }, - dek: { - selectors: [// enter selectors - ] - }, - lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] - }, - content: { - selectors: [['.post-featured-media', '.article-content'], '.article-content'], - // Is there anything in the content you selected that needs transformed - // before it's consumable content? E.g., unusual lazy loaded images - transforms: { - '.fusion-youtube-oembed': 'figure' - }, - // Is there anything that is in the result that shouldn't be? - // The clean selectors will remove anything that matches from - // the result - clean: [] - } -}; var WwwAmericanowComExtractor = { domain: 'www.americanow.com', title: { @@ -4295,19 +4250,19 @@ var ScienceflyComExtractor = { var HellogigglesComExtractor = { domain: 'hellogiggles.com', title: { - selectors: ['.title'] + selectors: [['meta[name="og:title"]', 'value'], '.title'] }, author: { - selectors: ['.author-link'] + selectors: ['.byline-wrapper span.author_name', '.author-link'] }, date_published: { - selectors: [['meta[name="article:published_time"]', 'value']] + selectors: [['meta[property="article:published_time"]', 'content'], ['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-content'], + selectors: ['.main-content', '.entry-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4323,7 +4278,7 @@ var ThoughtcatalogComExtractor = { selectors: ['h1.title', ['meta[name="og:title"]', 'value']] }, author: { - selectors: ['div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name', 'h1.writer-name'] + selectors: ['cite a', 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name', 'h1.writer-name'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -4339,33 +4294,7 @@ var ThoughtcatalogComExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.tc_mark'] - } -}; -var WwwNjComExtractor = { - domain: 'www.nj.com', - title: { - selectors: [['meta[name="title"]', 'value']] - }, - author: { - selectors: [['meta[name="article_author"]', 'value']] - }, - date_published: { - selectors: [['meta[name="article_date_original"]', 'value']], - timezone: 'America/New_York' - }, - lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] - }, - content: { - selectors: ['.entry-content'], - // Is there anything in the content you selected that needs transformed - // before it's consumable content? E.g., unusual lazy loaded images - transforms: {}, - // Is there anything that is in the result that shouldn't be? - // The clean selectors will remove anything that matches from - // the result - clean: [] + clean: ['.tc_mark', 'figcaption'] } }; var WwwInquisitrComExtractor = { @@ -4396,20 +4325,20 @@ var WwwInquisitrComExtractor = { var WwwNbcnewsComExtractor = { domain: 'www.nbcnews.com', title: { - selectors: ['div.article-hed h1'] + selectors: ['div.article-hero-headline h1', 'div.article-hed h1'] }, author: { - selectors: ['span.byline_author'] + selectors: ['div.article-inline-byline span.byline-name', 'span.byline_author'] }, date_published: { - selectors: [['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'], '.flag_article-wrapper time'], + selectors: [['meta[name="article:published"]', 'value'], ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'], '.flag_article-wrapper time'], timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.article-body'], + selectors: ['div.article-body__content', 'div.article-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4451,10 +4380,10 @@ var WwwLinkedinComExtractor = { selectors: ['.article-title', 'h1'] }, author: { - selectors: [['meta[name="article:author"]', 'value'], '.entity-name a[rel=author]'] + selectors: ['.main-author-card h3', ['meta[name="article:author"]', 'value'], '.entity-name a[rel=author]'] }, date_published: { - selectors: [['time[itemprop="datePublished"]', 'datetime']], + selectors: ['.base-main-card__metadata', ['time[itemprop="datePublished"]', 'datetime']], timezone: 'America/Los_Angeles' }, dek: { @@ -4465,7 +4394,7 @@ var WwwLinkedinComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['header figure', '.prose'], '.prose'], + selectors: ['.article-content__body', ['header figure', '.prose'], '.prose'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4508,13 +4437,13 @@ var ObamawhitehouseArchivesGovExtractor = { var WwwOpposingviewsComExtractor = { domain: 'www.opposingviews.com', title: { - selectors: ['h1.title'] + selectors: ['h1.m-detail-header--title', 'h1.title'] }, author: { - selectors: ['div.date span span a'] + selectors: [['meta[name="author"]', 'value'], 'div.date span span a'] }, date_published: { - selectors: [['meta[name="publish_date"]', 'value']] + selectors: [['meta[name="published"]', 'value'], ['meta[name="publish_date"]', 'value']] }, dek: { selectors: [// enter selectors @@ -4524,7 +4453,7 @@ var WwwOpposingviewsComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-content'], + selectors: ['.m-detail--body', '.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4537,23 +4466,23 @@ var WwwOpposingviewsComExtractor = { var WwwProspectmagazineCoUkExtractor = { domain: 'www.prospectmagazine.co.uk', title: { - selectors: ['.page-title'] + selectors: ['.blog-header__title', '.page-title'] }, author: { - selectors: ['.aside_author .title'] + selectors: ['.blog-header__author-link', '.aside_author .title'] }, date_published: { - selectors: ['.post-info'], + selectors: [['meta[name="article:published_time"]', 'value'], '.post-info'], timezone: 'Europe/London' }, dek: { - selectors: ['.page-subtitle'] + selectors: ['.blog-header__description', '.page-subtitle'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['article .post_content'], + selectors: ['.blog__container', 'article .post_content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4569,10 +4498,10 @@ var ForwardComExtractor = { selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['.author-name', ['meta[name="sailthru.author"]', 'value']] + selectors: ['.post-author a', '.author-name', ['meta[name="sailthru.author"]', 'value']] }, date_published: { - selectors: [['meta[name="date"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[name="date"]', 'value']] }, dek: { selectors: [// enter selectors @@ -4582,14 +4511,14 @@ var ForwardComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.post-item-media-wrap', '.post-item p']], + selectors: ['.content-container article', ['.post-item-media-wrap', '.post-item p']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.donate-box', '.message', '.subtitle'] + clean: ['.post-author', '.donate-box', '.message', '.subtitle'] } }; var WwwQdailyComExtractor = { @@ -4627,10 +4556,11 @@ var GothamistComExtractor = { selectors: ['h1', '.entry-header h1'] }, author: { - selectors: ['.author'] + // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class + selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'] }, date_published: { - selectors: ['abbr', 'abbr.published'], + selectors: [['meta[name="article:published_time"]', 'value'], 'abbr', 'abbr.published'], timezone: 'America/New_York' }, dek: { @@ -4640,7 +4570,7 @@ var GothamistComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-body'], + selectors: ['.article-body', '.entry-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -4663,19 +4593,19 @@ var WwwFoolComExtractor = { selectors: ['h1'] }, author: { - selectors: ['.author-inline .author-name'] + selectors: [['meta[name="author"]', 'value'], '.author-inline .author-name'] }, date_published: { selectors: [['meta[name="date"]', 'value']] }, dek: { - selectors: ['header h2'] + selectors: [['meta[name="og:description"]', 'value'], 'header h2'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-content'], + selectors: ['.tailwind-article-body', '.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -4730,16 +4660,17 @@ var IciRadioCanadaCaExtractor = { }, date_published: { selectors: [['meta[name="dc.date.created"]', 'value']], + format: 'YYYY-MM-DD|HH[h]mm', timezone: 'America/New_York' }, dek: { - selectors: ['.bunker-component.lead'] + selectors: ['div.lead-container', '.bunker-component.lead'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.main-multimedia-item', '.news-story-content']], + selectors: ['section.document-content-style', ['.main-multimedia-item', '.news-story-content']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4784,7 +4715,7 @@ var WwwFastcompanyComExtractor = { selectors: ['h1'] }, author: { - selectors: ['.post__by'] + selectors: [['meta[name="author"]', 'value']] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -4836,7 +4767,7 @@ var NewsMynaviJpExtractor = { selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['main div.article-author a.article-author__name'] + selectors: ['a.articleHeader_name', 'main div.article-author a.article-author__name'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -4848,7 +4779,7 @@ var NewsMynaviJpExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['main article div'], + selectors: ['div.article-body', 'main article div'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -4899,10 +4830,10 @@ var GithubComExtractor = { ] }, date_published: { - selectors: [['span[itemprop="dateModified"] relative-time', 'datetime']] + selectors: [['relative-time[datetime]', 'datetime'], ['span[itemprop="dateModified"] relative-time', 'datetime']] }, dek: { - selectors: ['span[itemprop="about"]'] + selectors: [['meta[name="description"]', 'value'], 'span[itemprop="about"]'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -4921,13 +4852,13 @@ var GithubComExtractor = { var WwwRedditComExtractor = { domain: 'www.reddit.com', title: { - selectors: ['div[data-test-id="post-content"] h2'] + selectors: ['div[data-test-id="post-content"] h1', 'div[data-test-id="post-content"] h2'] }, author: { selectors: ['div[data-test-id="post-content"] a[href*="user/"]'] }, date_published: { - selectors: ['div[data-test-id="post-content"] a[data-click-id="timestamp"]'] + selectors: ['div[data-test-id="post-content"] span[data-click-id="timestamp"]', 'div[data-test-id="post-content"] a[data-click-id="timestamp"]'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -4937,7 +4868,7 @@ var WwwRedditComExtractor = { ['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])', // external link 'div[data-test-id="post-content"] div[data-click-id="media"]'], // external link with media preview (YouTube, imgur album, etc...) ['div[data-test-id="post-content"] div[data-click-id="media"]'], // Embedded media (Reddit video) - ['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])'], // external link + ['div[data-test-id="post-content"] a'], // external link 'div[data-test-id="post-content"]'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images @@ -4958,7 +4889,7 @@ var WwwRedditComExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.icon'] + clean: ['.icon', 'span[id^="PostAwardBadges"]', 'div a[data-test-id="comments-page-link-num-comments"]'] } }; var OtrsComExtractor = { @@ -5030,7 +4961,7 @@ var BuzzapJpExtractor = { var WwwAsahiComExtractor = { domain: 'www.asahi.com', title: { - selectors: ['.ArticleTitle h1'] + selectors: ['main h1', '.ArticleTitle h1'] }, author: { selectors: [['meta[name="article:author"]', 'value']] @@ -5046,10 +4977,10 @@ var WwwAsahiComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#MainInner div.ArticleBody'], + selectors: ['main'], defaultCleaner: false, transforms: {}, - clean: ['div.AdMod', 'div.LoginSelectArea'] + clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'] } }; var WwwSanwaCoJpExtractor = { @@ -5059,7 +4990,7 @@ var WwwSanwaCoJpExtractor = { }, author: null, date_published: { - selectors: ['p.date'], + selectors: ['dl.date'], format: 'YYYY.MM.DD', timezone: 'Asia/Tokyo' }, @@ -5296,7 +5227,7 @@ var WwwPublickey1JpExtractor = { selectors: ['h1'] }, author: { - selectors: ['#subcol p:has(img)'] + selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'] }, date_published: { selectors: ['div.pubdate'], @@ -5337,13 +5268,13 @@ var TakagihiromitsuJpExtractor = { var BookwalkerJpExtractor = { domain: 'bookwalker.jp', title: { - selectors: ['h1.main-heading'] + selectors: ['h1.p-main__title', 'h1.main-heading'] }, author: { - selectors: ['div.authors'] + selectors: ['div.p-author__list', 'div.authors'] }, date_published: { - selectors: ['.work-info .work-detail:first-of-type .work-detail-contents:last-of-type'], + selectors: ['dl.p-information__data dd:nth-of-type(7)', '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type'], timezone: 'Asia/Tokyo' }, dek: null, @@ -5351,7 +5282,7 @@ var BookwalkerJpExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['div.main-info', 'div.main-cover-inner']], + selectors: ['div.p-main__information', ['div.main-info', 'div.main-cover-inner']], defaultCleaner: false, transforms: {}, clean: ['span.label.label--trial', 'dt.info-head.info-head--coin', 'dd.info-contents.info-contents--coin', 'div.info-notice.fn-toggleClass'] @@ -5405,7 +5336,7 @@ var DeadlineComExtractor = { selectors: ['h1'] }, author: { - selectors: ['section.author h3'] + selectors: ['section.author h2'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -5422,7 +5353,7 @@ var DeadlineComExtractor = { $node.replaceWith(innerHtml); } }, - clean: [] + clean: ['figcaption'] } }; var WwwGizmodoJpExtractor = { @@ -5457,10 +5388,10 @@ var GetnewsJpExtractor = { selectors: ['article h1'] }, author: { - selectors: ['span.prof'] + selectors: [['meta[name="article:author"]', 'value'], 'span.prof'] }, date_published: { - selectors: [['ul.cattag-top time', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['ul.cattag-top time', 'datetime']] }, dek: null, lead_image_url: { @@ -5475,20 +5406,20 @@ var GetnewsJpExtractor = { var WwwLifehackerJpExtractor = { domain: 'www.lifehacker.jp', title: { - selectors: ['h1.lh-summary-title'] + selectors: ['h1[class^="article_pArticle_Title"]', 'h1.lh-summary-title'] }, author: { - selectors: ['p.lh-entryDetailInner--credit'] + selectors: [['meta[name="author"]', 'value'], 'p.lh-entryDetailInner--credit'] }, date_published: { - selectors: [['div.lh-entryDetail-header time', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['div.lh-entryDetail-header time', 'datetime']] }, dek: null, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.lh-entryDetail-body'], + selectors: ['div[class^="article_pArticle_Body__"]', 'div.lh-entryDetail-body'], transforms: { 'img.lazyload': function imgLazyload($node) { var src = $node.attr('src'); @@ -5501,13 +5432,13 @@ var WwwLifehackerJpExtractor = { var SectIijAdJpExtractor = { domain: 'sect.iij.ad.jp', title: { - selectors: ['h3'] + selectors: ['div.title-box-inner h1', 'h3'] }, author: { - selectors: ['dl.entrydate dd'] + selectors: ['p.post-author a', 'dl.entrydate dd'] }, date_published: { - selectors: ['dl.entrydate dd'], + selectors: ['time'], format: 'YYYY年MM月DD日', timezone: 'Asia/Tokyo' }, @@ -5516,7 +5447,7 @@ var SectIijAdJpExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#article'], + selectors: ['.entry-inner', '#article'], transforms: {}, clean: ['dl.entrydate'] } @@ -5524,21 +5455,21 @@ var SectIijAdJpExtractor = { var WwwOreillyCoJpExtractor = { domain: 'www.oreilly.co.jp', title: { - selectors: ['h3'] + selectors: [['meta[name="og:title"]', 'value'], 'h3'] }, author: { - selectors: ['li[itemprop="author"]'] + selectors: ['span[itemprop="author"]', 'li[itemprop="author"]'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']], + selectors: [['dd[itemprop="datePublished"]', 'content'], ['meta[itemprop="datePublished"]', 'value']], timezone: 'Asia/Tokyo' }, dek: null, lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] + selectors: [['meta[name="og:image:secure_url"]', 'value'], ['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#content'], + selectors: ['section.detail', '#content'], defaultCleaner: false, transforms: {}, clean: ['.social-tools'] @@ -5567,20 +5498,22 @@ var WwwIpaGoJpExtractor = { var WeeklyAsciiJpExtractor = { domain: 'weekly.ascii.jp', title: { - selectors: ['h1[itemprop="headline"]'] + selectors: ['article h1', 'h1[itemprop="headline"]'] }, author: { selectors: ['p.author'] }, date_published: { - selectors: [['meta[name="odate"]', 'value']] + selectors: ['p.date', ['meta[name="odate"]', 'value']], + format: 'YYYY年MM月DD日 HH:mm', + timezone: 'Asia/Tokyo' }, dek: null, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.article'], + selectors: ['div#contents_detail', 'div.article'], transforms: {}, clean: [] } @@ -5604,28 +5537,28 @@ var TechlogIijAdJpExtractor = { selectors: ['div.entry-content'], defaultCleaner: false, transforms: {}, - clean: [] + clean: ['.wp_social_bookmarking_light'] } }; var WiredJpExtractor = { domain: 'wired.jp', title: { - selectors: ['h1.post-title'] + selectors: ['h1[data-testid="ContentHeaderHed"]', 'h1.post-title'] }, author: { - selectors: ['p[itemprop="author"]'] + selectors: [['meta[name="article:author"]', 'value'], 'p[itemprop="author"]'] }, date_published: { - selectors: [['time', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['time', 'datetime']] }, dek: { - selectors: ['.post-intro'] + selectors: ['div[class^="ContentHeaderDek"]', '.post-intro'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['article.article-detail'], + selectors: ['div[data-attribute-verso-pattern="article-body"]', 'article.article-detail'], transforms: { 'img[data-original]': function imgDataOriginal($node) { var dataOriginal = $node.attr('data-original'); @@ -5670,7 +5603,7 @@ var WwwRbbtodayComExtractor = { selectors: [['header time', 'datetime']] }, dek: { - selectors: ['.arti-summary'] + selectors: [['meta[name="description"]', 'value'], '.arti-summary'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -5701,13 +5634,13 @@ var WwwLemondeFrExtractor = { content: { selectors: ['.article__content'], transforms: {}, - clean: [] + clean: ['figcaption'] } }; var WwwPhoronixComExtractor = { domain: 'www.phoronix.com', title: { - selectors: ['article header'] + selectors: ['article h1', 'article header'] }, author: { selectors: ['.author a:first-child'] @@ -5734,26 +5667,26 @@ var WwwPhoronixComExtractor = { var PitchforkComExtractor = { domain: 'pitchfork.com', title: { - selectors: ['title'] + selectors: [['meta[name="og:title"]', 'value'], 'title'] }, author: { - selectors: ['.authors-detail__display-name'] + selectors: [['meta[name="article:author"]', 'value'], '.authors-detail__display-name'] }, date_published: { - selectors: [['.pub-date', 'datetime']] + selectors: ['div[class^="InfoSliceWrapper-"]', ['.pub-date', 'datetime']] }, dek: { - selectors: ['.review-detail__abstract'] + selectors: [['meta[name="og:description"]', 'value'], '.review-detail__abstract'] }, lead_image_url: { - selectors: [['.single-album-tombstone__art img', 'src']] + selectors: [['meta[name="og:image"]', 'value'], ['.single-album-tombstone__art img', 'src']] }, content: { - selectors: ['.review-detail__text'] + selectors: ['div.body__inner-container', '.review-detail__text'] }, extend: { score: { - selectors: ['.score'] + selectors: ['p[class*="Rating"]', '.score'] } } }; @@ -5805,6 +5738,436 @@ var EpaperZeitDeExtractor = { clean: ['image-credits', 'box[type=citation]'] } }; +var WwwLadbibleComExtractor = { + domain: 'www.ladbible.com', + title: { + selectors: ['h1'] + }, + author: { + selectors: ['[class*=Byline]'] + }, + date_published: { + selectors: ['time'], + timezone: 'Europe/London' + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['[class*=ArticleContainer]'], + clean: ['time', 'source', 'a[href^="https://www.ladbible.com/"]', 'picture', '[class*=StyledCardBlock]'] + } +}; +var TimesofindiaIndiatimesComExtractor = { + domain: 'timesofindia.indiatimes.com', + title: { + selectors: ['h1'] + }, + extend: { + reporter: { + selectors: ['div.byline'], + transforms: {} + } + }, + date_published: { + selectors: ['.byline'], + format: 'MMM D, YYYY, HH:mm z', + timezone: 'Asia/Kolkata' + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['div.contentwrapper:has(section)'], + defaultCleaner: false, + clean: ['section', 'h1', '.byline', '.img_cptn', '.icon_share_wrap', 'ul[itemtype="https://schema.org/BreadcrumbList"]'] + } +}; +var MaTtiasBeExtractor = { + domain: 'ma.ttias.be', + title: { + selectors: [['meta[name="twitter:title"]', 'value']] + }, + author: { + selectors: [['meta[name="author"]', 'value']] + }, + date_published: { + selectors: [['meta[name="article:published_time"]', 'value']] + }, + content: { + selectors: [['.content']], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: { + h2: function h2($node) { + // The "id" attribute values would result in low scores and the element being + // removed. + $node.attr('id', null); // h1 elements will be demoted to h2, so demote h2 elements to h3. + + return 'h3'; + }, + h1: function h1($node) { + // The "id" attribute values would result in low scores and the element being + // removed. + $node.attr('id', null); // A subsequent h2 will be removed if there is not a paragraph before it, so + // add a paragraph here. It will be removed anyway because it is empty. + + $node.after('

'); + }, + ul: function ul($node) { + // Articles contain lists of links which look like, but are not, navigation + // elements. Adding this class attribute avoids them being incorrectly removed. + $node.attr('class', 'entry-content-asset'); + } + } + } +}; +var PastebinComExtractor = { + domain: 'pastebin.com', + title: { + selectors: ['h1'] + }, + author: { + selectors: ['.username', '.paste_box_line2 .t_us + a'] + }, + date_published: { + selectors: ['.date', '.paste_box_line2 .t_da + span'], + timezone: 'America/New_York', + format: 'MMMM D, YYYY' + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['.source', '#selectable .text'], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: { + ol: 'div', + li: 'p' + }, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: [] + } +}; +/* eslint-disable no-nested-ternary */ + +/* eslint-disable no-unused-expressions */ + +var WwwAbendblattDeExtractor = { + domain: 'www.abendblatt.de', + title: { + selectors: ['h2.article__header__headline'] + }, + author: { + selectors: ['span.author-info__name-text'] + }, + date_published: { + selectors: [['time.teaser-stream-time', 'datetime'], ['time.article__header__date', 'datetime']] + }, + dek: { + selectors: [['meta[name="description"]', 'value']] + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['div.article__body'], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: { + p: function p($node) { + if (!$node.hasClass('obfuscated')) return null; + var o = ''; + var n = 0; + + for (var i = $node.text(); n < i.length; n += 1) { + var r = i.charCodeAt(n); + r === 177 ? o += '%' : r === 178 ? o += '!' : r === 180 ? o += ';' : r === 181 ? o += '=' : r === 32 ? o += ' ' : r === 10 ? o += '\n' : r > 33 && (o += String.fromCharCode(r - 1)); + } + + $node.html(o); + $node.removeClass('obfuscated'); + $node.addClass('deobfuscated'); + return null; + }, + div: function div($node) { + if (!$node.hasClass('obfuscated')) return null; + var o = ''; + var n = 0; + + for (var i = $node.text(); n < i.length; n += 1) { + var r = i.charCodeAt(n); + r === 177 ? o += '%' : r === 178 ? o += '!' : r === 180 ? o += ';' : r === 181 ? o += '=' : r === 32 ? o += ' ' : r === 10 ? o += '\n' : r > 33 && (o += String.fromCharCode(r - 1)); + } + + $node.html(o); + $node.removeClass('obfuscated'); + $node.addClass('deobfuscated'); + return null; + } + }, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: [] + } +}; +var WwwGrueneDeExtractor = { + domain: 'www.gruene.de', + title: { + selectors: ['header h1'] + }, + author: null, + date_published: null, + dek: null, + lead_image_url: { + selectors: [['meta[property="og:image"]', 'content']] + }, + content: { + // selectors: ['section'], + selectors: [['section header', 'section h2', 'section p', 'section ol']], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: {}, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: ['figcaption', 'p[class]'] + } +}; +var WwwEngadgetComExtractor = { + domain: 'www.engadget.com', + title: { + selectors: [['meta[name="og:title"]', 'value']] + }, + author: { + selectors: ['a.th-meta[data-ylk*="subsec:author"]'] + }, + // Engadget stories have publish dates, but the only representation of them on the page + // is in a format like "2h ago". There are also these tags with blank values: + // + date_published: { + selectors: [// enter selectors + ] + }, + dek: { + selectors: ['div[class*="o-title_mark"] div'] + }, + // Engadget stories do have lead images specified by an og:image meta tag, but selecting + // the value attribute of that tag fails. I believe the "ℑ" sequence of characters + // is triggering this inability to select the attribute value. + lead_image_url: { + selectors: [// enter selectors + ] + }, + content: { + selectors: [[// Some figures will be inside div.article-text, but some header figures/images + // will not. + '#page_body figure:not(div.article-text figure)', 'div.article-text']], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: {}, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: [] + } +}; +var ArstechnicaComExtractor = { + domain: 'arstechnica.com', + // Articles from this site are often paginated, but I was unable to write a CSS + // selector to find the next page. On the last page, there will be a link with a CSS + // selector indicating that the previous page is next. But the parser appears to find + // the next page without this extractor finding it, as long as the fallback option is + // left at its default value of true. + title: { + selectors: ['title'] + }, + author: { + selectors: ['*[rel="author"] *[itemprop="name"]'] + }, + date_published: { + selectors: [['.byline time', 'datetime']] + }, + dek: { + selectors: ['h2[itemprop="description"]'] + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['div[itemprop="articleBody"]'], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: { + h2: function h2($node) { + // Some pages have an element h2 that is significant, and that the parser will + // remove if not following a paragraph. Adding this empty paragraph fixes it, and + // the empty paragraph will be removed anyway. + $node.before('

'); + } + }, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result. + clean: [// Remove enlarge links and separators inside image captions. + 'figcaption .enlarge-link', 'figcaption .sep', // I could not transform the video into usable elements, so I + // removed them. + 'figure.video', // Image galleries that do not work. + '.gallery', 'aside', '.sidebar'] + } +}; +var WwwNdtvComExtractor = { + domain: 'www.ndtv.com', + title: { + selectors: [['meta[name="og:title"]', 'value'], 'h1.entry-title'] + }, + author: { + selectors: ['span[itemprop="author"] span[itemprop="name"]'] + }, + date_published: { + selectors: [['span[itemprop="dateModified"]', 'content']] + }, + dek: { + selectors: ['h2'] + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['div[itemprop="articleBody"]'], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: { + // This site puts a dateline in a 'b' above the first paragraph, and then somehow + // blends it into the first paragraph with CSS. This transform moves the dateline + // to the first paragraph. + '.place_cont': function place_cont($node) { + if (!$node.parents('p').length) { + var nextSibling = $node.next('p'); + + if (nextSibling) { + $node.remove(); + nextSibling.prepend($node); + } + } + } + }, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: ['.highlghts_Wdgt', '.ins_instory_dv_caption', 'input', '._world-wrapper .mt20'] + } +}; +var SpektrumExtractor = { + domain: 'www.spektrum.de', + title: { + selectors: ['.content__title'] + }, + author: { + selectors: ['.content__author__info__name'] + }, + date_published: { + selectors: ['.content__meta__date'], + timezone: 'Europe/Berlin' + }, + dek: { + selectors: ['.content__intro'] + }, + lead_image_url: { + selectors: [// This is how the meta tag appears in the original source code. + ['meta[name="og:image"]', 'value'], // This is how the meta tag appears in the DOM in Chrome. + // The selector is included here to make the code work within the browser as well. + ['meta[property="og:image"]', 'content'], // This is the image that is shown on the page. + // It can be slightly cropped compared to the original in the meta tag. + '.image__article__top img'] + }, + content: { + selectors: ['article.content'], + clean: ['.breadcrumbs', '.hide-for-print', 'aside', 'header h2', '.image__article__top', '.content__author', '.copyright', '.callout-box'] + } +}; +var PostlightComExtractor = { + domain: 'postlight.com', + title: { + selectors: [['meta[name="og:title"]', 'value']] + }, + author: { + selectors: [['meta[name="parsely-author"]', 'value']] + }, + date_published: { + selectors: [['meta[name="article:published_time"]', 'value']] + }, + dek: { + selectors: ['h2.single-hero__abstract'] + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['main.post'], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: {}, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: ['section.pl-post-link', 'aside', 'section.insights_featured_case_studies'] + } +}; +var WwwInvestmentexecutiveComExtractor = { + domain: 'www.investmentexecutive.com', + title: { + selectors: ['h1'] + }, + author: { + selectors: ['div[itemprop="author"]'] + }, + date_published: { + selectors: [['meta[itemprop="datePublished"]', 'value']] + }, + dek: { + selectors: [['meta[name="og:description"]', 'value']] + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['section.article-body'], + clean: ['.hidden'] + } +}; +var WwwCbcCaExtractor = { + domain: 'www.cbc.ca', + title: { + selectors: ['h1'] + }, + author: { + selectors: ['.authorText', '.bylineDetails'] + }, + date_published: { + selectors: [['.timeStamp[datetime]', 'datetime']] + }, + dek: { + selectors: ['.deck'] + }, + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']] + }, + content: { + selectors: ['.story'], + // Is there anything in the content you selected that needs transformed + // before it's consumable content? E.g., unusual lazy loaded images + transforms: {}, + // Is there anything that is in the result that shouldn't be? + // The clean selectors will remove anything that matches from + // the result + clean: [] + } +}; var CustomExtractors = /*#__PURE__*/ @@ -5875,18 +6238,14 @@ _Object$freeze({ WwwSiComExtractor: WwwSiComExtractor, WwwRawstoryComExtractor: WwwRawstoryComExtractor, WwwCnetComExtractor: WwwCnetComExtractor, - WwwCinemablendComExtractor: WwwCinemablendComExtractor, WwwTodayComExtractor: WwwTodayComExtractor, - WwwHowtogeekComExtractor: WwwHowtogeekComExtractor, WwwAlComExtractor: WwwAlComExtractor, WwwThepennyhoarderComExtractor: WwwThepennyhoarderComExtractor, WwwWesternjournalismComExtractor: WwwWesternjournalismComExtractor, - FusionNetExtractor: FusionNetExtractor, WwwAmericanowComExtractor: WwwAmericanowComExtractor, ScienceflyComExtractor: ScienceflyComExtractor, HellogigglesComExtractor: HellogigglesComExtractor, ThoughtcatalogComExtractor: ThoughtcatalogComExtractor, - WwwNjComExtractor: WwwNjComExtractor, WwwInquisitrComExtractor: WwwInquisitrComExtractor, WwwNbcnewsComExtractor: WwwNbcnewsComExtractor, FortuneComExtractor: FortuneComExtractor, @@ -5942,7 +6301,20 @@ _Object$freeze({ WwwPhoronixComExtractor: WwwPhoronixComExtractor, PitchforkComExtractor: PitchforkComExtractor, BiorxivOrgExtractor: BiorxivOrgExtractor, - EpaperZeitDeExtractor: EpaperZeitDeExtractor + EpaperZeitDeExtractor: EpaperZeitDeExtractor, + WwwLadbibleComExtractor: WwwLadbibleComExtractor, + TimesofindiaIndiatimesComExtractor: TimesofindiaIndiatimesComExtractor, + MaTtiasBeExtractor: MaTtiasBeExtractor, + PastebinComExtractor: PastebinComExtractor, + WwwAbendblattDeExtractor: WwwAbendblattDeExtractor, + WwwGrueneDeExtractor: WwwGrueneDeExtractor, + WwwEngadgetComExtractor: WwwEngadgetComExtractor, + ArstechnicaComExtractor: ArstechnicaComExtractor, + WwwNdtvComExtractor: WwwNdtvComExtractor, + SpektrumExtractor: SpektrumExtractor, + PostlightComExtractor: PostlightComExtractor, + WwwInvestmentexecutiveComExtractor: WwwInvestmentexecutiveComExtractor, + WwwCbcCaExtractor: WwwCbcCaExtractor }); var Extractors = _Object$keys(CustomExtractors).reduce(function (acc, key) { @@ -6037,10 +6409,14 @@ function cleanDatePublished(dateString) { format = _ref.format; // If string is in milliseconds or seconds, convert to int and return - if (MS_DATE_STRING.test(dateString) || SEC_DATE_STRING.test(dateString)) { + if (MS_DATE_STRING.test(dateString)) { return new Date(_parseInt$1(dateString, 10)).toISOString(); } + if (SEC_DATE_STRING.test(dateString)) { + return new Date(_parseInt$1(dateString, 10) * 1000).toISOString(); + } + var date = createDate(dateString, timezone, format); if (!date.isValid()) { @@ -7162,13 +7538,27 @@ var GenericExcerptExtractor = { return clean$2($(shortContent).text(), $, maxLength); } }; + +var getWordCount = function getWordCount(content) { + var $ = cheerio$1.load(content); + var $content = $('div').first(); + var text = normalizeSpaces$1($content.text()); + return text.split(/\s/).length; +}; + +var getWordCountAlt = function getWordCountAlt(content) { + content = content.replace(/<[^>]*>/g, ' '); + content = content.replace(/\s+/g, ' '); + content = content.trim(); + return content.split(' ').length; +}; + var GenericWordCountExtractor = { extract: function extract(_ref) { var content = _ref.content; - var $ = cheerio$1.load(content); - var $content = $('div').first(); - var text = normalizeSpaces$1($content.text()); - return text.split(/\s/).length; + var count = getWordCount(content); + if (count === 1) count = getWordCountAlt(content); + return count; } }; var GenericExtractor = { @@ -7331,7 +7721,8 @@ function select(opts) { _extractionOpts$defau = extractionOpts.defaultCleaner, defaultCleaner = _extractionOpts$defau === void 0 ? true : _extractionOpts$defau, allowMultiple = extractionOpts.allowMultiple; - var matchingSelector = findMatchingSelector($, selectors, extractHtml, allowMultiple); + var overrideAllowMultiple = type === 'lead_image_url' || allowMultiple; + var matchingSelector = findMatchingSelector($, selectors, extractHtml, overrideAllowMultiple); if (!matchingSelector) return null; function transformAndClean($node) { @@ -7587,7 +7978,6 @@ function _collectAllPages() { html: html, $: $, metaCache: metaCache, - contentOnly: true, extractedTitle: title, previousUrls: previousUrls }; @@ -7607,7 +7997,7 @@ function _collectAllPages() { }); return _context.abrupt("return", _objectSpread({}, result, { total_pages: pages, - pages_rendered: pages, + rendered_pages: pages, word_count: word_count })); @@ -7621,7 +8011,7 @@ function _collectAllPages() { return _collectAllPages.apply(this, arguments); } -var Mercury = { +var Parser = { parse: function () { var _parse = _asyncToGenerator( /*#__PURE__*/ @@ -7699,7 +8089,7 @@ var Mercury = { } Extractor = getExtractor(url, parsedUrl, $); // console.log(`Using extractor for ${Extractor.domain}`); - // if html still has not been set (i.e., url passed to Mercury.parse), + // if html still has not been set (i.e., url passed to Parser.parse), // set html from the response of Resource.create if (!html) { @@ -7794,7 +8184,7 @@ var Mercury = { return addExtractor(extractor); } }; -var mercury = Mercury; +var mercury = Parser; function insertValues(strings) { for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { @@ -7863,7 +8253,7 @@ function extractorTemplate (hostname, name) { } function _templateObject2() { - var data = _taggedTemplateLiteral(["\n import assert from 'assert';\n import URL from 'url';\n import cheerio from 'cheerio';\n\n import Mercury from 'mercury';\n import getExtractor from 'extractors/get-extractor';\n import { excerptContent } from 'utils/text';\n\n const fs = require('fs');\n\n describe('", "', () => {\n describe('initial test case', () => {\n let result;\n let url;\n beforeAll(() => {\n url =\n '", "';\n const html =\n fs.readFileSync('", "');\n result =\n Mercury.parse(url, { html, fallback: false });\n });\n\n it('is selected properly', () => {\n // This test should be passing by default.\n // It sanity checks that the correct parser\n // is being selected for URLs from this domain\n const extractor = getExtractor(url);\n assert.equal(extractor.domain, URL.parse(url).hostname)\n })\n\n ", "\n\n it('returns the content', async () => {\n // To pass this test, fill out the content selector\n // in ", "/index.js.\n // You may also want to make use of the clean and transform\n // options.\n const { content } = await result;\n\n const $ = cheerio.load(content || '');\n\n const first13 = excerptContent($('*').first().text(), 13)\n\n // Update these values with the expected values from\n // the article.\n assert.equal(first13, 'Add the first 13 words of the article here');\n });\n });\n });\n "]); + var data = _taggedTemplateLiteral(["\n import assert from 'assert';\n import URL from 'url';\n import cheerio from 'cheerio';\n\n import Parser from 'mercury';\n import getExtractor from 'extractors/get-extractor';\n import { excerptContent } from 'utils/text';\n\n const fs = require('fs');\n\n describe('", "', () => {\n describe('initial test case', () => {\n let result;\n let url;\n beforeAll(() => {\n url =\n '", "';\n const html =\n fs.readFileSync('", "');\n result =\n Parser.parse(url, { html, fallback: false });\n });\n\n it('is selected properly', () => {\n // This test should be passing by default.\n // It sanity checks that the correct parser\n // is being selected for URLs from this domain\n const extractor = getExtractor(url);\n assert.equal(extractor.domain, URL.parse(url).hostname)\n })\n\n ", "\n\n it('returns the content', async () => {\n // To pass this test, fill out the content selector\n // in ", "/index.js.\n // You may also want to make use of the clean and transform\n // options.\n const { content } = await result;\n\n const $ = cheerio.load(content || '');\n\n const first13 = excerptContent($('*').first().text(), 13)\n\n // Update these values with the expected values from\n // the article.\n assert.equal(first13, 'Add the first 13 words of the article here');\n });\n });\n });\n "]); _templateObject2 = function _templateObject2() { return data; @@ -8028,3 +8418,4 @@ function extractorName(hostname) { }).join(''); return "".concat(name, "Extractor"); } +//# sourceMappingURL=generate-custom-parser.js.map diff --git a/dist/generate-custom-parser.js.map b/dist/generate-custom-parser.js.map index c97bda8cd..df983d89a 100644 --- a/dist/generate-custom-parser.js.map +++ b/dist/generate-custom-parser.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../src/utils/dom/constants.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-attributes.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","mercury.js","../scripts/templates/insert-values.js","../scripts/templates/index.js","../scripts/templates/custom-extractor.js","../scripts/templates/custom-extractor-test.js","../scripts/generate-custom-parser.js"],"sourcesContent":["// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(selector => `[${selector}]`);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(`^(${WHITELIST_ATTRS.join('|')})$`, 'i');\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(tag => `${tag}:empty`).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = ['ul', 'ol', 'table', 'div', 'button', 'form'].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive
tags into\n//

tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n // $(element).replaceWith('

')\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a
, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('

');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (sibling && !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))) {\n const nextSibling = sibling.nextSibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertable = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertable) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertable = $span.parents('p, div').length === 0;\n if (convertable) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive
tags.\n// *
tags without block level elements inside of them\n// * tags who are not children of

or

tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n // console.log(attrs)\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html = node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(\n `<${tag} ${attribString}>${html}`\n );\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import {\n STRIP_OUTPUT_TAGS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article).not(`.${KEEP_CLASS}`).remove();\n\n return $;\n}\n","import {\n getAttrs,\n setAttrs,\n} from 'utils/dom';\n\nimport {\n WHITELIST_ATTRS_RE,\n KEEP_CLASS,\n} from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(node, Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {}));\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// function removeAttrs(article, $) {\n// REMOVE_ATTRS.forEach((attr) => {\n// $(`[${attr}]`, article).removeAttr(attr);\n// });\n// }\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $,\n );\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import {\n scoreCommas,\n scoreLength,\n} from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import {\n getOrInitScore,\n setScore,\n} from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import {\n getScore,\n scoreNode,\n getWeight,\n addToParent,\n} from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n } else if (tagName.toLowerCase() === 'div') {\n return 5;\n } else if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n } else if (BAD_TAGS.test(tagName)) {\n return -3;\n } else if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport {\n scoreNode,\n setScore,\n getOrInitScore,\n addScore,\n} from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre').not('[score]').each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","const NORMALIZE_RE = /\\s{2,}/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp('(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})', 'i');\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path.split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","import {\n textLength,\n linkDensity,\n} from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('

');\n\n $candidate.parent().children().each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n } else if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n } else if (siblingContentLength <= 80 && density === 0 &&\n hasSentenceEnd(siblingContent)) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (wrappingDiv.children().length === 1 &&\n wrappingDiv.children().first().get(0) === $candidate.get(0)) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport {\n CLEAN_CONDITIONALLY_TAGS,\n KEEP_CLASS,\n} from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > (pCount / 3)) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (previousNode && normalizeSpaces(previousNode.text()).slice(-1) === ':') {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n return;\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0) return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n setAttr,\n} from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr, $content) {\n $(`[${attr}]`, $content).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n\n if (url) {\n const absoluteUrl = URL.resolve(rootUrl, url);\n setAttr(node, attr, absoluteUrl);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr, $content));\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim()\n .replace(/\\s+/g, ' ')\n .length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n } else if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`${text}`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find((parent) => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach((key) => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport { default as stripUnlikelyCandidates } from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar _regeneratorRuntime = _interopDefault(require('babel-runtime/regenerator'));\nvar _extends = _interopDefault(require('babel-runtime/helpers/extends'));\nvar _asyncToGenerator = _interopDefault(require('babel-runtime/helpers/asyncToGenerator'));\nvar URL = _interopDefault(require('url'));\nvar cheerio = _interopDefault(require('cheerio'));\nvar iconv = _interopDefault(require('iconv-lite'));\nvar _slicedToArray = _interopDefault(require('babel-runtime/helpers/slicedToArray'));\nvar _Promise = _interopDefault(require('babel-runtime/core-js/promise'));\nvar request = _interopDefault(require('request'));\nvar _Reflect$ownKeys = _interopDefault(require('babel-runtime/core-js/reflect/own-keys'));\nvar _toConsumableArray = _interopDefault(require('babel-runtime/helpers/toConsumableArray'));\nvar _defineProperty = _interopDefault(require('babel-runtime/helpers/defineProperty'));\nvar _typeof = _interopDefault(require('babel-runtime/helpers/typeof'));\nvar _getIterator = _interopDefault(require('babel-runtime/core-js/get-iterator'));\nvar _Object$keys = _interopDefault(require('babel-runtime/core-js/object/keys'));\nvar stringDirection = _interopDefault(require('string-direction'));\nvar validUrl = _interopDefault(require('valid-url'));\nvar moment = _interopDefault(require('moment-timezone'));\nvar parseFormat = _interopDefault(require('moment-parseformat'));\nvar wuzzy = _interopDefault(require('wuzzy'));\nvar difflib = _interopDefault(require('difflib'));\nvar _Array$from = _interopDefault(require('babel-runtime/core-js/array/from'));\nvar ellipsize = _interopDefault(require('ellipsize'));\n\nvar NORMALIZE_RE = /\\s{2,}/g;\n\nfunction normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n\n// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nfunction extractFromUrl(url, regexList) {\n var matchRe = regexList.find(function (re) {\n return re.test(url);\n });\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n\n// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nvar PAGE_IN_HREF_RE = new RegExp('(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})', 'i');\n\nvar HAS_ALPHA_RE = /[a-z]/i;\n\nvar IS_ALPHA_RE = /^[a-z]+$/i;\nvar IS_DIGIT_RE = /^[0-9]+$/i;\n\nvar ENCODING_RE = /charset=([\\w-]+)\\b/;\nvar DEFAULT_ENCODING = 'utf-8';\n\nfunction pageNumFromUrl(url) {\n var matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n var pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n\nfunction removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n var goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nfunction articleBaseUrl(url, parsed) {\n var parsedUrl = parsed || URL.parse(url);\n var protocol = parsedUrl.protocol,\n host = parsedUrl.host,\n path = parsedUrl.path;\n\n\n var firstSegmentHasLetters = false;\n var cleanedSegments = path.split('/').reverse().reduce(function (acc, rawSegment, index) {\n var segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n var _segment$split = segment.split('.'),\n _segment$split2 = _slicedToArray(_segment$split, 2),\n possibleSegment = _segment$split2[0],\n fileExt = _segment$split2[1];\n\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return protocol + '//' + host + cleanedSegments.reverse().join('/');\n}\n\n// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nvar SENTENCE_END_RE = new RegExp('.( |$)');\nfunction hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n\nfunction excerptContent(content) {\n var words = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n\n return content.trim().split(/\\s+/).slice(0, words).join(' ');\n}\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nfunction getEncoding(str) {\n var encoding = DEFAULT_ENCODING;\n if (ENCODING_RE.test(str)) {\n var testEncode = ENCODING_RE.exec(str)[1];\n if (iconv.encodingExists(testEncode)) {\n encoding = testEncode;\n }\n }\n return encoding;\n}\n\nvar _marked = [range].map(_regeneratorRuntime.mark);\n\nfunction range() {\n var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return _regeneratorRuntime.wrap(function range$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(start <= end)) {\n _context.next = 5;\n break;\n }\n\n _context.next = 3;\n return start += 1;\n\n case 3:\n _context.next = 0;\n break;\n\n case 5:\n case \"end\":\n return _context.stop();\n }\n }\n }, _marked[0], this);\n}\n\n// extremely simple url validation as a first step\nfunction validateUrl(_ref) {\n var hostname = _ref.hostname;\n\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n\nvar Errors = {\n badUrl: {\n error: true,\n messages: 'The url parameter passed does not look like a valid URL. Please check your data and try again.'\n }\n};\n\n// Browser does not like us setting user agent\nvar REQUEST_HEADERS = cheerio.browser ? {} : {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'\n};\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nvar FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nvar BAD_CONTENT_TYPES = ['audio/mpeg', 'image/gif', 'image/jpeg', 'image/jpg'];\n\nvar BAD_CONTENT_TYPES_RE = new RegExp('^(' + BAD_CONTENT_TYPES.join('|') + ')$', 'i');\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nvar MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\n\nfunction get(options) {\n return new _Promise(function (resolve, reject) {\n request(options, function (err, response, body) {\n if (err) {\n reject(err);\n } else {\n resolve({ body: body, response: response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 level or\n// not. Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nfunction validateResponse(response) {\n var parseNon2xx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (response.statusMessage && response.statusMessage !== 'OK' || response.statusCode !== 200) {\n if (!response.statusCode) {\n throw new Error('Unable to fetch content. Original exception was ' + response.error);\n } else if (!parseNon2xx) {\n throw new Error('Resource returned a response status code of ' + response.statusCode + ' and resource was instructed to reject non-2xx level status codes.');\n }\n }\n\n var _response$headers = response.headers,\n contentType = _response$headers['content-type'],\n contentLength = _response$headers['content-length'];\n\n // Check that the content is not in BAD_CONTENT_TYPES\n\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error('Content-type for this resource was ' + contentType + ' and is not allowed.');\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error('Content for this resource was too large. Maximum content length is ' + MAX_CONTENT_LENGTH + '.');\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\n\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nvar fetchResource$1 = (function () {\n var _ref2 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee(url, parsedUrl) {\n var options, _ref3, response, body;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n\n options = {\n url: parsedUrl.href,\n headers: _extends({}, REQUEST_HEADERS),\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any redirect\n followAllRedirects: true\n };\n _context.next = 4;\n return get(options);\n\n case 4:\n _ref3 = _context.sent;\n response = _ref3.response;\n body = _ref3.body;\n _context.prev = 7;\n\n validateResponse(response);\n return _context.abrupt('return', {\n body: body,\n response: response\n });\n\n case 12:\n _context.prev = 12;\n _context.t0 = _context['catch'](7);\n return _context.abrupt('return', Errors.badUrl);\n\n case 15:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[7, 12]]);\n }));\n\n function fetchResource(_x2, _x3) {\n return _ref2.apply(this, arguments);\n }\n\n return fetchResource;\n})();\n\nfunction convertMetaProp($, from, to) {\n $('meta[' + from + ']').each(function (_, node) {\n var $node = $(node);\n\n var value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nfunction normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n\n// Spacer images to be removed\nvar SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nvar KEEP_CLASS = 'mercury-parser-keep';\n\nvar KEEP_SELECTORS = ['iframe[src^=\"https://www.youtube.com\"]', 'iframe[src^=\"https://www.youtube-nocookie.com\"]', 'iframe[src^=\"http://www.youtube.com\"]', 'iframe[src^=\"https://player.vimeo\"]', 'iframe[src^=\"http://player.vimeo\"]'];\n\n// A list of tags to strip from the output if we encounter them.\nvar STRIP_OUTPUT_TAGS = ['title', 'script', 'noscript', 'link', 'style', 'hr', 'embed', 'iframe', 'object'];\n\n// cleanAttributes\nvar REMOVE_ATTRS = ['style', 'align'];\nvar REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(function (selector) {\n return '[' + selector + ']';\n});\nvar REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nvar WHITELIST_ATTRS = ['src', 'srcset', 'href', 'class', 'id', 'alt', 'xlink:href', 'width', 'height'];\n\nvar WHITELIST_ATTRS_RE = new RegExp('^(' + WHITELIST_ATTRS.join('|') + ')$', 'i');\n\n// removeEmpty\nvar REMOVE_EMPTY_TAGS = ['p'];\nvar REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(function (tag) {\n return tag + ':empty';\n}).join(',');\n\n// cleanTags\nvar CLEAN_CONDITIONALLY_TAGS = ['ul', 'ol', 'table', 'div', 'button', 'form'].join(',');\n\n// cleanHeaders\nvar HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nvar HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nvar UNLIKELY_CANDIDATES_BLACKLIST = ['ad-break', 'adbox', 'advert', 'addthis', 'agegate', 'aux', 'blogger-labels', 'combx', 'comment', 'conversation', 'disqus', 'entry-unrelated', 'extra', 'foot',\n// 'form', // This is too generic, has too many false positives\n'header', 'hidden', 'loader', 'login', // Note: This can hit 'blogindex'.\n'menu', 'meta', 'nav', 'outbrain', 'pager', 'pagination', 'predicta', // readwriteweb inline ad box\n'presence_control_external', // lifehacker.com container full of false positives\n'popup', 'printfriendly', 'related', 'remove', 'remark', 'rss', 'share', 'shoutbox', 'sidebar', 'sociable', 'sponsor', 'taboola', 'tools'];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nvar UNLIKELY_CANDIDATES_WHITELIST = ['and', 'article', 'body', 'blogindex', 'column', 'content', 'entry-content-asset', 'format', // misuse of form\n'hfeed', 'hentry', 'hatom', 'main', 'page', 'posts', 'shadow'];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nvar DIV_TO_P_BLOCK_TAGS = ['a', 'blockquote', 'dl', 'div', 'img', 'p', 'pre', 'table'].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\n\n\n\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\n\n\n\n\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nvar POSITIVE_SCORE_HINTS = ['article', 'articlecontent', 'instapaper_body', 'blog', 'body', 'content', 'entry-content-asset', 'entry', 'hentry', 'main', 'Normal', 'page', 'pagination', 'permalink', 'post', 'story', 'text', '[-_]copy', // usatoday\n'\\\\Bcopy'];\n\n// The above list, joined into a matching regular expression\nvar POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\n\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nvar NEGATIVE_SCORE_HINTS = ['adbox', 'advert', 'author', 'bio', 'bookmark', 'bottom', 'byline', 'clear', 'com-', 'combx', 'comment', 'comment\\\\B', 'contact', 'copy', 'credit', 'crumb', 'date', 'deck', 'excerpt', 'featured', // tnr.com has a featured_content which throws us off\n'foot', 'footer', 'footnote', 'graf', 'head', 'info', 'infotext', // newscientist.com copyright\n'instapaper_ignore', 'jump', 'linebreak', 'link', 'masthead', 'media', 'meta', 'modal', 'outbrain', // slate.com junk\n'promo', 'pr_', // autoblog - press release\n'related', 'respond', 'roundcontent', // lifehacker restricted content warning\n'scroll', 'secondary', 'share', 'shopping', 'shoutbox', 'side', 'sidebar', 'sponsor', 'stamp', 'sub', 'summary', 'tags', 'tools', 'widget'];\n// The above list, joined into a matching regular expression\nvar NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nvar IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\n\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\n\n\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nvar PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\n\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\n\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\n\n\n// Match 2 or more consecutive
tags\n\n\n// Match 1 BR tag.\n\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nvar BLOCK_LEVEL_TAGS = ['article', 'aside', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'col', 'colgroup', 'dd', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'map', 'object', 'ol', 'output', 'p', 'pre', 'progress', 'section', 'table', 'tbody', 'textarea', 'tfoot', 'th', 'thead', 'tr', 'ul', 'video'];\nvar BLOCK_LEVEL_TAGS_RE = new RegExp('^(' + BLOCK_LEVEL_TAGS.join('|') + ')$', 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nvar candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nvar CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nvar candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nvar CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nfunction stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*').not('a').each(function (index, node) {\n var $node = $(node);\n var classes = $node.attr('class');\n var id = $node.attr('id');\n if (!id && !classes) return;\n\n var classAndId = (classes || '') + ' ' + (id || '');\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n } else if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive
tags into\n//

tags instead.\n//\n// :param $: A cheerio object\n\nfunction brsToPs$$1($) {\n var collapsing = false;\n $('br').each(function (index, element) {\n var $element = $(element);\n var nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n // $(element).replaceWith('

')\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a
, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nfunction paragraphize(node, $) {\n var br = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var $node = $(node);\n\n if (br) {\n var sibling = node.nextSibling;\n var p = $('

');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (sibling && !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))) {\n var nextSibling = sibling.nextSibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n\nfunction convertDivs($) {\n $('div').each(function (index, div) {\n var $div = $(div);\n var convertable = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertable) {\n convertNodeTo$$1($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each(function (index, span) {\n var $span = $(span);\n var convertable = $span.parents('p, div').length === 0;\n if (convertable) {\n convertNodeTo$$1($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive
tags.\n// *
tags without block level elements inside of them\n// * tags who are not children of

or

tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nfunction convertToParagraphs$$1($) {\n $ = brsToPs$$1($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n\nfunction convertNodeTo$$1($node, $) {\n var tag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'p';\n\n var node = $node.get(0);\n if (!node) {\n return $;\n }\n var attrs = getAttrs(node) || {};\n // console.log(attrs)\n\n var attribString = _Reflect$ownKeys(attrs).map(function (key) {\n return key + '=' + attrs[key];\n }).join(' ');\n var html = void 0;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html = node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith('<' + tag + ' ' + attribString + '>' + html + '');\n return $;\n}\n\nfunction cleanForHeight($img, $) {\n var height = parseInt($img.attr('height'), 10);\n var width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nfunction cleanImages($article, $) {\n $article.find('img').each(function (index, img) {\n var $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n\nfunction markToKeep(article, $, url) {\n var tags = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n var _URL$parse = URL.parse(url),\n protocol = _URL$parse.protocol,\n hostname = _URL$parse.hostname;\n\n tags = [].concat(_toConsumableArray(tags), ['iframe[src^=\"' + protocol + '//' + hostname + '\"]']);\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n\nfunction stripJunkTags(article, $) {\n var tags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article).not('.' + KEEP_CLASS).remove();\n\n return $;\n}\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nfunction cleanHOnes$$1(article, $) {\n var $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each(function (index, node) {\n return $(node).remove();\n });\n } else {\n $hOnes.each(function (index, node) {\n convertNodeTo$$1($(node), $, 'h2');\n });\n }\n\n return $;\n}\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each(function (index, node) {\n var attrs = getAttrs(node);\n\n setAttrs(node, _Reflect$ownKeys(attrs).reduce(function (acc, attr) {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return _extends({}, acc, _defineProperty({}, attr, attrs[attr]));\n }\n\n return acc;\n }, {}));\n });\n\n // Remove the mercury-parser-keep class from result\n $('.' + KEEP_CLASS, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// function removeAttrs(article, $) {\n// REMOVE_ATTRS.forEach((attr) => {\n// $(`[${attr}]`, article).removeAttr(attr);\n// });\n// }\n\n// Remove attributes like style or align\nfunction cleanAttributes$$1($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist($article.parent().length ? $article.parent() : $article, $);\n}\n\nfunction removeEmpty($article, $) {\n $article.find('p').each(function (index, p) {\n var $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '') $p.remove();\n });\n\n return $;\n}\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nvar UNLIKELY_CANDIDATES_BLACKLIST$1 = ['ad-break', 'adbox', 'advert', 'addthis', 'agegate', 'aux', 'blogger-labels', 'combx', 'comment', 'conversation', 'disqus', 'entry-unrelated', 'extra', 'foot', 'form', 'header', 'hidden', 'loader', 'login', // Note: This can hit 'blogindex'.\n'menu', 'meta', 'nav', 'pager', 'pagination', 'predicta', // readwriteweb inline ad box\n'presence_control_external', // lifehacker.com container full of false positives\n'popup', 'printfriendly', 'related', 'remove', 'remark', 'rss', 'share', 'shoutbox', 'sidebar', 'sociable', 'sponsor', 'tools'];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nvar UNLIKELY_CANDIDATES_WHITELIST$1 = ['and', 'article', 'body', 'blogindex', 'column', 'content', 'entry-content-asset', 'format', // misuse of form\n'hfeed', 'hentry', 'hatom', 'main', 'page', 'posts', 'shadow'];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nvar DIV_TO_P_BLOCK_TAGS$1 = ['a', 'blockquote', 'dl', 'div', 'img', 'p', 'pre', 'table'].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nvar NON_TOP_CANDIDATE_TAGS$1 = ['br', 'b', 'i', 'label', 'hr', 'area', 'base', 'basefont', 'input', 'img', 'link', 'meta'];\n\nvar NON_TOP_CANDIDATE_TAGS_RE$1 = new RegExp('^(' + NON_TOP_CANDIDATE_TAGS$1.join('|') + ')$', 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nvar HNEWS_CONTENT_SELECTORS$1 = [['.hentry', '.entry-content'], ['entry', '.entry-content'], ['.entry', '.entry_content'], ['.post', '.postbody'], ['.post', '.post_body'], ['.post', '.post-body']];\n\nvar PHOTO_HINTS$1 = ['figure', 'photo', 'image', 'caption'];\nvar PHOTO_HINTS_RE$1 = new RegExp(PHOTO_HINTS$1.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nvar POSITIVE_SCORE_HINTS$1 = ['article', 'articlecontent', 'instapaper_body', 'blog', 'body', 'content', 'entry-content-asset', 'entry', 'hentry', 'main', 'Normal', 'page', 'pagination', 'permalink', 'post', 'story', 'text', '[-_]copy', // usatoday\n'\\\\Bcopy'];\n\n// The above list, joined into a matching regular expression\nvar POSITIVE_SCORE_RE$1 = new RegExp(POSITIVE_SCORE_HINTS$1.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nvar READABILITY_ASSET$1 = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nvar NEGATIVE_SCORE_HINTS$1 = ['adbox', 'advert', 'author', 'bio', 'bookmark', 'bottom', 'byline', 'clear', 'com-', 'combx', 'comment', 'comment\\\\B', 'contact', 'copy', 'credit', 'crumb', 'date', 'deck', 'excerpt', 'featured', // tnr.com has a featured_content which throws us off\n'foot', 'footer', 'footnote', 'graf', 'head', 'info', 'infotext', // newscientist.com copyright\n'instapaper_ignore', 'jump', 'linebreak', 'link', 'masthead', 'media', 'meta', 'modal', 'outbrain', // slate.com junk\n'promo', 'pr_', // autoblog - press release\n'related', 'respond', 'roundcontent', // lifehacker restricted content warning\n'scroll', 'secondary', 'share', 'shopping', 'shoutbox', 'side', 'sidebar', 'sponsor', 'stamp', 'sub', 'summary', 'tags', 'tools', 'widget'];\n// The above list, joined into a matching regular expression\nvar NEGATIVE_SCORE_RE$1 = new RegExp(NEGATIVE_SCORE_HINTS$1.join('|'), 'i');\n\n// Match a digit. Pretty clear.\n\n\n// Match 2 or more consecutive
tags\n\n\n// Match 1 BR tag.\n\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\n\n\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nvar candidatesBlacklist$1 = UNLIKELY_CANDIDATES_BLACKLIST$1.join('|');\n\n\nvar candidatesWhitelist$1 = UNLIKELY_CANDIDATES_WHITELIST$1.join('|');\n\n\n\n\nvar PARAGRAPH_SCORE_TAGS$1 = new RegExp('^(p|li|span|pre)$', 'i');\nvar CHILD_CONTENT_TAGS$1 = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nvar BAD_TAGS$1 = new RegExp('^(address|form)$', 'i');\n\n// Get the score of a node based on its className and id.\nfunction getWeight(node) {\n var classes = node.attr('class');\n var id = node.attr('id');\n var score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE$1.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE$1.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE$1.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE$1.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE$1.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET$1.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n\n// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nfunction getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n\n// return 1 for every comma in text\nfunction scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n\nvar idkRe = new RegExp('^(p|pre)$', 'i');\n\nfunction scoreLength(textLength) {\n var tagName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'p';\n\n var chunks = textLength / 50;\n\n if (chunks > 0) {\n var lengthBonus = void 0;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nfunction scoreParagraph$$1(node) {\n var score = 1;\n var text = node.text().trim();\n var textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n\nfunction setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n\nfunction addScore$$1($node, $, amount) {\n try {\n var score = getOrInitScore$$1($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n\n// Adds 1/4 of a child's score to its parent\nfunction addToParent$$1(node, $, score) {\n var parent = node.parent();\n if (parent) {\n addScore$$1(parent, $, score * 0.25);\n }\n\n return node;\n}\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nfunction getOrInitScore$$1($node, $) {\n var weightNodes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode$$1($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent$$1($node, $, score);\n\n return score;\n}\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nfunction scoreNode$$1($node) {\n var _$node$get = $node.get(0),\n tagName = _$node$get.tagName;\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n\n\n if (PARAGRAPH_SCORE_TAGS$1.test(tagName)) {\n return scoreParagraph$$1($node);\n } else if (tagName.toLowerCase() === 'div') {\n return 5;\n } else if (CHILD_CONTENT_TAGS$1.test(tagName)) {\n return 3;\n } else if (BAD_TAGS$1.test(tagName)) {\n return -3;\n } else if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n\nfunction convertSpans$1($node, $) {\n if ($node.get(0)) {\n var _$node$get = $node.get(0),\n tagName = _$node$get.tagName;\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo$$1($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans$1($node, $);\n addScore$$1($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre').not('[score]').each(function (index, node) {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n var $node = $(node);\n $node = setScore($node, $, getOrInitScore$$1($node, $, weightNodes));\n\n var $parent = $node.parent();\n var rawScore = scoreNode$$1($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nfunction scoreContent$$1($) {\n var weightNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS$1.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n parentSelector = _ref2[0],\n childSelector = _ref2[1];\n\n $(parentSelector + ' ' + childSelector).each(function (index, node) {\n addScore$$1($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nfunction mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n var siblingScoreThreshold = Math.max(10, topScore * 0.25);\n var wrappingDiv = $('

');\n\n $candidate.parent().children().each(function (index, sibling) {\n var $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE$1.test(sibling.tagName)) {\n return null;\n }\n\n var siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n var contentBonus = 0;\n var density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n var newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n } else if (sibling.tagName === 'p') {\n var siblingContent = $sibling.text();\n var siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n } else if (siblingContentLength <= 80 && density === 0 && hasSentenceEnd(siblingContent)) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (wrappingDiv.children().length === 1 && wrappingDiv.children().first().get(0) === $candidate.get(0)) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nfunction findTopCandidate$$1($) {\n var $candidate = void 0;\n var topScore = 0;\n\n $('[score]').each(function (index, node) {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE$1.test(node.tagName)) {\n return;\n }\n\n var $node = $(node);\n var score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n\n// Scoring\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n var content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n var pCount = $('p', $node).length;\n var inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > pCount / 3) {\n $node.remove();\n return;\n }\n\n var contentLength = content.length;\n var imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n var density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n var tagName = $node.get(0).tagName.toLowerCase();\n var nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n var previousNode = $node.prev();\n if (previousNode && normalizeSpaces(previousNode.text()).slice(-1) === ':') {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n var scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n return;\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nfunction cleanTags$$1($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each(function (index, node) {\n var $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find('.' + KEEP_CLASS).length > 0) return;\n\n var weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore$$1($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n\nfunction cleanHeaders($article, $) {\n var title = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n $(HEADER_TAG_LIST, $article).each(function (index, header) {\n var $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nfunction rewriteTopLevel$$1(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo$$1($('html'), $, 'div');\n $ = convertNodeTo$$1($('body'), $, 'div');\n\n return $;\n}\n\nfunction absolutize($, rootUrl, attr, $content) {\n $('[' + attr + ']', $content).each(function (_, node) {\n var attrs = getAttrs(node);\n var url = attrs[attr];\n\n if (url) {\n var absoluteUrl = URL.resolve(rootUrl, url);\n setAttr(node, attr, absoluteUrl);\n }\n });\n}\n\nfunction makeLinksAbsolute$$1($content, $, url) {\n ['href', 'src'].forEach(function (attr) {\n return absolutize($, url, attr, $content);\n });\n\n return $content;\n}\n\nfunction textLength(text) {\n return text.trim().replace(/\\s+/g, ' ').length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nfunction linkDensity($node) {\n var totalTextLength = textLength($node.text());\n\n var linkText = $node.find('a').text();\n var linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n } else if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nfunction extractFromMeta$$1($, metaNames, cachedNames) {\n var cleanTags$$1 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n var foundNames = metaNames.filter(function (name) {\n return cachedNames.indexOf(name) !== -1;\n });\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n var _loop = function _loop() {\n var name = _step.value;\n\n var type = 'name';\n var value = 'value';\n\n var nodes = $('meta[' + type + '=\"' + name + '\"]');\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n var values = nodes.map(function (index, node) {\n return $(node).attr(value);\n }).toArray().filter(function (text) {\n return text !== '';\n });\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n var metaValue = void 0;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags$$1) {\n metaValue = stripTags(values[0], $);\n } else {\n metaValue = values[0];\n }\n\n return {\n v: metaValue\n };\n }\n };\n\n for (var _iterator = _getIterator(foundNames), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ret = _loop();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n }\n\n // If nothing is found, return null\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return null;\n}\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment$$1($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nfunction extractFromSelectors$$1($, selectors) {\n var maxChildren = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var textOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _getIterator(selectors), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var selector = _step.value;\n\n var nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n var $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n var content = void 0;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return null;\n}\n\n// strips all tags from a string of text\nfunction stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n var cleanText = $('' + text + '').text();\n return cleanText === '' ? text : cleanText;\n}\n\nfunction withinComment$$1($node) {\n var parents = $node.parents().toArray();\n var commentParent = parents.find(function (parent) {\n var attrs = getAttrs(parent);\n var nodeClass = attrs.class,\n id = attrs.id;\n\n var classAndId = nodeClass + ' ' + id;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n\n// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nfunction nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n\nfunction isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n\nfunction getAttrs(node) {\n var attribs = node.attribs,\n attributes = node.attributes;\n\n\n if (!attribs && attributes) {\n var attrs = _Reflect$ownKeys(attributes).reduce(function (acc, index) {\n var attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n\nfunction setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n\nfunction setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n _Reflect$ownKeys(attrs).forEach(function (key) {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n\n// DOM manipulation\n\nvar IS_LINK = new RegExp('https?://', 'i');\nvar IS_IMAGE = new RegExp('.(png|gif|jpe?g)', 'i');\n\nvar TAGS_TO_REMOVE = ['script', 'style', 'form'].join(',');\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nfunction convertLazyLoadedImages($) {\n $('img').each(function (_, img) {\n var attrs = getAttrs(img);\n\n _Reflect$ownKeys(attrs).forEach(function (attr) {\n var value = attrs[attr];\n\n if (attr !== 'src' && IS_LINK.test(value) && IS_IMAGE.test(value)) {\n $(img).attr('src', value);\n }\n });\n });\n\n return $;\n}\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root().find('*').contents().filter(isComment).remove();\n\n return $;\n}\n\nfunction clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n\nvar Resource = {\n\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n create: function create(url, preparedResponse, parsedUrl) {\n var _this = this;\n\n return _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {\n var result, validResponse;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n result = void 0;\n\n if (!preparedResponse) {\n _context.next = 6;\n break;\n }\n\n validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500\n }\n };\n\n\n result = { body: preparedResponse, response: validResponse };\n _context.next = 9;\n break;\n\n case 6:\n _context.next = 8;\n return fetchResource$1(url, parsedUrl);\n\n case 8:\n result = _context.sent;\n\n case 9:\n if (!result.error) {\n _context.next = 12;\n break;\n }\n\n result.failed = true;\n return _context.abrupt('return', result);\n\n case 12:\n return _context.abrupt('return', _this.generateDoc(result));\n\n case 13:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, _this);\n }))();\n },\n generateDoc: function generateDoc(_ref) {\n var content = _ref.body,\n response = _ref.response;\n var contentType = response.headers['content-type'];\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n\n if (!contentType.includes('html') && !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n var $ = this.encodeDoc({ content: content, contentType: contentType });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n encodeDoc: function encodeDoc(_ref2) {\n var content = _ref2.content,\n contentType = _ref2.contentType;\n\n var encoding = getEncoding(contentType);\n var decodedContent = iconv.decode(content, encoding);\n var $ = cheerio.load(decodedContent);\n\n // after first cheerio.load, check to see if encoding matches\n var metaContentType = $('meta[http-equiv=content-type]').attr('content');\n var properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n }\n};\n\nvar merge = function merge(extractor, domains) {\n return domains.reduce(function (acc, domain) {\n acc[domain] = extractor;\n return acc;\n }, {});\n};\n\nfunction mergeSupportedDomains(extractor) {\n return extractor.supportedDomains ? merge(extractor, [extractor.domain].concat(_toConsumableArray(extractor.supportedDomains))) : merge(extractor, [extractor.domain]);\n}\n\nvar BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: ['.post-content noscript'],\n\n // Selectors to remove from the extracted content\n clean: [],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div'\n }\n },\n\n author: {\n selectors: ['.post-author-name']\n },\n\n title: {\n selectors: ['.post h2.title']\n },\n\n date_published: {\n selectors: ['span.publishdate']\n }\n};\n\nvar NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: ['div.article-content', 'section.body', 'article.article'],\n\n // Selectors to remove from the extracted content\n clean: ['.ad', '.single-related-story'],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: function noscript($node, $) {\n var $children = $.browser ? $($node.text()) : $node.children();\n if ($children.length === 1 && $children.get(0) !== undefined && $children.get(0).tagName.toLowerCase() === 'img') {\n return 'figure';\n }\n\n return null;\n }\n }\n },\n\n title: {\n selectors: ['h1.lede-feature-title', 'h1.headline-primary', 'h1']\n },\n\n author: {\n selectors: ['.by-authors', '.lede-feature-author']\n },\n\n dek: {\n selectors: ['.lede-feature-teaser']\n },\n\n date_published: {\n selectors: [['time.article-timestamp[datetime]', 'datetime'], 'time.article-timestamp']\n }\n};\n\nvar WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: ['#mw-content-text'],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': function infoboxImg($node) {\n var $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure'\n },\n\n // Selectors to remove from the extracted content\n clean: ['.mw-editsection', 'figure tr, figure td, figure tbody', '#toc', '.navbox']\n\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: ['h2.title']\n },\n\n date_published: {\n selectors: ['#footer-info-lastmod']\n }\n\n};\n\nvar TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': function permalinkRoleMain($node, $) {\n var tweets = $node.find('.tweet');\n var $tweetContainer = $('
');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span'\n },\n\n selectors: ['.permalink[role=main]'],\n\n defaultCleaner: false,\n\n clean: ['.stream-item-footer', 'button', '.tweet-details-fixer']\n },\n\n author: {\n selectors: ['.tweet.permalink-tweet .username']\n },\n\n date_published: {\n selectors: [['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms']]\n }\n\n};\n\nvar NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: ['h1.g-headline', 'h1[itemprop=\"headline\"]', 'h1.headline']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.g-byline', '.byline']\n },\n\n content: {\n selectors: ['div.g-blocks', 'article#story'],\n\n transforms: {\n 'img.g-lazy': function imgGLazy($node) {\n var src = $node.attr('src');\n // const widths = $node.attr('data-widths')\n // .slice(1)\n // .slice(0, -1)\n // .split(',');\n // if (widths.length) {\n // width = widths.slice(-1);\n // } else {\n // width = '900';\n // }\n var width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n }\n },\n\n clean: ['.ad', 'header#story-header', '.story-body-1 .lede.video', '.visually-hidden', '#newsletter-promo', '.promo', '.comments-button', '.hidden', '.comments', '.supplemental', '.nocontent', '.story-footer-links']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\nvar TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: ['h1.hed']\n },\n\n author: {\n selectors: ['article#article .article-cover-extra .metadata .byline a']\n },\n\n content: {\n selectors: [['.article-cover figure.lead-img', '.article-body'], '.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.partner-box', '.callout']\n },\n\n date_published: {\n selectors: [['time[itemProp=\"datePublished\"]', 'datetime']]\n },\n\n lead_image_url: null,\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: ['h1.title']\n },\n\n author: {\n selectors: ['.contributors']\n },\n\n content: {\n selectors: ['div#articleBody', 'div.articleBody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value'], ['time[itemProp=\"datePublished\"]', 'content']],\n\n timezone: 'America/New_York'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: ['.dek', 'h2.dek']\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: ['h1.post-title']\n },\n\n author: {\n selectors: ['a[rel=\"author\"]']\n },\n\n content: {\n selectors: ['article.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.visually-hidden', 'figcaption img.photo']\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: ['h1']\n },\n\n author: {\n selectors: ['span.authorname-txt']\n },\n\n content: {\n selectors: ['div.richtext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span.caption']\n },\n\n date_published: {\n selectors: ['span.time']\n },\n\n lead_image_url: {\n selectors: []\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: ['header.canvas-header']\n },\n\n author: {\n selectors: ['span.provider-name']\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.figure-caption']\n },\n\n date_published: {\n selectors: [['time.date[datetime]', 'datetime']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ]\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n title: {\n selectors: ['h1[id=\"post-title\"]']\n },\n\n author: {\n selectors: ['a[data-action=\"user/username\"]', 'byline__author']\n },\n\n content: {\n selectors: [['.longform_custom_header_media', '#buzz_sub_buzz'], '#buzz_sub_buzz'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': function divLongform_custom_header_media($node) {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.instapaper_ignore', '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline', '.share-box', '.print']\n },\n\n date_published: {\n selectors: ['.buzz-datetime']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: ['h1.entry-title']\n },\n\n author: {\n selectors: ['.author vcard', '.fn']\n },\n\n content: {\n selectors: ['.grid-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: ['h1.post-title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.mainContentIntro', '.content-wrapper'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [\n // enter title selectors\n ['meta[name=\"og:title\"]', 'value']]\n },\n\n author: {\n selectors: ['.story-main-content .byline .vcard']\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.story-main-content', '.content-group', '.story-core', '.story-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['figcaption']\n },\n\n date_published: {\n selectors: [['.story-main-content .timestamp time[datetime]', 'datetime']]\n },\n\n lead_image_url: {\n selectors: [\n // enter lead_image_url selectors\n ['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: null,\n\n excerpt: null\n};\n\nvar DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: ['jezebel.com', 'lifehacker.com', 'kotaku.com', 'gizmodo.com', 'jalopnik.com', 'kinja.com'],\n\n title: {\n selectors: ['h1.headline']\n },\n\n author: {\n selectors: ['.author']\n },\n\n content: {\n selectors: ['.post-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': function iframeLazyloadDataRecommendIdYoutube($node) {\n var youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', 'https://www.youtube.com/embed/' + youtubeId);\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.magnifier', '.lightbox']\n },\n\n date_published: {\n selectors: [['time.updated[datetime]', 'datetime']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ]\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ]\n }\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: ['h1.article-title']\n },\n\n author: {\n selectors: ['span[itemprop=author]']\n },\n\n content: {\n selectors: ['div[itemprop=articlebody]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n },\n\n date_published: {\n selectors: [['meta[itemprop=datePublished]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ]\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ]\n }\n};\n\n// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nvar ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: ['h1.headline']\n },\n\n author: {\n selectors: ['.PostByline__name']\n },\n\n content: {\n selectors: ['div.post__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': function divDataRenderReactIdImagesLazyPicture($node, $) {\n var data = JSON.parse($node.attr('data-props'));\n var src = data.sources[0].src;\n\n var $img = $('').attr('src', src);\n $node.replaceWith($img);\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n },\n\n date_published: {\n selectors: [['.PostByline__timestamp[datetime]', 'datetime']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ]\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ]\n }\n};\n\nvar MediumExtractor = {\n domain: 'medium.com',\n\n supportedDomains: ['trackchanges.postlight.com'],\n\n title: {\n selectors: ['h1']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n content: {\n selectors: [['.section-content'], '.section-content', 'article > div > section'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Re-write lazy-loaded youtube videos\n iframe: function iframe($node) {\n var ytRe = /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n var thumb = decodeURIComponent($node.attr('data-thumbnail'));\n\n if (ytRe.test(thumb)) {\n var _thumb$match = thumb.match(ytRe),\n _thumb$match2 = _slicedToArray(_thumb$match, 2),\n _ = _thumb$match2[0],\n youtubeId = _thumb$match2[1]; // eslint-disable-line\n\n\n $node.attr('src', 'https://www.youtube.com/embed/' + youtubeId);\n var $parent = $node.parents('figure');\n var $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n }\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: function figure($node) {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n var $img = $node.find('img').slice(-1)[0];\n var $caption = $node.find('figcaption');\n $node.empty().append([$img, $caption]);\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n },\n\n date_published: {\n selectors: [['time[datetime]', 'datetime']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ]\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ]\n }\n};\n\nvar WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: ['.post-title-breadcrumb', 'h1', '.headline']\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: ['.article-posted-date'],\n\n timezone: 'America/Los_Angeles'\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-content', '.all-post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lightbox-link']\n }\n};\n\nvar WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: ['h1', '#topper-headline-wrapper']\n },\n\n author: {\n selectors: ['.pb-byline']\n },\n\n date_published: {\n selectors: [['.pb-timestamp[itemprop=\"datePublished\"]', 'content']]\n },\n\n dek: {\n selectors: []\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': function divInlineContent($node) {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.interstitial-link', '.newsletter-inline-unit']\n }\n};\n\nvar WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: ['h1.headline__title']\n },\n\n author: {\n selectors: ['span.author-card__details__name']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value'], ['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['h2.headline__subtitle']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.entry__body'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // 'div.top-media': ($node) => {\n // const $figure = $node.children('figure');\n // $node.replaceWith($figure);\n // },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote', '.tag-cloud', '.embed-asset', '.below-entry', '.entry-corrections', '#suggested-story']\n }\n};\n\nvar NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: ['h1.article-headline', '.minutes-primary h1.minute-title']\n },\n\n author: {\n selectors: ['div.author-list', '.minutes-primary h3.minute-byline']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: ['h2.article-subhead']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.article-cover', 'div.content-body'], ['.minute-image', '.minutes-primary div.content-body']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['aside']\n }\n};\n\nvar MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: ['.article-title']\n },\n\n author: {\n selectors: ['.byline a']\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n\n timezone: 'GMT'\n },\n\n dek: {\n selectors: ['#storytext h2']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['#storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inStoryHeading']\n }\n};\n\nvar WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: ['h1']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['h2.p-dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content'],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: function noscript($node) {\n var $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.aside', 'img.c-dynamic-image']\n }\n};\n\nvar WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: ['h1.pg-headline', 'h1']\n },\n\n author: {\n selectors: ['.metadata__byline__author']\n },\n\n date_published: {\n selectors: [['meta[name=\"pubdate\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text', 'div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': function znBody__paragraphEl__leafmediaSourcedParagraph($node) {\n var $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': function znBody__paragraph($node) {\n if ($node.has('a')) {\n if ($node.text().trim() === $node.find('a').text().trim()) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure'\n\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: ['h1.p-article__title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: ['.p-article__byline__date'],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: ['.watch-title', 'h1.watch-title-container']\n },\n\n author: {\n selectors: ['.yt-user-info']\n },\n\n date_published: {\n selectors: [['meta[itemProp=\"datePublished\"]', 'value']],\n\n timezone: 'GMT'\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [['#player-api', '#eow-description']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': function playerApi($node, $) {\n var videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html('\\n ');\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: ['.content__headline']\n },\n\n author: {\n selectors: ['p.byline']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['.content__standfirst']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.content__article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.hide-on-mobile', '.inline-icon']\n }\n};\n\nvar WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: ['h1.c-page-title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1.lede-text-only__hed']\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value'], '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author']\n },\n\n date_published: {\n selectors: [['time.published-at', 'datetime'], ['time[datetime]', 'datetime'], ['meta[name=\"date\"]', 'value'], ['meta[name=\"parsely-pub-date\"]', 'value']]\n },\n\n dek: {\n selectors: []\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-body__content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inline-newsletter', '.page-ad']\n }\n};\n\nvar WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: ['h1.post-page__title']\n },\n\n author: {\n selectors: ['div.content-meta__author']\n },\n\n date_published: {\n selectors: [['time.content-meta__published-date[datetime]', 'datetime']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.post-page__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: ['h1', '.storytitle']\n },\n\n author: {\n selectors: ['p.byline__name.byline__name--block']\n },\n\n date_published: {\n selectors: [['.dateblock time[datetime]', 'datetime'], ['meta[name=\"date\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value'], ['meta[name=\"twitter:image:src\"]', 'value']]\n },\n\n content: {\n selectors: ['.storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['div.enlarge_measure']\n }\n};\n\nvar WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: ['h1.c-page-title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['figure.e-image--hero', '.c-entry-content'], '.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: ['header.item-header.content-width-responsive']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: ['.timestamp']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['figure.featured-image', '.item-body'], '.item-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-aside', '.progressive-image-thumbnail']\n }\n};\n\nvar WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: ['h1.story__title']\n },\n\n author: {\n selectors: ['.story__info .story__info__item:first-child']\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info'],\n\n timezone: 'America/Chicago'\n },\n\n dek: {\n selectors: ['.story__subhead']\n },\n\n lead_image_url: {\n selectors: [['article figure a:first-child', 'href']]\n },\n\n content: {\n selectors: ['.story__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: ['h1.article-headline']\n },\n\n author: {\n selectors: ['.author']\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['#article-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#article-byline .author']\n }\n};\n\nvar MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: ['h1.title']\n },\n\n author: {\n selectors: ['span.author_name a']\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['section.article-content.blueprint'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: ['h1.trb_ar_hl_t']\n },\n\n author: {\n selectors: ['span.trb_ar_by_nm_au']\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.trb_ar_page'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: ['h1.c-page-title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['.p-dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['figure.e-image--hero', '.c-entry-content'], '.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': function figureEImage__imageNoscript($node) {\n var imgHtml = $node.html();\n $node.parents('.e-image__image').find('.c-dynamic-image').replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title']\n },\n\n author: {\n selectors: ['.byline-component__contributors b span']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST'\n },\n\n dek: {\n selectors: ['.article__deck']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': function parsysContent($node, $) {\n var $imgSrc = $node.find('.image.parbase.section').find('.picturefill').first().data('platform-src');\n if ($imgSrc) {\n $node.prepend($(''));\n }\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--large']\n }\n};\n\nvar WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title']\n },\n\n author: {\n selectors: ['.byline-component__contributors b span']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['.article__deck']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': function parsysContent($node, $) {\n var $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n var $dataAttrContainer = $imageParent.find('.media--medium__container').children().first();\n var imgPath1 = $dataAttrContainer.data('platform-image1-path');\n var imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend($('
\\n \\n \\n
'));\n }\n } else {\n var $imgSrc = $node.find('.image.parbase.section').find('.picturefill').first().data('platform-src');\n if ($imgSrc) {\n $node.prepend($(''));\n }\n }\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--small']\n }\n};\n\nvar WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: ['.trb_ar_hl']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.trb_ar_main'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': function trb_ar_la($node) {\n var $figure = $node.find('figure');\n $node.replaceWith($figure);\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.trb_ar_by', '.trb_ar_cr']\n }\n};\n\nvar PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: ['nypost.com'],\n\n title: {\n selectors: ['h1 a']\n },\n\n author: {\n selectors: ['.byline']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['#featured-image-wrapper', '.entry-content'], '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.modal-trigger']\n }\n};\n\nvar ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: ['h1.entry-title']\n },\n\n author: {\n selectors: ['main span.entry-author-name']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [['p[style]']]\n }\n};\n\nvar WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: ['.article-headline']\n },\n\n author: {\n selectors: ['.author-name']\n },\n\n date_published: {\n selectors: [['.date-original-reading-time time', 'datetime']],\n timezone: 'UTC'\n },\n\n dek: {\n selectors: ['.article-subline']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: ['h1', 'h1.is-title-pane']\n },\n\n author: {\n selectors: ['.author']\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']]\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.pane-node-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': function paneNodeBody($node, $) {\n var _WwwMsnbcComExtractor = _slicedToArray(WwwMsnbcComExtractor.lead_image_url.selectors[0], 2),\n selector = _WwwMsnbcComExtractor[0],\n attr = _WwwMsnbcComExtractor[1];\n\n var src = $(selector).attr(attr);\n if (src) {\n $node.prepend('');\n }\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [['meta[name=\"sailthru.title\"]', 'value']]\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: ['h1.title', '.title-group', '.inner']\n },\n\n author: {\n selectors: ['.field-name-field-enhanced-authors']\n },\n\n date_published: {\n selectors: ['.date-display-single'],\n timezone: 'America/New_York'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.field.field-name-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: ['.article-header h1']\n },\n\n author: {\n selectors: ['.authors'],\n clean: ['.author-overlay', '.by-text']\n },\n\n date_published: {\n selectors: ['.timestamp'],\n timezone: 'America/New_York'\n\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: ['h1#ra-headline']\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['article#ra-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['dl#ra-tags', '.ra-related', 'a.ra-editor', 'dl#ra-share-bottom']\n }\n};\n\nvar WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: ['h1.title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div#article_body.content', 'div.story'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: ['h2.post-title', 'title-text']\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['#content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.share-copy-title', '.post-tags', '.reactions']\n }\n};\n\nvar ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: ['h1.entry-title']\n },\n\n author: {\n selectors: ['.author', '.vcard']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['h2.dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']]\n },\n\n author: {\n selectors: ['a.author.url.fn']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.article-body__inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: ['header h1']\n },\n\n author: {\n selectors: ['a.article-byline.tracked-offpage']\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: ['time.article-published-date']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.article-body-inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related']\n }\n};\n\nvar WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: ['h1.content-title']\n },\n\n author: {\n selectors: ['a.content-author.tracked-offpage']\n },\n\n date_published: {\n selectors: ['time.content-published-date'],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: ['.content-description']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.lead-container', '.article-content'], '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related']\n }\n};\n\nvar twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: ['title', 'article header h1']\n },\n\n author: {\n selectors: ['.author']\n },\n\n date_published: {\n selectors: [['time[data-published]', 'data-published']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['section.body.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: ['div.post-top h1']\n },\n\n author: {\n selectors: ['.post-top .authorname']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: ['h1.article__title']\n },\n\n author: {\n selectors: ['.entry-meta__author a']\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.post-content section, .post-content div.post-content__image']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: ['h1.title']\n },\n\n date_published: {\n selectors: ['p.published-date'],\n\n timezone: 'America/New_York'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.dateline-storybody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: ['h1.title']\n },\n\n author: {\n selectors: ['.contributor']\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n\n timezone: 'America/New_York'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.full-width-opener', '.article-content'], '.article-content', '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': function divLoadingNoscript($node) {\n var imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.story-share']\n }\n};\n\nvar WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: ['h1', 'h1.title']\n },\n\n author: {\n selectors: ['.author-url']\n },\n\n date_published: {\n selectors: ['.article .byline'],\n\n // Wednesday January 18, 2017 11:44 am PST\n format: 'dddd MMMM D, YYYY h:mm A zz',\n\n timezone: 'America/Los_Angeles'\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: ['h1', 'h1.main-title']\n },\n\n author: {\n selectors: ['.meta-by']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['.image-large', 'src']]\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.intro', 'blockquote']\n }\n};\n\nvar WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: ['h1', 'h1.headline']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: ['.timestamp'],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: ['.quick-hit ul']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['p', '.marquee_large_2x', '.component.image']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n\n noscript: function noscript($node) {\n var $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [['.inline-thumb', '.primary-message', '.description', '.instructions']]\n }\n};\n\nvar WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: ['.blog-title']\n },\n\n author: {\n selectors: ['.blog-author a:first-of-type']\n },\n\n date_published: {\n selectors: ['.blog-author a:last-of-type'],\n\n timezone: 'EST'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.blog-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']]\n },\n\n author: {\n selectors: ['a.author']\n },\n\n date_published: {\n selectors: ['time'],\n\n timezone: 'America/Los_Angeles'\n },\n\n dek: {\n selectors: ['.article-dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['img.__image-lead__', '.article-main-body'], '.article-main-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': function figureImage($node) {\n var $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n }\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwCinemablendComExtractor = {\n domain: 'www.cinemablend.com',\n\n title: {\n selectors: ['.story_title']\n },\n\n author: {\n selectors: ['.author']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'EST'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div#wrap_left_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: ['h1.entry-headline']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry-container'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.label-comment']\n }\n};\n\nvar WwwHowtogeekComExtractor = {\n domain: 'www.howtogeek.com',\n\n title: {\n selectors: ['title']\n },\n\n author: {\n selectors: ['#authorinfobox a']\n },\n\n date_published: {\n selectors: ['#authorinfobox + div li'],\n timezone: 'GMT'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.thecontent'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']]\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n timezone: 'EST'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [['meta[name=\"dcterms.title\"]', 'value']]\n },\n\n author: {\n selectors: [['link[rel=\"author\"]', 'title']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.post-img', '.post-text'], '.post-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: ['title', 'h1.entry-title']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']]\n },\n\n dek: {\n selectors: ['.subtitle']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.article-sharing.top + div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.ad-notice-small']\n }\n};\n\nvar FusionNetExtractor = {\n domain: 'fusion.net',\n\n title: {\n selectors: ['.post-title', '.single-title', '.headline']\n },\n\n author: {\n selectors: ['.show-for-medium .byline']\n },\n\n date_published: {\n selectors: [['time.local-time', 'datetime']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.post-featured-media', '.article-content'], '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.fusion-youtube-oembed': 'figure'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: ['.title', ['meta[name=\"title\"]', 'value']]\n },\n\n author: {\n selectors: ['.byline']\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.article-content', '.image', '.body'], '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-video-wrapper', '.show-for-small-only']\n }\n};\n\nvar ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: ['.entry-title', '.cb-entry-title', '.cb-single-title']\n },\n\n author: {\n selectors: ['div.cb-author', 'div.cb-author-title']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['div.theiaPostSlider_slides img', 'src']]\n },\n\n content: {\n selectors: ['div.theiaPostSlider_slides'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: ['.title']\n },\n\n author: {\n selectors: ['.author-link']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: ['h1.title', ['meta[name=\"og:title\"]', 'value']]\n },\n\n author: {\n selectors: ['div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name', 'h1.writer-name']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.tc_mark']\n }\n};\n\nvar WwwNjComExtractor = {\n domain: 'www.nj.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']]\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n\n timezone: 'America/New_York'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: ['h1.entry-title.story--header--title']\n },\n\n author: {\n selectors: ['div.story--header--author']\n },\n\n date_published: {\n selectors: [['meta[name=\"datePublished\"]', 'value']]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['article.story', '.entry-content.'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.post-category', '.story--header--socials', '.story--header--content']\n }\n};\n\nvar WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: ['div.article-hed h1']\n },\n\n author: {\n selectors: ['span.byline_author']\n },\n\n date_published: {\n selectors: [['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'], '.flag_article-wrapper time'],\n\n timezone: 'America/New_York'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['div.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: ['h1']\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']]\n },\n\n date_published: {\n selectors: ['.MblGHNMJ'],\n\n timezone: 'UTC'\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['picture', 'article.row'], 'article.row'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: ['.article-title', 'h1']\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], '.entity-name a[rel=author]']\n },\n\n date_published: {\n selectors: [['time[itemprop=\"datePublished\"]', 'datetime']],\n\n timezone: 'America/Los_Angeles'\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['header figure', '.prose'], '.prose'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.entity-image']\n }\n};\n\nvar ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: ['whitehouse.gov'],\n\n title: {\n selectors: ['h1', '.pane-node-title']\n },\n\n author: {\n selectors: ['.blog-author-link', '.node-person-name-link']\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']]\n },\n\n dek: {\n selectors: ['.field-name-field-forall-summary']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: ['div#content-start', '.pane-node-field-forall-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pane-node-title', '.pane-custom.pane-1']\n }\n};\n\nvar WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: ['h1.title']\n },\n\n author: {\n selectors: ['div.date span span a']\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.show-for-small-only']\n }\n};\n\nvar WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: ['.page-title']\n },\n\n author: {\n selectors: ['.aside_author .title']\n },\n\n date_published: {\n selectors: ['.post-info'],\n\n timezone: 'Europe/London'\n },\n\n dek: {\n selectors: ['.page-subtitle']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [\n // ['article.type-post div.post_content p'],\n 'article .post_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\nvar ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']]\n },\n\n author: {\n selectors: ['.author-name', ['meta[name=\"sailthru.author\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']]\n },\n\n dek: {\n selectors: [\n // enter selectors\n ]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.post-item-media-wrap', '.post-item p']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.donate-box', '.message', '.subtitle']\n }\n};\n\nvar WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: ['h2', 'h2.title']\n },\n\n author: {\n selectors: ['.name']\n },\n\n date_published: {\n selectors: [['.date.smart-date', 'data-origindate']]\n },\n\n dek: {\n selectors: ['.excerpt']\n },\n\n lead_image_url: {\n selectors: [['.article-detail-hd img', 'src']]\n },\n\n content: {\n selectors: ['.detail'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lazyload', '.lazylad', '.lazylood']\n }\n};\n\nvar GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: ['chicagoist.com', 'laist.com', 'sfist.com', 'shanghaiist.com', 'dcist.com'],\n\n title: {\n selectors: ['h1', '.entry-header h1']\n },\n\n author: {\n selectors: ['.author']\n },\n\n date_published: {\n selectors: ['abbr', 'abbr.published'],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: [null]\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.entry-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.image-none br', '.image-left br', '.image-right br', '.galleryEase']\n }\n};\n\nvar WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: ['h1']\n },\n\n author: {\n selectors: ['.author-inline .author-name']\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']]\n },\n\n dek: {\n selectors: ['header h2']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': function captionImg($node) {\n var src = $node.attr('src');\n $node.parent().replaceWith('
');\n },\n '.caption': 'figcaption'\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#pitch']\n }\n};\n\nvar WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: ['.hed', 'h1']\n },\n\n author: {\n selectors: ['a[rel=author]']\n },\n\n date_published: {\n selectors: ['.pub-date'],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: ['.dek']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: ['.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.about-the-author', '.pullquote', '.newsletter-signup-component', '.top-comment']\n }\n};\n\nvar IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: ['h1']\n },\n\n author: {\n selectors: [['meta[name=\"dc.creator\"]', 'value']]\n },\n\n date_published: {\n selectors: [['meta[name=\"dc.date.created\"]', 'value']],\n\n timezone: 'America/New_York'\n },\n\n dek: {\n selectors: ['.bunker-component.lead']\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']]\n },\n\n content: {\n selectors: [['.main-multimedia-item', '.news-story-content']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: []\n }\n};\n\n\n\nvar CustomExtractors = Object.freeze({\n\tBloggerExtractor: BloggerExtractor,\n\tNYMagExtractor: NYMagExtractor,\n\tWikipediaExtractor: WikipediaExtractor,\n\tTwitterExtractor: TwitterExtractor,\n\tNYTimesExtractor: NYTimesExtractor,\n\tTheAtlanticExtractor: TheAtlanticExtractor,\n\tNewYorkerExtractor: NewYorkerExtractor,\n\tWiredExtractor: WiredExtractor,\n\tMSNExtractor: MSNExtractor,\n\tYahooExtractor: YahooExtractor,\n\tBuzzfeedExtractor: BuzzfeedExtractor,\n\tWikiaExtractor: WikiaExtractor,\n\tLittleThingsExtractor: LittleThingsExtractor,\n\tPoliticoExtractor: PoliticoExtractor,\n\tDeadspinExtractor: DeadspinExtractor,\n\tBroadwayWorldExtractor: BroadwayWorldExtractor,\n\tApartmentTherapyExtractor: ApartmentTherapyExtractor,\n\tMediumExtractor: MediumExtractor,\n\tWwwTmzComExtractor: WwwTmzComExtractor,\n\tWwwWashingtonpostComExtractor: WwwWashingtonpostComExtractor,\n\tWwwHuffingtonpostComExtractor: WwwHuffingtonpostComExtractor,\n\tNewrepublicComExtractor: NewrepublicComExtractor,\n\tMoneyCnnComExtractor: MoneyCnnComExtractor,\n\tWwwThevergeComExtractor: WwwThevergeComExtractor,\n\tWwwCnnComExtractor: WwwCnnComExtractor,\n\tWwwAolComExtractor: WwwAolComExtractor,\n\tWwwYoutubeComExtractor: WwwYoutubeComExtractor,\n\tWwwTheguardianComExtractor: WwwTheguardianComExtractor,\n\tWwwSbnationComExtractor: WwwSbnationComExtractor,\n\tWwwBloombergComExtractor: WwwBloombergComExtractor,\n\tWwwBustleComExtractor: WwwBustleComExtractor,\n\tWwwNprOrgExtractor: WwwNprOrgExtractor,\n\tWwwRecodeNetExtractor: WwwRecodeNetExtractor,\n\tQzComExtractor: QzComExtractor,\n\tWwwDmagazineComExtractor: WwwDmagazineComExtractor,\n\tWwwReutersComExtractor: WwwReutersComExtractor,\n\tMashableComExtractor: MashableComExtractor,\n\tWwwChicagotribuneComExtractor: WwwChicagotribuneComExtractor,\n\tWwwVoxComExtractor: WwwVoxComExtractor,\n\tNewsNationalgeographicComExtractor: NewsNationalgeographicComExtractor,\n\tWwwNationalgeographicComExtractor: WwwNationalgeographicComExtractor,\n\tWwwLatimesComExtractor: WwwLatimesComExtractor,\n\tPagesixComExtractor: PagesixComExtractor,\n\tThefederalistpapersOrgExtractor: ThefederalistpapersOrgExtractor,\n\tWwwCbssportsComExtractor: WwwCbssportsComExtractor,\n\tWwwMsnbcComExtractor: WwwMsnbcComExtractor,\n\tWwwThepoliticalinsiderComExtractor: WwwThepoliticalinsiderComExtractor,\n\tWwwMentalflossComExtractor: WwwMentalflossComExtractor,\n\tAbcnewsGoComExtractor: AbcnewsGoComExtractor,\n\tWwwNydailynewsComExtractor: WwwNydailynewsComExtractor,\n\tWwwCnbcComExtractor: WwwCnbcComExtractor,\n\tWwwPopsugarComExtractor: WwwPopsugarComExtractor,\n\tObserverComExtractor: ObserverComExtractor,\n\tPeopleComExtractor: PeopleComExtractor,\n\tWwwUsmagazineComExtractor: WwwUsmagazineComExtractor,\n\tWwwRollingstoneComExtractor: WwwRollingstoneComExtractor,\n\ttwofortysevensportsComExtractor: twofortysevensportsComExtractor,\n\tUproxxComExtractor: UproxxComExtractor,\n\tWwwEonlineComExtractor: WwwEonlineComExtractor,\n\tWwwMiamiheraldComExtractor: WwwMiamiheraldComExtractor,\n\tWwwRefinery29ComExtractor: WwwRefinery29ComExtractor,\n\tWwwMacrumorsComExtractor: WwwMacrumorsComExtractor,\n\tWwwAndroidcentralComExtractor: WwwAndroidcentralComExtractor,\n\tWwwSiComExtractor: WwwSiComExtractor,\n\tWwwRawstoryComExtractor: WwwRawstoryComExtractor,\n\tWwwCnetComExtractor: WwwCnetComExtractor,\n\tWwwCinemablendComExtractor: WwwCinemablendComExtractor,\n\tWwwTodayComExtractor: WwwTodayComExtractor,\n\tWwwHowtogeekComExtractor: WwwHowtogeekComExtractor,\n\tWwwAlComExtractor: WwwAlComExtractor,\n\tWwwThepennyhoarderComExtractor: WwwThepennyhoarderComExtractor,\n\tWwwWesternjournalismComExtractor: WwwWesternjournalismComExtractor,\n\tFusionNetExtractor: FusionNetExtractor,\n\tWwwAmericanowComExtractor: WwwAmericanowComExtractor,\n\tScienceflyComExtractor: ScienceflyComExtractor,\n\tHellogigglesComExtractor: HellogigglesComExtractor,\n\tThoughtcatalogComExtractor: ThoughtcatalogComExtractor,\n\tWwwNjComExtractor: WwwNjComExtractor,\n\tWwwInquisitrComExtractor: WwwInquisitrComExtractor,\n\tWwwNbcnewsComExtractor: WwwNbcnewsComExtractor,\n\tFortuneComExtractor: FortuneComExtractor,\n\tWwwLinkedinComExtractor: WwwLinkedinComExtractor,\n\tObamawhitehouseArchivesGovExtractor: ObamawhitehouseArchivesGovExtractor,\n\tWwwOpposingviewsComExtractor: WwwOpposingviewsComExtractor,\n\tWwwProspectmagazineCoUkExtractor: WwwProspectmagazineCoUkExtractor,\n\tForwardComExtractor: ForwardComExtractor,\n\tWwwQdailyComExtractor: WwwQdailyComExtractor,\n\tGothamistComExtractor: GothamistComExtractor,\n\tWwwFoolComExtractor: WwwFoolComExtractor,\n\tWwwSlateComExtractor: WwwSlateComExtractor,\n\tIciRadioCanadaCaExtractor: IciRadioCanadaCaExtractor\n});\n\nvar Extractors = _Object$keys(CustomExtractors).reduce(function (acc, key) {\n var extractor = CustomExtractors[key];\n return _extends({}, acc, mergeSupportedDomains(extractor));\n}, {});\n\n// CLEAN AUTHOR CONSTANTS\nvar CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n// author = re.sub(r'^\\s*(posted |written )?by\\s*:?\\s*(.*)(?i)',\n\n// CLEAN DEK CONSTANTS\nvar TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\n\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\n\n\n// CLEAN DATE PUBLISHED CONSTANTS\nvar MS_DATE_STRING = /^\\d{13}$/i;\nvar SEC_DATE_STRING = /^\\d{10}$/i;\nvar CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nvar TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nvar TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nvar months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\nvar allMonths = months.join('|');\nvar timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nvar timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nvar timestamp3 = '-[0-9]{3,4}$';\nvar SPLIT_DATE_STRING = new RegExp('(' + timestamp1 + ')|(' + timestamp2 + ')|(' + timestamp3 + ')|([0-9]{1,4})|(' + allMonths + ')', 'ig');\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nvar TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nvar TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nvar DOMAIN_ENDINGS_RE = new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nfunction cleanAuthor(author) {\n return normalizeSpaces(author.replace(CLEAN_AUTHOR_RE, '$2').trim());\n}\n\nfunction clean$1(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nfunction cleanDek(dek, _ref) {\n var $ = _ref.$,\n excerpt = _ref.excerpt;\n\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10)) return null;\n\n var dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nfunction cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || []).join(' ').replace(TIME_MERIDIAN_DOTS_RE, 'm').replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3').replace(CLEAN_DATE_STRING_RE, '$1').trim();\n}\n\nfunction createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n return timezone ? moment.tz(dateString, format || parseFormat(dateString), timezone) : moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nfunction cleanDatePublished(dateString) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n timezone = _ref.timezone,\n format = _ref.format;\n\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString) || SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n\n var date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n\n// Clean our article content, returning a new, cleaned node.\nfunction extractCleanNode(article, _ref) {\n var $ = _ref.$,\n _ref$cleanConditional = _ref.cleanConditionally,\n cleanConditionally = _ref$cleanConditional === undefined ? true : _ref$cleanConditional,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? '' : _ref$title,\n _ref$url = _ref.url,\n url = _ref$url === undefined ? '' : _ref$url,\n _ref$defaultCleaner = _ref.defaultCleaner,\n defaultCleaner = _ref$defaultCleaner === undefined ? true : _ref$defaultCleaner;\n\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel$$1(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute$$1(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like , etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes$$1(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags$$1(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes$$1(article, $);\n\n return article;\n}\n\nfunction cleanTitle$$1(title, _ref) {\n var url = _ref.url,\n $ = _ref.$;\n\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n var h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n var _ret = function () {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n var termCounts = splitTitle.reduce(function (acc, titleText) {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n var _Reflect$ownKeys$redu = _Reflect$ownKeys(termCounts).reduce(function (acc, key) {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n }, [0, 0]),\n _Reflect$ownKeys$redu2 = _slicedToArray(_Reflect$ownKeys$redu, 2),\n maxTerm = _Reflect$ownKeys$redu2[0],\n termCount = _Reflect$ownKeys$redu2[1];\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n\n\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n var splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n var longestEnd = splitEnds.reduce(function (acc, end) {\n return acc.length > end.length ? acc : end;\n }, '');\n\n if (longestEnd.length > 10) {\n return {\n v: longestEnd\n };\n }\n\n return {\n v: text\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n var _URL$parse = URL.parse(url),\n host = _URL$parse.host;\n\n var nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n var startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n var startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n var endSlug = splitTitle.slice(-1)[0].toLowerCase().replace(' ', '');\n var endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nfunction resolveSplitTitle(title) {\n var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n var splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n var newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n\nvar Cleaners = {\n author: cleanAuthor,\n lead_image_url: clean$1,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: extractCleanNode,\n title: cleanTitle$$1\n};\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nfunction extractBestNode($, opts) {\n // clone the node so we can get back to our\n // initial parsed state if needed\n // TODO Do I need this? – AP\n // let $root = $.root().clone()\n\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs$$1($);\n $ = scoreContent$$1($, opts.weightNodes);\n var $topCandidate = findTopCandidate$$1($);\n\n return $topCandidate;\n}\n\nvar GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract: function extract(_ref, opts) {\n var $ = _ref.$,\n html = _ref.html,\n title = _ref.title,\n url = _ref.url;\n\n opts = _extends({}, this.defaultOpts, opts);\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n var node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _getIterator(_Reflect$ownKeys(opts).filter(function (k) {\n return opts[k] === true;\n })), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n\n // Get node given current options\n getContentNode: function getContentNode($, title, url, opts) {\n return extractCleanNode(extractBestNode($, opts), {\n $: $,\n cleanConditionally: opts.cleanConditionally,\n title: title,\n url: url\n });\n },\n\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode: function cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n\n // if return_type == \"html\":\n // return normalize_spaces(node_to_html(node))\n // else:\n // return node\n }\n};\n\n// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nvar STRONG_TITLE_META_TAGS = ['tweetmeme-title', 'dc.title', 'rbtitle', 'headline', 'title'];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nvar WEAK_TITLE_META_TAGS = ['og:title'];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nvar STRONG_TITLE_SELECTORS = ['.hentry .entry-title', 'h1#articleHeader', 'h1.articleHeader', 'h1.article', '.instapaper_title', '#meebo-title'];\n\nvar WEAK_TITLE_SELECTORS = ['article h1', '#entry-title', '.entry-title', '#entryTitle', '#entrytitle', '.entryTitle', '.entrytitle', '#articleTitle', '.articleTitle', 'post post-title', 'h1.title', 'h2.article', 'h1', 'html head title', 'title'];\n\nvar GenericTitleExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n url = _ref.url,\n metaCache = _ref.metaCache;\n\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n var title = void 0;\n\n title = extractFromMeta$$1($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle$$1(title, { url: url, $: $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors$$1($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle$$1(title, { url: url, $: $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta$$1($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle$$1(title, { url: url, $: $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors$$1($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle$$1(title, { url: url, $: $ });\n\n // If no matches, return an empty string\n return '';\n }\n};\n\n// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nvar AUTHOR_META_TAGS = ['byl', 'clmst', 'dc.author', 'dcsext.author', 'dc.creator', 'rbauthors', 'authors'];\n\nvar AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nvar AUTHOR_SELECTORS = ['.entry .entry-author', '.author.vcard .fn', '.author .vcard .fn', '.byline.vcard .fn', '.byline .vcard .fn', '.byline .by .author', '.byline .by', '.byline .author', '.post-author.vcard', '.post-author .vcard', 'a[rel=author]', '#by_author', '.by_author', '#entryAuthor', '.entryAuthor', '.byline a[href*=author]', '#author .authorname', '.author .authorname', '#author', '.author', '.articleauthor', '.ArticleAuthor', '.byline'];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nvar bylineRe = /^[\\n\\s]*By/i;\nvar BYLINE_SELECTORS_RE = [['#byline', bylineRe], ['.byline', bylineRe]];\n\nvar GenericAuthorExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n metaCache = _ref.metaCache;\n\n var author = void 0;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta$$1($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors$$1($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _getIterator(BYLINE_SELECTORS_RE), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref4 = _step.value;\n\n var _ref3 = _slicedToArray(_ref4, 2);\n\n var selector = _ref3[0];\n var regex = _ref3[1];\n\n var node = $(selector);\n if (node.length === 1) {\n var text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return null;\n }\n};\n\n// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nvar DATE_PUBLISHED_META_TAGS = ['article:published_time', 'displaydate', 'dc.date', 'dc.date.issued', 'rbpubdate', 'publish_date', 'pub_date', 'pagedate', 'pubdate', 'revision_date', 'doc_date', 'date_created', 'content_create_date', 'lastmodified', 'created', 'date'];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nvar DATE_PUBLISHED_SELECTORS = ['.hentry .dtstamp.published', '.hentry .published', '.hentry .dtstamp.updated', '.hentry .updated', '.single .published', '.meta .published', '.meta .postDate', '.entry-date', '.byline .date', '.postmetadata .date', '.article_datetime', '.date-header', '.story-date', '.dateStamp', '#story .datetime', '.dateline', '.pubdate'];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nvar abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nvar DATE_PUBLISHED_URL_RES = [\n// /2012/01/27/ but not /2012/01/293\nnew RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n// 20120127 or 20120127T but not 2012012733 or 8201201733\n// /[^0-9](20\\d{2}[01]\\d[0-3]\\d)([^0-9]|$)/i,\n// 2012-01-27\nnew RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n// /2012/jan/27/\nnew RegExp('/(20\\\\d{2}/' + abbrevMonthsStr + '/[0-3]\\\\d)/', 'i')];\n\nvar GenericDatePublishedExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n url = _ref.url,\n metaCache = _ref.metaCache;\n\n var datePublished = void 0;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta$$1($, DATE_PUBLISHED_META_TAGS, metaCache, false);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors$$1($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n }\n};\n\n// import {\n// DEK_META_TAGS,\n// DEK_SELECTORS,\n// DEK_URL_RES,\n// } from './constants';\n\n// import { cleanDek } from 'cleaners';\n\n// import {\n// extractFromMeta,\n// extractFromSelectors,\n// } from 'utils/dom';\n\n// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nvar GenericDekExtractor = {\n // extract({ $, content, metaCache }) {\n extract: function extract() {\n return null;\n }\n};\n\n\n\n// def extract_dek(self):\n// # First, check to see if we have a matching meta tag that we can make\n// # use of.\n// dek = self.extract_from_meta('dek', constants.DEK_META_TAGS)\n// if not dek:\n// # Second, look through our CSS/XPath selectors. This may return\n// # an HTML fragment.\n// dek = self.extract_from_selectors('dek',\n// constants.DEK_SELECTORS,\n// text_only=False)\n//\n// if dek:\n// # Make sure our dek isn't in the first few thousand characters\n// # of the content, otherwise it's just the start of the article\n// # and not a true dek.\n// content = self.extract_content()\n// content_chunk = normalize_spaces(strip_tags(content[:2000]))\n// dek_chunk = normalize_spaces(dek[:100]) # Already has no tags.\n//\n// # 80% or greater similarity means the dek was very similar to some\n// # of the starting content, so we skip it.\n// if fuzz.partial_ratio(content_chunk, dek_chunk) < 80:\n// return dek\n//\n// return None\n\n// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nvar LEAD_IMAGE_URL_META_TAGS = ['og:image', 'twitter:image', 'image_src'];\n\nvar LEAD_IMAGE_URL_SELECTORS = ['link[rel=image_src]'];\n\nvar POSITIVE_LEAD_IMAGE_URL_HINTS = ['upload', 'wp-content', 'large', 'photo', 'wp-image'];\nvar POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nvar NEGATIVE_LEAD_IMAGE_URL_HINTS = ['spacer', 'sprite', 'blank', 'throbber', 'gradient', 'tile', 'bg', 'background', 'icon', 'social', 'header', 'hdr', 'advert', 'spinner', 'loader', 'loading', 'default', 'rating', 'share', 'facebook', 'twitter', 'theme', 'promo', 'ads', 'wp-includes'];\nvar NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nvar GIF_RE = /\\.gif(\\?.*)?$/i;\nvar JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n\nfunction getSig($node) {\n return ($node.attr('class') || '') + ' ' + ($node.attr('id') || '');\n}\n\n// Scores image urls based on a variety of heuristics.\nfunction scoreImageUrl(url) {\n url = url.trim();\n var score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nfunction scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nfunction scoreByParents($img) {\n var score = 0;\n var $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n var $parent = $img.parent();\n var $gParent = void 0;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach(function ($node) {\n if (PHOTO_HINTS_RE$1.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nfunction scoreBySibling($img) {\n var score = 0;\n var $sibling = $img.next();\n var sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE$1.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nfunction scoreByDimensions($img) {\n var score = 0;\n\n var width = parseFloat($img.attr('width'));\n var height = parseFloat($img.attr('height'));\n var src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n var area = width * height;\n if (area < 5000) {\n // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nfunction scoreByPosition($imgs, index) {\n return $imgs.length / 2 - index;\n}\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nvar GenericLeadImageUrlExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n content = _ref.content,\n metaCache = _ref.metaCache,\n html = _ref.html;\n\n var cleanUrl = void 0;\n if (!$.browser && $('head').length === 0) {\n $('*').first().prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n var imageUrl = extractFromMeta$$1($, LEAD_IMAGE_URL_META_TAGS, metaCache, false);\n\n if (imageUrl) {\n cleanUrl = clean$1(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n var $content = $(content);\n var imgs = $('img', $content).toArray();\n var imgScores = {};\n\n imgs.forEach(function (img, index) {\n var $img = $(img);\n var src = $img.attr('src');\n\n if (!src) return;\n\n var score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n var _Reflect$ownKeys$redu = _Reflect$ownKeys(imgScores).reduce(function (acc, key) {\n return imgScores[key] > acc[1] ? [key, imgScores[key]] : acc;\n }, [null, 0]),\n _Reflect$ownKeys$redu2 = _slicedToArray(_Reflect$ownKeys$redu, 2),\n topUrl = _Reflect$ownKeys$redu2[0],\n topScore = _Reflect$ownKeys$redu2[1];\n\n if (topScore > 0) {\n cleanUrl = clean$1(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _getIterator(LEAD_IMAGE_URL_SELECTORS), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var selector = _step.value;\n\n var $node = $(selector).first();\n var src = $node.attr('src');\n if (src) {\n cleanUrl = clean$1(src);\n if (cleanUrl) return cleanUrl;\n }\n\n var href = $node.attr('href');\n if (href) {\n cleanUrl = clean$1(href);\n if (cleanUrl) return cleanUrl;\n }\n\n var value = $node.attr('value');\n if (value) {\n cleanUrl = clean$1(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return null;\n }\n};\n\n\n\n// def extract(self):\n// \"\"\"\n// # First, try to find the \"best\" image via the content.\n// # We'd rather not have to fetch each image and check dimensions,\n// # so try to do some analysis and determine them instead.\n// content = self.extractor.extract_content(return_type=\"node\")\n// imgs = content.xpath('.//img')\n// img_scores = defaultdict(int)\n// logger.debug('Scoring %d images from content', len(imgs))\n// for (i, img) in enumerate(imgs):\n// img_score = 0\n//\n// if not 'src' in img.attrib:\n// logger.debug('No src attribute found')\n// continue\n//\n// try:\n// parsed_img = urlparse(img.attrib['src'])\n// img_path = parsed_img.path.lower()\n// except ValueError:\n// logger.debug('ValueError getting img path.')\n// continue\n// logger.debug('Image path is %s', img_path)\n//\n// if constants.POSITIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Positive URL hints match. Adding 20.')\n// img_score += 20\n//\n// if constants.NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Negative URL hints match. Subtracting 20.')\n// img_score -= 20\n//\n// # Gifs are more often structure than photos\n// if img_path.endswith('gif'):\n// logger.debug('gif found. Subtracting 10.')\n// img_score -= 10\n//\n// # JPGs are more often photographs\n// if img_path.endswith('jpg'):\n// logger.debug('jpg found. Adding 10.')\n// img_score += 10\n//\n// # PNGs are neutral.\n//\n// # Alt attribute usually means non-presentational image.\n// if 'alt' in img.attrib and len(img.attrib['alt']) > 5:\n// logger.debug('alt attribute found. Adding 5.')\n// img_score += 5\n//\n// # Look through our parent and grandparent for figure-like\n// # container elements, give a bonus if we find them\n// parents = [img.getparent()]\n// if parents[0] is not None and parents[0].getparent() is not None:\n// parents.append(parents[0].getparent())\n// for p in parents:\n// if p.tag == 'figure':\n// logger.debug('Parent with <figure> tag found. Adding 25.')\n// img_score += 25\n//\n// p_sig = ' '.join([p.get('id', ''), p.get('class', '')])\n// if constants.PHOTO_HINTS_RE.search(p_sig):\n// logger.debug('Photo hints regex match. Adding 15.')\n// img_score += 15\n//\n// # Look at our immediate sibling and see if it looks like it's a\n// # caption. Bonus if so.\n// sibling = img.getnext()\n// if sibling is not None:\n// if sibling.tag == 'figcaption':\n// img_score += 25\n//\n// sib_sig = ' '.join([sibling.get('id', ''),\n// sibling.get('class', '')]).lower()\n// if 'caption' in sib_sig:\n// img_score += 15\n//\n// # Pull out width/height if they were set.\n// img_width = None\n// img_height = None\n// if 'width' in img.attrib:\n// try:\n// img_width = float(img.get('width'))\n// except ValueError:\n// pass\n// if 'height' in img.attrib:\n// try:\n// img_height = float(img.get('height'))\n// except ValueError:\n// pass\n//\n// # Penalty for skinny images\n// if img_width and img_width <= 50:\n// logger.debug('Skinny image found. Subtracting 50.')\n// img_score -= 50\n//\n// # Penalty for short images\n// if img_height and img_height <= 50:\n// # Wide, short images are more common than narrow, tall ones\n// logger.debug('Short image found. Subtracting 25.')\n// img_score -= 25\n//\n// if img_width and img_height and not 'sprite' in img_path:\n// area = img_width * img_height\n//\n// if area < 5000: # Smaller than 50x100\n// logger.debug('Image with small area found. Subtracting 100.')\n// img_score -= 100\n// else:\n// img_score += round(area/1000.0)\n//\n// # If the image is higher on the page than other images,\n// # it gets a bonus. Penalty if lower.\n// logger.debug('Adding page placement bonus of %d.', len(imgs)/2 - i)\n// img_score += len(imgs)/2 - i\n//\n// # Use the raw src here because we munged img_path for case\n// # insensitivity\n// logger.debug('Final score is %d.', img_score)\n// img_scores[img.attrib['src']] += img_score\n//\n// top_score = 0\n// top_url = None\n// for (url, score) in img_scores.items():\n// if score > top_score:\n// top_url = url\n// top_score = score\n//\n// if top_score > 0:\n// logger.debug('Using top score image from content. Score was %d', top_score)\n// return top_url\n//\n//\n// # If nothing else worked, check to see if there are any really\n// # probable nodes in the doc, like <link rel=\"image_src\" />.\n// logger.debug('Trying to find lead image in probable nodes')\n// for selector in constants.LEAD_IMAGE_URL_SELECTORS:\n// nodes = self.resource.extract_by_selector(selector)\n// for node in nodes:\n// clean_value = None\n// if node.attrib.get('src'):\n// clean_value = self.clean(node.attrib['src'])\n//\n// if not clean_value and node.attrib.get('href'):\n// clean_value = self.clean(node.attrib['href'])\n//\n// if not clean_value and node.attrib.get('value'):\n// clean_value = self.clean(node.attrib['value'])\n//\n// if clean_value:\n// logger.debug('Found lead image in probable nodes.')\n// logger.debug('Node was: %s', node)\n// return clean_value\n//\n// return None\n\nfunction scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n var similarity = new difflib.SequenceMatcher(null, articleUrl, href).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n var diffPercent = 1.0 - similarity;\n var diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n\nfunction scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n var score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n var linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n\nfunction scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n\nvar DIGIT_RE$2 = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nvar EXTRANEOUS_LINK_HINTS$1 = ['print', 'archive', 'comment', 'discuss', 'e-mail', 'email', 'share', 'reply', 'all', 'login', 'sign', 'single', 'adx', 'entry-unrelated'];\nvar EXTRANEOUS_LINK_HINTS_RE$1 = new RegExp(EXTRANEOUS_LINK_HINTS$1.join('|'), 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nvar NEXT_LINK_TEXT_RE$1 = new RegExp('(next|weiter|continue|>([^|]|$)|»([^|]|$))', 'i');\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nvar CAP_LINK_TEXT_RE$1 = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nvar PREV_LINK_TEXT_RE$1 = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\n\nfunction scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE$1.test(href)) {\n return -25;\n }\n\n return 0;\n}\n\nfunction makeSig$1($link) {\n return ($link.attr('class') || '') + ' ' + ($link.attr('id') || '');\n}\n\nfunction scoreByParents$1($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n var $parent = $link.parent();\n var positiveMatch = false;\n var negativeMatch = false;\n var score = 0;\n\n _Array$from(range(0, 4)).forEach(function () {\n if ($parent.length === 0) {\n return;\n }\n\n var parentData = makeSig$1($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (!negativeMatch && NEGATIVE_SCORE_RE.test(parentData) && EXTRANEOUS_LINK_HINTS_RE$1.test(parentData)) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n\nfunction scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE$1.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n\nfunction shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls) {\n // skip if we've already fetched this url\n if (previousUrls.find(function (url) {\n return href === url;\n }) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n var hostname = parsedUrl.hostname;\n\n var _URL$parse = URL.parse(href),\n linkHost = _URL$parse.hostname;\n\n // Domain mismatch.\n\n\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n var fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE$2.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE$1.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n\nfunction scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n\nfunction scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE$1.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n\nfunction scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE$1.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE$1.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n\nfunction makeBaseRegex(baseUrl) {\n return new RegExp('^' + baseUrl, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return (linkText || $link.text()) + ' ' + ($link.attr('class') || '') + ' ' + ($link.attr('id') || '');\n}\n\nfunction scoreLinks(_ref) {\n var links = _ref.links,\n articleUrl = _ref.articleUrl,\n baseUrl = _ref.baseUrl,\n parsedUrl = _ref.parsedUrl,\n $ = _ref.$,\n _ref$previousUrls = _ref.previousUrls,\n previousUrls = _ref$previousUrls === undefined ? [] : _ref$previousUrls;\n\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n var baseRegex = makeBaseRegex(baseUrl);\n var isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n var scoredPages = links.reduce(function (possiblePages, link) {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n var attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n var href = removeAnchor(attrs.href);\n var $link = $(link);\n var linkText = $link.text();\n\n if (!shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText: linkText,\n href: href\n };\n } else {\n possiblePages[href].linkText = possiblePages[href].linkText + '|' + linkText;\n }\n\n var possiblePage = possiblePages[href];\n var linkData = makeSig($link, linkText);\n var pageNum = pageNumFromUrl(href);\n\n var score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents$1($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return _Reflect$ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n\n// Looks for and returns next page url\n// for multi-page articles\nvar GenericNextPageUrlExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n url = _ref.url,\n parsedUrl = _ref.parsedUrl,\n _ref$previousUrls = _ref.previousUrls,\n previousUrls = _ref$previousUrls === undefined ? [] : _ref$previousUrls;\n\n parsedUrl = parsedUrl || URL.parse(url);\n\n var articleUrl = removeAnchor(url);\n var baseUrl = articleBaseUrl(url, parsedUrl);\n\n var links = $('a[href]').toArray();\n\n var scoredLinks = scoreLinks({\n links: links,\n articleUrl: articleUrl,\n baseUrl: baseUrl,\n parsedUrl: parsedUrl,\n $: $,\n previousUrls: previousUrls\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n var topPage = _Reflect$ownKeys(scoredLinks).reduce(function (acc, link) {\n var scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n }, { score: -100 });\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n }\n};\n\nvar CANONICAL_META_SELECTORS = ['og:url'];\n\nfunction parseDomain(url) {\n var parsedUrl = URL.parse(url);\n var hostname = parsedUrl.hostname;\n\n return hostname;\n}\n\nfunction result(url) {\n return {\n url: url,\n domain: parseDomain(url)\n };\n}\n\nvar GenericUrlExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n url = _ref.url,\n metaCache = _ref.metaCache;\n\n var $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n var href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n var metaUrl = extractFromMeta$$1($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n }\n};\n\nvar EXCERPT_META_SELECTORS = ['og:description', 'twitter:description'];\n\nfunction clean$2(content, $) {\n var maxLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nvar GenericExcerptExtractor = {\n extract: function extract(_ref) {\n var $ = _ref.$,\n content = _ref.content,\n metaCache = _ref.metaCache;\n\n var excerpt = extractFromMeta$$1($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean$2(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n var maxLength = 200;\n var shortContent = content.slice(0, maxLength * 5);\n return clean$2($(shortContent).text(), $, maxLength);\n }\n};\n\nvar GenericWordCountExtractor = {\n extract: function extract(_ref) {\n var content = _ref.content;\n\n var $ = cheerio.load(content);\n var $content = $('div').first();\n\n var text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n }\n};\n\nvar GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: function direction(_ref) {\n var title = _ref.title;\n return stringDirection.getDirection(title);\n },\n\n extract: function extract(options) {\n var html = options.html,\n $ = options.$;\n\n\n if (html && !$) {\n var loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n var title = this.title(options);\n var date_published = this.date_published(options);\n var author = this.author(options);\n var content = this.content(_extends({}, options, { title: title }));\n var lead_image_url = this.lead_image_url(_extends({}, options, { content: content }));\n var dek = this.dek(_extends({}, options, { content: content }));\n var next_page_url = this.next_page_url(options);\n var excerpt = this.excerpt(_extends({}, options, { content: content }));\n var word_count = this.word_count(_extends({}, options, { content: content }));\n var direction = this.direction({ title: title });\n\n var _url_and_domain = this.url_and_domain(options),\n url = _url_and_domain.url,\n domain = _url_and_domain.domain;\n\n return {\n title: title,\n author: author,\n date_published: date_published || null,\n dek: dek,\n lead_image_url: lead_image_url,\n content: content,\n next_page_url: next_page_url,\n url: url,\n domain: domain,\n excerpt: excerpt,\n word_count: word_count,\n direction: direction\n };\n }\n};\n\nvar Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor\n};\n\nfunction detectByHtml($) {\n var selector = _Reflect$ownKeys(Detectors).find(function (s) {\n return $(s).length > 0;\n });\n\n return Detectors[selector];\n}\n\nfunction getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n var _parsedUrl = parsedUrl,\n hostname = _parsedUrl.hostname;\n\n var baseDomain = hostname.split('.').slice(-2).join('.');\n\n return Extractors[hostname] || Extractors[baseDomain] || detectByHtml($) || GenericExtractor;\n}\n\n// Remove elements by an array of selectors\nfunction cleanBySelectors($content, $, _ref) {\n var clean = _ref.clean;\n\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nfunction transformElements($content, $, _ref2) {\n var transforms = _ref2.transforms;\n\n if (!transforms) return $content;\n\n _Reflect$ownKeys(transforms).forEach(function (key) {\n var $matches = $(key, $content);\n var value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each(function (index, node) {\n convertNodeTo$$1($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each(function (index, node) {\n var result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo$$1($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml) {\n return selectors.find(function (selector) {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce(function (acc, s) {\n return acc && $(s).length > 0;\n }, true);\n }\n\n var _selector = _slicedToArray(selector, 2),\n s = _selector[0],\n attr = _selector[1];\n\n return $(s).length === 1 && $(s).attr(attr) && $(s).attr(attr).trim() !== '';\n }\n\n return $(selector).length === 1 && $(selector).text().trim() !== '';\n });\n}\n\nfunction select(opts) {\n var $ = opts.$,\n type = opts.type,\n extractionOpts = opts.extractionOpts,\n _opts$extractHtml = opts.extractHtml,\n extractHtml = _opts$extractHtml === undefined ? false : _opts$extractHtml;\n // Skip if there's not extraction for this type\n\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n var selectors = extractionOpts.selectors,\n _extractionOpts$defau = extractionOpts.defaultCleaner,\n defaultCleaner = _extractionOpts$defau === undefined ? true : _extractionOpts$defau;\n\n\n var matchingSelector = findMatchingSelector($, selectors, extractHtml);\n\n if (!matchingSelector) return null;\n\n // Declaring result; will contain either\n // text or html, which will be cleaned\n // by the appropriate cleaner type\n\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n var $content = void 0;\n if (extractHtml) {\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n (function () {\n $content = $(matchingSelector.join(','));\n var $wrapper = $('<div></div>');\n $content.each(function (index, element) {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n })();\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n\n $content = transformElements($content, $, extractionOpts);\n $content = cleanBySelectors($content, $, extractionOpts);\n\n $content = Cleaners[type]($content, _extends({}, opts, { defaultCleaner: defaultCleaner }));\n\n return $.html($content);\n }\n\n var result = void 0;\n\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n var _matchingSelector = _slicedToArray(matchingSelector, 2),\n selector = _matchingSelector[0],\n attr = _matchingSelector[1];\n\n result = $(selector).attr(attr).trim();\n } else {\n var $node = $(matchingSelector);\n\n $node = cleanBySelectors($node, $, extractionOpts);\n $node = transformElements($node, $, extractionOpts);\n\n result = $node.text().trim();\n }\n\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner) {\n return Cleaners[type](result, _extends({}, opts, extractionOpts));\n }\n\n return result;\n}\n\nfunction extractResult(opts) {\n var type = opts.type,\n extractor = opts.extractor,\n _opts$fallback = opts.fallback,\n fallback = _opts$fallback === undefined ? true : _opts$fallback;\n\n\n var result = select(_extends({}, opts, { extractionOpts: extractor[type] }));\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nvar RootExtractor = {\n extract: function extract() {\n var extractor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GenericExtractor;\n var opts = arguments[1];\n var _opts = opts,\n contentOnly = _opts.contentOnly,\n extractedTitle = _opts.extractedTitle;\n // This is the generic extractor. Run its extract method\n\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = _extends({}, opts, {\n extractor: extractor\n });\n\n if (contentOnly) {\n var _content = extractResult(_extends({}, opts, { type: 'content', extractHtml: true, title: extractedTitle\n }));\n return {\n content: _content\n };\n }\n var title = extractResult(_extends({}, opts, { type: 'title' }));\n var date_published = extractResult(_extends({}, opts, { type: 'date_published' }));\n var author = extractResult(_extends({}, opts, { type: 'author' }));\n var next_page_url = extractResult(_extends({}, opts, { type: 'next_page_url' }));\n var content = extractResult(_extends({}, opts, { type: 'content', extractHtml: true, title: title\n }));\n var lead_image_url = extractResult(_extends({}, opts, { type: 'lead_image_url', content: content }));\n var excerpt = extractResult(_extends({}, opts, { type: 'excerpt', content: content }));\n var dek = extractResult(_extends({}, opts, { type: 'dek', content: content, excerpt: excerpt }));\n var word_count = extractResult(_extends({}, opts, { type: 'word_count', content: content }));\n var direction = extractResult(_extends({}, opts, { type: 'direction', title: title }));\n\n var _ref3 = extractResult(_extends({}, opts, { type: 'url_and_domain' })) || { url: null, domain: null },\n url = _ref3.url,\n domain = _ref3.domain;\n\n return {\n title: title,\n content: content,\n author: author,\n date_published: date_published,\n lead_image_url: lead_image_url,\n dek: dek,\n next_page_url: next_page_url,\n url: url,\n domain: domain,\n excerpt: excerpt,\n word_count: word_count,\n direction: direction\n };\n }\n};\n\nvar collectAllPages = (function () {\n var _ref = _asyncToGenerator(_regeneratorRuntime.mark(function _callee(_ref2) {\n var next_page_url = _ref2.next_page_url,\n html = _ref2.html,\n $ = _ref2.$,\n metaCache = _ref2.metaCache,\n result = _ref2.result,\n Extractor = _ref2.Extractor,\n title = _ref2.title,\n url = _ref2.url;\n var pages, previousUrls, extractorOpts, nextPageResult, word_count;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // At this point, we've fetched just the first page\n pages = 1;\n previousUrls = [removeAnchor(url)];\n\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n\n case 2:\n if (!(next_page_url && pages < 26)) {\n _context.next = 15;\n break;\n }\n\n pages += 1;\n _context.next = 6;\n return Resource.create(next_page_url);\n\n case 6:\n $ = _context.sent;\n\n html = $.html();\n\n extractorOpts = {\n url: next_page_url,\n html: html,\n $: $,\n metaCache: metaCache,\n contentOnly: true,\n extractedTitle: title,\n previousUrls: previousUrls\n };\n nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n\n previousUrls.push(next_page_url);\n result = _extends({}, result, {\n content: result.content + '<hr><h4>Page ' + pages + '</h4>' + nextPageResult.content\n });\n\n next_page_url = nextPageResult.next_page_url;\n _context.next = 2;\n break;\n\n case 15:\n word_count = GenericExtractor.word_count({ content: '<div>' + result.content + '</div>' });\n return _context.abrupt('return', _extends({}, result, {\n total_pages: pages,\n pages_rendered: pages,\n word_count: word_count\n }));\n\n case 17:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function collectAllPages(_x) {\n return _ref.apply(this, arguments);\n }\n\n return collectAllPages;\n})();\n\nvar Mercury = {\n parse: function parse(url, html) {\n var _this = this;\n\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return _asyncToGenerator(_regeneratorRuntime.mark(function _callee() {\n var _opts$fetchAllPages, fetchAllPages, _opts$fallback, fallback, parsedUrl, $, Extractor, metaCache, result, _result, title, next_page_url;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _opts$fetchAllPages = opts.fetchAllPages, fetchAllPages = _opts$fetchAllPages === undefined ? true : _opts$fetchAllPages, _opts$fallback = opts.fallback, fallback = _opts$fallback === undefined ? true : _opts$fallback;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n parsedUrl = URL.parse(url);\n\n if (validateUrl(parsedUrl)) {\n _context.next = 5;\n break;\n }\n\n return _context.abrupt('return', Errors.badUrl);\n\n case 5:\n _context.next = 7;\n return Resource.create(url, html, parsedUrl);\n\n case 7:\n $ = _context.sent;\n Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // If we found an error creating the resource, return that error\n\n if (!$.failed) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', $);\n\n case 11:\n\n // if html still has not been set (i.e., url passed to Mercury.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n metaCache = $('meta').map(function (_, node) {\n return $(node).attr('name');\n }).toArray();\n result = RootExtractor.extract(Extractor, {\n url: url,\n html: html,\n $: $,\n metaCache: metaCache,\n parsedUrl: parsedUrl,\n fallback: fallback\n });\n _result = result, title = _result.title, next_page_url = _result.next_page_url;\n\n // Fetch more pages if next_page_url found\n\n if (!(fetchAllPages && next_page_url)) {\n _context.next = 21;\n break;\n }\n\n _context.next = 18;\n return collectAllPages({\n Extractor: Extractor,\n next_page_url: next_page_url,\n html: html,\n $: $,\n metaCache: metaCache,\n result: result,\n title: title,\n url: url\n });\n\n case 18:\n result = _context.sent;\n _context.next = 22;\n break;\n\n case 21:\n result = _extends({}, result, {\n total_pages: 1,\n rendered_pages: 1\n });\n\n case 22:\n return _context.abrupt('return', result);\n\n case 23:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, _this);\n }))();\n },\n\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n fetchResource: function fetchResource(url) {\n var _this2 = this;\n\n return _asyncToGenerator(_regeneratorRuntime.mark(function _callee2() {\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return Resource.create(url);\n\n case 2:\n return _context2.abrupt('return', _context2.sent);\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, _this2);\n }))();\n }\n};\n\nmodule.exports = Mercury;\n//# sourceMappingURL=mercury.js.map\n","export default function insertValues(strings, ...values) {\n if (values.length) {\n return strings.reduce((result, part, idx) => {\n let value = values[idx];\n\n if (value && typeof value.toString === 'function') {\n value = value.toString();\n } else {\n value = '';\n }\n\n return result + part + value;\n }, '');\n }\n\n return strings.join('');\n}\n","import insertValues from './insert-values';\n\nconst bodyPattern = /^\\n([\\s\\S]+)\\s{2}$/gm;\nconst trailingWhitespace = /\\s+$/;\n\nexport default function template(strings, ...values) {\n const compiled = insertValues(strings, ...values);\n let [body] = compiled.match(bodyPattern) || [];\n let indentLevel = /^\\s{0,4}(.+)$/g;\n\n if (!body) {\n body = compiled;\n indentLevel = /^\\s{0,2}(.+)$/g;\n }\n\n return body.split('\\n')\n .slice(1)\n .map((line) => {\n line = line.replace(indentLevel, '$1');\n\n if (trailingWhitespace.test(line)) {\n line = line.replace(trailingWhitespace, '');\n }\n\n return line;\n })\n .join('\\n');\n}\n","import template from './index';\n\nexport default function (hostname, name) {\n return template`\n export const ${name} = {\n domain: '${hostname}',\n\n title: {\n selectors: [\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ]\n },\n }\n `;\n}\n","import template from './index';\n\nconst IGNORE = [\n 'url',\n 'domain',\n 'content',\n 'word_count',\n 'next_page_url',\n 'excerpt',\n 'direction',\n 'total_pages',\n 'rendered_pages',\n];\n\nfunction testFor(key, value, dir) {\n if (IGNORE.find(k => k === key)) return '';\n\n return template`\n it('returns the ${key}', async () => {\n // To pass this test, fill out the ${key} selector\n // in ${dir}/index.js.\n const { ${key} } = await result\n\n // Update these values with the expected values from\n // the article.\n assert.equal(${key}, ${value ? `\\`${value}\\`` : \"''\"})\n });\n `;\n}\n\nexport default function (file, url, dir, result, name) {\n return template`\n import assert from 'assert';\n import fs from 'fs';\n import URL from 'url';\n import cheerio from 'cheerio';\n\n import Mercury from 'mercury';\n import getExtractor from 'extractors/get-extractor';\n import { excerptContent } from 'utils/text';\n\n describe('${name}', () => {\n describe('initial test case', () => {\n let result;\n let url;\n beforeAll(() => {\n url =\n '${url}';\n const html =\n fs.readFileSync('${file}');\n result =\n Mercury.parse(url, html, { fallback: false });\n });\n\n it('is selected properly', () => {\n // This test should be passing by default.\n // It sanity checks that the correct parser\n // is being selected for URLs from this domain\n const extractor = getExtractor(url);\n assert.equal(extractor.domain, URL.parse(url).hostname)\n })\n\n ${Reflect.ownKeys(result).map(k => testFor(k, result[k], dir)).join('\\n\\n')}\n\n it('returns the content', async () => {\n // To pass this test, fill out the content selector\n // in ${dir}/index.js.\n // You may also want to make use of the clean and transform\n // options.\n const { content } = await result;\n\n const $ = cheerio.load(content || '');\n\n const first13 = excerptContent($('*').first().text(), 13)\n\n // Update these values with the expected values from\n // the article.\n assert.equal(first13, 'Add the first 13 words of the article here');\n });\n });\n });\n `;\n}\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable no-use-before-define */\n/* eslint-disable no-console */\nimport fs from 'fs';\nimport URL from 'url';\nimport inquirer from 'inquirer';\nimport ora from 'ora';\nimport { exec } from 'child_process';\n\nimport {\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\nimport Mercury from '../dist/mercury';\nimport extractorTemplate from './templates/custom-extractor';\nimport extractorTestTemplate from './templates/custom-extractor-test';\n\nconst questions = [\n {\n type: 'input',\n name: 'website',\n message: 'Paste a url to an article you\\'d like to create or extend a parser for:',\n validate(value) {\n const { hostname } = URL.parse(value);\n if (hostname) return true;\n\n return false;\n },\n },\n];\nlet spinner;\n\nfunction confirm(fn, args, msg, newParser) {\n spinner = ora({ text: msg });\n spinner.start();\n const result = fn(...args);\n\n if (result && result.then) {\n result.then(r => savePage(r, args, newParser));\n } else {\n spinner.succeed();\n }\n\n return result;\n}\n\nfunction confirmCreateDir(dir, msg) {\n if (!fs.existsSync(dir)) {\n confirm(fs.mkdirSync, [dir], msg);\n }\n}\n\nfunction getDir(url) {\n const { hostname } = URL.parse(url);\n return `./src/extractors/custom/${hostname}`;\n}\n\nfunction scaffoldCustomParser(url) {\n const dir = getDir(url);\n const { hostname } = URL.parse(url);\n let newParser = false;\n\n if (!fs.existsSync(dir)) {\n newParser = true;\n confirmCreateDir(dir, `Creating ${hostname} directory`);\n confirmCreateDir(`./fixtures/${hostname}`, 'Creating fixtures directory');\n }\n\n confirm(Mercury.fetchResource, [url], 'Fetching fixture', newParser);\n}\n\n// if has arg, just assume that arg is a url and skip prmopt\nconst urlArg = process.argv[2];\nif (urlArg) {\n scaffoldCustomParser(urlArg);\n} else {\n inquirer.prompt(questions).then((answers) => {\n scaffoldCustomParser(answers.website);\n });\n}\n\nfunction generateScaffold(url, file, result) {\n const { hostname } = URL.parse(url);\n const extractor = extractorTemplate(hostname, extractorName(hostname));\n const extractorTest =\n extractorTestTemplate(\n file, url, getDir(url), result, extractorName(hostname)\n );\n\n fs.writeFileSync(`${getDir(url)}/index.js`, extractor);\n fs.writeFileSync(`${getDir(url)}/index.test.js`, extractorTest);\n fs.appendFileSync(\n './src/extractors/custom/index.js',\n exportString(url),\n );\n exec(`npm run lint-fix-quiet -- ${getDir(url)}/*.js`);\n}\n\nfunction savePage($, [url], newParser) {\n const { hostname } = URL.parse(url);\n\n spinner.succeed();\n\n const filename = new Date().getTime();\n const file = `./fixtures/${hostname}/${filename}.html`;\n // fix http(s) relative links:\n makeLinksAbsolute($('*').first(), $, url);\n $('[src], [href]').each((index, node) => {\n const $node = $(node);\n const link = $node.attr('src');\n if (link && link.slice(0, 2) === '//') {\n $node.attr('src', `http:${link}`);\n }\n });\n const html = stripJunkTags($('*').first(), $, ['script']).html();\n\n fs.writeFileSync(file, html);\n\n Mercury.parse(url, html).then((result) => {\n if (newParser) {\n confirm(generateScaffold, [url, file, result], 'Generating parser and tests');\n console.log(`Your custom site extractor has been set up. To get started building it, run\n yarn watch:test -- ${hostname}\n -- OR --\n npm run watch:test -- ${hostname}`);\n } else {\n console.log(`\n It looks like you already have a custom parser for this url.\n The page you linked to has been added to ${file}. Copy and paste\n the following code to use that page in your tests:\n const html = fs.readFileSync('${file}');`);\n }\n });\n}\n\nfunction exportString(url) {\n const { hostname } = URL.parse(url);\n return `export * from './${hostname}';`;\n}\n\nfunction extractorName(hostname) {\n const name = hostname\n .split('.')\n .map(w => `${w.charAt(0).toUpperCase()}${w.slice(1)}`)\n .join('');\n return `${name}Extractor`;\n}\n"],"names":["SPACER_RE","RegExp","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","REMOVE_ATTRS","REMOVE_ATTR_SELECTORS","map","selector","REMOVE_ATTR_LIST","join","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","REMOVE_EMPTY_TAGS","REMOVE_EMPTY_SELECTORS","tag","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","IS_WP_SELECTOR","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","brsToPs","$","collapsing","each","index","element","$element","nextElement","next","get","tagName","toLowerCase","remove","paragraphize","node","br","$node","sibling","nextSibling","p","test","appendTo","replaceWith","convertDivs","div","$div","convertable","children","length","convertSpans","span","$span","parents","convertNodeTo","attrs","getAttrs","attribString","key","html","browser","text","contents","cleanForHeight","$img","height","parseInt","attr","width","removeAttr","removeSpacers","stripJunkTags","article","tags","not","removeAllButWhitelist","$article","find","reduce","acc","removeClass","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","READABILITY_ASSET","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","DIGIT_RE","BR_TAGS_RE","BR_TAG_RE","UNLIKELY_RE","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","HTML_OR_BODY_RE","getWeight","classes","id","score","getScore","parseFloat","scoreCommas","match","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","trim","slice","setScore","addScore","amount","getOrInitScore","e","addToParent","parent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","NORMALIZE_RE","normalizeSpaces","replace","PAGE_IN_HREF_RE","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","isGoodSegment","segment","firstSegmentHasLetters","goodSegment","SENTENCE_END_RE","hasSentenceEnd","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","removeUnlessContent","weight","hasClass","content","pCount","inputCount","contentLength","imgCount","nodeIsList","previousNode","prev","scriptCount","absolutize","rootUrl","$content","_","url","absoluteUrl","URL","resolve","makeLinksAbsolute","forEach","totalTextLength","linkText","linkLength","isGoodNode","maxChildren","withinComment","stripTags","cleanText","toArray","commentParent","nodeClass","class","classAndId","includes","undefined","attribs","attributes","name","value","setAttr","val","setAttribute","setAttrs","removeAttribute","ex","_interopDefault","require$$22","require$$21","require$$20","require$$19","require$$18","require$$17","require$$16","require$$15","require$$14","require$$13","require$$12","require$$11","require$$10","require$$9","require$$8","require$$7","require$$6","require$$5","require$$4","require$$3","require$$2","require$$1","require$$0","regexList","re","matchRe","exec","matches","pageNum","split","parsed","parse","parsedUrl","protocol","host","path","reverse","rawSegment","_segment$split2","_slicedToArray","_segment$split","possibleSegment","fileExt","push","cleanedSegments","arguments","words","str","iconv","encodingExists","testEncode","encoding","range","_regeneratorRuntime","mark","wrap","_context","start","end","stop","_marked","_ref","hostname","badUrl","error","messages","cheerio","BAD_CONTENT_TYPES","options","reject","request","err","response","body","statusMessage","statusCode","parseNon2xx","headers","contentType","_response$headers","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","_asyncToGenerator","_ref3","encodeURI","href","_extends","REQUEST_HEADERS","timeout","FETCH_TIMEOUT","jar","gzip","followAllRedirects","sent","validateResponse","abrupt","t0","Errors","_callee","_x2","_x3","apply","from","to","convertMetaProp","convertNodeTo$$1","brsToPs$$1","_Reflect$ownKeys","img","_URL$parse","concat","_toConsumableArray","addClass","$hOnes","_defineProperty","$p","NON_TOP_CANDIDATE_TAGS$1","PHOTO_HINTS$1","POSITIVE_SCORE_HINTS$1","NEGATIVE_SCORE_HINTS$1","UNLIKELY_CANDIDATES_BLACKLIST$1","UNLIKELY_CANDIDATES_WHITELIST$1","POSITIVE_SCORE_RE$1","NEGATIVE_SCORE_RE$1","PHOTO_HINTS_RE$1","READABILITY_ASSET$1","getOrInitScore$$1","addScore$$1","scoreNode$$1","addToParent$$1","_$node$get","PARAGRAPH_SCORE_TAGS$1","CHILD_CONTENT_TAGS$1","BAD_TAGS$1","convertSpans$1","HNEWS_CONTENT_SELECTORS$1","parentSelector","_ref2","childSelector","NON_TOP_CANDIDATE_TAGS_RE$1","header","$header","prevAll","title","metaNames","cachedNames","filter","indexOf","_step","type","nodes","values","cleanTags$$1","metaValue","v","_getIterator","foundNames","_iteratorNormalCompletion","_iterator","done","_loop","_typeof","_ret","_didIteratorError","_iteratorError","return","withinComment$$1","selectors","textOnly","IS_LINK","IS_IMAGE","root","isComment","TAGS_TO_REMOVE","cleanComments","create","preparedResponse","validResponse","result","failed","_this","generateDoc","encodeDoc","normalizeMetaTags","convertLazyLoadedImages","clean","getEncoding","decode","load","decodedContent","metaContentType","properEncoding","extractor","domains","domain","supportedDomains","merge","transforms","noscript","author","date_published","h1","$children","dek","defaultCleaner","prepend","$tweetContainer","tweets","s","src","lead_image_url","next_page_url","excerpt","timezone","h2","has","youtubeId","JSON","data","sources","iframe","decodeURIComponent","ytRe","thumb","_thumb$match2","_thumb$match","empty","$caption","figure","$text","videoId","imgHtml","format","$imgSrc","$imageParent","$dataAttrContainer","imgPath2","imgPath1","$figure","WwwMsnbcComExtractor","_WwwMsnbcComExtractor","BloggerExtractor","NYMagExtractor","WikipediaExtractor","TwitterExtractor","NYTimesExtractor","TheAtlanticExtractor","NewYorkerExtractor","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","BroadwayWorldExtractor","ApartmentTherapyExtractor","MediumExtractor","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","WwwAolComExtractor","WwwYoutubeComExtractor","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","NewsNationalgeographicComExtractor","WwwNationalgeographicComExtractor","WwwLatimesComExtractor","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwCinemablendComExtractor","WwwTodayComExtractor","WwwHowtogeekComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","FusionNetExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwNjComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","_Object$keys","CustomExtractors","mergeSupportedDomains","months","timestamp1","timestamp2","timestamp3","allMonths","CLEAN_AUTHOR_RE","leadImageUrl","validUrl","isWebUri","excerptContent","TEXT_LINK_RE","dekText","dateString","SPLIT_DATE_STRING","TIME_MERIDIAN_DOTS_RE","TIME_MERIDIAN_SPACE_RE","CLEAN_DATE_STRING_RE","TIME_WITH_OFFSET_RE","moment","tz","parseFormat","MS_DATE_STRING","SEC_DATE_STRING","toISOString","createDate","date","isValid","cleanDateString","_ref$cleanConditional","cleanConditionally","_ref$title","_ref$url","_ref$defaultCleaner","rewriteTopLevel$$1","cleanImages","makeLinksAbsolute$$1","markToKeep","cleanHOnes$$1","cleanHeaders","removeEmpty","cleanAttributes$$1","TITLE_SPLITTERS_RE","resolveSplitTitle","splitTitle","titleText","termCounts","_Reflect$ownKeys$redu2","_Reflect$ownKeys$redu","maxTerm","termCount","splitEnds","longestEnd","DOMAIN_ENDINGS_RE","wuzzy","levenshtein","startSlug","nakedDomain","startSlugRatio","endSlug","endSlugRatio","extractBreadcrumbTitle","newTitle","cleanDomainFromTitle","cleanAuthor","clean$1","cleanDek","cleanDatePublished","extractCleanNode","cleanTitle$$1","opts","stripUnlikelyCandidates","convertToParagraphs$$1","scoreContent$$1","findTopCandidate$$1","defaultOpts","extract","getContentNode","nodeIsSufficient","cleanAndReturnNode","k","extractBestNode","metaCache","extractFromMeta$$1","STRONG_TITLE_META_TAGS","extractFromSelectors$$1","STRONG_TITLE_SELECTORS","WEAK_TITLE_META_TAGS","WEAK_TITLE_SELECTORS","bylineRe","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","BYLINE_SELECTORS_RE","_ref4","regex","abbrevMonthsStr","datePublished","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","extractFromUrl","DATE_PUBLISHED_URL_RES","POSITIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","$figParent","$gParent","getSig","area","round","$imgs","LEAD_IMAGE_URL_META_TAGS","imageUrl","cleanUrl","imgs","scoreImageUrl","scoreAttr","scoreByParents","scoreBySibling","scoreByDimensions","scoreByPosition","imgScores","topUrl","LEAD_IMAGE_URL_SELECTORS","articleUrl","SequenceMatcher","ratio","similarity","diffPercent","diffModifier","linkTextAsNum","isWp","EXTRANEOUS_LINK_HINTS$1","EXTRANEOUS_LINK_HINTS_RE$1","$link","_Array$from","makeSig$1","positiveMatch","PAGE_RE","parentData","negativeMatch","linkData","PREV_LINK_TEXT_RE$1","baseUrl","previousUrls","linkHost","DIGIT_RE$2","fragment","baseRegex","NEXT_LINK_TEXT_RE$1","CAP_LINK_TEXT_RE$1","links","_ref$previousUrls","makeBaseRegex","isWordpress","possiblePages","link","removeAnchor","shouldScore","makeSig","pageNumFromUrl","scoreBaseUrl","scoreNextLinkText","scoreCapLinks","scorePrevLink","scoreByParents$1","scoreExtraneousLinks","scorePageInLink","scoreLinkText","scoreSimilarity","possiblePage","scoredPages","articleBaseUrl","scoreLinks","scoredLinks","scoredLink","topPage","parseDomain","$canonical","CANONICAL_META_SELECTORS","metaUrl","maxLength","ellipse","EXCERPT_META_SELECTORS","shortContent","GenericTitleExtractor","GenericDatePublishedExtractor","GenericAuthorExtractor","GenericContentExtractor","bind","GenericLeadImageUrlExtractor","GenericDekExtractor","GenericNextPageUrlExtractor","url_and_domain","GenericUrlExtractor","GenericExcerptExtractor","word_count","GenericWordCountExtractor","direction","getDirection","loaded","_url_and_domain","Detectors","_parsedUrl","Extractors","baseDomain","detectByHtml","GenericExtractor","$matches","extractHtml","Array","isArray","_selector","extractionOpts","_opts$extractHtml","_extractionOpts$defau","findMatchingSelector","matchingSelector","$wrapper","transformElements","cleanBySelectors","Cleaners","_matchingSelector","_opts$fallback","fallback","select","contentOnly","_opts","extractedTitle","extractResult","_content","Extractor","extractorOpts","nextPageResult","pages","RootExtractor","total_pages","pages_rendered","_x","fetchAllPages","_result","_opts$fetchAllPages","window","location","validateUrl","getExtractor","rendered_pages","fetchResource","_context2","_callee2","_this2","Mercury","insertValues","strings","part","idx","toString","bodyPattern","trailingWhitespace","template","compiled","indentLevel","line","IGNORE","testFor","dir","file","questions","spinner","confirm","fn","args","msg","newParser","ora","then","savePage","r","succeed","confirmCreateDir","fs","existsSync","mkdirSync","getDir","scaffoldCustomParser","urlArg","process","argv","prompt","answers","website","generateScaffold","extractorTemplate","extractorName","extractorTest","extractorTestTemplate","writeFileSync","appendFileSync","exportString","filename","Date","getTime","log","w","charAt","toUpperCase"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"generate-custom-parser.js","sources":["../src/utils/dom/constants.js","../src/utils/dom/strip-junk-tags.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/score-commas.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/has-sentence-end.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/strip-tags.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/index.js","../scripts/templates/insert-values.js","../scripts/templates/index.js","../scripts/templates/custom-extractor.js","../scripts/templates/custom-extractor-test.js","../scripts/generate-custom-parser.js"],"sourcesContent":["// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","// DOM manipulation\nexport {\n default as stripUnlikelyCandidates,\n} from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export default function insertValues(strings, ...values) {\n if (values.length) {\n return strings.reduce((result, part, idx) => {\n let value = values[idx];\n\n if (value && typeof value.toString === 'function') {\n value = value.toString();\n } else {\n value = '';\n }\n\n return result + part + value;\n }, '');\n }\n\n return strings.join('');\n}\n","import insertValues from './insert-values';\n\nconst bodyPattern = /^\\n([\\s\\S]+)\\s{2}$/gm;\nconst trailingWhitespace = /\\s+$/;\n\nexport default function template(strings, ...values) {\n const compiled = insertValues(strings, ...values);\n let [body] = compiled.match(bodyPattern) || [];\n let indentLevel = /^\\s{0,4}(.+)$/g;\n\n if (!body) {\n body = compiled;\n indentLevel = /^\\s{0,2}(.+)$/g;\n }\n\n return body\n .split('\\n')\n .slice(1)\n .map(line => {\n line = line.replace(indentLevel, '$1');\n\n if (trailingWhitespace.test(line)) {\n line = line.replace(trailingWhitespace, '');\n }\n\n return line;\n })\n .join('\\n');\n}\n","import template from './index';\n\nexport default function(hostname, name) {\n return template`\n export const ${name} = {\n domain: '${hostname}',\n\n title: {\n selectors: [\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ]\n },\n }\n `;\n}\n","import template from './index';\n\nconst IGNORE = [\n 'url',\n 'domain',\n 'content',\n 'word_count',\n 'next_page_url',\n 'excerpt',\n 'direction',\n 'total_pages',\n 'rendered_pages',\n];\n\nfunction testFor(key, value, dir) {\n if (IGNORE.find(k => k === key)) return '';\n\n return template`\n it('returns the ${key}', async () => {\n // To pass this test, fill out the ${key} selector\n // in ${dir}/index.js.\n const { ${key} } = await result\n\n // Update these values with the expected values from\n // the article.\n assert.equal(${key}, ${value ? `\\`${value}\\`` : \"''\"})\n });\n `;\n}\n\nexport default function(file, url, dir, result, name) {\n return template`\n import assert from 'assert';\n import URL from 'url';\n import cheerio from 'cheerio';\n\n import Parser from 'mercury';\n import getExtractor from 'extractors/get-extractor';\n import { excerptContent } from 'utils/text';\n\n const fs = require('fs');\n\n describe('${name}', () => {\n describe('initial test case', () => {\n let result;\n let url;\n beforeAll(() => {\n url =\n '${url}';\n const html =\n fs.readFileSync('${file}');\n result =\n Parser.parse(url, { html, fallback: false });\n });\n\n it('is selected properly', () => {\n // This test should be passing by default.\n // It sanity checks that the correct parser\n // is being selected for URLs from this domain\n const extractor = getExtractor(url);\n assert.equal(extractor.domain, URL.parse(url).hostname)\n })\n\n ${Reflect.ownKeys(result)\n .map(k => testFor(k, result[k], dir))\n .join('\\n\\n')}\n\n it('returns the content', async () => {\n // To pass this test, fill out the content selector\n // in ${dir}/index.js.\n // You may also want to make use of the clean and transform\n // options.\n const { content } = await result;\n\n const $ = cheerio.load(content || '');\n\n const first13 = excerptContent($('*').first().text(), 13)\n\n // Update these values with the expected values from\n // the article.\n assert.equal(first13, 'Add the first 13 words of the article here');\n });\n });\n });\n `;\n}\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable no-use-before-define */\n/* eslint-disable no-console */\nimport fs from 'fs';\nimport URL from 'url';\nimport inquirer from 'inquirer';\nimport ora from 'ora';\nimport { exec } from 'child_process';\n\nimport { stripJunkTags, makeLinksAbsolute } from 'utils/dom';\nimport Parser from '../dist/mercury';\nimport extractorTemplate from './templates/custom-extractor';\nimport extractorTestTemplate from './templates/custom-extractor-test';\n\nconst questions = [\n {\n type: 'input',\n name: 'website',\n message:\n \"Paste a url to an article you'd like to create or extend a parser for:\",\n validate(value) {\n const { hostname } = URL.parse(value);\n if (hostname) return true;\n\n return false;\n },\n },\n];\nlet spinner;\n\nfunction confirm(fn, args, msg, newParser) {\n spinner = ora({ text: msg });\n spinner.start();\n const result = fn(...args);\n\n if (result && result.then) {\n result.then(r => savePage(r, args, newParser));\n } else {\n spinner.succeed();\n }\n\n return result;\n}\n\nfunction confirmCreateDir(dir, msg) {\n if (!fs.existsSync(dir)) {\n confirm(fs.mkdirSync, [dir], msg);\n }\n}\n\nfunction getDir(url) {\n const { hostname } = URL.parse(url);\n return `./src/extractors/custom/${hostname}`;\n}\n\nfunction scaffoldCustomParser(url) {\n const dir = getDir(url);\n const { hostname } = URL.parse(url);\n let newParser = false;\n\n if (!fs.existsSync(dir)) {\n newParser = true;\n confirmCreateDir(dir, `Creating ${hostname} directory`);\n confirmCreateDir(`./fixtures/${hostname}`, 'Creating fixtures directory');\n }\n\n confirm(Parser.fetchResource, [url], 'Fetching fixture', newParser);\n}\n\n// if has arg, just assume that arg is a url and skip prmopt\nconst urlArg = process.argv[2];\nif (urlArg) {\n scaffoldCustomParser(urlArg);\n} else {\n inquirer.prompt(questions).then(answers => {\n scaffoldCustomParser(answers.website);\n });\n}\n\nfunction generateScaffold(url, file, result) {\n const { hostname } = URL.parse(url);\n const extractor = extractorTemplate(hostname, extractorName(hostname));\n const extractorTest = extractorTestTemplate(\n file,\n url,\n getDir(url),\n result,\n extractorName(hostname)\n );\n\n fs.writeFileSync(`${getDir(url)}/index.js`, extractor);\n fs.writeFileSync(`${getDir(url)}/index.test.js`, extractorTest);\n fs.appendFileSync('./src/extractors/custom/index.js', exportString(url));\n exec(`npm run lint-fix-quiet -- ${getDir(url)}/*.js`);\n}\n\nfunction savePage($, [url], newParser) {\n const { hostname } = URL.parse(url);\n\n spinner.succeed();\n\n const filename = new Date().getTime();\n const file = `./fixtures/${hostname}/${filename}.html`;\n // fix http(s) relative links:\n makeLinksAbsolute($('*').first(), $, url);\n $('[src], [href]').each((index, node) => {\n const $node = $(node);\n const link = $node.attr('src');\n if (link && link.slice(0, 2) === '//') {\n $node.attr('src', `http:${link}`);\n }\n });\n const html = stripJunkTags($('*').first(), $, ['script']).html();\n\n fs.writeFileSync(file, html);\n\n Parser.parse(url, { html }).then(result => {\n if (newParser) {\n confirm(\n generateScaffold,\n [url, file, result],\n 'Generating parser and tests'\n );\n console.log(`Your custom site extractor has been set up. To get started building it, run\n yarn watch:test -- ${hostname}\n -- OR --\n npm run watch:test -- ${hostname}`);\n } else {\n console.log(`\n It looks like you already have a custom parser for this url.\n The page you linked to has been added to ${file}. Copy and paste\n the following code to use that page in your tests:\n const html = fs.readFileSync('${file}');`);\n }\n });\n}\n\nfunction exportString(url) {\n const { hostname } = URL.parse(url);\n return `export * from './${hostname}';`;\n}\n\nfunction extractorName(hostname) {\n const name = hostname\n .split('.')\n .map(w => `${w.charAt(0).toUpperCase()}${w.slice(1)}`)\n .join('');\n return `${name}Extractor`;\n}\n"],"names":["KEEP_CLASS","STRIP_OUTPUT_TAGS","stripJunkTags","article","$","tags","length","join","not","remove","absolutize","rootUrl","attr","baseUrl","each","_","node","attrs","getAttrs","url","absoluteUrl","URL","resolve","setAttr","absolutizeSet","$content","urlSet","srcset","candidates","match","absoluteCandidates","map","candidate","parts","trim","replace","split","absoluteUrlSet","makeLinksAbsolute","forEach","attribs","attributes","reduce","acc","index","name","value","val","setAttribute","insertValues","strings","values","result","part","idx","toString","bodyPattern","trailingWhitespace","template","compiled","body","indentLevel","slice","line","test","hostname","IGNORE","testFor","key","dir","find","k","file","questions","type","message","validate","parse","spinner","confirm","fn","args","msg","newParser","ora","text","start","then","r","savePage","succeed","confirmCreateDir","fs","existsSync","mkdirSync","getDir","scaffoldCustomParser","Parser","fetchResource","urlArg","process","argv","inquirer","prompt","answers","website","generateScaffold","extractor","extractorTemplate","extractorName","extractorTest","extractorTestTemplate","writeFileSync","appendFileSync","exportString","exec","filename","Date","getTime","first","$node","link","html","console","log","w","charAt","toUpperCase"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file diff --git a/dist/mercury.esm.js b/dist/mercury.esm.js index e68fd8529..807414c15 100644 --- a/dist/mercury.esm.js +++ b/dist/mercury.esm.js @@ -1,4 +1,5 @@ -function e(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t((function(e){!function(t){var n=Object.prototype,r=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag",u=t.regeneratorRuntime;if(u)e.exports=u;else{(u=t.regeneratorRuntime=e.exports).wrap=p;var c={},l={};l[i]=function(){return this};var f=Object.getPrototypeOf,d=f&&f(f(E([])));d&&d!==n&&r.call(d,i)&&(l=d);var h=y.prototype=g.prototype=Object.create(l);v.prototype=h.constructor=y,y.constructor=v,y[s]=v.displayName="GeneratorFunction",u.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===v||"GeneratorFunction"===(t.displayName||t.name))},u.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,s in e||(e[s]="GeneratorFunction")),e.prototype=Object.create(h),e},u.awrap=function(e){return{__await:e}},_(b.prototype),b.prototype[o]=function(){return this},u.AsyncIterator=b,u.async=function(e,t,n,r){var a=new b(p(e,t,n,r));return u.isGeneratorFunction(t)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},_(h),h[s]="Generator",h[i]=function(){return this},h.toString=function(){return"[object Generator]"},u.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},u.values=E,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(x),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,r){return o.type="throw",o.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(s&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var i=a;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=e,o.arg=t,i?(this.method="next",this.next=i.finallyLoc,c):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),c},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;x(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}}}function p(e,t,n,r){var a=t&&t.prototype instanceof g?t:g,i=Object.create(a.prototype),o=new k(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return S()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=w(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=m(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function m(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function g(){}function v(){}function y(){}function _(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function b(e){var t;this._invoke=function(n,a){function i(){return new Promise((function(t,i){!function t(n,a,i,o){var s=m(e[n],e,a);if("throw"!==s.type){var u=s.arg,c=u.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then((function(e){t("next",e,i,o)}),(function(e){t("throw",e,i,o)})):Promise.resolve(c).then((function(e){u.value=e,i(u)}),(function(e){return t("throw",e,i,o)}))}o(s.arg)}(n,a,t,i)}))}return t=t?t.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=m(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function E(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:S}}function S(){return{value:void 0,done:!0}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())})),r=function(){return this||"object"==typeof self&&self}()||Function("return this")(),a=r.regeneratorRuntime&&Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime")>=0,i=a&&r.regeneratorRuntime;r.regeneratorRuntime=void 0;var o=n;if(a)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}var s=o,u={}.toString,c=function(e){return u.call(e).slice(8,-1)},l=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==c(e)?e.split(""):Object(e)},f=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},d=function(e){return l(f(e))},h={f:{}.propertyIsEnumerable},p=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=function(e){return"object"==typeof e?null!==e:"function"==typeof e},g=function(e,t){if(!m(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!m(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!m(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!m(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},v={}.hasOwnProperty,y=function(e,t){return v.call(e,t)},_=function(e){try{return!!e()}catch(e){return!0}},b=!_((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),w=t((function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)})),A=w.document,x=m(A)&&m(A.createElement),k=function(e){return x?A.createElement(e):{}},E=!b&&!_((function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a})),S=Object.getOwnPropertyDescriptor,M={f:b?S:function(e,t){if(e=d(e),t=g(t,!0),E)try{return S(e,t)}catch(e){}if(y(e,t))return p(!h.f.call(e,t),e[t])}},T=t((function(e){var t=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=t)})),C=(T.version,function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}),D=function(e,t,n){if(C(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,a){return e.call(t,n,r,a)}}return function(){return e.apply(t,arguments)}},O=function(e){if(!m(e))throw TypeError(e+" is not an object!");return e},N=Object.defineProperty,j={f:b?Object.defineProperty:function(e,t,n){if(O(e),t=g(t,!0),O(n),E)try{return N(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},P=b?function(e,t,n){return j.f(e,t,p(1,n))}:function(e,t,n){return e[t]=n,e},z=function(e,t,n){var r,a,i,o=e&z.F,s=e&z.G,u=e&z.S,c=e&z.P,l=e&z.B,f=e&z.W,d=s?T:T[t]||(T[t]={}),h=d.prototype,p=s?w:u?w[t]:(w[t]||{}).prototype;for(r in s&&(n=t),n)(a=!o&&p&&void 0!==p[r])&&y(d,r)||(i=a?p[r]:n[r],d[r]=s&&"function"!=typeof p[r]?n[r]:l&&a?D(i,w):f&&p[r]==i?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(i):c&&"function"==typeof i?D(Function.call,i):i,c&&((d.virtual||(d.virtual={}))[r]=i,e&z.R&&h&&!h[r]&&P(h,r,i)))};z.F=1,z.G=2,z.S=4,z.P=8,z.B=16,z.W=32,z.U=64,z.R=128;var L=z,R=function(e,t){var n=(T.Object||{})[e]||Object[e],r={};r[e]=t(n),L(L.S+L.F*_((function(){n(1)})),"Object",r)},Y=M.f;R("getOwnPropertyDescriptor",(function(){return function(e,t){return Y(d(e),t)}}));var W,q=T.Object,I=function(e,t){return q.getOwnPropertyDescriptor(e,t)},H=P,B=0,F=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++B+F).toString(36))},U=t((function(e){var t=G("meta"),n=j.f,r=0,a=Object.isExtensible||function(){return!0},i=!_((function(){return a(Object.preventExtensions({}))})),o=function(e){n(e,t,{value:{i:"O"+ ++r,w:{}}})},s=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!m(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!y(e,t)){if(!a(e))return"F";if(!n)return"E";o(e)}return e[t].i},getWeak:function(e,n){if(!y(e,t)){if(!a(e))return!0;if(!n)return!1;o(e)}return e[t].w},onFreeze:function(e){return i&&s.NEED&&a(e)&&!y(e,t)&&o(e),e}}})),$=(U.KEY,U.NEED,U.fastKey,U.getWeak,U.onFreeze,t((function(e){var t=w["__core-js_shared__"]||(w["__core-js_shared__"]={});(e.exports=function(e,n){return t[e]||(t[e]=void 0!==n?n:{})})("versions",[]).push({version:T.version,mode:"pure",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}))),V=t((function(e){var t=$("wks"),n=w.Symbol,r="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=r&&n[e]||(r?n:G)("Symbol."+e))}).store=t})),J=j.f,K=V("toStringTag"),X=function(e,t,n){e&&!y(e=n?e:e.prototype,K)&&J(e,K,{configurable:!0,value:t})},Z={f:V},Q=j.f,ee=function(e){var t=T.Symbol||(T.Symbol={});"_"==e.charAt(0)||e in t||Q(t,e,{value:Z.f(e)})},te=Math.ceil,ne=Math.floor,re=function(e){return isNaN(e=+e)?0:(e>0?ne:te)(e)},ae=Math.min,ie=function(e){return e>0?ae(re(e),9007199254740991):0},oe=Math.max,se=Math.min,ue=$("keys"),ce=function(e){return ue[e]||(ue[e]=G(e))},le=(W=!1,function(e,t,n){var r,a=d(e),i=ie(a.length),o=function(e,t){return(e=re(e))<0?oe(e+t,0):se(e,t)}(n,i);if(W&&t!=t){for(;i>o;)if((r=a[o++])!=r)return!0}else for(;i>o;o++)if((W||o in a)&&a[o]===t)return W||o||0;return!W&&-1}),fe=ce("IE_PROTO"),de=function(e,t){var n,r=d(e),a=0,i=[];for(n in r)n!=fe&&y(r,n)&&i.push(n);for(;t.length>a;)y(r,n=t[a++])&&(~le(i,n)||i.push(n));return i},he="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),pe=Object.keys||function(e){return de(e,he)},me={f:Object.getOwnPropertySymbols},ge=Array.isArray||function(e){return"Array"==c(e)},ve=b?Object.defineProperties:function(e,t){O(e);for(var n,r=pe(t),a=r.length,i=0;a>i;)j.f(e,n=r[i++],t[n]);return e},ye=w.document,_e=ye&&ye.documentElement,be=ce("IE_PROTO"),we=function(){},Ae=function(){var e,t=k("iframe"),n=he.length;for(t.style.display="none",_e.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Ae=e.F;n--;)delete Ae.prototype[he[n]];return Ae()},xe=Object.create||function(e,t){var n;return null!==e?(we.prototype=O(e),n=new we,we.prototype=null,n[be]=e):n=Ae(),void 0===t?n:ve(n,t)},ke=he.concat("length","prototype"),Ee={f:Object.getOwnPropertyNames||function(e){return de(e,ke)}},Se=Ee.f,Me={}.toString,Te="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Ce={f:function(e){return Te&&"[object Window]"==Me.call(e)?function(e){try{return Se(e)}catch(e){return Te.slice()}}(e):Se(d(e))}},De=U.KEY,Oe=M.f,Ne=j.f,je=Ce.f,Pe=w.Symbol,ze=w.JSON,Le=ze&&ze.stringify,Re=V("_hidden"),Ye=V("toPrimitive"),We={}.propertyIsEnumerable,qe=$("symbol-registry"),Ie=$("symbols"),He=$("op-symbols"),Be=Object.prototype,Fe="function"==typeof Pe,Ge=w.QObject,Ue=!Ge||!Ge.prototype||!Ge.prototype.findChild,$e=b&&_((function(){return 7!=xe(Ne({},"a",{get:function(){return Ne(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Oe(Be,t);r&&delete Be[t],Ne(e,t,n),r&&e!==Be&&Ne(Be,t,r)}:Ne,Ve=function(e){var t=Ie[e]=xe(Pe.prototype);return t._k=e,t},Je=Fe&&"symbol"==typeof Pe.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Pe},Ke=function(e,t,n){return e===Be&&Ke(He,t,n),O(e),t=g(t,!0),O(n),y(Ie,t)?(n.enumerable?(y(e,Re)&&e[Re][t]&&(e[Re][t]=!1),n=xe(n,{enumerable:p(0,!1)})):(y(e,Re)||Ne(e,Re,p(1,{})),e[Re][t]=!0),$e(e,t,n)):Ne(e,t,n)},Xe=function(e,t){O(e);for(var n,r=function(e){var t=pe(e),n=me.f;if(n)for(var r,a=n(e),i=h.f,o=0;a.length>o;)i.call(e,r=a[o++])&&t.push(r);return t}(t=d(t)),a=0,i=r.length;i>a;)Ke(e,n=r[a++],t[n]);return e},Ze=function(e){var t=We.call(this,e=g(e,!0));return!(this===Be&&y(Ie,e)&&!y(He,e))&&(!(t||!y(this,e)||!y(Ie,e)||y(this,Re)&&this[Re][e])||t)},Qe=function(e,t){if(e=d(e),t=g(t,!0),e!==Be||!y(Ie,t)||y(He,t)){var n=Oe(e,t);return!n||!y(Ie,t)||y(e,Re)&&e[Re][t]||(n.enumerable=!0),n}},et=function(e){for(var t,n=je(d(e)),r=[],a=0;n.length>a;)y(Ie,t=n[a++])||t==Re||t==De||r.push(t);return r},tt=function(e){for(var t,n=e===Be,r=je(n?He:d(e)),a=[],i=0;r.length>i;)!y(Ie,t=r[i++])||n&&!y(Be,t)||a.push(Ie[t]);return a};Fe||(H((Pe=function(){if(this instanceof Pe)throw TypeError("Symbol is not a constructor!");var e=G(arguments.length>0?arguments[0]:void 0),t=function(n){this===Be&&t.call(He,n),y(this,Re)&&y(this[Re],e)&&(this[Re][e]=!1),$e(this,e,p(1,n))};return b&&Ue&&$e(Be,e,{configurable:!0,set:t}),Ve(e)}).prototype,"toString",(function(){return this._k})),M.f=Qe,j.f=Ke,Ee.f=Ce.f=et,h.f=Ze,me.f=tt,Z.f=function(e){return Ve(V(e))}),L(L.G+L.W+L.F*!Fe,{Symbol:Pe});for(var nt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;nt.length>rt;)V(nt[rt++]);for(var at=pe(V.store),it=0;at.length>it;)ee(at[it++]);L(L.S+L.F*!Fe,"Symbol",{for:function(e){return y(qe,e+="")?qe[e]:qe[e]=Pe(e)},keyFor:function(e){if(!Je(e))throw TypeError(e+" is not a symbol!");for(var t in qe)if(qe[t]===e)return t},useSetter:function(){Ue=!0},useSimple:function(){Ue=!1}}),L(L.S+L.F*!Fe,"Object",{create:function(e,t){return void 0===t?xe(e):Xe(xe(e),t)},defineProperty:Ke,defineProperties:Xe,getOwnPropertyDescriptor:Qe,getOwnPropertyNames:et,getOwnPropertySymbols:tt}),ze&&L(L.S+L.F*(!Fe||_((function(){var e=Pe();return"[null]"!=Le([e])||"{}"!=Le({a:e})||"{}"!=Le(Object(e))}))),"JSON",{stringify:function(e){for(var t,n,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(n=t=r[1],(m(t)||void 0!==e)&&!Je(e))return ge(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!Je(t))return t}),r[1]=t,Le.apply(ze,r)}}),Pe.prototype[Ye]||P(Pe.prototype,Ye,Pe.prototype.valueOf),X(Pe,"Symbol"),X(Math,"Math",!0),X(w.JSON,"JSON",!0);var ot=T.Object.getOwnPropertySymbols,st=function(e){return Object(f(e))};R("keys",(function(){return function(e){return pe(st(e))}}));var ut=T.Object.keys;L(L.S+L.F*!b,"Object",{defineProperty:j.f});var ct=T.Object,lt=function(e,t,n){return ct.defineProperty(e,t,n)};var ft=function(e,t,n){return t in e?lt(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e};var dt=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=ut(n);"function"==typeof ot&&(r=r.concat(ot(n).filter((function(e){return I(n,e).enumerable})))),r.forEach((function(t){ft(e,t,n[t])}))}return e};var ht=function(e,t){if(null==e)return{};var n,r,a={},i=ut(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a};var pt=function(e,t){if(null==e)return{};var n,r,a=ht(e,t);if(ot){var i=ot(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a},mt={},gt={};P(gt,V("iterator"),(function(){return this}));var vt,yt=function(e,t,n){e.prototype=xe(gt,{next:p(1,n)}),X(e,t+" Iterator")},_t=ce("IE_PROTO"),bt=Object.prototype,wt=Object.getPrototypeOf||function(e){return e=st(e),y(e,_t)?e[_t]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?bt:null},At=V("iterator"),xt=!([].keys&&"next"in[].keys()),kt=function(){return this},Et=function(e,t,n,r,a,i,o){yt(n,t,r);var s,u,c,l=function(e){if(!xt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d="values"==a,h=!1,p=e.prototype,m=p[At]||p["@@iterator"]||a&&p[a],g=m||l(a),v=a?d?l("entries"):g:void 0,y="Array"==t&&p.entries||m;if(y&&(c=wt(y.call(new e)))!==Object.prototype&&c.next&&X(c,f,!0),d&&m&&"values"!==m.name&&(h=!0,g=function(){return m.call(this)}),o&&(xt||h||!p[At])&&P(p,At,g),mt[t]=g,mt[f]=kt,a)if(s={values:d?g:l("values"),keys:i?g:l("keys"),entries:v},o)for(u in s)u in p||H(p,u,s[u]);else L(L.P+L.F*(xt||h),t,s);return s},St=(vt=!0,function(e,t){var n,r,a=String(f(e)),i=re(t),o=a.length;return i<0||i>=o?vt?"":void 0:(n=a.charCodeAt(i))<55296||n>56319||i+1===o||(r=a.charCodeAt(i+1))<56320||r>57343?vt?a.charAt(i):n:vt?a.slice(i,i+2):r-56320+(n-55296<<10)+65536});Et(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=St(t,n),this._i+=e.length,{value:e,done:!1})}));var Mt=function(e,t){return{value:t,done:!!e}};Et(Array,"Array",(function(e,t){this._t=d(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Mt(1)):Mt(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values");mt.Arguments=mt.Array;for(var Tt=V("toStringTag"),Ct="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),Dt=0;Dt<Ct.length;Dt++){var Ot=Ct[Dt],Nt=w[Ot],jt=Nt&&Nt.prototype;jt&&!jt[Tt]&&P(jt,Tt,Ot),mt[Ot]=mt.Array}var Pt,zt,Lt,Rt=V("toStringTag"),Yt="Arguments"==c(function(){return arguments}()),Wt=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Rt))?n:Yt?c(t):"Object"==(r=c(t))&&"function"==typeof t.callee?"Arguments":r},qt=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},It=function(e,t,n,r){try{return r?t(O(n)[0],n[1]):t(n)}catch(t){var a=e.return;throw void 0!==a&&O(a.call(e)),t}},Ht=V("iterator"),Bt=Array.prototype,Ft=function(e){return void 0!==e&&(mt.Array===e||Bt[Ht]===e)},Gt=V("iterator"),Ut=T.getIteratorMethod=function(e){if(null!=e)return e[Gt]||e["@@iterator"]||mt[Wt(e)]},$t=t((function(e){var t={},n={},r=e.exports=function(e,r,a,i,o){var s,u,c,l,f=o?function(){return e}:Ut(e),d=D(a,i,r?2:1),h=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(Ft(f)){for(s=ie(e.length);s>h;h++)if((l=r?d(O(u=e[h])[0],u[1]):d(e[h]))===t||l===n)return l}else for(c=f.call(e);!(u=c.next()).done;)if((l=It(c,d,u.value,r))===t||l===n)return l};r.BREAK=t,r.RETURN=n})),Vt=V("species"),Jt=function(e,t){var n,r=O(e).constructor;return void 0===r||null==(n=O(r)[Vt])?t:C(n)},Kt=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Xt=w.process,Zt=w.setImmediate,Qt=w.clearImmediate,en=w.MessageChannel,tn=w.Dispatch,nn=0,rn={},an=function(){var e=+this;if(rn.hasOwnProperty(e)){var t=rn[e];delete rn[e],t()}},on=function(e){an.call(e.data)};Zt&&Qt||(Zt=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return rn[++nn]=function(){Kt("function"==typeof e?e:Function(e),t)},Pt(nn),nn},Qt=function(e){delete rn[e]},"process"==c(Xt)?Pt=function(e){Xt.nextTick(D(an,e,1))}:tn&&tn.now?Pt=function(e){tn.now(D(an,e,1))}:en?(Lt=(zt=new en).port2,zt.port1.onmessage=on,Pt=D(Lt.postMessage,Lt,1)):w.addEventListener&&"function"==typeof postMessage&&!w.importScripts?(Pt=function(e){w.postMessage(e+"","*")},w.addEventListener("message",on,!1)):Pt="onreadystatechange"in k("script")?function(e){_e.appendChild(k("script")).onreadystatechange=function(){_e.removeChild(this),an.call(e)}}:function(e){setTimeout(D(an,e,1),0)});var sn={set:Zt,clear:Qt},un=sn.set,cn=w.MutationObserver||w.WebKitMutationObserver,ln=w.process,fn=w.Promise,dn="process"==c(ln);function hn(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=C(t),this.reject=C(n)}var pn={f:function(e){return new hn(e)}},mn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},gn=w.navigator,vn=gn&&gn.userAgent||"",yn=function(e,t){if(O(e),m(t)&&t.constructor===e)return t;var n=pn.f(e);return(0,n.resolve)(t),n.promise},_n=function(e,t,n){for(var r in t)n&&e[r]?e[r]=t[r]:P(e,r,t[r]);return e},bn=V("species"),wn=function(e){var t="function"==typeof T[e]?T[e]:w[e];b&&t&&!t[bn]&&j.f(t,bn,{configurable:!0,get:function(){return this}})},An=V("iterator"),xn=!1;try{[7][An]().return=function(){xn=!0}}catch(e){}var kn,En,Sn,Mn,Tn=function(e,t){if(!t&&!xn)return!1;var n=!1;try{var r=[7],a=r[An]();a.next=function(){return{done:n=!0}},r[An]=function(){return a},e(r)}catch(e){}return n},Cn=sn.set,Dn=function(){var e,t,n,r=function(){var r,a;for(dn&&(r=ln.domain)&&r.exit();e;){a=e.fn,e=e.next;try{a()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(dn)n=function(){ln.nextTick(r)};else if(!cn||w.navigator&&w.navigator.standalone)if(fn&&fn.resolve){var a=fn.resolve(void 0);n=function(){a.then(r)}}else n=function(){un.call(w,r)};else{var i=!0,o=document.createTextNode("");new cn(r).observe(o,{characterData:!0}),n=function(){o.data=i=!i}}return function(r){var a={fn:r,next:void 0};t&&(t.next=a),e||(e=a,n()),t=a}}(),On=w.TypeError,Nn=w.process,jn=Nn&&Nn.versions,Pn=jn&&jn.v8||"",zn=w.Promise,Ln="process"==Wt(Nn),Rn=function(){},Yn=En=pn.f,Wn=!!function(){try{var e=zn.resolve(1),t=(e.constructor={})[V("species")]=function(e){e(Rn,Rn)};return(Ln||"function"==typeof PromiseRejectionEvent)&&e.then(Rn)instanceof t&&0!==Pn.indexOf("6.6")&&-1===vn.indexOf("Chrome/66")}catch(e){}}(),qn=function(e){var t;return!(!m(e)||"function"!=typeof(t=e.then))&&t},In=function(e,t){if(!e._n){e._n=!0;var n=e._c;Dn((function(){for(var r=e._v,a=1==e._s,i=0,o=function(t){var n,i,o,s=a?t.ok:t.fail,u=t.resolve,c=t.reject,l=t.domain;try{s?(a||(2==e._h&&Fn(e),e._h=1),!0===s?n=r:(l&&l.enter(),n=s(r),l&&(l.exit(),o=!0)),n===t.promise?c(On("Promise-chain cycle")):(i=qn(n))?i.call(n,u,c):u(n)):c(r)}catch(e){l&&!o&&l.exit(),c(e)}};n.length>i;)o(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Hn(e)}))}},Hn=function(e){Cn.call(w,(function(){var t,n,r,a=e._v,i=Bn(e);if(i&&(t=mn((function(){Ln?Nn.emit("unhandledRejection",a,e):(n=w.onunhandledrejection)?n({promise:e,reason:a}):(r=w.console)&&r.error&&r.error("Unhandled promise rejection",a)})),e._h=Ln||Bn(e)?2:1),e._a=void 0,i&&t.e)throw t.v}))},Bn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Cn.call(w,(function(){var t;Ln?Nn.emit("rejectionHandled",e):(t=w.onrejectionhandled)&&t({promise:e,reason:e._v})}))},Gn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),In(t,!0))},Un=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw On("Promise can't be resolved itself");(t=qn(e))?Dn((function(){var r={_w:n,_d:!1};try{t.call(e,D(Un,r,1),D(Gn,r,1))}catch(e){Gn.call(r,e)}})):(n._v=e,n._s=1,In(n,!1))}catch(e){Gn.call({_w:n,_d:!1},e)}}};Wn||(zn=function(e){qt(this,zn,"Promise","_h"),C(e),kn.call(this);try{e(D(Un,this,1),D(Gn,this,1))}catch(e){Gn.call(this,e)}},(kn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=_n(zn.prototype,{then:function(e,t){var n=Yn(Jt(this,zn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Ln?Nn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&In(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Sn=function(){var e=new kn;this.promise=e,this.resolve=D(Un,e,1),this.reject=D(Gn,e,1)},pn.f=Yn=function(e){return e===zn||e===Mn?new Sn(e):En(e)}),L(L.G+L.W+L.F*!Wn,{Promise:zn}),X(zn,"Promise"),wn("Promise"),Mn=T.Promise,L(L.S+L.F*!Wn,"Promise",{reject:function(e){var t=Yn(this);return(0,t.reject)(e),t.promise}}),L(L.S+!0*L.F,"Promise",{resolve:function(e){return yn(this===Mn?zn:this,e)}}),L(L.S+L.F*!(Wn&&Tn((function(e){zn.all(e).catch(Rn)}))),"Promise",{all:function(e){var t=this,n=Yn(t),r=n.resolve,a=n.reject,i=mn((function(){var n=[],i=0,o=1;$t(e,!1,(function(e){var s=i++,u=!1;n.push(void 0),o++,t.resolve(e).then((function(e){u||(u=!0,n[s]=e,--o||r(n))}),a)})),--o||r(n)}));return i.e&&a(i.v),n.promise},race:function(e){var t=this,n=Yn(t),r=n.reject,a=mn((function(){$t(e,!1,(function(e){t.resolve(e).then(n.resolve,r)}))}));return a.e&&r(a.v),n.promise}}),L(L.P+L.R,"Promise",{finally:function(e){var t=Jt(this,T.Promise||w.Promise),n="function"==typeof e;return this.then(n?function(n){return yn(t,e()).then((function(){return n}))}:e,n?function(n){return yn(t,e()).then((function(){throw n}))}:e)}}),L(L.S,"Promise",{try:function(e){var t=pn.f(this),n=mn(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}});var $n=T.Promise;function Vn(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):$n.resolve(u).then(r,a)}var Jn=function(e){return function(){var t=this,n=arguments;return new $n((function(r,a){var i=e.apply(t,n);function o(e){Vn(i,r,a,o,s,"next",e)}function s(e){Vn(i,r,a,o,s,"throw",e)}o(void 0)}))}},Kn="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Xn=t((function(e,t){!function(n){var r=t&&!t.nodeType&&t,a=e&&!e.nodeType&&e,i="object"==typeof Kn&&Kn;i.global!==i&&i.window!==i&&i.self!==i||(n=i);var o,s,u=2147483647,c=/^xn--/,l=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},h=Math.floor,p=String.fromCharCode;function m(e){throw RangeError(d[e])}function g(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function v(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+g((e=e.replace(f,".")).split("."),t).join(".")}function y(e){for(var t,n,r=[],a=0,i=e.length;a<i;)(t=e.charCodeAt(a++))>=55296&&t<=56319&&a<i?56320==(64512&(n=e.charCodeAt(a++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),a--):r.push(t);return r}function _(e){return g(e,(function(e){var t="";return e>65535&&(t+=p((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=p(e)})).join("")}function b(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function w(e,t,n){var r=0;for(e=n?h(e/700):e>>1,e+=h(e/t);e>455;r+=36)e=h(e/35);return h(r+36*e/(e+38))}function A(e){var t,n,r,a,i,o,s,c,l,f,d,p=[],g=e.length,v=0,y=128,b=72;for((n=e.lastIndexOf("-"))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&m("not-basic"),p.push(e.charCodeAt(r));for(a=n>0?n+1:0;a<g;){for(i=v,o=1,s=36;a>=g&&m("invalid-input"),((c=(d=e.charCodeAt(a++))-48<10?d-22:d-65<26?d-65:d-97<26?d-97:36)>=36||c>h((u-v)/o))&&m("overflow"),v+=c*o,!(c<(l=s<=b?1:s>=b+26?26:s-b));s+=36)o>h(u/(f=36-l))&&m("overflow"),o*=f;b=w(v-i,t=p.length+1,0==i),h(v/t)>u-y&&m("overflow"),y+=h(v/t),v%=t,p.splice(v++,0,y)}return _(p)}function x(e){var t,n,r,a,i,o,s,c,l,f,d,g,v,_,A,x=[];for(g=(e=y(e)).length,t=128,n=0,i=72,o=0;o<g;++o)(d=e[o])<128&&x.push(p(d));for(r=a=x.length,a&&x.push("-");r<g;){for(s=u,o=0;o<g;++o)(d=e[o])>=t&&d<s&&(s=d);for(s-t>h((u-n)/(v=r+1))&&m("overflow"),n+=(s-t)*v,t=s,o=0;o<g;++o)if((d=e[o])<t&&++n>u&&m("overflow"),d==t){for(c=n,l=36;!(c<(f=l<=i?1:l>=i+26?26:l-i));l+=36)A=c-f,_=36-f,x.push(p(b(f+A%_,0))),c=h(A/_);x.push(p(b(c,0))),i=w(n,v,r==a),n=0,++r}++n,++t}return x.join("")}if(o={version:"1.3.2",ucs2:{decode:y,encode:_},decode:A,encode:x,toASCII:function(e){return v(e,(function(e){return l.test(e)?"xn--"+x(e):e}))},toUnicode:function(e){return v(e,(function(e){return c.test(e)?A(e.slice(4).toLowerCase()):e}))}},r&&a)if(e.exports==r)a.exports=o;else for(s in o)o.hasOwnProperty(s)&&(r[s]=o[s]);else n.punycode=o}(this)})),Zn=function(e){return"string"==typeof e},Qn=function(e){return"object"==typeof e&&null!==e},er=function(e){return null===e},tr=function(e){return null==e};function nr(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var rr=function(e,t,n,r){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(t);var o=1e3;r&&"number"==typeof r.maxKeys&&(o=r.maxKeys);var s=e.length;o>0&&s>o&&(s=o);for(var u=0;u<s;++u){var c,l,f,d,h=e[u].replace(i,"%20"),p=h.indexOf(n);p>=0?(c=h.substr(0,p),l=h.substr(p+1)):(c=h,l=""),f=decodeURIComponent(c),d=decodeURIComponent(l),nr(a,f)?Array.isArray(a[f])?a[f].push(d):a[f]=[a[f],d]:a[f]=d}return a},ar=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},ir=function(e,t,n,r){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(r){var a=encodeURIComponent(ar(r))+n;return Array.isArray(e[r])?e[r].map((function(e){return a+encodeURIComponent(ar(e))})).join(t):a+encodeURIComponent(ar(e[r]))})).join(t):r?encodeURIComponent(ar(r))+n+encodeURIComponent(ar(e)):""},or=t((function(e,t){t.decode=t.parse=rr,t.encode=t.stringify=ir})),sr=(or.decode,or.parse,or.encode,or.stringify,Er),ur=function(e,t){return Er(e,!1,!0).resolve(t)},cr=function(e,t){return e?Er(e,!1,!0).resolveObject(t):t},lr=function(e){Zn(e)&&(e=Er(e));return e instanceof dr?e.format():dr.prototype.format.call(e)},fr=dr;function dr(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var hr=/^([a-z0-9.+-]+:)/i,pr=/:[0-9]*$/,mr=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,gr=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),vr=["'"].concat(gr),yr=["%","/","?",";","#"].concat(vr),_r=["/","?","#"],br=/^[+a-z0-9A-Z_-]{0,63}$/,wr=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Ar={javascript:!0,"javascript:":!0},xr={javascript:!0,"javascript:":!0},kr={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function Er(e,t,n){if(e&&Qn(e)&&e instanceof dr)return e;var r=new dr;return r.parse(e,t,n),r}dr.prototype.parse=function(e,t,n){if(!Zn(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e.indexOf("?"),a=-1!==r&&r<e.indexOf("#")?"?":"#",i=e.split(a);i[0]=i[0].replace(/\\/g,"/");var o=e=i.join(a);if(o=o.trim(),!n&&1===e.split("#").length){var s=mr.exec(o);if(s)return this.path=o,this.href=o,this.pathname=s[1],s[2]?(this.search=s[2],this.query=t?or.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var u=hr.exec(o);if(u){var c=(u=u[0]).toLowerCase();this.protocol=c,o=o.substr(u.length)}if(n||u||o.match(/^\/\/[^@\/]+@[^@\/]+/)){var l="//"===o.substr(0,2);!l||u&&xr[u]||(o=o.substr(2),this.slashes=!0)}if(!xr[u]&&(l||u&&!kr[u])){for(var f,d,h=-1,p=0;p<_r.length;p++){-1!==(m=o.indexOf(_r[p]))&&(-1===h||m<h)&&(h=m)}-1!==(d=-1===h?o.lastIndexOf("@"):o.lastIndexOf("@",h))&&(f=o.slice(0,d),o=o.slice(d+1),this.auth=decodeURIComponent(f)),h=-1;for(p=0;p<yr.length;p++){var m;-1!==(m=o.indexOf(yr[p]))&&(-1===h||m<h)&&(h=m)}-1===h&&(h=o.length),this.host=o.slice(0,h),o=o.slice(h),this.parseHost(),this.hostname=this.hostname||"";var g="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!g)for(var v=this.hostname.split(/\./),y=(p=0,v.length);p<y;p++){var _=v[p];if(_&&!_.match(br)){for(var b="",w=0,A=_.length;w<A;w++)_.charCodeAt(w)>127?b+="x":b+=_[w];if(!b.match(br)){var x=v.slice(0,p),k=v.slice(p+1),E=_.match(wr);E&&(x.push(E[1]),k.unshift(E[2])),k.length&&(o="/"+k.join(".")+o),this.hostname=x.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),g||(this.hostname=Xn.toASCII(this.hostname));var S=this.port?":"+this.port:"",M=this.hostname||"";this.host=M+S,this.href+=this.host,g&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!Ar[c])for(p=0,y=vr.length;p<y;p++){var T=vr[p];if(-1!==o.indexOf(T)){var C=encodeURIComponent(T);C===T&&(C=escape(T)),o=o.split(T).join(C)}}var D=o.indexOf("#");-1!==D&&(this.hash=o.substr(D),o=o.slice(0,D));var O=o.indexOf("?");if(-1!==O?(this.search=o.substr(O),this.query=o.substr(O+1),t&&(this.query=or.parse(this.query)),o=o.slice(0,O)):t&&(this.search="",this.query={}),o&&(this.pathname=o),kr[c]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){S=this.pathname||"";var N=this.search||"";this.path=S+N}return this.href=this.format(),this},dr.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&Qn(this.query)&&Object.keys(this.query).length&&(i=or.stringify(this.query));var o=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||kr[t])&&!1!==a?(a="//"+(a||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):a||(a=""),r&&"#"!==r.charAt(0)&&(r="#"+r),o&&"?"!==o.charAt(0)&&(o="?"+o),t+a+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(o=o.replace("#","%23"))+r},dr.prototype.resolve=function(e){return this.resolveObject(Er(e,!1,!0)).format()},dr.prototype.resolveObject=function(e){if(Zn(e)){var t=new dr;t.parse(e,!1,!0),e=t}for(var n=new dr,r=Object.keys(this),a=0;a<r.length;a++){var i=r[a];n[i]=this[i]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var o=Object.keys(e),s=0;s<o.length;s++){var u=o[s];"protocol"!==u&&(n[u]=e[u])}return kr[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!kr[e.protocol]){for(var c=Object.keys(e),l=0;l<c.length;l++){var f=c[l];n[f]=e[f]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||xr[e.protocol])n.pathname=e.pathname;else{for(var d=(e.pathname||"").split("/");d.length&&!(e.host=d.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),n.pathname=d.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var h=n.pathname||"",p=n.search||"";n.path=h+p}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var m=n.pathname&&"/"===n.pathname.charAt(0),g=e.host||e.pathname&&"/"===e.pathname.charAt(0),v=g||m||n.host&&e.pathname,y=v,_=n.pathname&&n.pathname.split("/")||[],b=(d=e.pathname&&e.pathname.split("/")||[],n.protocol&&!kr[n.protocol]);if(b&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),v=v&&(""===d[0]||""===_[0])),g)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=d;else if(d.length)_||(_=[]),_.pop(),_=_.concat(d),n.search=e.search,n.query=e.query;else if(!tr(e.search)){if(b)n.hostname=n.host=_.shift(),(E=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=E.shift(),n.host=n.hostname=E.shift());return n.search=e.search,n.query=e.query,er(n.pathname)&&er(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var w=_.slice(-1)[0],A=(n.host||e.host||_.length>1)&&("."===w||".."===w)||""===w,x=0,k=_.length;k>=0;k--)"."===(w=_[k])?_.splice(k,1):".."===w?(_.splice(k,1),x++):x&&(_.splice(k,1),x--);if(!v&&!y)for(;x--;x)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),A&&"/"!==_.join("/").substr(-1)&&_.push("");var E,S=""===_[0]||_[0]&&"/"===_[0].charAt(0);b&&(n.hostname=n.host=S?"":_.length?_.shift():"",(E=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=E.shift(),n.host=n.hostname=E.shift()));return(v=v||n.host&&_.length)&&!S&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),er(n.pathname)&&er(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},dr.prototype.parseHost=function(){var e=this.host,t=pr.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var Sr,Mr={parse:sr,resolve:ur,resolveObject:cr,format:lr,Url:fr},Tr=t((function(e){ +function e(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var r=t((function(e){!function(t){var r=Object.prototype,n=r.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag",c=t.regeneratorRuntime;if(c)e.exports=c;else{(c=t.regeneratorRuntime=e.exports).wrap=p;var u={},l={};l[i]=function(){return this};var f=Object.getPrototypeOf,d=f&&f(f(E([])));d&&d!==r&&n.call(d,i)&&(l=d);var h=y.prototype=g.prototype=Object.create(l);v.prototype=h.constructor=y,y.constructor=v,y[s]=v.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===v||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,s in e||(e[s]="GeneratorFunction")),e.prototype=Object.create(h),e},c.awrap=function(e){return{__await:e}},_(b.prototype),b.prototype[o]=function(){return this},c.AsyncIterator=b,c.async=function(e,t,r,n){var a=new b(p(e,t,r,n));return c.isGeneratorFunction(t)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},_(h),h[s]="Generator",h[i]=function(){return this},h.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},c.values=E,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(x),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(r,n){return o.type="throw",o.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(s&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var i=a;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=e,o.arg=t,i?(this.method="next",this.next=i.finallyLoc,u):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),x(r),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;x(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:E(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),u}}}function p(e,t,r,n){var a=t&&t.prototype instanceof g?t:g,i=Object.create(a.prototype),o=new k(n||[]);return i._invoke=function(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return M()}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=A(o,r);if(s){if(s===u)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=m(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===u)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}(e,r,o),i}function m(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}function g(){}function v(){}function y(){}function _(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function b(e){var t;this._invoke=function(r,a){function i(){return new Promise((function(t,i){!function t(r,a,i,o){var s=m(e[r],e,a);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&n.call(u,"__await")?Promise.resolve(u.__await).then((function(e){t("next",e,i,o)}),(function(e){t("throw",e,i,o)})):Promise.resolve(u).then((function(e){c.value=e,i(c)}),(function(e){return t("throw",e,i,o)}))}o(s.arg)}(r,a,t,i)}))}return t=t?t.then(i,i):i()}}function A(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,A(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var n=m(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,u;var a=n.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function E(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:M}}function M(){return{value:void 0,done:!0}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())})),n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),a=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,i=a&&n.regeneratorRuntime;n.regeneratorRuntime=void 0;var o=r;if(a)n.regeneratorRuntime=i;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}var s=o,c={}.toString,u=function(e){return c.call(e).slice(8,-1)},l=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==u(e)?e.split(""):Object(e)},f=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},d=function(e){return l(f(e))},h={f:{}.propertyIsEnumerable},p=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=function(e){return"object"==typeof e?null!==e:"function"==typeof e},g=function(e,t){if(!m(e))return e;var r,n;if(t&&"function"==typeof(r=e.toString)&&!m(n=r.call(e)))return n;if("function"==typeof(r=e.valueOf)&&!m(n=r.call(e)))return n;if(!t&&"function"==typeof(r=e.toString)&&!m(n=r.call(e)))return n;throw TypeError("Can't convert object to primitive value")},v={}.hasOwnProperty,y=function(e,t){return v.call(e,t)},_=function(e){try{return!!e()}catch(e){return!0}},b=!_((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),A=t((function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)})),w=A.document,x=m(w)&&m(w.createElement),k=function(e){return x?w.createElement(e):{}},E=!b&&!_((function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a})),M=Object.getOwnPropertyDescriptor,S={f:b?M:function(e,t){if(e=d(e),t=g(t,!0),E)try{return M(e,t)}catch(e){}if(y(e,t))return p(!h.f.call(e,t),e[t])}},T=t((function(e){var t=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=t)})),C=(T.version,function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}),D=function(e,t,r){if(C(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,a){return e.call(t,r,n,a)}}return function(){return e.apply(t,arguments)}},O=function(e){if(!m(e))throw TypeError(e+" is not an object!");return e},N=Object.defineProperty,P={f:b?Object.defineProperty:function(e,t,r){if(O(e),t=g(t,!0),O(r),E)try{return N(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},j=b?function(e,t,r){return P.f(e,t,p(1,r))}:function(e,t,r){return e[t]=r,e},R=function(e,t,r){var n,a,i,o=e&R.F,s=e&R.G,c=e&R.S,u=e&R.P,l=e&R.B,f=e&R.W,d=s?T:T[t]||(T[t]={}),h=d.prototype,p=s?A:c?A[t]:(A[t]||{}).prototype;for(n in s&&(r=t),r)(a=!o&&p&&void 0!==p[n])&&y(d,n)||(i=a?p[n]:r[n],d[n]=s&&"function"!=typeof p[n]?r[n]:l&&a?D(i,A):f&&p[n]==i?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(i):u&&"function"==typeof i?D(Function.call,i):i,u&&((d.virtual||(d.virtual={}))[n]=i,e&R.R&&h&&!h[n]&&j(h,n,i)))};R.F=1,R.G=2,R.S=4,R.P=8,R.B=16,R.W=32,R.U=64,R.R=128;var z=R,L=function(e,t){var r=(T.Object||{})[e]||Object[e],n={};n[e]=t(r),z(z.S+z.F*_((function(){r(1)})),"Object",n)},Y=S.f;L("getOwnPropertyDescriptor",(function(){return function(e,t){return Y(d(e),t)}}));var W,I=T.Object,B=function(e,t){return I.getOwnPropertyDescriptor(e,t)},q=j,H=0,F=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+F).toString(36))},U=t((function(e){var t=G("meta"),r=P.f,n=0,a=Object.isExtensible||function(){return!0},i=!_((function(){return a(Object.preventExtensions({}))})),o=function(e){r(e,t,{value:{i:"O"+ ++n,w:{}}})},s=e.exports={KEY:t,NEED:!1,fastKey:function(e,r){if(!m(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!y(e,t)){if(!a(e))return"F";if(!r)return"E";o(e)}return e[t].i},getWeak:function(e,r){if(!y(e,t)){if(!a(e))return!0;if(!r)return!1;o(e)}return e[t].w},onFreeze:function(e){return i&&s.NEED&&a(e)&&!y(e,t)&&o(e),e}}})),$=(U.KEY,U.NEED,U.fastKey,U.getWeak,U.onFreeze,t((function(e){var t=A["__core-js_shared__"]||(A["__core-js_shared__"]={});(e.exports=function(e,r){return t[e]||(t[e]=void 0!==r?r:{})})("versions",[]).push({version:T.version,mode:"pure",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}))),V=t((function(e){var t=$("wks"),r=A.Symbol,n="function"==typeof r;(e.exports=function(e){return t[e]||(t[e]=n&&r[e]||(n?r:G)("Symbol."+e))}).store=t})),K=P.f,J=V("toStringTag"),Z=function(e,t,r){e&&!y(e=r?e:e.prototype,J)&&K(e,J,{configurable:!0,value:t})},X={f:V},Q=P.f,ee=function(e){var t=T.Symbol||(T.Symbol={});"_"==e.charAt(0)||e in t||Q(t,e,{value:X.f(e)})},te=Math.ceil,re=Math.floor,ne=function(e){return isNaN(e=+e)?0:(e>0?re:te)(e)},ae=Math.min,ie=function(e){return e>0?ae(ne(e),9007199254740991):0},oe=Math.max,se=Math.min,ce=$("keys"),ue=function(e){return ce[e]||(ce[e]=G(e))},le=(W=!1,function(e,t,r){var n,a=d(e),i=ie(a.length),o=function(e,t){return(e=ne(e))<0?oe(e+t,0):se(e,t)}(r,i);if(W&&t!=t){for(;i>o;)if((n=a[o++])!=n)return!0}else for(;i>o;o++)if((W||o in a)&&a[o]===t)return W||o||0;return!W&&-1}),fe=ue("IE_PROTO"),de=function(e,t){var r,n=d(e),a=0,i=[];for(r in n)r!=fe&&y(n,r)&&i.push(r);for(;t.length>a;)y(n,r=t[a++])&&(~le(i,r)||i.push(r));return i},he="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),pe=Object.keys||function(e){return de(e,he)},me={f:Object.getOwnPropertySymbols},ge=Array.isArray||function(e){return"Array"==u(e)},ve=b?Object.defineProperties:function(e,t){O(e);for(var r,n=pe(t),a=n.length,i=0;a>i;)P.f(e,r=n[i++],t[r]);return e},ye=A.document,_e=ye&&ye.documentElement,be=ue("IE_PROTO"),Ae=function(){},we=function(){var e,t=k("iframe"),r=he.length;for(t.style.display="none",_e.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),we=e.F;r--;)delete we.prototype[he[r]];return we()},xe=Object.create||function(e,t){var r;return null!==e?(Ae.prototype=O(e),r=new Ae,Ae.prototype=null,r[be]=e):r=we(),void 0===t?r:ve(r,t)},ke=he.concat("length","prototype"),Ee={f:Object.getOwnPropertyNames||function(e){return de(e,ke)}},Me=Ee.f,Se={}.toString,Te="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Ce={f:function(e){return Te&&"[object Window]"==Se.call(e)?function(e){try{return Me(e)}catch(e){return Te.slice()}}(e):Me(d(e))}},De=U.KEY,Oe=S.f,Ne=P.f,Pe=Ce.f,je=A.Symbol,Re=A.JSON,ze=Re&&Re.stringify,Le=V("_hidden"),Ye=V("toPrimitive"),We={}.propertyIsEnumerable,Ie=$("symbol-registry"),Be=$("symbols"),qe=$("op-symbols"),He=Object.prototype,Fe="function"==typeof je,Ge=A.QObject,Ue=!Ge||!Ge.prototype||!Ge.prototype.findChild,$e=b&&_((function(){return 7!=xe(Ne({},"a",{get:function(){return Ne(this,"a",{value:7}).a}})).a}))?function(e,t,r){var n=Oe(He,t);n&&delete He[t],Ne(e,t,r),n&&e!==He&&Ne(He,t,n)}:Ne,Ve=function(e){var t=Be[e]=xe(je.prototype);return t._k=e,t},Ke=Fe&&"symbol"==typeof je.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof je},Je=function(e,t,r){return e===He&&Je(qe,t,r),O(e),t=g(t,!0),O(r),y(Be,t)?(r.enumerable?(y(e,Le)&&e[Le][t]&&(e[Le][t]=!1),r=xe(r,{enumerable:p(0,!1)})):(y(e,Le)||Ne(e,Le,p(1,{})),e[Le][t]=!0),$e(e,t,r)):Ne(e,t,r)},Ze=function(e,t){O(e);for(var r,n=function(e){var t=pe(e),r=me.f;if(r)for(var n,a=r(e),i=h.f,o=0;a.length>o;)i.call(e,n=a[o++])&&t.push(n);return t}(t=d(t)),a=0,i=n.length;i>a;)Je(e,r=n[a++],t[r]);return e},Xe=function(e){var t=We.call(this,e=g(e,!0));return!(this===He&&y(Be,e)&&!y(qe,e))&&(!(t||!y(this,e)||!y(Be,e)||y(this,Le)&&this[Le][e])||t)},Qe=function(e,t){if(e=d(e),t=g(t,!0),e!==He||!y(Be,t)||y(qe,t)){var r=Oe(e,t);return!r||!y(Be,t)||y(e,Le)&&e[Le][t]||(r.enumerable=!0),r}},et=function(e){for(var t,r=Pe(d(e)),n=[],a=0;r.length>a;)y(Be,t=r[a++])||t==Le||t==De||n.push(t);return n},tt=function(e){for(var t,r=e===He,n=Pe(r?qe:d(e)),a=[],i=0;n.length>i;)!y(Be,t=n[i++])||r&&!y(He,t)||a.push(Be[t]);return a};Fe||(q((je=function(){if(this instanceof je)throw TypeError("Symbol is not a constructor!");var e=G(arguments.length>0?arguments[0]:void 0),t=function(r){this===He&&t.call(qe,r),y(this,Le)&&y(this[Le],e)&&(this[Le][e]=!1),$e(this,e,p(1,r))};return b&&Ue&&$e(He,e,{configurable:!0,set:t}),Ve(e)}).prototype,"toString",(function(){return this._k})),S.f=Qe,P.f=Je,Ee.f=Ce.f=et,h.f=Xe,me.f=tt,X.f=function(e){return Ve(V(e))}),z(z.G+z.W+z.F*!Fe,{Symbol:je});for(var rt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;rt.length>nt;)V(rt[nt++]);for(var at=pe(V.store),it=0;at.length>it;)ee(at[it++]);z(z.S+z.F*!Fe,"Symbol",{for:function(e){return y(Ie,e+="")?Ie[e]:Ie[e]=je(e)},keyFor:function(e){if(!Ke(e))throw TypeError(e+" is not a symbol!");for(var t in Ie)if(Ie[t]===e)return t},useSetter:function(){Ue=!0},useSimple:function(){Ue=!1}}),z(z.S+z.F*!Fe,"Object",{create:function(e,t){return void 0===t?xe(e):Ze(xe(e),t)},defineProperty:Je,defineProperties:Ze,getOwnPropertyDescriptor:Qe,getOwnPropertyNames:et,getOwnPropertySymbols:tt}),Re&&z(z.S+z.F*(!Fe||_((function(){var e=je();return"[null]"!=ze([e])||"{}"!=ze({a:e})||"{}"!=ze(Object(e))}))),"JSON",{stringify:function(e){for(var t,r,n=[e],a=1;arguments.length>a;)n.push(arguments[a++]);if(r=t=n[1],(m(t)||void 0!==e)&&!Ke(e))return ge(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!Ke(t))return t}),n[1]=t,ze.apply(Re,n)}}),je.prototype[Ye]||j(je.prototype,Ye,je.prototype.valueOf),Z(je,"Symbol"),Z(Math,"Math",!0),Z(A.JSON,"JSON",!0);var ot=T.Object.getOwnPropertySymbols,st=function(e){return Object(f(e))};L("keys",(function(){return function(e){return pe(st(e))}}));var ct=T.Object.keys;z(z.S+z.F*!b,"Object",{defineProperty:P.f});var ut=T.Object,lt=function(e,t,r){return ut.defineProperty(e,t,r)};var ft=function(e,t,r){return t in e?lt(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e};var dt=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=ct(r);"function"==typeof ot&&(n=n.concat(ot(r).filter((function(e){return B(r,e).enumerable})))),n.forEach((function(t){ft(e,t,r[t])}))}return e};var ht=function(e,t){if(null==e)return{};var r,n,a={},i=ct(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a};var pt=function(e,t){if(null==e)return{};var r,n,a=ht(e,t);if(ot){var i=ot(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a},mt={},gt={};j(gt,V("iterator"),(function(){return this}));var vt,yt=function(e,t,r){e.prototype=xe(gt,{next:p(1,r)}),Z(e,t+" Iterator")},_t=ue("IE_PROTO"),bt=Object.prototype,At=Object.getPrototypeOf||function(e){return e=st(e),y(e,_t)?e[_t]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?bt:null},wt=V("iterator"),xt=!([].keys&&"next"in[].keys()),kt=function(){return this},Et=function(e,t,r,n,a,i,o){yt(r,t,n);var s,c,u,l=function(e){if(!xt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new r(this,e)}}return function(){return new r(this,e)}},f=t+" Iterator",d="values"==a,h=!1,p=e.prototype,m=p[wt]||p["@@iterator"]||a&&p[a],g=m||l(a),v=a?d?l("entries"):g:void 0,y="Array"==t&&p.entries||m;if(y&&(u=At(y.call(new e)))!==Object.prototype&&u.next&&Z(u,f,!0),d&&m&&"values"!==m.name&&(h=!0,g=function(){return m.call(this)}),o&&(xt||h||!p[wt])&&j(p,wt,g),mt[t]=g,mt[f]=kt,a)if(s={values:d?g:l("values"),keys:i?g:l("keys"),entries:v},o)for(c in s)c in p||q(p,c,s[c]);else z(z.P+z.F*(xt||h),t,s);return s},Mt=(vt=!0,function(e,t){var r,n,a=String(f(e)),i=ne(t),o=a.length;return i<0||i>=o?vt?"":void 0:(r=a.charCodeAt(i))<55296||r>56319||i+1===o||(n=a.charCodeAt(i+1))<56320||n>57343?vt?a.charAt(i):r:vt?a.slice(i,i+2):n-56320+(r-55296<<10)+65536});Et(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=Mt(t,r),this._i+=e.length,{value:e,done:!1})}));var St=function(e,t){return{value:t,done:!!e}};Et(Array,"Array",(function(e,t){this._t=d(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,St(1)):St(0,"keys"==t?r:"values"==t?e[r]:[r,e[r]])}),"values");mt.Arguments=mt.Array;for(var Tt=V("toStringTag"),Ct="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),Dt=0;Dt<Ct.length;Dt++){var Ot=Ct[Dt],Nt=A[Ot],Pt=Nt&&Nt.prototype;Pt&&!Pt[Tt]&&j(Pt,Tt,Ot),mt[Ot]=mt.Array}var jt,Rt,zt,Lt=V("toStringTag"),Yt="Arguments"==u(function(){return arguments}()),Wt=function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Lt))?r:Yt?u(t):"Object"==(n=u(t))&&"function"==typeof t.callee?"Arguments":n},It=function(e,t,r,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(r+": incorrect invocation!");return e},Bt=function(e,t,r,n){try{return n?t(O(r)[0],r[1]):t(r)}catch(t){var a=e.return;throw void 0!==a&&O(a.call(e)),t}},qt=V("iterator"),Ht=Array.prototype,Ft=function(e){return void 0!==e&&(mt.Array===e||Ht[qt]===e)},Gt=V("iterator"),Ut=T.getIteratorMethod=function(e){if(null!=e)return e[Gt]||e["@@iterator"]||mt[Wt(e)]},$t=t((function(e){var t={},r={},n=e.exports=function(e,n,a,i,o){var s,c,u,l,f=o?function(){return e}:Ut(e),d=D(a,i,n?2:1),h=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(Ft(f)){for(s=ie(e.length);s>h;h++)if((l=n?d(O(c=e[h])[0],c[1]):d(e[h]))===t||l===r)return l}else for(u=f.call(e);!(c=u.next()).done;)if((l=Bt(u,d,c.value,n))===t||l===r)return l};n.BREAK=t,n.RETURN=r})),Vt=V("species"),Kt=function(e,t){var r,n=O(e).constructor;return void 0===n||null==(r=O(n)[Vt])?t:C(r)},Jt=function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)},Zt=A.process,Xt=A.setImmediate,Qt=A.clearImmediate,er=A.MessageChannel,tr=A.Dispatch,rr=0,nr={},ar=function(){var e=+this;if(nr.hasOwnProperty(e)){var t=nr[e];delete nr[e],t()}},ir=function(e){ar.call(e.data)};Xt&&Qt||(Xt=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return nr[++rr]=function(){Jt("function"==typeof e?e:Function(e),t)},jt(rr),rr},Qt=function(e){delete nr[e]},"process"==u(Zt)?jt=function(e){Zt.nextTick(D(ar,e,1))}:tr&&tr.now?jt=function(e){tr.now(D(ar,e,1))}:er?(zt=(Rt=new er).port2,Rt.port1.onmessage=ir,jt=D(zt.postMessage,zt,1)):A.addEventListener&&"function"==typeof postMessage&&!A.importScripts?(jt=function(e){A.postMessage(e+"","*")},A.addEventListener("message",ir,!1)):jt="onreadystatechange"in k("script")?function(e){_e.appendChild(k("script")).onreadystatechange=function(){_e.removeChild(this),ar.call(e)}}:function(e){setTimeout(D(ar,e,1),0)});var or={set:Xt,clear:Qt},sr=or.set,cr=A.MutationObserver||A.WebKitMutationObserver,ur=A.process,lr=A.Promise,fr="process"==u(ur);function dr(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n})),this.resolve=C(t),this.reject=C(r)}var hr={f:function(e){return new dr(e)}},pr=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},mr=A.navigator,gr=mr&&mr.userAgent||"",vr=function(e,t){if(O(e),m(t)&&t.constructor===e)return t;var r=hr.f(e);return(0,r.resolve)(t),r.promise},yr=function(e,t,r){for(var n in t)r&&e[n]?e[n]=t[n]:j(e,n,t[n]);return e},_r=V("species"),br=function(e){var t="function"==typeof T[e]?T[e]:A[e];b&&t&&!t[_r]&&P.f(t,_r,{configurable:!0,get:function(){return this}})},Ar=V("iterator"),wr=!1;try{[7][Ar]().return=function(){wr=!0}}catch(e){}var xr,kr,Er,Mr,Sr=function(e,t){if(!t&&!wr)return!1;var r=!1;try{var n=[7],a=n[Ar]();a.next=function(){return{done:r=!0}},n[Ar]=function(){return a},e(n)}catch(e){}return r},Tr=or.set,Cr=function(){var e,t,r,n=function(){var n,a;for(fr&&(n=ur.domain)&&n.exit();e;){a=e.fn,e=e.next;try{a()}catch(n){throw e?r():t=void 0,n}}t=void 0,n&&n.enter()};if(fr)r=function(){ur.nextTick(n)};else if(!cr||A.navigator&&A.navigator.standalone)if(lr&&lr.resolve){var a=lr.resolve(void 0);r=function(){a.then(n)}}else r=function(){sr.call(A,n)};else{var i=!0,o=document.createTextNode("");new cr(n).observe(o,{characterData:!0}),r=function(){o.data=i=!i}}return function(n){var a={fn:n,next:void 0};t&&(t.next=a),e||(e=a,r()),t=a}}(),Dr=A.TypeError,Or=A.process,Nr=Or&&Or.versions,Pr=Nr&&Nr.v8||"",jr=A.Promise,Rr="process"==Wt(Or),zr=function(){},Lr=kr=hr.f,Yr=!!function(){try{var e=jr.resolve(1),t=(e.constructor={})[V("species")]=function(e){e(zr,zr)};return(Rr||"function"==typeof PromiseRejectionEvent)&&e.then(zr)instanceof t&&0!==Pr.indexOf("6.6")&&-1===gr.indexOf("Chrome/66")}catch(e){}}(),Wr=function(e){var t;return!(!m(e)||"function"!=typeof(t=e.then))&&t},Ir=function(e,t){if(!e._n){e._n=!0;var r=e._c;Cr((function(){for(var n=e._v,a=1==e._s,i=0,o=function(t){var r,i,o,s=a?t.ok:t.fail,c=t.resolve,u=t.reject,l=t.domain;try{s?(a||(2==e._h&&Hr(e),e._h=1),!0===s?r=n:(l&&l.enter(),r=s(n),l&&(l.exit(),o=!0)),r===t.promise?u(Dr("Promise-chain cycle")):(i=Wr(r))?i.call(r,c,u):c(r)):u(n)}catch(e){l&&!o&&l.exit(),u(e)}};r.length>i;)o(r[i++]);e._c=[],e._n=!1,t&&!e._h&&Br(e)}))}},Br=function(e){Tr.call(A,(function(){var t,r,n,a=e._v,i=qr(e);if(i&&(t=pr((function(){Rr?Or.emit("unhandledRejection",a,e):(r=A.onunhandledrejection)?r({promise:e,reason:a}):(n=A.console)&&n.error&&n.error("Unhandled promise rejection",a)})),e._h=Rr||qr(e)?2:1),e._a=void 0,i&&t.e)throw t.v}))},qr=function(e){return 1!==e._h&&0===(e._a||e._c).length},Hr=function(e){Tr.call(A,(function(){var t;Rr?Or.emit("rejectionHandled",e):(t=A.onrejectionhandled)&&t({promise:e,reason:e._v})}))},Fr=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Ir(t,!0))},Gr=function(e){var t,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===e)throw Dr("Promise can't be resolved itself");(t=Wr(e))?Cr((function(){var n={_w:r,_d:!1};try{t.call(e,D(Gr,n,1),D(Fr,n,1))}catch(e){Fr.call(n,e)}})):(r._v=e,r._s=1,Ir(r,!1))}catch(e){Fr.call({_w:r,_d:!1},e)}}};Yr||(jr=function(e){It(this,jr,"Promise","_h"),C(e),xr.call(this);try{e(D(Gr,this,1),D(Fr,this,1))}catch(e){Fr.call(this,e)}},(xr=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=yr(jr.prototype,{then:function(e,t){var r=Lr(Kt(this,jr));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=Rr?Or.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&Ir(this,!1),r.promise},catch:function(e){return this.then(void 0,e)}}),Er=function(){var e=new xr;this.promise=e,this.resolve=D(Gr,e,1),this.reject=D(Fr,e,1)},hr.f=Lr=function(e){return e===jr||e===Mr?new Er(e):kr(e)}),z(z.G+z.W+z.F*!Yr,{Promise:jr}),Z(jr,"Promise"),br("Promise"),Mr=T.Promise,z(z.S+z.F*!Yr,"Promise",{reject:function(e){var t=Lr(this);return(0,t.reject)(e),t.promise}}),z(z.S+!0*z.F,"Promise",{resolve:function(e){return vr(this===Mr?jr:this,e)}}),z(z.S+z.F*!(Yr&&Sr((function(e){jr.all(e).catch(zr)}))),"Promise",{all:function(e){var t=this,r=Lr(t),n=r.resolve,a=r.reject,i=pr((function(){var r=[],i=0,o=1;$t(e,!1,(function(e){var s=i++,c=!1;r.push(void 0),o++,t.resolve(e).then((function(e){c||(c=!0,r[s]=e,--o||n(r))}),a)})),--o||n(r)}));return i.e&&a(i.v),r.promise},race:function(e){var t=this,r=Lr(t),n=r.reject,a=pr((function(){$t(e,!1,(function(e){t.resolve(e).then(r.resolve,n)}))}));return a.e&&n(a.v),r.promise}}),z(z.P+z.R,"Promise",{finally:function(e){var t=Kt(this,T.Promise||A.Promise),r="function"==typeof e;return this.then(r?function(r){return vr(t,e()).then((function(){return r}))}:e,r?function(r){return vr(t,e()).then((function(){throw r}))}:e)}}),z(z.S,"Promise",{try:function(e){var t=hr.f(this),r=pr(e);return(r.e?t.reject:t.resolve)(r.v),t.promise}});var Ur=T.Promise;function $r(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Ur.resolve(c).then(n,a)}var Vr=function(e){return function(){var t=this,r=arguments;return new Ur((function(n,a){var i=e.apply(t,r);function o(e){$r(i,n,a,o,s,"next",e)}function s(e){$r(i,n,a,o,s,"throw",e)}o(void 0)}))}},Kr="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Jr=t((function(e,t){!function(r){var n=t&&!t.nodeType&&t,a=e&&!e.nodeType&&e,i="object"==typeof Kr&&Kr;i.global!==i&&i.window!==i&&i.self!==i||(r=i);var o,s,c=2147483647,u=/^xn--/,l=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},h=Math.floor,p=String.fromCharCode;function m(e){throw RangeError(d[e])}function g(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function v(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+g((e=e.replace(f,".")).split("."),t).join(".")}function y(e){for(var t,r,n=[],a=0,i=e.length;a<i;)(t=e.charCodeAt(a++))>=55296&&t<=56319&&a<i?56320==(64512&(r=e.charCodeAt(a++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),a--):n.push(t);return n}function _(e){return g(e,(function(e){var t="";return e>65535&&(t+=p((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=p(e)})).join("")}function b(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function A(e,t,r){var n=0;for(e=r?h(e/700):e>>1,e+=h(e/t);e>455;n+=36)e=h(e/35);return h(n+36*e/(e+38))}function w(e){var t,r,n,a,i,o,s,u,l,f,d,p=[],g=e.length,v=0,y=128,b=72;for((r=e.lastIndexOf("-"))<0&&(r=0),n=0;n<r;++n)e.charCodeAt(n)>=128&&m("not-basic"),p.push(e.charCodeAt(n));for(a=r>0?r+1:0;a<g;){for(i=v,o=1,s=36;a>=g&&m("invalid-input"),((u=(d=e.charCodeAt(a++))-48<10?d-22:d-65<26?d-65:d-97<26?d-97:36)>=36||u>h((c-v)/o))&&m("overflow"),v+=u*o,!(u<(l=s<=b?1:s>=b+26?26:s-b));s+=36)o>h(c/(f=36-l))&&m("overflow"),o*=f;b=A(v-i,t=p.length+1,0==i),h(v/t)>c-y&&m("overflow"),y+=h(v/t),v%=t,p.splice(v++,0,y)}return _(p)}function x(e){var t,r,n,a,i,o,s,u,l,f,d,g,v,_,w,x=[];for(g=(e=y(e)).length,t=128,r=0,i=72,o=0;o<g;++o)(d=e[o])<128&&x.push(p(d));for(n=a=x.length,a&&x.push("-");n<g;){for(s=c,o=0;o<g;++o)(d=e[o])>=t&&d<s&&(s=d);for(s-t>h((c-r)/(v=n+1))&&m("overflow"),r+=(s-t)*v,t=s,o=0;o<g;++o)if((d=e[o])<t&&++r>c&&m("overflow"),d==t){for(u=r,l=36;!(u<(f=l<=i?1:l>=i+26?26:l-i));l+=36)w=u-f,_=36-f,x.push(p(b(f+w%_,0))),u=h(w/_);x.push(p(b(u,0))),i=A(r,v,n==a),r=0,++n}++r,++t}return x.join("")}if(o={version:"1.3.2",ucs2:{decode:y,encode:_},decode:w,encode:x,toASCII:function(e){return v(e,(function(e){return l.test(e)?"xn--"+x(e):e}))},toUnicode:function(e){return v(e,(function(e){return u.test(e)?w(e.slice(4).toLowerCase()):e}))}},n&&a)if(e.exports==n)a.exports=o;else for(s in o)o.hasOwnProperty(s)&&(n[s]=o[s]);else r.punycode=o}(this)})),Zr=function(e){return"string"==typeof e},Xr=function(e){return"object"==typeof e&&null!==e},Qr=function(e){return null===e},en=function(e){return null==e};function tn(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var rn=function(e,t,r,n){t=t||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(t);var o=1e3;n&&"number"==typeof n.maxKeys&&(o=n.maxKeys);var s=e.length;o>0&&s>o&&(s=o);for(var c=0;c<s;++c){var u,l,f,d,h=e[c].replace(i,"%20"),p=h.indexOf(r);p>=0?(u=h.substr(0,p),l=h.substr(p+1)):(u=h,l=""),f=decodeURIComponent(u),d=decodeURIComponent(l),tn(a,f)?Array.isArray(a[f])?a[f].push(d):a[f]=[a[f],d]:a[f]=d}return a},nn=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},an=function(e,t,r,n){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(n){var a=encodeURIComponent(nn(n))+r;return Array.isArray(e[n])?e[n].map((function(e){return a+encodeURIComponent(nn(e))})).join(t):a+encodeURIComponent(nn(e[n]))})).join(t):n?encodeURIComponent(nn(n))+r+encodeURIComponent(nn(e)):""},on=t((function(e,t){t.decode=t.parse=rn,t.encode=t.stringify=an})),sn=(on.decode,on.parse,on.encode,on.stringify,En),cn=function(e,t){return En(e,!1,!0).resolve(t)},un=function(e,t){return e?En(e,!1,!0).resolveObject(t):t},ln=function(e){Zr(e)&&(e=En(e));return e instanceof dn?e.format():dn.prototype.format.call(e)},fn=dn;function dn(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var hn=/^([a-z0-9.+-]+:)/i,pn=/:[0-9]*$/,mn=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,gn=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),vn=["'"].concat(gn),yn=["%","/","?",";","#"].concat(vn),_n=["/","?","#"],bn=/^[+a-z0-9A-Z_-]{0,63}$/,An=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,wn={javascript:!0,"javascript:":!0},xn={javascript:!0,"javascript:":!0},kn={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function En(e,t,r){if(e&&Xr(e)&&e instanceof dn)return e;var n=new dn;return n.parse(e,t,r),n}dn.prototype.parse=function(e,t,r){if(!Zr(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),a=-1!==n&&n<e.indexOf("#")?"?":"#",i=e.split(a);i[0]=i[0].replace(/\\/g,"/");var o=e=i.join(a);if(o=o.trim(),!r&&1===e.split("#").length){var s=mn.exec(o);if(s)return this.path=o,this.href=o,this.pathname=s[1],s[2]?(this.search=s[2],this.query=t?on.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var c=hn.exec(o);if(c){var u=(c=c[0]).toLowerCase();this.protocol=u,o=o.substr(c.length)}if(r||c||o.match(/^\/\/[^@\/]+@[^@\/]+/)){var l="//"===o.substr(0,2);!l||c&&xn[c]||(o=o.substr(2),this.slashes=!0)}if(!xn[c]&&(l||c&&!kn[c])){for(var f,d,h=-1,p=0;p<_n.length;p++){-1!==(m=o.indexOf(_n[p]))&&(-1===h||m<h)&&(h=m)}-1!==(d=-1===h?o.lastIndexOf("@"):o.lastIndexOf("@",h))&&(f=o.slice(0,d),o=o.slice(d+1),this.auth=decodeURIComponent(f)),h=-1;for(p=0;p<yn.length;p++){var m;-1!==(m=o.indexOf(yn[p]))&&(-1===h||m<h)&&(h=m)}-1===h&&(h=o.length),this.host=o.slice(0,h),o=o.slice(h),this.parseHost(),this.hostname=this.hostname||"";var g="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!g)for(var v=this.hostname.split(/\./),y=(p=0,v.length);p<y;p++){var _=v[p];if(_&&!_.match(bn)){for(var b="",A=0,w=_.length;A<w;A++)_.charCodeAt(A)>127?b+="x":b+=_[A];if(!b.match(bn)){var x=v.slice(0,p),k=v.slice(p+1),E=_.match(An);E&&(x.push(E[1]),k.unshift(E[2])),k.length&&(o="/"+k.join(".")+o),this.hostname=x.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),g||(this.hostname=Jr.toASCII(this.hostname));var M=this.port?":"+this.port:"",S=this.hostname||"";this.host=S+M,this.href+=this.host,g&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!wn[u])for(p=0,y=vn.length;p<y;p++){var T=vn[p];if(-1!==o.indexOf(T)){var C=encodeURIComponent(T);C===T&&(C=escape(T)),o=o.split(T).join(C)}}var D=o.indexOf("#");-1!==D&&(this.hash=o.substr(D),o=o.slice(0,D));var O=o.indexOf("?");if(-1!==O?(this.search=o.substr(O),this.query=o.substr(O+1),t&&(this.query=on.parse(this.query)),o=o.slice(0,O)):t&&(this.search="",this.query={}),o&&(this.pathname=o),kn[u]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){M=this.pathname||"";var N=this.search||"";this.path=M+N}return this.href=this.format(),this},dn.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&Xr(this.query)&&Object.keys(this.query).length&&(i=on.stringify(this.query));var o=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||kn[t])&&!1!==a?(a="//"+(a||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):a||(a=""),n&&"#"!==n.charAt(0)&&(n="#"+n),o&&"?"!==o.charAt(0)&&(o="?"+o),t+a+(r=r.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(o=o.replace("#","%23"))+n},dn.prototype.resolve=function(e){return this.resolveObject(En(e,!1,!0)).format()},dn.prototype.resolveObject=function(e){if(Zr(e)){var t=new dn;t.parse(e,!1,!0),e=t}for(var r=new dn,n=Object.keys(this),a=0;a<n.length;a++){var i=n[a];r[i]=this[i]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var o=Object.keys(e),s=0;s<o.length;s++){var c=o[s];"protocol"!==c&&(r[c]=e[c])}return kn[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!kn[e.protocol]){for(var u=Object.keys(e),l=0;l<u.length;l++){var f=u[l];r[f]=e[f]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||xn[e.protocol])r.pathname=e.pathname;else{for(var d=(e.pathname||"").split("/");d.length&&!(e.host=d.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),r.pathname=d.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var h=r.pathname||"",p=r.search||"";r.path=h+p}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var m=r.pathname&&"/"===r.pathname.charAt(0),g=e.host||e.pathname&&"/"===e.pathname.charAt(0),v=g||m||r.host&&e.pathname,y=v,_=r.pathname&&r.pathname.split("/")||[],b=(d=e.pathname&&e.pathname.split("/")||[],r.protocol&&!kn[r.protocol]);if(b&&(r.hostname="",r.port=null,r.host&&(""===_[0]?_[0]=r.host:_.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),v=v&&(""===d[0]||""===_[0])),g)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,_=d;else if(d.length)_||(_=[]),_.pop(),_=_.concat(d),r.search=e.search,r.query=e.query;else if(!en(e.search)){if(b)r.hostname=r.host=_.shift(),(E=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=E.shift(),r.host=r.hostname=E.shift());return r.search=e.search,r.query=e.query,Qr(r.pathname)&&Qr(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!_.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var A=_.slice(-1)[0],w=(r.host||e.host||_.length>1)&&("."===A||".."===A)||""===A,x=0,k=_.length;k>=0;k--)"."===(A=_[k])?_.splice(k,1):".."===A?(_.splice(k,1),x++):x&&(_.splice(k,1),x--);if(!v&&!y)for(;x--;x)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),w&&"/"!==_.join("/").substr(-1)&&_.push("");var E,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);b&&(r.hostname=r.host=M?"":_.length?_.shift():"",(E=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=E.shift(),r.host=r.hostname=E.shift()));return(v=v||r.host&&_.length)&&!M&&_.unshift(""),_.length?r.pathname=_.join("/"):(r.pathname=null,r.path=null),Qr(r.pathname)&&Qr(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},dn.prototype.parseHost=function(){var e=this.host,t=pn.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var Mn,Sn={parse:sn,resolve:cn,resolveObject:un,format:ln,Url:fn},Tn=t((function(e){ /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(t,n){e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}}("undefined"!=typeof window?window:this,(function(e,t){var n=[],r=Object.getPrototypeOf,a=n.slice,i=n.flat?function(e){return n.flat.call(e)}:function(e){return n.concat.apply([],e)},o=n.push,s=n.indexOf,u={},c=u.toString,l=u.hasOwnProperty,f=l.toString,d=f.call(Object),h={},p=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},m=function(e){return null!=e&&e===e.window},g=e.document,v={type:!0,src:!0,nonce:!0,noModule:!0};function y(e,t,n){var r,a,i=(n=n||g).createElement("script");if(i.text=e,t)for(r in v)(a=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,a);n.head.appendChild(i).parentNode.removeChild(i)}function _(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?u[c.call(e)]||"object":typeof e}var b="3.6.0",w=function(e,t){return new w.fn.init(e,t)};function A(e){var t=!!e&&"length"in e&&e.length,n=_(e);return!p(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return a.call(this)},get:function(e){return null==e?a.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(w.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:o,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,a,i,o=arguments[0]||{},s=1,u=arguments.length,c=!1;for("boolean"==typeof o&&(c=o,o=arguments[s]||{},s++),"object"==typeof o||p(o)||(o={}),s===u&&(o=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&o!==r&&(c&&r&&(w.isPlainObject(r)||(a=Array.isArray(r)))?(n=o[t],i=a&&!Array.isArray(n)?[]:a||w.isPlainObject(n)?n:{},a=!1,o[t]=w.extend(c,i,r)):void 0!==r&&(o[t]=r));return o},w.extend({expando:"jQuery"+(b+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e)||(t=r(e))&&("function"!=typeof(n=l.call(t,"constructor")&&t.constructor)||f.call(n)!==d))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){y(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(A(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(A(Object(e))?w.merge(n,"string"==typeof e?[e]:e):o.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:s.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,a=e.length;r<n;r++)e[a++]=t[r];return e.length=a,e},grep:function(e,t,n){for(var r=[],a=0,i=e.length,o=!n;a<i;a++)!t(e[a],a)!==o&&r.push(e[a]);return r},map:function(e,t,n){var r,a,o=0,s=[];if(A(e))for(r=e.length;o<r;o++)null!=(a=t(e[o],o,n))&&s.push(a);else for(o in e)null!=(a=t(e[o],o,n))&&s.push(a);return i(s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(e,t){u["[object "+t+"]"]=t.toLowerCase()}));var x=function(e){var t,n,r,a,i,o,s,u,c,l,f,d,h,p,m,g,v,y,_,b="sizzle"+1*new Date,w=e.document,A=0,x=0,k=ue(),E=ue(),S=ue(),M=ue(),T=function(e,t){return e===t&&(f=!0),0},C={}.hasOwnProperty,D=[],O=D.pop,N=D.push,j=D.push,P=D.slice,z=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",R="[\\x20\\t\\r\\n\\f]",Y="(?:\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+R+"*("+Y+")(?:"+R+"*([*^$|!~]?=)"+R+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+Y+"))|)"+R+"*\\]",q=":("+Y+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",I=new RegExp(R+"+","g"),H=new RegExp("^"+R+"+|((?:^|[^\\\\])(?:\\\\.)*)"+R+"+$","g"),B=new RegExp("^"+R+"*,"+R+"*"),F=new RegExp("^"+R+"*([>+~]|"+R+")"+R+"*"),G=new RegExp(R+"|>"),U=new RegExp(q),$=new RegExp("^"+Y+"$"),V={ID:new RegExp("^#("+Y+")"),CLASS:new RegExp("^\\.("+Y+")"),TAG:new RegExp("^("+Y+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},J=/HTML$/i,K=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){d()},oe=be((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{j.apply(D=P.call(w.childNodes),w.childNodes),D[w.childNodes.length].nodeType}catch(t){j={apply:D.length?function(e,t){N.apply(e,P.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,a){var i,s,c,l,f,p,v,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!a&&(d(t),t=t||h,m)){if(11!==w&&(f=Q.exec(e)))if(i=f[1]){if(9===w){if(!(c=t.getElementById(i)))return r;if(c.id===i)return r.push(c),r}else if(y&&(c=y.getElementById(i))&&_(t,c)&&c.id===i)return r.push(c),r}else{if(f[2])return j.apply(r,t.getElementsByTagName(e)),r;if((i=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return j.apply(r,t.getElementsByClassName(i)),r}if(n.qsa&&!M[e+" "]&&(!g||!g.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===w&&(G.test(e)||F.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((l=t.getAttribute("id"))?l=l.replace(re,ae):t.setAttribute("id",l=b)),s=(p=o(e)).length;s--;)p[s]=(l?"#"+l:":scope")+" "+_e(p[s]);v=p.join(",")}try{return j.apply(r,y.querySelectorAll(v)),r}catch(t){M(e,!0)}finally{l===b&&t.removeAttribute("id")}}}return u(e.replace(H,"$1"),t,r,a)}function ue(){var e=[];return function t(n,a){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=a}}function ce(e){return e[b]=!0,e}function le(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),a=n.length;a--;)r.attrHandle[n[a]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function he(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function me(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&oe(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ge(e){return ce((function(t){return t=+t,ce((function(n,r){for(var a,i=e([],n.length,t),o=i.length;o--;)n[a=i[o]]&&(n[a]=!(r[a]=n[a]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!J.test(t||n&&n.nodeName||"HTML")},d=se.setDocument=function(e){var t,a,o=e?e.ownerDocument||e:w;return o!=h&&9===o.nodeType&&o.documentElement&&(p=(h=o).documentElement,m=!i(h),w!=h&&(a=h.defaultView)&&a.top!==a&&(a.addEventListener?a.addEventListener("unload",ie,!1):a.attachEvent&&a.attachEvent("onunload",ie)),n.scope=le((function(e){return p.appendChild(e).appendChild(h.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=le((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=le((function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=Z.test(h.getElementsByClassName),n.getById=le((function(e){return p.appendChild(e).id=b,!h.getElementsByName||!h.getElementsByName(b).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,a,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[a++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=Z.test(h.querySelectorAll))&&(le((function(e){var t;p.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+R+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+b+"-]").length||g.push("~="),(t=h.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),le((function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=Z.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&le((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",q)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=Z.test(p.compareDocumentPosition),_=t||Z.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},T=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==h||e.ownerDocument==w&&_(w,e)?-1:t==h||t.ownerDocument==w&&_(w,t)?1:l?z(l,e)-z(l,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e==h?-1:t==h?1:a?-1:i?1:l?z(l,e)-z(l,t):0;if(a===i)return de(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?de(o[r],s[r]):o[r]==w?-1:s[r]==w?1:0}),h},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(d(e),n.matchesSelector&&m&&!M[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){M(t,!0)}return 0<se(t,h,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=h&&d(e),_(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=h&&d(e);var a=r.attrHandle[t.toLowerCase()],i=a&&C.call(r.attrHandle,t.toLowerCase())?a(e,t,!m):void 0;return void 0!==i?i:n.attributes||!m?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},se.escape=function(e){return(e+"").replace(re,ae)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],a=0,i=0;if(f=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(T),f){for(;t=e[i++];)t===e[i]&&(a=r.push(i));for(;a--;)e.splice(r[a],1)}return l=null,e},a=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=a(t);return n},(r=se.selectors={cacheLength:50,createPseudo:ce,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=o(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=k[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&k(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var a=se.attr(r,e);return null==a?"!="===t:!t||(a+="","="===t?a===n:"!="===t?a!==n:"^="===t?n&&0===a.indexOf(n):"*="===t?n&&-1<a.indexOf(n):"$="===t?n&&a.slice(-n.length)===n:"~="===t?-1<(" "+a.replace(I," ")+" ").indexOf(n):"|="===t&&(a===n||a.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,a){var i="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===a?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,h,p,m=i!==o?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!u&&!s,_=!1;if(g){if(i){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?g.firstChild:g.lastChild],o&&y){for(_=(h=(c=(l=(f=(d=g)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===A&&c[1])&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(_=h=0)||p.pop();)if(1===d.nodeType&&++_&&d===t){l[e]=[A,h,_];break}}else if(y&&(_=h=(c=(l=(f=(d=t)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===A&&c[1]),!1===_)for(;(d=++h&&d&&d[m]||(_=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++_||(y&&((l=(f=d[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[A,_]),d!==t)););return(_-=a)===r||_%r==0&&0<=_/r}}},PSEUDO:function(e,t){var n,a=r.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[b]?a(t):1<a.length?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?ce((function(e,n){for(var r,i=a(e,t),o=i.length;o--;)e[r=z(e,i[o])]=!(n[r]=i[o])})):function(e){return a(e,0,n)}):a}},pseudos:{not:ce((function(e){var t=[],n=[],r=s(e.replace(H,"$1"));return r[b]?ce((function(e,t,n,a){for(var i,o=r(e,null,a,[]),s=e.length;s--;)(i=o[s])&&(e[s]=!(t[s]=i))})):function(e,a,i){return t[0]=e,r(t,null,i,n),t[0]=null,!n.pop()}})),has:ce((function(e){return function(t){return 0<se(e,t).length}})),contains:ce((function(e){return e=e.replace(te,ne),function(t){return-1<(t.textContent||a(t)).indexOf(e)}})),lang:ce((function(e){return $.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return X.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge((function(){return[0]})),last:ge((function(e,t){return[t-1]})),eq:ge((function(e,t,n){return[n<0?n+t:n]})),even:ge((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:ge((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:ge((function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e})),gt:ge((function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e}))}}).pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=he(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}function _e(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(e,t,n){var r=t.dir,a=t.next,i=a||r,o=n&&"parentNode"===i,s=x++;return t.first?function(t,n,a){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,a);return!1}:function(t,n,u){var c,l,f,d=[A,s];if(u){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||o)if(l=(f=t[b]||(t[b]={}))[t.uniqueID]||(f[t.uniqueID]={}),a&&a===t.nodeName.toLowerCase())t=t[r]||t;else{if((c=l[i])&&c[0]===A&&c[1]===s)return d[2]=c[2];if((l[i]=d)[2]=e(t,n,u))return!0}return!1}}function we(e){return 1<e.length?function(t,n,r){for(var a=e.length;a--;)if(!e[a](t,n,r))return!1;return!0}:e[0]}function Ae(e,t,n,r,a){for(var i,o=[],s=0,u=e.length,c=null!=t;s<u;s++)(i=e[s])&&(n&&!n(i,r,a)||(o.push(i),c&&t.push(s)));return o}function xe(e,t,n,r,a,i){return r&&!r[b]&&(r=xe(r)),a&&!a[b]&&(a=xe(a,i)),ce((function(i,o,s,u){var c,l,f,d=[],h=[],p=o.length,m=i||function(e,t,n){for(var r=0,a=t.length;r<a;r++)se(e,t[r],n);return n}(t||"*",s.nodeType?[s]:s,[]),g=!e||!i&&t?m:Ae(m,d,e,s,u),v=n?a||(i?e:p||r)?[]:o:g;if(n&&n(g,v,s,u),r)for(c=Ae(v,h),r(c,[],s,u),l=c.length;l--;)(f=c[l])&&(v[h[l]]=!(g[h[l]]=f));if(i){if(a||e){if(a){for(c=[],l=v.length;l--;)(f=v[l])&&c.push(g[l]=f);a(null,v=[],c,u)}for(l=v.length;l--;)(f=v[l])&&-1<(c=a?z(i,f):d[l])&&(i[c]=!(o[c]=f))}}else v=Ae(v===o?v.splice(p,v.length):v),a?a(null,o,v,u):j.apply(o,v)}))}function ke(e){for(var t,n,a,i=e.length,o=r.relative[e[0].type],s=o||r.relative[" "],u=o?1:0,l=be((function(e){return e===t}),s,!0),f=be((function(e){return-1<z(t,e)}),s,!0),d=[function(e,n,r){var a=!o&&(r||n!==c)||((t=n).nodeType?l(e,n,r):f(e,n,r));return t=null,a}];u<i;u++)if(n=r.relative[e[u].type])d=[be(we(d),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(a=++u;a<i&&!r.relative[e[a].type];a++);return xe(1<u&&we(d),1<u&&_e(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(H,"$1"),n,u<a&&ke(e.slice(u,a)),a<i&&ke(e=e.slice(a)),a<i&&_e(e))}d.push(n)}return we(d)}return ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,o=se.tokenize=function(e,t){var n,a,i,o,s,u,c,l=E[e+" "];if(l)return t?0:l.slice(0);for(s=e,u=[],c=r.preFilter;s;){for(o in n&&!(a=B.exec(s))||(a&&(s=s.slice(a[0].length)||s),u.push(i=[])),n=!1,(a=F.exec(s))&&(n=a.shift(),i.push({value:n,type:a[0].replace(H," ")}),s=s.slice(n.length)),r.filter)!(a=V[o].exec(s))||c[o]&&!(a=c[o](a))||(n=a.shift(),i.push({value:n,type:o,matches:a}),s=s.slice(n.length));if(!n)break}return t?s.length:s?se.error(e):E(e,u).slice(0)},s=se.compile=function(e,t){var n,a,i,s,u,l,f=[],p=[],g=S[e+" "];if(!g){for(t||(t=o(e)),n=t.length;n--;)(g=ke(t[n]))[b]?f.push(g):p.push(g);(g=S(e,(a=p,s=0<(i=f).length,u=0<a.length,l=function(e,t,n,o,l){var f,p,g,v=0,y="0",_=e&&[],b=[],w=c,x=e||u&&r.find.TAG("*",l),k=A+=null==w?1:Math.random()||.1,E=x.length;for(l&&(c=t==h||t||l);y!==E&&null!=(f=x[y]);y++){if(u&&f){for(p=0,t||f.ownerDocument==h||(d(f),n=!m);g=a[p++];)if(g(f,t||h,n)){o.push(f);break}l&&(A=k)}s&&((f=!g&&f)&&v--,e&&_.push(f))}if(v+=y,s&&y!==v){for(p=0;g=i[p++];)g(_,b,t,n);if(e){if(0<v)for(;y--;)_[y]||b[y]||(b[y]=O.call(o));b=Ae(b)}j.apply(o,b),l&&!e&&0<b.length&&1<v+i.length&&se.uniqueSort(o)}return l&&(A=k,c=w),_},s?ce(l):l))).selector=e}return g},u=se.select=function(e,t,n,a){var i,u,c,l,f,d="function"==typeof e&&e,h=!a&&o(e=d.selector||e);if(n=n||[],1===h.length){if(2<(u=h[0]=h[0].slice(0)).length&&"ID"===(c=u[0]).type&&9===t.nodeType&&m&&r.relative[u[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(te,ne),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(i=V.needsContext.test(e)?0:u.length;i--&&(c=u[i],!r.relative[l=c.type]);)if((f=r.find[l])&&(a=f(c.matches[0].replace(te,ne),ee.test(u[0].type)&&ve(t.parentNode)||t))){if(u.splice(i,1),!(e=a.length&&_e(u)))return j.apply(n,a),n;break}}return(d||s(e,h))(a,t,!m,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=b.split("").sort(T).join("")===b,n.detectDuplicates=!!f,d(),n.sortDetached=le((function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))})),le((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||fe("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&le((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||fe("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),le((function(e){return null==e.getAttribute("disabled")}))||fe(L,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),se}(e);w.find=x,w.expr=x.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=x.uniqueSort,w.text=x.getText,w.isXMLDoc=x.isXML,w.contains=x.contains,w.escapeSelector=x.escape;var k=function(e,t,n){for(var r=[],a=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&w(e).is(n))break;r.push(e)}return r},E=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},S=w.expr.match.needsContext;function M(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var T=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function C(e,t,n){return p(t)?w.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?w.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?w.grep(e,(function(e){return-1<s.call(t,e)!==n})):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,(function(e){return 1===e.nodeType})))},w.fn.extend({find:function(e){var t,n,r=this.length,a=this;if("string"!=typeof e)return this.pushStack(w(e).filter((function(){for(t=0;t<r;t++)if(w.contains(a[t],this))return!0})));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,a[t],n);return 1<r?w.uniqueSort(n):n},filter:function(e){return this.pushStack(C(this,e||[],!1))},not:function(e){return this.pushStack(C(this,e||[],!0))},is:function(e){return!!C(this,"string"==typeof e&&S.test(e)?w(e):e||[],!1).length}});var D,O=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:O.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:g,!0)),T.test(r[1])&&w.isPlainObject(t))for(r in t)p(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(a=g.getElementById(r[2]))&&(this[0]=a,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):p(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,D=w(g);var N=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0}))},closest:function(e,t){var n,r=0,a=this.length,i=[],o="string"!=typeof e&&w(e);if(!S.test(e))for(;r<a;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(o?-1<o.index(n):1===n.nodeType&&w.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(1<i.length?w.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?s.call(w(e),this[0]):s.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return E((e.parentNode||{}).firstChild,e)},children:function(e){return E(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(M(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},(function(e,t){w.fn[e]=function(n,r){var a=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(a=w.filter(r,a)),1<this.length&&(j[e]||w.uniqueSort(a),N.test(e)&&a.reverse()),this.pushStack(a)}}));var z=/[^\x20\t\r\n\f]+/g;function L(e){return e}function R(e){throw e}function Y(e,t,n,r){var a;try{e&&p(a=e.promise)?a.call(e).done(t).fail(n):e&&p(a=e.then)?a.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.Callbacks=function(e){var t,n;e="string"==typeof e?(t=e,n={},w.each(t.match(z)||[],(function(e,t){n[t]=!0})),n):w.extend({},e);var r,a,i,o,s=[],u=[],c=-1,l=function(){for(o=o||e.once,i=r=!0;u.length;c=-1)for(a=u.shift();++c<s.length;)!1===s[c].apply(a[0],a[1])&&e.stopOnFalse&&(c=s.length,a=!1);e.memory||(a=!1),r=!1,o&&(s=a?[]:"")},f={add:function(){return s&&(a&&!r&&(c=s.length-1,u.push(a)),function t(n){w.each(n,(function(n,r){p(r)?e.unique&&f.has(r)||s.push(r):r&&r.length&&"string"!==_(r)&&t(r)}))}(arguments),a&&!r&&l()),this},remove:function(){return w.each(arguments,(function(e,t){for(var n;-1<(n=w.inArray(t,s,n));)s.splice(n,1),n<=c&&c--})),this},has:function(e){return e?-1<w.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return o=u=[],s=a="",this},disabled:function(){return!s},lock:function(){return o=u=[],a||r||(s=a=""),this},locked:function(){return!!o},fireWith:function(e,t){return o||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),r||l()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",a={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var e=arguments;return w.Deferred((function(t){w.each(n,(function(n,r){var a=p(e[r[4]])&&e[r[4]];i[r[1]]((function(){var e=a&&a.apply(this,arguments);e&&p(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,a?[e]:arguments)}))})),e=null})).promise()},then:function(t,r,a){var i=0;function o(t,n,r,a){return function(){var s=this,u=arguments,c=function(){var e,c;if(!(t<i)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");c=e&&("object"==typeof e||"function"==typeof e)&&e.then,p(c)?a?c.call(e,o(i,n,L,a),o(i,n,R,a)):(i++,c.call(e,o(i,n,L,a),o(i,n,R,a),o(i,n,L,n.notifyWith))):(r!==L&&(s=void 0,u=[e]),(a||n.resolveWith)(s,u))}},l=a?c:function(){try{c()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,l.stackTrace),i<=t+1&&(r!==R&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?l():(w.Deferred.getStackHook&&(l.stackTrace=w.Deferred.getStackHook()),e.setTimeout(l))}}return w.Deferred((function(e){n[0][3].add(o(0,e,p(a)?a:L,e.notifyWith)),n[1][3].add(o(0,e,p(t)?t:L)),n[2][3].add(o(0,e,p(r)?r:R))})).promise()},promise:function(e){return null!=e?w.extend(e,a):a}},i={};return w.each(n,(function(e,t){var o=t[2],s=t[5];a[t[1]]=o.add,s&&o.add((function(){r=s}),n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),o.add(t[3].fire),i[t[0]]=function(){return i[t[0]+"With"](this===i?void 0:this,arguments),this},i[t[0]+"With"]=o.fireWith})),a.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),i=a.call(arguments),o=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=1<arguments.length?a.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(Y(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||p(i[n]&&i[n].then)))return o.then();for(;n--;)Y(i[n],s(n),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&W.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout((function(){throw t}))};var q=w.Deferred();function I(){g.removeEventListener("DOMContentLoaded",I),e.removeEventListener("load",I),w.ready()}w.fn.ready=function(e){return q.then(e).catch((function(e){w.readyException(e)})),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0)!==e&&0<--w.readyWait||q.resolveWith(g,[w])}}),w.ready.then=q.then,"complete"===g.readyState||"loading"!==g.readyState&&!g.documentElement.doScroll?e.setTimeout(w.ready):(g.addEventListener("DOMContentLoaded",I),e.addEventListener("load",I));var H=function(e,t,n,r,a,i,o){var s=0,u=e.length,c=null==n;if("object"===_(n))for(s in a=!0,n)H(e,t,s,n[s],!0,i,o);else if(void 0!==r&&(a=!0,p(r)||(o=!0),c&&(o?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,o?r:r.call(e[s],s,t(e[s],n)));return a?e:c?t.call(e):u?t(e[0],n):i},B=/^-ms-/,F=/-([a-z])/g;function G(e,t){return t.toUpperCase()}function U(e){return e.replace(B,"ms-").replace(F,G)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function V(){this.expando=w.expando+V.uid++}V.uid=1,V.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,a=this.cache(e);if("string"==typeof t)a[U(t)]=n;else for(r in t)a[U(r)]=t[r];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][U(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(U):(t=U(t))in r?[t]:t.match(z)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new V,K=new V,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function Q(e,t,n){var r,a;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(a=n)||"false"!==a&&("null"===a?null:a===+a+""?+a:X.test(a)?JSON.parse(a):a)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,a,i=this[0],o=i&&i.attributes;if(void 0===e){if(this.length&&(a=K.get(i),1===i.nodeType&&!J.get(i,"hasDataAttrs"))){for(n=o.length;n--;)o[n]&&0===(r=o[n].name).indexOf("data-")&&(r=U(r.slice(5)),Q(i,r,a[r]));J.set(i,"hasDataAttrs",!0)}return a}return"object"==typeof e?this.each((function(){K.set(this,e)})):H(this,(function(t){var n;if(i&&void 0===t)return void 0!==(n=K.get(i,e))||void 0!==(n=Q(i,e))?n:void 0;this.each((function(){K.set(this,e,t)}))}),null,t,1<arguments.length,null,!0)},removeData:function(e){return this.each((function(){K.remove(this,e)}))}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,a=n.shift(),i=w._queueHooks(e,t);"inprogress"===a&&(a=n.shift(),r--),a&&("fx"===t&&n.unshift("inprogress"),delete i.stop,a.call(e,(function(){w.dequeue(e,t)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add((function(){J.remove(e,[t+"queue",n])}))})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each((function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){w.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,a=w.Deferred(),i=this,o=this.length,s=function(){--r||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)(n=J.get(i[o],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),a.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=g.documentElement,ae=function(e){return w.contains(e.ownerDocument,e)},ie={composed:!0};re.getRootNode&&(ae=function(e){return w.contains(e.ownerDocument,e)||e.getRootNode(ie)===e.ownerDocument});var oe=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ae(e)&&"none"===w.css(e,"display")};function se(e,t,n,r){var a,i,o=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),c=n&&n[3]||(w.cssNumber[t]?"":"px"),l=e.nodeType&&(w.cssNumber[t]||"px"!==c&&+u)&&te.exec(w.css(e,t));if(l&&l[3]!==c){for(u/=2,c=c||l[3],l=+u||1;o--;)w.style(e,t,l+c),(1-i)*(1-(i=s()/u||.5))<=0&&(o=0),l/=i;l*=2,w.style(e,t,l+c),n=n||[]}return n&&(l=+l||+u||0,a=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=a)),a}var ue={};function ce(e,t){for(var n,r,a,i,o,s,u,c=[],l=0,f=e.length;l<f;l++)(r=e[l]).style&&(n=r.style.display,t?("none"===n&&(c[l]=J.get(r,"display")||null,c[l]||(r.style.display="")),""===r.style.display&&oe(r)&&(c[l]=(u=o=i=void 0,o=(a=r).ownerDocument,s=a.nodeName,(u=ue[s])||(i=o.body.appendChild(o.createElement(s)),u=w.css(i,"display"),i.parentNode.removeChild(i),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(c[l]="none",J.set(r,"display",n)));for(l=0;l<f;l++)null!=c[l]&&(e[l].style.display=c[l]);return e}w.fn.extend({show:function(){return ce(this,!0)},hide:function(){return ce(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){oe(this)?w(this).show():w(this).hide()}))}});var le,fe,de=/^(?:checkbox|radio)$/i,he=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=g.createDocumentFragment().appendChild(g.createElement("div")),(fe=g.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),le.appendChild(fe),h.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="<option></option>",h.option=!!le.lastChild;var me={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ge(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&M(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}me.tbody=me.tfoot=me.colgroup=me.caption=me.thead,me.th=me.td,h.option||(me.optgroup=me.option=[1,"<select multiple='multiple'>","</select>"]);var ye=/<|&#?\w+;/;function _e(e,t,n,r,a){for(var i,o,s,u,c,l,f=t.createDocumentFragment(),d=[],h=0,p=e.length;h<p;h++)if((i=e[h])||0===i)if("object"===_(i))w.merge(d,i.nodeType?[i]:i);else if(ye.test(i)){for(o=o||f.appendChild(t.createElement("div")),s=(he.exec(i)||["",""])[1].toLowerCase(),u=me[s]||me._default,o.innerHTML=u[1]+w.htmlPrefilter(i)+u[2],l=u[0];l--;)o=o.lastChild;w.merge(d,o.childNodes),(o=f.firstChild).textContent=""}else d.push(t.createTextNode(i));for(f.textContent="",h=0;i=d[h++];)if(r&&-1<w.inArray(i,r))a&&a.push(i);else if(c=ae(i),o=ge(f.appendChild(i),"script"),c&&ve(o),n)for(l=0;i=o[l++];)pe.test(i.type||"")&&n.push(i);return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Ae(){return!1}function xe(e,t){return e===function(){try{return g.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,a,i){var o,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],i);return e}if(null==r&&null==a?(a=n,r=n=void 0):null==a&&("string"==typeof n?(a=r,r=void 0):(a=r,r=n,n=void 0)),!1===a)a=Ae;else if(!a)return e;return 1===i&&(o=a,(a=function(e){return w().off(e),o.apply(this,arguments)}).guid=o.guid||(o.guid=w.guid++)),e.each((function(){w.event.add(this,t,a,r,n)}))}function Ee(e,t,n){n?(J.set(e,t,!1),w.event.add(e,t,{namespace:!1,handler:function(e){var r,i,o=J.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(w.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=a.call(arguments),J.set(this,t,o),r=n(this,t),this[t](),o!==(i=J.get(this,t))||r?J.set(this,t,!1):i={},o!==i)return e.stopImmediatePropagation(),e.preventDefault(),i&&i.value}else o.length&&(J.set(this,t,{value:w.event.trigger(w.extend(o[0],w.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===J.get(e,t)&&w.event.add(e,t,we)}w.event={global:{},add:function(e,t,n,r,a){var i,o,s,u,c,l,f,d,h,p,m,g=J.get(e);if($(e))for(n.handler&&(n=(i=n).handler,a=i.selector),a&&w.find.matchesSelector(re,a),n.guid||(n.guid=w.guid++),(u=g.events)||(u=g.events=Object.create(null)),(o=g.handle)||(o=g.handle=function(t){return void 0!==w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(z)||[""]).length;c--;)h=m=(s=be.exec(t[c])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=w.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=w.event.special[h]||{},l=w.extend({type:h,origType:m,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&w.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=u[h])||((d=u[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,p,o)||e.addEventListener&&e.addEventListener(h,o)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),a?d.splice(d.delegateCount++,0,l):d.push(l),w.event.global[h]=!0)},remove:function(e,t,n,r,a){var i,o,s,u,c,l,f,d,h,p,m,g=J.hasData(e)&&J.get(e);if(g&&(u=g.events)){for(c=(t=(t||"").match(z)||[""]).length;c--;)if(h=m=(s=be.exec(t[c])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=w.event.special[h]||{},d=u[h=(r?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)l=d[i],!a&&m!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(i,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||w.removeEvent(e,h,g.handle),delete u[h])}else for(h in u)w.event.remove(e,h+t[c],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t,n,r,a,i,o,s=new Array(arguments.length),u=w.event.fix(e),c=(J.get(this,"events")||Object.create(null))[u.type]||[],l=w.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,u)){for(o=w.event.handlers.call(this,u,c),t=0;(a=o[t++])&&!u.isPropagationStopped();)for(u.currentTarget=a.elem,n=0;(i=a.handlers[n++])&&!u.isImmediatePropagationStopped();)u.rnamespace&&!1!==i.namespace&&!u.rnamespace.test(i.namespace)||(u.handleObj=i,u.data=i.data,void 0!==(r=((w.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,a,i,o,s=[],u=t.delegateCount,c=e.target;if(u&&c.nodeType&&!("click"===e.type&&1<=e.button))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(i=[],o={},n=0;n<u;n++)void 0===o[a=(r=t[n]).selector+" "]&&(o[a]=r.needsContext?-1<w(a,this).index(c):w.find(a,this,null,[c]).length),o[a]&&i.push(r);i.length&&s.push({elem:c,handlers:i})}return c=this,u<t.length&&s.push({elem:c,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:p(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return de.test(t.type)&&t.click&&M(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return de.test(t.type)&&t.click&&M(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return de.test(t.type)&&t.click&&M(t,"input")&&J.get(t,"click")||M(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Ae,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:Ae,isPropagationStopped:Ae,isImmediatePropagationStopped:Ae,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},w.event.addProp),w.each({focus:"focusin",blur:"focusout"},(function(e,t){w.event.special[e]={setup:function(){return Ee(this,e,xe),!1},trigger:function(){return Ee(this,e),!0},_default:function(){return!0},delegateType:t}})),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,a=e.handleObj;return r&&(r===this||w.contains(this,r))||(e.type=a.origType,n=a.handler.apply(this,arguments),e.type=t),n}}})),w.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,a;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(a in e)this.off(a,t,e[a]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ae),this.each((function(){w.event.remove(this,e,n,t)}))}});var Se=/<script|<style|<link/i,Me=/checked\s*(?:[^=]|=\s*.checked.)/i,Te=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ce(e,t){return M(e,"table")&&M(11!==t.nodeType?t:t.firstChild,"tr")&&w(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var n,r,a,i,o,s;if(1===t.nodeType){if(J.hasData(e)&&(s=J.get(e).events))for(a in J.remove(t,"handle events"),s)for(n=0,r=s[a].length;n<r;n++)w.event.add(t,a,s[a][n]);K.hasData(e)&&(i=K.access(e),o=w.extend({},i),K.set(t,o))}}function je(e,t,n,r){t=i(t);var a,o,s,u,c,l,f=0,d=e.length,m=d-1,g=t[0],v=p(g);if(v||1<d&&"string"==typeof g&&!h.checkClone&&Me.test(g))return e.each((function(a){var i=e.eq(a);v&&(t[0]=g.call(this,a,i.html())),je(i,t,n,r)}));if(d&&(o=(a=_e(t,e[0].ownerDocument,!1,e,r)).firstChild,1===a.childNodes.length&&(a=o),o||r)){for(u=(s=w.map(ge(a,"script"),De)).length;f<d;f++)c=a,f!==m&&(c=w.clone(c,!0,!0),u&&w.merge(s,ge(c,"script"))),n.call(e[f],c,f);if(u)for(l=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)c=s[f],pe.test(c.type||"")&&!J.access(c,"globalEval")&&w.contains(l,c)&&(c.src&&"module"!==(c.type||"").toLowerCase()?w._evalUrl&&!c.noModule&&w._evalUrl(c.src,{nonce:c.nonce||c.getAttribute("nonce")},l):y(c.textContent.replace(Te,""),c,l))}return e}function Pe(e,t,n){for(var r,a=t?w.filter(t,e):e,i=0;null!=(r=a[i]);i++)n||1!==r.nodeType||w.cleanData(ge(r)),r.parentNode&&(n&&ae(r)&&ve(ge(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,a,i,o,s,u,c,l=e.cloneNode(!0),f=ae(e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(o=ge(l),r=0,a=(i=ge(e)).length;r<a;r++)s=i[r],"input"===(c=(u=o[r]).nodeName.toLowerCase())&&de.test(s.type)?u.checked=s.checked:"input"!==c&&"textarea"!==c||(u.defaultValue=s.defaultValue);if(t)if(n)for(i=i||ge(e),o=o||ge(l),r=0,a=i.length;r<a;r++)Ne(i[r],o[r]);else Ne(e,l);return 0<(o=ge(l,"script")).length&&ve(o,!f&&ge(e,"script")),l},cleanData:function(e){for(var t,n,r,a=w.event.special,i=0;void 0!==(n=e[i]);i++)if($(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)a[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Pe(this,e,!0)},remove:function(e){return Pe(this,e)},text:function(e){return H(this,(function(e){return void 0===e?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return je(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ce(this,e).appendChild(e)}))},prepend:function(){return je(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Ce(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return je(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return je(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ge(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return w.clone(this,e,t)}))},html:function(e){return H(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Se.test(e)&&!me[(he.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ge(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return je(this,arguments,(function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ge(this)),n&&n.replaceChild(t,this))}),e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){w.fn[e]=function(e){for(var n,r=[],a=w(e),i=a.length-1,s=0;s<=i;s++)n=s===i?this:this.clone(!0),w(a[s])[t](n),o.apply(r,n.get());return this.pushStack(r)}}));var ze=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Le=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Re=function(e,t,n){var r,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in r=n.call(e),t)e.style[a]=i[a];return r},Ye=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,a,i,o,s=e.style;return(n=n||Le(e))&&(""!==(o=n.getPropertyValue(t)||n[t])||ae(e)||(o=w.style(e,t)),!h.pixelBoxStyles()&&ze.test(o)&&Ye.test(t)&&(r=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=n.width,s.width=r,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function qe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function t(){if(l){c.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(c).appendChild(l);var t=e.getComputedStyle(l);r="1%"!==t.top,u=12===n(t.marginLeft),l.style.right="60%",o=36===n(t.right),a=36===n(t.width),l.style.position="absolute",i=12===n(l.offsetWidth/3),re.removeChild(c),l=null}}function n(e){return Math.round(parseFloat(e))}var r,a,i,o,s,u,c=g.createElement("div"),l=g.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===l.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),a},pixelBoxStyles:function(){return t(),o},pixelPosition:function(){return t(),r},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),i},reliableTrDimensions:function(){var t,n,r,a;return null==s&&(t=g.createElement("table"),n=g.createElement("tr"),r=g.createElement("div"),t.style.cssText="position:absolute;left:-11111px;border-collapse:separate",n.style.cssText="border:1px solid",n.style.height="1px",r.style.height="9px",r.style.display="block",re.appendChild(t).appendChild(n).appendChild(r),a=e.getComputedStyle(n),s=parseInt(a.height,10)+parseInt(a.borderTopWidth,10)+parseInt(a.borderBottomWidth,10)===n.offsetHeight,re.removeChild(t)),s}}))}();var Ie=["Webkit","Moz","ms"],He=g.createElement("div").style,Be={};function Fe(e){return w.cssProps[e]||Be[e]||(e in He?e:Be[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Ie.length;n--;)if((e=Ie[n]+t)in He)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ue=/^--/,$e={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,a,i){var o="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;o<4;o+=2)"margin"===n&&(u+=w.css(e,n+ne[o],!0,a)),r?("content"===n&&(u-=w.css(e,"padding"+ne[o],!0,a)),"margin"!==n&&(u-=w.css(e,"border"+ne[o]+"Width",!0,a))):(u+=w.css(e,"padding"+ne[o],!0,a),"padding"!==n?u+=w.css(e,"border"+ne[o]+"Width",!0,a):s+=w.css(e,"border"+ne[o]+"Width",!0,a));return!r&&0<=i&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-u-s-.5))||0),u}function Xe(e,t,n){var r=Le(e),a=(!h.boxSizingReliable()||n)&&"border-box"===w.css(e,"boxSizing",!1,r),i=a,o=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(ze.test(o)){if(!n)return o;o="auto"}return(!h.boxSizingReliable()&&a||!h.reliableTrDimensions()&&M(e,"tr")||"auto"===o||!parseFloat(o)&&"inline"===w.css(e,"display",!1,r))&&e.getClientRects().length&&(a="border-box"===w.css(e,"boxSizing",!1,r),(i=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+Ke(e,t,n||(a?"border":"content"),i,r,o)+"px"}function Ze(e,t,n,r,a){return new Ze.prototype.init(e,t,n,r,a)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=U(t),u=Ue.test(t),c=e.style;if(u||(t=Fe(s)),o=w.cssHooks[t]||w.cssHooks[s],void 0===n)return o&&"get"in o&&void 0!==(a=o.get(e,!1,r))?a:c[t];"string"==(i=typeof n)&&(a=te.exec(n))&&a[1]&&(n=se(e,t,a),i="number"),null!=n&&n==n&&("number"!==i||u||(n+=a&&a[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),o&&"set"in o&&void 0===(n=o.set(e,n,r))||(u?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var a,i,o,s=U(t);return Ue.test(t)||(t=Fe(s)),(o=w.cssHooks[t]||w.cssHooks[s])&&"get"in o&&(a=o.get(e,!0,n)),void 0===a&&(a=We(e,t,r)),"normal"===a&&t in Ve&&(a=Ve[t]),""===n||n?(i=parseFloat(a),!0===n||isFinite(i)?i||0:a):a}}),w.each(["height","width"],(function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!Ge.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Xe(e,t,r):Re(e,$e,(function(){return Xe(e,t,r)}))},set:function(e,n,r){var a,i=Le(e),o=!h.scrollboxSize()&&"absolute"===i.position,s=(o||r)&&"border-box"===w.css(e,"boxSizing",!1,i),u=r?Ke(e,t,r,s,i):0;return s&&o&&(u-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-Ke(e,t,"border",!1,i)-.5)),u&&(a=te.exec(n))&&"px"!==(a[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Je(0,n,u)}}})),w.cssHooks.marginLeft=qe(h.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Re(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),w.each({margin:"",padding:"",border:"Width"},(function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,a={},i="string"==typeof n?n.split(" "):[n];r<4;r++)a[e+ne[r]+t]=i[r]||i[r-2]||i[0];return a}},"margin"!==e&&(w.cssHooks[e+t].set=Je)})),w.fn.extend({css:function(e,t){return H(this,(function(e,t,n){var r,a,i={},o=0;if(Array.isArray(t)){for(r=Le(e),a=t.length;o<a;o++)i[t[o]]=w.css(e,t[o],!1,r);return i}return void 0!==n?w.style(e,t,n):w.css(e,t)}),e,t,1<arguments.length)}}),((w.Tween=Ze).prototype={constructor:Ze,init:function(e,t,n,r,a,i){this.elem=e,this.prop=n,this.easing=a||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(w.cssNumber[n]?"":"px")},cur:function(){var e=Ze.propHooks[this.prop];return e&&e.get?e.get(this):Ze.propHooks._default.get(this)},run:function(e){var t,n=Ze.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ze.propHooks._default.set(this),this}}).init.prototype=Ze.prototype,(Ze.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||!w.cssHooks[e.prop]&&null==e.elem.style[Fe(e.prop)]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ze.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=Ze.prototype.init,w.fx.step={};var Qe,et,tt,nt,rt=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function it(){et&&(!1===g.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(it):e.setTimeout(it,w.fx.interval),w.fx.tick())}function ot(){return e.setTimeout((function(){Qe=void 0})),Qe=Date.now()}function st(e,t){var n,r=0,a={height:e};for(t=t?1:0;r<4;r+=2-t)a["margin"+(n=ne[r])]=a["padding"+n]=e;return t&&(a.opacity=a.width=e),a}function ut(e,t,n){for(var r,a=(ct.tweeners[t]||[]).concat(ct.tweeners["*"]),i=0,o=a.length;i<o;i++)if(r=a[i].call(n,t,e))return r}function ct(e,t,n){var r,a,i=0,o=ct.prefilters.length,s=w.Deferred().always((function(){delete u.elem})),u=function(){if(a)return!1;for(var t=Qe||ot(),n=Math.max(0,c.startTime+c.duration-t),r=1-(n/c.duration||0),i=0,o=c.tweens.length;i<o;i++)c.tweens[i].run(r);return s.notifyWith(e,[c,r,n]),r<1&&o?n:(o||s.notifyWith(e,[c,1,0]),s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:Qe||ot(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(a)return this;for(a=!0;n<r;n++)c.tweens[n].run(1);return t?(s.notifyWith(e,[c,1,0]),s.resolveWith(e,[c,t])):s.rejectWith(e,[c,t]),this}}),l=c.props;for(function(e,t){var n,r,a,i,o;for(n in e)if(a=t[r=U(n)],i=e[n],Array.isArray(i)&&(a=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(o=w.cssHooks[r])&&"expand"in o)for(n in i=o.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=a);else t[r]=a}(l,c.opts.specialEasing);i<o;i++)if(r=ct.prefilters[i].call(c,e,l,c.opts))return p(r.stop)&&(w._queueHooks(c.elem,c.opts.queue).stop=r.stop.bind(r)),r;return w.map(l,ut,c),p(c.opts.start)&&c.opts.start.call(e,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c}w.Animation=w.extend(ct,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){p(e)?(t=e,e=["*"]):e=e.match(z);for(var n,r=0,a=e.length;r<a;r++)n=e[r],ct.tweeners[n]=ct.tweeners[n]||[],ct.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,a,i,o,s,u,c,l,f="width"in t||"height"in t,d=this,h={},p=e.style,m=e.nodeType&&oe(e),g=J.get(e,"fxshow");for(r in n.queue||(null==(o=w._queueHooks(e,"fx")).unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,d.always((function(){d.always((function(){o.unqueued--,w.queue(e,"fx").length||o.empty.fire()}))}))),t)if(a=t[r],rt.test(a)){if(delete t[r],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!g||void 0===g[r])continue;m=!0}h[r]=g&&g[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(h))for(r in f&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(c=g&&g.display)&&(c=J.get(e,"display")),"none"===(l=w.css(e,"display"))&&(c?l=c:(ce([e],!0),c=e.style.display||c,l=w.css(e,"display"),ce([e]))),("inline"===l||"inline-block"===l&&null!=c)&&"none"===w.css(e,"float")&&(u||(d.done((function(){p.display=c})),null==c&&(l=p.display,c="none"===l?"":l)),p.display="inline-block")),n.overflow&&(p.overflow="hidden",d.always((function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}))),u=!1,h)u||(g?"hidden"in g&&(m=g.hidden):g=J.access(e,"fxshow",{display:c}),i&&(g.hidden=!m),m&&ce([e],!0),d.done((function(){for(r in m||ce([e]),J.remove(e,"fxshow"),h)w.style(e,r,h[r])}))),u=ut(m?g[r]:0,r,d),r in g||(g[r]=u.start,m&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ct.prefilters.unshift(e):ct.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||p(e)&&e,duration:e,easing:n&&t||t&&!p(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){p(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(oe).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var a=w.isEmptyObject(e),i=w.speed(t,n,r),o=function(){var t=ct(this,w.extend({},e),i);(a||J.get(this,"finish"))&&t.stop(!0)};return o.finish=o,a||!1===i.queue?this.each(o):this.queue(i.queue,o)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&this.queue(e||"fx",[]),this.each((function(){var t=!0,a=null!=e&&e+"queueHooks",i=w.timers,o=J.get(this);if(a)o[a]&&o[a].stop&&r(o[a]);else for(a in o)o[a]&&o[a].stop&&at.test(a)&&r(o[a]);for(a=i.length;a--;)i[a].elem!==this||null!=e&&i[a].queue!==e||(i[a].anim.stop(n),t=!1,i.splice(a,1));!t&&n||w.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=J.get(this),r=n[e+"queue"],a=n[e+"queueHooks"],i=w.timers,o=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),a&&a.stop&&a.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<o;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),w.each(["toggle","show","hide"],(function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,a){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(st(t,!0),e,r,a)}})),w.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(Qe=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),Qe=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){et||(et=!0,it())},w.fx.stop=function(){et=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx&&w.fx.speeds[t]||t,n=n||"fx",this.queue(n,(function(n,r){var a=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(a)}}))},tt=g.createElement("input"),nt=g.createElement("select").appendChild(g.createElement("option")),tt.type="checkbox",h.checkOn=""!==tt.value,h.optSelected=nt.selected,(tt=g.createElement("input")).value="t",tt.type="radio",h.radioValue="t"===tt.value;var lt,ft=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return H(this,w.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each((function(){w.removeAttr(this,e)}))}}),w.extend({attr:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?w.prop(e,t,n):(1===i&&w.isXMLDoc(e)||(a=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?lt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:(e.setAttribute(t,n+""),n):a&&"get"in a&&null!==(r=a.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&M(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,a=t&&t.match(z);if(a&&1===e.nodeType)for(;n=a[r++];)e.removeAttribute(n)}}),lt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ft[t]||w.find.attr;ft[t]=function(e,t,r){var a,i,o=t.toLowerCase();return r||(i=ft[o],ft[o]=a,a=null!=n(e,t,r)?o:null,ft[o]=i),a}}));var dt=/^(?:input|select|textarea|button)$/i,ht=/^(?:a|area)$/i;function pt(e){return(e.match(z)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function gt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(z)||[]}w.fn.extend({prop:function(e,t){return H(this,w.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each((function(){delete this[w.propFix[e]||e]}))}}),w.extend({prop:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&w.isXMLDoc(e)||(t=w.propFix[t]||t,a=w.propHooks[t]),void 0!==n?a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:e[t]=n:a&&"get"in a&&null!==(r=a.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||ht.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(e){var t,n,r,a,i,o,s,u=0;if(p(e))return this.each((function(t){w(this).addClass(e.call(this,t,mt(this)))}));if((t=gt(e)).length)for(;n=this[u++];)if(a=mt(n),r=1===n.nodeType&&" "+pt(a)+" "){for(o=0;i=t[o++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a!==(s=pt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,a,i,o,s,u=0;if(p(e))return this.each((function(t){w(this).removeClass(e.call(this,t,mt(this)))}));if(!arguments.length)return this.attr("class","");if((t=gt(e)).length)for(;n=this[u++];)if(a=mt(n),r=1===n.nodeType&&" "+pt(a)+" "){for(o=0;i=t[o++];)for(;-1<r.indexOf(" "+i+" ");)r=r.replace(" "+i+" "," ");a!==(s=pt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):p(e)?this.each((function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)})):this.each((function(){var t,a,i,o;if(r)for(a=0,i=w(this),o=gt(e);t=o[a++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&-1<(" "+pt(mt(n))+" ").indexOf(t))return!0;return!1}});var vt=/\r/g;w.fn.extend({val:function(e){var t,n,r,a=this[0];return arguments.length?(r=p(e),this.each((function(n){var a;1===this.nodeType&&(null==(a=r?e.call(this,n,w(this).val()):e)?a="":"number"==typeof a?a+="":Array.isArray(a)&&(a=w.map(a,(function(e){return null==e?"":e+""}))),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,a,"value")||(this.value=a))}))):a?(t=w.valHooks[a.type]||w.valHooks[a.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(a,"value"))?n:"string"==typeof(n=a.value)?n.replace(vt,""):null==n?"":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:pt(w.text(e))}},select:{get:function(e){var t,n,r,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],u=o?i+1:a.length;for(r=i<0?u:o?i:0;r<u;r++)if(((n=a[r]).selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!M(n.parentNode,"optgroup"))){if(t=w(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,a=e.options,i=w.makeArray(t),o=a.length;o--;)((r=a[o]).selected=-1<w.inArray(w.valHooks.option.get(r),i))&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),w.each(["radio","checkbox"],(function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<w.inArray(w(e).val(),t)}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),h.focusin="onfocusin"in e;var yt=/^(?:focusinfocus|focusoutblur)$/,_t=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,r,a){var i,o,s,u,c,f,d,h,v=[r||g],y=l.call(t,"type")?t.type:t,_=l.call(t,"namespace")?t.namespace.split("."):[];if(o=h=s=r=r||g,3!==r.nodeType&&8!==r.nodeType&&!yt.test(y+w.event.triggered)&&(-1<y.indexOf(".")&&(y=(_=y.split(".")).shift(),_.sort()),c=y.indexOf(":")<0&&"on"+y,(t=t[w.expando]?t:new w.Event(y,"object"==typeof t&&t)).isTrigger=a?2:3,t.namespace=_.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+_.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[y]||{},a||!d.trigger||!1!==d.trigger.apply(r,n))){if(!a&&!d.noBubble&&!m(r)){for(u=d.delegateType||y,yt.test(u+y)||(o=o.parentNode);o;o=o.parentNode)v.push(o),s=o;s===(r.ownerDocument||g)&&v.push(s.defaultView||s.parentWindow||e)}for(i=0;(o=v[i++])&&!t.isPropagationStopped();)h=o,t.type=1<i?u:d.bindType||y,(f=(J.get(o,"events")||Object.create(null))[t.type]&&J.get(o,"handle"))&&f.apply(o,n),(f=c&&o[c])&&f.apply&&$(o)&&(t.result=f.apply(o,n),!1===t.result&&t.preventDefault());return t.type=y,a||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!$(r)||c&&p(r[y])&&!m(r)&&((s=r[c])&&(r[c]=null),w.event.triggered=y,t.isPropagationStopped()&&h.addEventListener(y,_t),r[y](),t.isPropagationStopped()&&h.removeEventListener(y,_t),w.event.triggered=void 0,s&&(r[c]=s)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each((function(){w.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,a=J.access(r,t);a||r.addEventListener(e,n,!0),J.access(r,t,(a||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,a=J.access(r,t)-1;a?J.access(r,t,a):(r.removeEventListener(e,n,!0),J.remove(r,t))}}}));var bt=e.location,wt={guid:Date.now()},At=/\?/;w.parseXML=function(t){var n,r;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(t){}return r=n&&n.getElementsByTagName("parsererror")[0],n&&!r||w.error("Invalid XML: "+(r?w.map(r.childNodes,(function(e){return e.textContent})).join("\n"):t)),n};var xt=/\[\]$/,kt=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,St=/^(?:input|select|textarea|keygen)/i;function Mt(e,t,n,r){var a;if(Array.isArray(t))w.each(t,(function(t,a){n||xt.test(e)?r(e,a):Mt(e+"["+("object"==typeof a&&null!=a?t:"")+"]",a,n,r)}));else if(n||"object"!==_(t))r(e,t);else for(a in t)Mt(e+"["+a+"]",t[a],n,r)}w.param=function(e,t){var n,r=[],a=function(e,t){var n=p(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,(function(){a(this.name,this.value)}));else for(n in e)Mt(n,e[n],t,a);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&St.test(this.nodeName)&&!Et.test(e)&&(this.checked||!de.test(e))})).map((function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(e){return{name:t.name,value:e.replace(kt,"\r\n")}})):{name:t.name,value:n.replace(kt,"\r\n")}})).get()}});var Tt=/%20/g,Ct=/#.*$/,Dt=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Nt=/^(?:GET|HEAD)$/,jt=/^\/\//,Pt={},zt={},Lt="*/".concat("*"),Rt=g.createElement("a");function Yt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,a=0,i=t.toLowerCase().match(z)||[];if(p(n))for(;r=i[a++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Wt(e,t,n,r){var a={},i=e===zt;function o(s){var u;return a[s]=!0,w.each(e[s]||[],(function(e,s){var c=s(t,n,r);return"string"!=typeof c||i||a[c]?i?!(u=c):void 0:(t.dataTypes.unshift(c),o(c),!1)})),u}return o(t.dataTypes[0])||!a["*"]&&o("*")}function qt(e,t){var n,r,a=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((a[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}Rt.href=bt.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Lt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?qt(qt(e,w.ajaxSettings),t):qt(w.ajaxSettings,e)},ajaxPrefilter:Yt(Pt),ajaxTransport:Yt(zt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var r,a,i,o,s,u,c,l,f,d,h=w.ajaxSetup({},n),p=h.context||h,m=h.context&&(p.nodeType||p.jquery)?w(p):w.event,v=w.Deferred(),y=w.Callbacks("once memory"),_=h.statusCode||{},b={},A={},x="canceled",k={readyState:0,getResponseHeader:function(e){var t;if(c){if(!o)for(o={};t=Ot.exec(i);)o[t[1].toLowerCase()+" "]=(o[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=o[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?i:null},setRequestHeader:function(e,t){return null==c&&(e=A[e.toLowerCase()]=A[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)k.always(e[k.status]);else for(t in e)_[t]=[_[t],e[t]];return this},abort:function(e){var t=e||x;return r&&r.abort(t),E(0,t),this}};if(v.promise(k),h.url=((t||h.url||bt.href)+"").replace(jt,bt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(z)||[""],null==h.crossDomain){u=g.createElement("a");try{u.href=h.url,u.href=u.href,h.crossDomain=Rt.protocol+"//"+Rt.host!=u.protocol+"//"+u.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),Wt(Pt,h,n,k),c)return k;for(f in(l=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Nt.test(h.type),a=h.url.replace(Ct,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Tt,"+")):(d=h.url.slice(a.length),h.data&&(h.processData||"string"==typeof h.data)&&(a+=(At.test(a)?"&":"?")+h.data,delete h.data),!1===h.cache&&(a=a.replace(Dt,"$1"),d=(At.test(a)?"&":"?")+"_="+wt.guid+++d),h.url=a+d),h.ifModified&&(w.lastModified[a]&&k.setRequestHeader("If-Modified-Since",w.lastModified[a]),w.etag[a]&&k.setRequestHeader("If-None-Match",w.etag[a])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&k.setRequestHeader("Content-Type",h.contentType),k.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Lt+"; q=0.01":""):h.accepts["*"]),h.headers)k.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(p,k,h)||c))return k.abort();if(x="abort",y.add(h.complete),k.done(h.success),k.fail(h.error),r=Wt(zt,h,n,k)){if(k.readyState=1,l&&m.trigger("ajaxSend",[k,h]),c)return k;h.async&&0<h.timeout&&(s=e.setTimeout((function(){k.abort("timeout")}),h.timeout));try{c=!1,r.send(b,E)}catch(t){if(c)throw t;E(-1,t)}}else E(-1,"No Transport");function E(t,n,o,u){var f,d,g,b,A,x=n;c||(c=!0,s&&e.clearTimeout(s),r=void 0,i=u||"",k.readyState=0<t?4:0,f=200<=t&&t<300||304===t,o&&(b=function(e,t,n){for(var r,a,i,o,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(a in s)if(s[a]&&s[a].test(r)){u.unshift(a);break}if(u[0]in n)i=u[0];else{for(a in n){if(!u[0]||e.converters[a+" "+u[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==u[0]&&u.unshift(i),n[i]}(h,k,o)),!f&&-1<w.inArray("script",h.dataTypes)&&w.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),b=function(e,t,n,r){var a,i,o,s,u,c={},l=e.dataTypes.slice();if(l[1])for(o in e.converters)c[o.toLowerCase()]=e.converters[o];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=l.shift())if("*"===i)i=u;else if("*"!==u&&u!==i){if(!(o=c[u+" "+i]||c["* "+i]))for(a in c)if((s=a.split(" "))[1]===i&&(o=c[u+" "+s[0]]||c["* "+s[0]])){!0===o?o=c[a]:!0!==c[a]&&(i=s[0],l.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+u+" to "+i}}}return{state:"success",data:t}}(h,b,k,f),f?(h.ifModified&&((A=k.getResponseHeader("Last-Modified"))&&(w.lastModified[a]=A),(A=k.getResponseHeader("etag"))&&(w.etag[a]=A)),204===t||"HEAD"===h.type?x="nocontent":304===t?x="notmodified":(x=b.state,d=b.data,f=!(g=b.error))):(g=x,!t&&x||(x="error",t<0&&(t=0))),k.status=t,k.statusText=(n||x)+"",f?v.resolveWith(p,[d,x,k]):v.rejectWith(p,[k,x,g]),k.statusCode(_),_=void 0,l&&m.trigger(f?"ajaxSuccess":"ajaxError",[k,h,f?d:g]),y.fireWith(p,[k,x]),l&&(m.trigger("ajaxComplete",[k,h]),--w.active||w.event.trigger("ajaxStop")))}return k},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],(function(e,t){w[t]=function(e,n,r,a){return p(n)&&(a=a||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:a,data:n,success:r},w.isPlainObject(e)&&e))}})),w.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),w._evalUrl=function(e,t,n){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(p(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return p(e)?this.each((function(t){w(this).wrapInner(e.call(this,t))})):this.each((function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=p(e);return this.each((function(n){w(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var It={0:200,1223:204},Ht=w.ajaxSettings.xhr();h.cors=!!Ht&&"withCredentials"in Ht,h.ajax=Ht=!!Ht,w.ajaxTransport((function(t){var n,r;if(h.cors||Ht&&!t.crossDomain)return{send:function(a,i){var o,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)s[o]=t.xhrFields[o];for(o in t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||a["X-Requested-With"]||(a["X-Requested-With"]="XMLHttpRequest"),a)s.setRequestHeader(o,a[o]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?i(0,"error"):i(s.status,s.statusText):i(It[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout((function(){n&&r()}))},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(a){if(n)throw a}},abort:function(){n&&n()}}})),w.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),w.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,a){t=w("<script>").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&a("error"===e.type?404:200,e.type)}),g.head.appendChild(t[0])},abort:function(){n&&n()}}}));var Bt,Ft=[],Gt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ft.pop()||w.expando+"_"+wt.guid++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",(function(t,n,r){var a,i,o,s=!1!==t.jsonp&&(Gt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return a=t.jsonpCallback=p(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Gt,"$1"+a):!1!==t.jsonp&&(t.url+=(At.test(t.url)?"&":"?")+t.jsonp+"="+a),t.converters["script json"]=function(){return o||w.error(a+" was not called"),o[0]},t.dataTypes[0]="json",i=e[a],e[a]=function(){o=arguments},r.always((function(){void 0===i?w(e).removeProp(a):e[a]=i,t[a]&&(t.jsonpCallback=n.jsonpCallback,Ft.push(a)),o&&p(i)&&i(o[0]),o=i=void 0})),"script"})),h.createHTMLDocument=((Bt=g.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Bt.childNodes.length),w.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(h.createHTMLDocument?((r=(t=g.implementation.createHTMLDocument("")).createElement("base")).href=g.location.href,t.head.appendChild(r)):t=g),i=!n&&[],(a=T.exec(e))?[t.createElement(a[1])]:(a=_e([e],t,i),i&&i.length&&w(i).remove(),w.merge([],a.childNodes)));var r,a,i},w.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(" ");return-1<s&&(r=pt(e.slice(s)),e=e.slice(0,s)),p(t)?(n=t,t=void 0):t&&"object"==typeof t&&(a="POST"),0<o.length&&w.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done((function(e){i=arguments,o.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)})).always(n&&function(e,t){o.each((function(){n.apply(this,i||[e.responseText,t,e])}))}),this},w.expr.pseudos.animated=function(e){return w.grep(w.timers,(function(t){return e===t.elem})).length},w.offset={setOffset:function(e,t,n){var r,a,i,o,s,u,c=w.css(e,"position"),l=w(e),f={};"static"===c&&(e.style.position="relative"),s=l.offset(),i=w.css(e,"top"),u=w.css(e,"left"),("absolute"===c||"fixed"===c)&&-1<(i+u).indexOf("auto")?(o=(r=l.position()).top,a=r.left):(o=parseFloat(i)||0,a=parseFloat(u)||0),p(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):l.css(f)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){w.offset.setOffset(this,e,t)}));var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],a={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((a=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),a.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-w.css(r,"marginTop",!0),left:t.left-a.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===w.css(e,"position");)e=e.offsetParent;return e||re}))}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return H(this,(function(e,r,a){var i;if(m(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===a)return i?i[t]:e[r];i?i.scrollTo(n?i.pageXOffset:a,n?a:i.pageYOffset):e[r]=a}),e,r,arguments.length)}})),w.each(["top","left"],(function(e,t){w.cssHooks[t]=qe(h.pixelPosition,(function(e,n){if(n)return n=We(e,t),ze.test(n)?w(e).position()[t]+"px":n}))})),w.each({Height:"height",Width:"width"},(function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){w.fn[r]=function(a,i){var o=arguments.length&&(n||"boolean"!=typeof a),s=n||(!0===a||!0===i?"margin":"border");return H(this,(function(t,n,a){var i;return m(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===a?w.css(t,n,s):w.style(t,n,a,s)}),t,o?a:void 0,o)}}))})),w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){w.fn[t]=function(e){return this.on(t,e)}})),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(e,t){w.fn[t]=function(e,n){return 0<arguments.length?this.on(t,null,e,n):this.trigger(t)}}));var Ut=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),p(e))return r=a.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(a.call(arguments)))}).guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=M,w.isFunction=p,w.isWindow=m,w.camelCase=U,w.type=_,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},w.trim=function(e){return null==e?"":(e+"").replace(Ut,"")};var $t=e.jQuery,Vt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Vt),t&&e.jQuery===w&&(e.jQuery=$t),w},void 0===t&&(e.jQuery=e.$=w),w}))}));Tr.noConflict();var Cr=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return r&&(t&&"string"==typeof t?t=Sr.find(t):t||(t=Sr)),new Tr.fn.init(e,t,n)};Cr.fn=Cr.prototype=Tr.fn,Tr.extend(Cr,Tr);var Dr=function(e){return e.find('script, style, link[rel="stylesheet"]').remove(),e};Cr.cloneHtml=function(){return Dr(Cr("html",null,null,!1).clone()).children().wrap("<div />").wrap("<div />")},Cr.root=function(){return Cr("*").first()},Cr.browser=!0;var Or=function(e){var t=e.get(0);return!(!t||!t.tagName)&&"container"===t.tagName.toLowerCase()};function Nr(e,t){return Array(t+1).join(e)}Cr.html=function(e){if(e)return Or(e)||Or(e.children("container"))?e.children("container").html()||e.html():Cr("<div>").append(e.eq(0).clone()).html();var t=Dr(Cr("body",null,null,!1).clone()),n=Dr(Cr("head",null,null,!1).clone());return Sr&&Sr.length>0?Sr.children().html():Cr("<container />").append(Cr("<container>".concat(n.html(),"</container>"))).append(Cr("<container>".concat(t.html(),"</container>"))).wrap("<container />").parent().html()},Cr.load=function(e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e=e?Cr("<container />").html(e):Cr.cloneHtml(),Sr=Sr||Cr('<div class="'.concat("mercury-parsing-container",'" style="display:none;" />')),(e=Dr(e)).find("*").contents().each((function(){this.nodeType===Node.COMMENT_NODE&&Cr(this).remove()})),Sr.html(e),t?{$:Cr,html:e.html()}:Cr};var jr=["address","article","aside","audio","blockquote","body","canvas","center","dd","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frameset","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","isindex","li","main","menu","nav","noframes","noscript","ol","output","p","pre","section","table","tbody","td","tfoot","th","thead","tr","ul"];function Pr(e){return-1!==jr.indexOf(e.nodeName.toLowerCase())}var zr=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"];function Lr(e){return-1!==zr.indexOf(e.nodeName.toLowerCase())}var Rr=zr.join();var Yr={};function Wr(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function qr(e,t,n){for(var r=0;r<e.length;r++){var a=e[r];if(Ir(a,t,n))return a}}function Ir(e,t,n){var r=e.filter;if("string"==typeof r){if(r===t.nodeName.toLowerCase())return!0}else if(Array.isArray(r)){if(r.indexOf(t.nodeName.toLowerCase())>-1)return!0}else{if("function"!=typeof r)throw new TypeError("`filter` needs to be a string, array, or function");if(r.call(e,t,n))return!0}}function Hr(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function Br(e,t,n){return e&&e.parentNode===t||n(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}Yr.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},Yr.lineBreak={filter:"br",replacement:function(e,t,n){return n.br+"\n"}},Yr.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,t,n){var r=Number(t.nodeName.charAt(1));return"setext"===n.headingStyle&&r<3?"\n\n"+e+"\n"+Nr(1===r?"=":"-",e.length)+"\n\n":"\n\n"+Nr("#",r)+" "+e+"\n\n"}},Yr.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},Yr.list={filter:["ul","ol"],replacement:function(e,t){var n=t.parentNode;return"LI"===n.nodeName&&n.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},Yr.listItem={filter:"li",replacement:function(e,t,n){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n ");var r=n.bulletListMarker+" ",a=t.parentNode;if("OL"===a.nodeName){var i=a.getAttribute("start"),o=Array.prototype.indexOf.call(a.children,t);r=(i?Number(i)+o:o+1)+". "}return r+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},Yr.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,n){return"\n\n "+t.firstChild.textContent.replace(/\n/g,"\n ")+"\n\n"}},Yr.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,n){var r=((t.firstChild.className||"").match(/language-(\S+)/)||[null,""])[1];return"\n\n"+n.fence+r+"\n"+t.firstChild.textContent+"\n"+n.fence+"\n\n"}},Yr.horizontalRule={filter:"hr",replacement:function(e,t,n){return"\n\n"+n.hr+"\n\n"}},Yr.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){return"["+e+"]("+t.getAttribute("href")+(t.title?' "'+t.title+'"':"")+")"}},Yr.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,n){var r,a,i=t.getAttribute("href"),o=t.title?' "'+t.title+'"':"";switch(n.linkReferenceStyle){case"collapsed":r="["+e+"][]",a="["+e+"]: "+i+o;break;case"shortcut":r="["+e+"]",a="["+e+"]: "+i+o;break;default:var s=this.references.length+1;r="["+e+"]["+s+"]",a="["+s+"]: "+i+o}return this.references.push(a),r},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},Yr.emphasis={filter:["em","i"],replacement:function(e,t,n){return e.trim()?n.emDelimiter+e+n.emDelimiter:""}},Yr.strong={filter:["strong","b"],replacement:function(e,t,n){return e.trim()?n.strongDelimiter+e+n.strongDelimiter:""}},Yr.code={filter:function(e){var t=e.previousSibling||e.nextSibling,n="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!n},replacement:function(e){if(!e.trim())return"";var t="`",n="",r="",a=e.match(/`+/gm);if(a)for(/^`/.test(e)&&(n=" "),/`$/.test(e)&&(r=" ");-1!==a.indexOf(t);)t+="`";return t+n+e+r+t}},Yr.image={filter:"img",replacement:function(e,t){var n=t.alt||"",r=t.getAttribute("src")||"",a=t.title||"";return r?"!["+n+"]("+r+(a?' "'+a+'"':"")+")":""}},Wr.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=qr(this.array,e,this.options))||(t=qr(this._keep,e,this.options))||(t=qr(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t<this.array.length;t++)e(this.array[t],t)}};var Fr="undefined"!=typeof window?window:{};var Gr,Ur,$r,Vr=function(){var e=Fr.DOMParser,t=!1;try{(new e).parseFromString("","text/html")&&(t=!0)}catch(e){}return t}()?Fr.DOMParser:(Gr=function(){},Ur=require("jsdom").JSDOM,Gr.prototype.parseFromString=function(e){return new Ur(e).window.document},Gr);function Jr(e){var t;"string"==typeof e?t=($r=$r||new Vr).parseFromString('<x-turndown id="turndown-root">'+e+"</x-turndown>","text/html").getElementById("turndown-root"):t=e.cloneNode(!0);return function(e){var t=e.element,n=e.isBlock,r=e.isVoid,a=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!a(t)){for(var i=null,o=!1,s=null,u=Br(s,t,a);u!==t;){if(3===u.nodeType||4===u.nodeType){var c=u.data.replace(/[ \r\n\t]+/g," ");if(i&&!/ $/.test(i.data)||o||" "!==c[0]||(c=c.substr(1)),!c){u=Hr(u);continue}u.data=c,i=u}else{if(1!==u.nodeType){u=Hr(u);continue}n(u)||"BR"===u.nodeName?(i&&(i.data=i.data.replace(/ $/,"")),i=null,o=!1):r(u)&&(i=null,o=!0)}var l=Br(s,u,a);s=u,u=l}i&&(i.data=i.data.replace(/ $/,""),i.data||Hr(i))}}({element:t,isBlock:Pr,isVoid:Lr}),t}function Kr(e){return e.isBlock=Pr(e),e.isCode="code"===e.nodeName.toLowerCase()||e.parentNode.isCode,e.isBlank=function(e){return-1===["A","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"].indexOf(e.nodeName)&&/^\s*$/i.test(e.textContent)&&!Lr(e)&&!function(e){return e.querySelector&&e.querySelector(Rr)}(e)}(e),e.flankingWhitespace=function(e){var t="",n="";if(!e.isBlock){var r=/^[ \r\n\t]/.test(e.textContent),a=/[ \r\n\t]$/.test(e.textContent);r&&!Xr("left",e)&&(t=" "),a&&!Xr("right",e)&&(n=" ")}return{leading:t,trailing:n}}(e),e}function Xr(e,t){var n,r,a;return"left"===e?(n=t.previousSibling,r=/ $/):(n=t.nextSibling,r=/^ /),n&&(3===n.nodeType?a=r.test(n.nodeValue):1!==n.nodeType||Pr(n)||(a=r.test(n.textContent))),a}var Zr=Array.prototype.reduce,Qr=/^\n*/,ea=/\n*$/,ta=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function na(e){if(!(this instanceof na))return new na(e);var t={rules:Yr,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)n.hasOwnProperty(r)&&(e[r]=n[r])}return e}({},t,e),this.rules=new Wr(this.options)}function ra(e){var t=this;return Zr.call(e.childNodes,(function(e,n){var r="";return 3===(n=new Kr(n)).nodeType?r=n.isCode?n.nodeValue:t.escape(n.nodeValue):1===n.nodeType&&(r=ia.call(t,n)),oa(e,r)}),"")}function aa(e){var t=this;return this.rules.forEach((function(n){"function"==typeof n.append&&(e=oa(e,n.append(t.options)))})),e.replace(/^[\t\r\n]+/,"").replace(/[\t\r\n\s]+$/,"")}function ia(e){var t=this.rules.forNode(e),n=ra.call(this,e),r=e.flankingWhitespace;return(r.leading||r.trailing)&&(n=n.trim()),r.leading+t.replacement(n,e,this.options)+r.trailing}function oa(e,t){var n,r,a,i=(n=t,r=[e.match(ea)[0],n.match(Qr)[0]].sort(),(a=r[r.length-1]).length<2?a:"\n\n");return(e=e.replace(ea,""))+i+(t=t.replace(Qr,""))}na.prototype={turndown:function(e){if(!function(e){return null!=e&&("string"==typeof e||e.nodeType&&(1===e.nodeType||9===e.nodeType||11===e.nodeType))}(e))throw new TypeError(e+" is not a string, or an element/document/fragment node.");if(""===e)return"";var t=ra.call(this,new Jr(e));return aa.call(this,t)},use:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)this.use(e[t]);else{if("function"!=typeof e)throw new TypeError("plugin must be a Function or an Array of Functions");e(this)}return this},addRule:function(e,t){return this.rules.add(e,t),this},keep:function(e){return this.rules.keep(e),this},remove:function(e){return this.rules.remove(e),this},escape:function(e){return ta.reduce((function(e,t){return e.replace(t[0],t[1])}),e)}};var sa=function(){return!1},ua=function(e){return e},ca=/\s{2,}(?![^<>]*<\/(pre|code|textarea)>)/g;function la(e){return e.replace(ca," ").trim()}var fa="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",da="["+fa+"]",ha=RegExp("^"+da+da+"*"),pa=RegExp(da+da+"*$"),ma=function(e,t,n){var r={},a=_((function(){return!!fa[e]()||"​…"!="​…"[e]()})),i=r[e]=a?t(ga):fa[e];n&&(r[n]=i),L(L.P+L.F*a,"String",r)},ga=ma.trim=function(e,t){return e=String(f(e)),1&t&&(e=e.replace(ha,"")),2&t&&(e=e.replace(pa,"")),e},va=ma,ya=w.parseInt,_a=va.trim,ba=/^[-+]?0[xX]/,wa=8!==ya(fa+"08")||22!==ya(fa+"0x16")?function(e,t){var n=_a(String(e),3);return ya(n,t>>>0||(ba.test(n)?16:10))}:ya;L(L.G+L.F*(parseInt!=wa),{parseInt:wa});var Aa=T.parseInt,xa=new RegExp("(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})","i"),ka=/[a-z]/i,Ea=/^[a-z]+$/i,Sa=/^[0-9]+$/i,Ma=/charset=([\w-]+)\b/;function Ta(e){return e.split("#")[0].replace(/\/$/,"")}L(L.S,"Array",{isArray:ge});var Ca=T.Array.isArray;var Da=function(e){if(Ca(e))return e},Oa=T.getIterator=function(e){var t=Ut(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return O(t.call(e))};var Na=function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=Oa(e);!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(a)throw i}}return n};var ja=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var Pa=function(e,t){return Da(e)||Na(e,t)||ja()};function za(e,t){var n=t||Mr.parse(e),r=n.protocol,a=n.host,i=n.path,o=!1,s=i.split("/").reverse().reduce((function(e,t,n){var r=t;if(r.includes(".")){var a=r.split("."),i=Pa(a,2),s=i[0],u=i[1];Ea.test(u)&&(r=s)}return xa.test(r)&&n<2&&(r=r.replace(xa,"")),0===n&&(o=ka.test(r)),function(e,t,n){var r=!0;return t<2&&Sa.test(e)&&e.length<3&&(r=!0),0===t&&"index"===e.toLowerCase()&&(r=!1),t<2&&e.length<3&&!n&&(r=!1),r}(r,n,o)&&e.push(r),e}),[]);return"".concat(r,"//").concat(a).concat(s.reverse().join("/"))}var La=new RegExp(".( |$)");function Ra(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return e.trim().split(/\s+/).slice(0,t).join(" ")}function Ya(e){var t="utf-8",n=Ma.exec(e);null!==n&&(e=Pa(n,2)[1]);return sa(e)&&(t=e),t}var Wa=/^[A-Z_]+(\/\d\.\d)? /,qa=/^([A-Z_]+) (.+) [A-Z]+\/(\d)\.(\d)$/,Ia=/^[A-Z]+\/(\d)\.(\d) (\d{3}) (.*)$/,Ha=function(e,t){return function(e,t){var n,r=function(e){var t=e.indexOf("\r\n");return-1===t?e:e.slice(0,t)}(e);return t&&Wa.test(r)?Ba(e):null!==(n=r.match(qa))?{method:n[1],url:n[2],version:{major:parseInt(n[3],10),minor:parseInt(n[4],10)},headers:Ba(e)}:null!==(n=r.match(Ia))?{version:{major:parseInt(n[1],10),minor:parseInt(n[2],10)},statusCode:parseInt(n[3],10),statusMessage:n[4],headers:Ba(e)}:Ba(e)}(function(e){e&&e._header&&(e=e._header);return e&&"function"==typeof e.toString?e.toString().trim():""}(e),t)};function Ba(e){var t,n,r,a={},i=function(e){var t=0;return e=e.toString(),function(){var r=e.indexOf("\r\n",t),a=e.indexOf("\n",t),i=e.indexOf("\r",t),o=[r,a,i].sort((function(e,t){return e>t?1:e<t?-1:0})).filter((function(e){return-1!==e}))[0];if(void 0!==o)return n(o,o===r?2:1);var s=e.length;return s===t?null:n(s,0)};function n(n,r){var a=e.substr(t,n-t);return t=n+r,a}}(e),o=i();for(Wa.test(o)&&(o=i());o;)" "!==o[0]&&"\t"!==o[0]?(n&&Fa(n,r,a),t=o.indexOf(":"),n=o.substr(0,t),r=o.substr(t+1).trim(),o=i()):(r+=" "+o.trim(),o=i());return n&&Fa(n,r,a),a}function Fa(e,t,n){switch(e=e.toLowerCase()){case"set-cookie":void 0!==n[e]?n[e].push(t):n[e]=[t];break;case"content-type":case"content-length":case"user-agent":case"referer":case"host":case"authorization":case"proxy-authorization":case"if-modified-since":case"if-unmodified-since":case"from":case"location":case"max-forwards":case"retry-after":case"etag":case"last-modified":case"server":case"age":case"expires":void 0===n[e]&&(n[e]=t);break;default:"string"==typeof n[e]?n[e]+=", "+t:n[e]=t}}var Ga=XMLHttpRequest;if(!Ga)throw new Error("missing XMLHttpRequest");Ua.log={trace:Va,debug:Va,info:Va,warn:Va,error:Va};function Ua(e,t){if("function"!=typeof t)throw new Error("Bad callback given: "+t);if(!e)throw new Error("No options given");var n=e.onResponse;if((e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e))).onResponse=n,e.verbose&&(Ua.log=function(){var e,t,n={},r=["trace","debug","info","warn","error"];for(t=0;t<r.length;t++)n[e=r[t]]=Va,"undefined"!=typeof console&&console&&console[e]&&(n[e]=Ja(console,e));return n}()),e.url&&(e.uri=e.url,delete e.url),!e.uri&&""!==e.uri)throw new Error("options.uri is a required argument");if("string"!=typeof e.uri)throw new Error("options.uri must be a string");for(var r=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],a=0;a<r.length;a++)if(e[r[a]])throw new Error("options."+r[a]+" is not supported");if(e.callback=t,e.method=e.method||"GET",e.headers=e.headers||{},e.body=e.body||null,e.timeout=e.timeout||Ua.DEFAULT_TIMEOUT,e.headers.host)throw new Error("Options.headers.host is not supported");e.json&&(e.headers.accept=e.headers.accept||"application/json","GET"!==e.method&&(e.headers["content-type"]="application/json"),"boolean"!=typeof e.json?e.body=JSON.stringify(e.json):"string"!=typeof e.body&&(e.body=JSON.stringify(e.body)));var i=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")};if(e.qs){var o="string"==typeof e.qs?e.qs:i(e.qs);-1!==e.uri.indexOf("?")?e.uri=e.uri+"&"+o:e.uri=e.uri+"?"+o}if(e.form){if("string"==typeof e.form)throw"form name unsupported";if("POST"===e.method){var s=(e.encoding||"application/x-www-form-urlencoded").toLowerCase();switch(e.headers["content-type"]=s,s){case"application/x-www-form-urlencoded":e.body=i(e.form).replace(/%20/g,"+");break;case"multipart/form-data":var u=function(e){var t={};t.boundry="-------------------------------"+Math.floor(1e9*Math.random());var n=[];for(var r in e)e.hasOwnProperty(r)&&n.push("--"+t.boundry+'\nContent-Disposition: form-data; name="'+r+'"\n\n'+e[r]+"\n");return n.push("--"+t.boundry+"--"),t.body=n.join(""),t.length=t.body.length,t.type="multipart/form-data; boundary="+t.boundry,t}(e.form);e.body=u.body,e.headers["content-type"]=u.type;break;default:throw new Error("unsupported encoding:"+s)}}}return e.onResponse=e.onResponse||Va,!0===e.onResponse&&(e.onResponse=t,e.callback=Va),!e.headers.authorization&&e.auth&&(e.headers.authorization="Basic "+function(e){var t,n,r,a,i,o,s,u,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,f=0,d="",h=[];if(!e)return e;do{t=e.charCodeAt(l++),n=e.charCodeAt(l++),r=e.charCodeAt(l++),a=(u=t<<16|n<<8|r)>>18&63,i=u>>12&63,o=u>>6&63,s=63&u,h[f++]=c.charAt(a)+c.charAt(i)+c.charAt(o)+c.charAt(s)}while(l<e.length);switch(d=h.join(""),e.length%3){case 1:d=d.slice(0,-2)+"==";break;case 2:d=d.slice(0,-1)+"="}return d}(e.auth.username+":"+e.auth.password)),function(e){var t=new Ga,n=!1,r=function(e){var t,n=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;try{t=location.href}catch(e){(t=document.createElement("a")).href="",t=t.href}var r=n.exec(t.toLowerCase())||[],a=n.exec(e.toLowerCase());return!(!a||a[1]==r[1]&&a[2]==r[2]&&(a[3]||("http:"===a[1]?80:443))==(r[3]||("http:"===r[1]?80:443)))}(e.uri),a="withCredentials"in t;if($a+=1,t.seq_id=$a,t.id=$a+": "+e.method+" "+e.uri,t._id=t.id,r&&!a){var i=new Error("Browser does not support cross-origin request: "+e.uri);return i.cors="unsupported",e.callback(i,t)}t.timeoutTimer=setTimeout((function(){n=!0;var r=new Error("ETIMEDOUT");return r.code="ETIMEDOUT",r.duration=e.timeout,Ua.log.error("Timeout",{id:t._id,milliseconds:e.timeout}),e.callback(r,t)}),e.timeout);var o={response:!1,loading:!1,end:!1};t.onreadystatechange=s,t.open(e.method,e.uri,!0),r&&(t.withCredentials=!!e.withCredentials);return t.send(e.body),t;function s(r){if(n)return Ua.log.debug("Ignoring timed out state change",{state:t.readyState,id:t.id});if(Ua.log.debug("State change",{state:t.readyState,id:t.id,timed_out:n}),t.readyState===Ga.OPENED)for(var a in Ua.log.debug("Request started",{id:t.id}),e.headers)t.setRequestHeader(a,e.headers[a]);else t.readyState===Ga.HEADERS_RECEIVED?u():t.readyState===Ga.LOADING?(u(),c()):t.readyState===Ga.DONE&&(u(),c(),function(){if(o.end)return;if(o.end=!0,Ua.log.debug("Request done",{id:t.id}),t.body=t.responseText,t.headers=Ha(t.getAllResponseHeaders()),e.json)try{t.body=JSON.parse(t.responseText)}catch(n){return e.callback(n,t)}e.callback(null,t,t.body)}())}function u(){if(!o.response){if(o.response=!0,Ua.log.debug("Got response",{id:t.id,status:t.status}),clearTimeout(t.timeoutTimer),t.statusCode=t.status,r&&0==t.statusCode){var n=new Error("CORS request rejected: "+e.uri);return n.cors="rejected",o.loading=!0,o.end=!0,e.callback(n,t)}e.onResponse(null,t)}}function c(){o.loading||(o.loading=!0,Ua.log.debug("Response body loading",{id:t.id}))}}(e)}var $a=0;Ua.withCredentials=!1,Ua.DEFAULT_TIMEOUT=18e4,Ua.defaults=function(e,t){var n=function(t){return function(n,r){for(var a in n="string"==typeof n?{uri:n}:JSON.parse(JSON.stringify(n)),e)void 0===n[a]&&(n[a]=e[a]);return t(n,r)}},r=n(Ua);return r.get=n(Ua.get),r.post=n(Ua.post),r.put=n(Ua.put),r.head=n(Ua.head),r};function Va(){}function Ja(e,t){return function(n,r){"object"==typeof r&&(n+=" "+JSON.stringify(r));return e[t].call(e,n)}}["get","put","post","head"].forEach((function(e){var t=e.toUpperCase();Ua[e.toLowerCase()]=function(e){"string"==typeof e?e={method:t,uri:e}:(e=JSON.parse(JSON.stringify(e))).method=t;var n=[e].concat(Array.prototype.slice.apply(arguments,[1]));return Ua.apply(this,n)}})),Ua.couch=function(e,t){return"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,t=t||Va,Ua(e,(function(e,n,r){if(e)return t(e,n,r);if((n.statusCode<200||n.statusCode>299)&&r.error){for(var a in e=new Error("CouchDB error: "+(r.error.reason||r.error.error)),r)e[a]=r[a];return t(e,n,r)}return t(e,n,r)}))};var Ka=Ua,Xa=Cr.browser?{}:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},Za=new RegExp("^(".concat(["audio/mpeg","image/gif","image/jpeg","image/jpg"].join("|"),")$"),"i");function Qa(e){return new $n((function(t,n){Ka(e,(function(e,r,a){e?n(e):t({body:a,response:r})}))}))}function ei(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e.statusMessage&&"OK"!==e.statusMessage||200!==e.statusCode){if(!e.statusCode)throw new Error("Unable to fetch content. Original exception was ".concat(e.error));if(!t)throw new Error("Resource returned a response status code of ".concat(e.statusCode," and resource was instructed to reject non-200 status codes."))}var n=e.headers,r=n["content-type"],a=n["content-length"];if(Za.test(r))throw new Error("Content-type for this resource was ".concat(r," and is not allowed."));if(a>5242880)throw new Error("Content for this resource was too large. Maximum content length is ".concat(5242880,"."));return!0}function ti(e,t){return ni.apply(this,arguments)}function ni(){return(ni=Jn(s.mark((function e(t,n){var r,a,i,o,u,c=arguments;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=c.length>2&&void 0!==c[2]?c[2]:{},n=n||Mr.parse(encodeURI(t)),a=dt({url:n.href,headers:dt({},Xa,r),timeout:1e4,jar:!0,encoding:null,gzip:!0,followAllRedirects:!0},"undefined"!=typeof window?{}:{followRedirect:!0}),e.next=5,Qa(a);case 5:return i=e.sent,o=i.response,u=i.body,e.prev=8,ei(o),e.abrupt("return",{body:u,response:o});case 13:return e.prev=13,e.t0=e.catch(8),e.abrupt("return",{error:!0,message:e.t0.message});case 16:case"end":return e.stop()}}),e,this,[[8,13]])})))).apply(this,arguments)}function ri(e,t,n){return e("meta[".concat(t,"]")).each((function(r,a){var i=e(a),o=i.attr(t);i.attr(n,o),i.removeAttr(t)})),e}var ai=w.Reflect,ii=ai&&ai.ownKeys||function(e){var t=Ee.f(O(e)),n=me.f;return n?t.concat(n(e)):t};L(L.S,"Reflect",{ownKeys:ii});var oi=T.Reflect.ownKeys,si=new RegExp("transparent|spacer|blank","i"),ui="mercury-parser-keep",ci=['iframe[src^="https://www.youtube.com"]','iframe[src^="https://www.youtube-nocookie.com"]','iframe[src^="http://www.youtube.com"]','iframe[src^="https://player.vimeo"]','iframe[src^="http://player.vimeo"]','iframe[src^="https://www.redditmedia.com"]'],li=["title","script","noscript","link","style","hr","embed","iframe","object"],fi=new RegExp("^(".concat(["src","srcset","sizes","type","href","class","id","alt","xlink:href","width","height"].join("|"),")$"),"i"),di=["ul","ol","table","div","button","form"].join(","),hi=["h2","h3","h4","h5","h6"].join(","),pi=["a","blockquote","dl","div","img","p","pre","table"].join(","),mi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),gi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),vi=new RegExp("pag(e|ing|inat)","i"),yi=new RegExp("^(".concat(["article","aside","blockquote","body","br","button","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","map","object","ol","output","p","pre","progress","section","table","tbody","textarea","tfoot","th","thead","tr","ul","video"].join("|"),")$"),"i"),_i=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","header","hidden","loader","login","menu","meta","nav","outbrain","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","taboola","tools"].join("|"),bi=new RegExp(_i,"i"),wi=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"].join("|"),Ai=new RegExp(wi,"i");function xi(e){var t=!1;return e("br").each((function(n,r){var a=e(r),i=a.next().get(0);i&&"br"===i.tagName.toLowerCase()?(t=!0,a.remove()):t&&(t=!1,function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=t(e);if(n){for(var a=e.nextSibling,i=t("<p></p>");a&&(!a.tagName||!yi.test(a.tagName));){var o=a,s=o.nextSibling;t(a).appendTo(i),a=s}return r.replaceWith(i),r.remove(),t}}(r,e,!0))})),e}function ki(e){return e=function(e){return e("span").each((function(t,n){var r=e(n);0===r.parents("p, div, li, figcaption").length&&Ei(r,e,"p")})),e}(e=function(e){return e("div").each((function(t,n){var r=e(n);0===r.children(pi).length&&Ei(r,e,"p")})),e}(e=xi(e)))}function Ei(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"p",r=e.get(0);if(!r)return t;var a,i=Po(r)||{},o=oi(i).map((function(e){return"".concat(e,"=").concat(i[e])})).join(" ");return a=t.browser?"noscript"===r.tagName.toLowerCase()?e.text():e.html():e.contents(),e.replaceWith("<".concat(n," ").concat(o,">").concat(a,"</").concat(n,">")),t}function Si(e,t){return e.find("img").each((function(e,n){var r=t(n);!function(e,t){var n=Aa(e.attr("height"),10),r=Aa(e.attr("width"),10)||20;(n||20)<10||r<10?e.remove():n&&e.removeAttr("height")}(r,t),function(e,t){si.test(e.attr("src"))&&e.remove()}(r)})),t}var Mi=function(e){if(Ca(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}},Ti=function(e,t,n){t in e?j.f(e,t,p(0,n)):e[t]=n};L(L.S+L.F*!Tn((function(e){})),"Array",{from:function(e){var t,n,r,a,i=st(e),o="function"==typeof this?this:Array,s=arguments.length,u=s>1?arguments[1]:void 0,c=void 0!==u,l=0,f=Ut(i);if(c&&(u=D(u,s>2?arguments[2]:void 0,2)),null==f||o==Array&&Ft(f))for(n=new o(t=ie(i.length));t>l;l++)Ti(n,l,c?u(i[l],l):i[l]);else for(a=f.call(i),n=new o;!(r=a.next()).done;l++)Ti(n,l,c?It(a,u,[r.value,l],!0):r.value);return n.length=l,n}});var Ci=T.Array.from,Di=V("iterator"),Oi=T.isIterable=function(e){var t=Object(e);return void 0!==t[Di]||"@@iterator"in t||mt.hasOwnProperty(Wt(t))};var Ni=function(e){if(Oi(Object(e))||"[object Arguments]"===Object.prototype.toString.call(e))return Ci(e)};var ji=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")};var Pi=function(e){return Mi(e)||Ni(e)||ji()};function zi(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(0===r.length&&(r=ci),n){var a=Mr.parse(n),i=a.protocol,o=a.hostname;r=[].concat(Pi(r),['iframe[src^="'.concat(i,"//").concat(o,'"]')])}return t(r.join(","),e).addClass(ui),t}function Li(e,t){return e.find("*").each((function(e,t){var n=Po(t);!function(e,t){if(e.attribs)e.attribs=t;else if(e.attributes){for(;e.attributes.length>0;)e.removeAttribute(e.attributes[0].name);oi(t).forEach((function(n){e.setAttribute(n,t[n])}))}}(t,oi(n).reduce((function(e,t){return fi.test(t)?dt({},e,ft({},t,n[t])):e}),{}))})),t(".".concat(ui),e).removeClass(ui),e}var Ri=new RegExp("^(".concat(["br","b","i","label","hr","area","base","basefont","input","img","link","meta"].join("|"),")$"),"i"),Yi=[[".hentry",".entry-content"],["entry",".entry-content"],[".entry",".entry_content"],[".post",".postbody"],[".post",".post_body"],[".post",".post-body"]],Wi=new RegExp(["figure","photo","image","caption"].join("|"),"i"),qi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),Ii=new RegExp("entry-content-asset","i"),Hi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),Bi=new RegExp("^(p|li|span|pre)$","i"),Fi=new RegExp("^(td|blockquote|ol|ul|dl)$","i"),Gi=new RegExp("^(address|form)$","i");function Ui(e){var t=e.attr("class"),n=e.attr("id"),r=0;return n&&(qi.test(n)&&(r+=25),Hi.test(n)&&(r-=25)),t&&(0===r&&(qi.test(t)&&(r+=25),Hi.test(t)&&(r-=25)),Wi.test(t)&&(r+=10),Ii.test(t)&&(r+=25)),r}var $i=w.parseFloat,Vi=va.trim,Ji=1/$i(fa+"-0")!=-1/0?function(e){var t=Vi(String(e),3),n=$i(t);return 0===n&&"-"==t.charAt(0)?-0:n}:$i;L(L.G+L.F*(parseFloat!=Ji),{parseFloat:Ji});var Ki=T.parseFloat;function Xi(e){return Ki(e.attr("score"))||null}function Zi(e){return(e.match(/,/g)||[]).length}var Qi=new RegExp("^(p|pre)$","i");function eo(e){var t=1,n=e.text().trim(),r=n.length;return r<25?0:(t+=Zi(n),t+=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"p",r=e/50;return r>0?(t=Qi.test(n)?r-2:r-1.25,Math.min(Math.max(t,0),3)):0}(r),":"===n.slice(-1)&&(t-=1),t)}function to(e,t,n){return e.attr("score",n),e}function no(e,t,n){try{to(e,0,ao(e,t)+n)}catch(e){}return e}function ro(e,t,n){var r=e.parent();return r&&no(r,t,.25*n),e}function ao(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=Xi(e);return r||(r=io(e),n&&(r+=Ui(e)),ro(e,t,r),r)}function io(e){var t=e.get(0).tagName;return Bi.test(t)?eo(e):"div"===t.toLowerCase()?5:Fi.test(t)?3:Gi.test(t)?-3:"th"===t.toLowerCase()?-5:0}function oo(e,t,n){e&&(!function(e,t){e.get(0)&&"span"===e.get(0).tagName&&Ei(e,t,"div")}(e,t),no(e,t,n))}function so(e,t){return e("p, pre").not("[score]").each((function(n,r){var a=e(r),i=(a=to(a,0,ao(a,e,t))).parent(),o=io(a);oo(i,e,o),i&&oo(i.parent(),e,o/2)})),e}function uo(e,t,n){if(!e.parent().length)return e;var r=Math.max(10,.25*t),a=n("<div></div>");return e.parent().children().each((function(i,o){var s=n(o);if(Ri.test(o.tagName))return null;var u,c=Xi(s);if(c)if(s.get(0)===e.get(0))a.append(s);else{var l=0,f=Eo(s);if(f<.05&&(l+=20),f>=.5&&(l-=20),s.attr("class")===e.attr("class")&&(l+=.2*t),c+l>=r)return a.append(s);if("p"===o.tagName){var d=s.text(),h=ko(d);if(h>80&&f<.25)return a.append(s);if(h<=80&&0===f&&(u=d,La.test(u)))return a.append(s)}}return null})),1===a.children().length&&a.children().first().get(0)===e.get(0)?e:a}function co(e,t){return t(di,e).each((function(e,n){var r=t(n);if(!(r.hasClass(ui)||r.find(".".concat(ui)).length>0)){var a=Xi(r);a||to(r,0,a=ao(r,t)),a<0?r.remove():function(e,t,n){if(!e.hasClass("entry-content-asset")){var r=la(e.text());if(Zi(r)<10){var a=t("p",e).length;if(t("input",e).length>a/3)return void e.remove();var i=r.length,o=t("img",e).length;if(i<25&&0===o)return void e.remove();var s=Eo(e);if(n<25&&s>.2&&i>75)return void e.remove();if(n>=25&&s>.5){var u=e.get(0).tagName.toLowerCase();if("ol"===u||"ul"===u){var c=e.prev();if(c&&":"===la(c.text()).slice(-1))return}return void e.remove()}t("script",e).length>0&&i<150&&e.remove()}}}(r,t,a)}})),t}var lo=function(e,t){if(!m(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},fo=j.f,ho=U.fastKey,po=b?"_s":"size",mo=function(e,t){var n,r=ho(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n},go={getConstructor:function(e,t,n,r){var a=e((function(e,i){qt(e,a,t,"_i"),e._t=t,e._i=xe(null),e._f=void 0,e._l=void 0,e[po]=0,null!=i&&$t(i,n,e[r],e)}));return _n(a.prototype,{clear:function(){for(var e=lo(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[po]=0},delete:function(e){var n=lo(this,t),r=mo(n,e);if(r){var a=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=a),a&&(a.p=i),n._f==r&&(n._f=a),n._l==r&&(n._l=i),n[po]--}return!!r},forEach:function(e){lo(this,t);for(var n,r=D(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!mo(lo(this,t),e)}}),b&&fo(a.prototype,"size",{get:function(){return lo(this,t)[po]}}),a},def:function(e,t,n){var r,a,i=mo(e,t);return i?i.v=n:(e._l=i={i:a=ho(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[po]++,"F"!==a&&(e._i[a]=i)),e},getEntry:mo,setStrong:function(e,t,n){Et(e,t,(function(e,n){this._t=lo(e,t),this._k=n,this._l=void 0}),(function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Mt(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Mt(1))}),n?"entries":"values",!n,!0),wn(t)}},vo=V("species"),yo=function(e,t){return new(function(e){var t;return ge(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ge(t.prototype)||(t=void 0),m(t)&&null===(t=t[vo])&&(t=void 0)),void 0===t?Array:t}(e))(t)},_o=j.f,bo=function(e,t){var n=1==e,r=2==e,a=3==e,i=4==e,o=6==e,s=5==e||o,u=t||yo;return function(t,c,f){for(var d,h,p=st(t),m=l(p),g=D(c,f,3),v=ie(m.length),y=0,_=n?u(t,v):r?u(t,0):void 0;v>y;y++)if((s||y in m)&&(h=g(d=m[y],y,p),e))if(n)_[y]=h;else if(h)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:_.push(d)}else if(i)return!1;return o?-1:a||i?i:_}}(0);!function(e,t,n,r,a,i){var o=w[e],s=o,u=a?"set":"add",c=s&&s.prototype,l={};b&&"function"==typeof s&&(i||c.forEach&&!_((function(){(new s).entries().next()})))?(s=t((function(t,n){qt(t,s,e,"_c"),t._c=new o,null!=n&&$t(n,a,t[u],t)})),bo("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),(function(e){var t="add"==e||"set"==e;!(e in c)||i&&"clear"==e||P(s.prototype,e,(function(n,r){if(qt(this,s,e),!t&&i&&!m(n))return"get"==e&&void 0;var a=this._c[e](0===n?0:n,r);return t?this:a}))})),i||_o(s.prototype,"size",{get:function(){return this._c.size}})):(s=r.getConstructor(t,e,a,u),_n(s.prototype,n),U.NEED=!0),X(s,e),l[e]=s,L(L.G+L.W+L.F,l),i||r.setStrong(s,e,a)}("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return go.def(lo(this,"Set"),e=0===e?0:e,e)}},go);L(L.P+L.R,"Set",{toJSON:function(e){return function(){if(Wt(this)!=e)throw TypeError(e+"#toJSON isn't generic");return function(e,t){var n=[];return $t(e,!1,n.push,n,t),n}(this)}}("Set")});var wo;wo="Set",L(L.S,wo,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}});!function(e){L(L.S,e,{from:function(e){var t,n,r,a,i=arguments[1];return C(this),(t=void 0!==i)&&C(i),null==e?new this:(n=[],t?(r=0,a=D(i,arguments[2],2),$t(e,!1,(function(e){n.push(a(e,r++))}))):$t(e,!1,n.push,n),new this(n))}})}("Set");var Ao=T.Set;function xo(e,t,n){return["href","src"].forEach((function(e){return function(e,t,n){var r=e("base").attr("href");e("[".concat(n,"]")).each((function(e,a){var i=Po(a)[n];if(i){var o=Mr.resolve(r||t,i);zo(a,n,o)}}))}(t,n,e)})),function(e,t,n){e("[srcset]",n).each((function(e,n){var r=Po(n).srcset;if(r){var a=r.match(/(?:\s*)(\S+(?:\s*[\d.]+[wx])?)(?:\s*,\s*)?/g);if(!a)return;var i=a.map((function(e){var n=e.trim().replace(/,$/,"").split(/\s+/);return n[0]=Mr.resolve(t,n[0]),n.join(" ")}));zo(n,"srcset",Pi(new Ao(i)).join(", "))}}))}(t,n,e),e}function ko(e){return e.trim().replace(/\s+/g," ").length}function Eo(e){var t=ko(e.text()),n=ko(e.find("a").text());return t>0?n/t:0===t&&n>0?1:0}var So=Z.f("iterator");ee("asyncIterator"),ee("observable");var Mo=T.Symbol,To=t((function(e){function t(e){return(t="function"==typeof Mo&&"symbol"==typeof So?function(e){return typeof e}:function(e){return e&&"function"==typeof Mo&&e.constructor===Mo&&e!==Mo.prototype?"symbol":typeof e})(e)}function n(r){return"function"==typeof Mo&&"symbol"===t(So)?e.exports=n=function(e){return t(e)}:e.exports=n=function(e){return e&&"function"==typeof Mo&&e.constructor===Mo&&e!==Mo.prototype?"symbol":t(e)},n(r)}e.exports=n}));function Co(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=t.filter((function(e){return-1!==n.indexOf(e)})),i=!0,o=!1,s=void 0;try{for(var u,c=function(){var t=u.value,n=e("meta[".concat("name",'="').concat(t,'"]')).map((function(t,n){return e(n).attr("value")})).toArray().filter((function(e){return""!==e}));if(1===n.length){var a;if(r)a=No(n[0],e);else a=Pa(n,1)[0];return{v:a}}},l=Oa(a);!(i=(u=l.next()).done);i=!0){var f=c();if("object"===To(f))return f.v}}catch(e){o=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(o)throw s}}return null}function Do(e,t){return!(e.children().length>t)&&!function(e){return void 0!==e.parents().toArray().find((function(e){var t=Po(e),n=t.class,r=t.id;return"".concat(n," ").concat(r).includes("comment")}))}(e)}function Oo(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!0,i=!1,o=void 0;try{for(var s,u=Oa(t);!(a=(s=u.next()).done);a=!0){var c=s.value,l=e(c);if(1===l.length){var f=e(l[0]);if(Do(f,n)){var d=void 0;if(d=r?f.text():f.html())return d}}}}catch(e){i=!0,o=e}finally{try{a||null==u.return||u.return()}finally{if(i)throw o}}return null}function No(e,t){var n=t("<span>".concat(e,"</span>")).text();return""===n?e:n}function jo(e){return e.text().trim().length>=100}function Po(e){var t=e.attribs,n=e.attributes;return!t&&n?oi(n).reduce((function(e,t){var r=n[t];return r.name&&r.value?(e[r.name]=r.value,e):e}),{}):t}function zo(e,t,n){return e.attribs?e.attribs[t]=n:e.attributes&&e.setAttribute(t,n),e}var Lo=new RegExp("https?://","i"),Ro=new RegExp("".concat(".(png|gif|jpe?g)"),"i"),Yo=new RegExp("".concat(".(png|gif|jpe?g)","(\\?\\S+)?(\\s*[\\d.]+[wx])"),"i"),Wo=["script","style","form"].join(",");function qo(e,t){return"comment"===t.type}function Io(e){return e(Wo).remove(),e=function(e){return e.root().find("*").contents().filter(qo).remove(),e}(e)}var Ho,Bo={create:(Ho=Jn(s.mark((function e(t,n,r){var a,i,o=arguments;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=o.length>3&&void 0!==o[3]?o[3]:{},!n){e.next=6;break}i={body:n,response:{statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}},alreadyDecoded:!0},e.next=9;break;case 6:return e.next=8,ti(t,r,a);case 8:i=e.sent;case 9:if(!i.error){e.next=12;break}return i.failed=!0,e.abrupt("return",i);case 12:return e.abrupt("return",this.generateDoc(i));case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return Ho.apply(this,arguments)}),generateDoc:function(e){var t=e.body,n=e.response,r=e.alreadyDecoded,a=void 0!==r&&r,i=n.headers["content-type"],o=void 0===i?"":i;if(!o.includes("html")&&!o.includes("text"))throw new Error("Content does not appear to be text.");var s=this.encodeDoc({content:t,contentType:o,alreadyDecoded:a});if(0===s.root().children().length)throw new Error("No children, likely a bad parse.");return s=Io(s=function(e){return e("img").each((function(t,n){var r=Po(n);oi(r).forEach((function(t){var a=r[t];"srcset"!==t&&Lo.test(a)&&Yo.test(a)?e(n).attr("srcset",a):"src"!==t&&"srcset"!==t&&Lo.test(a)&&Ro.test(a)&&e(n).attr("src",a)}))})),e}(s=function(e){return e=ri(e,"content","value"),e=ri(e,"property","name")}(s)))},encodeDoc:function(e){var t=e.content,n=e.contentType,r=e.alreadyDecoded;if(void 0!==r&&r)return Cr.load(t);var a=Ya(n),i=ua(t,a),o=Cr.load(i),s=o(Cr.browser?"meta[http-equiv=content-type]":"meta[http-equiv=content-type i]").attr("content")||o("meta[charset]").attr("charset"),u=Ya(s);return s&&u!==a&&(i=ua(t,u),o=Cr.load(i)),o}},Fo=s.mark(Go);function Go(){var e,t,n=arguments;return s.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:e=n.length>0&&void 0!==n[0]?n[0]:1,t=n.length>1&&void 0!==n[1]?n[1]:1;case 2:if(!(e<=t)){r.next=7;break}return r.next=5,e+=1;case 5:r.next=2;break;case 7:case"end":return r.stop()}}),Fo,this)}function Uo(e){return!!e.hostname}var $o=Object.assign,Vo=!$o||_((function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=$o({},e)[n]||Object.keys($o({},t)).join("")!=r}))?function(e,t){for(var n=st(e),r=arguments.length,a=1,i=me.f,o=h.f;r>a;)for(var s,u=l(arguments[a++]),c=i?pe(u).concat(i(u)):pe(u),f=c.length,d=0;f>d;)o.call(u,s=c[d++])&&(n[s]=u[s]);return n}:$o;L(L.S+L.F,"Object",{assign:Vo});var Jo=T.Object.assign,Ko=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})};function Xo(e){return e.supportedDomains?Ko(e,[e.domain].concat(Pi(e.supportedDomains))):Ko(e,[e.domain])}var Zo={};function Qo(e){return e&&e.domain?(Jo(Zo,Xo(e)),Zo):{error:!0,message:"Unable to add custom extractor. Invalid parameters."}}var es={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},ts={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var n=t.browser?t(e.text()):e.children();return 1===n.length&&void 0!==n.get(0)&&"img"===n.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},ns={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var n=JSON.parse(e.attr("data-props")).sources[0].src,r=t("<img />").attr("src",n);e.replaceWith(r)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},rs={domain:"medium.com",title:{selectors:["h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:["article"],transforms:{iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,n=decodeURIComponent(e.attr("data-thumbnail")),r=e.parents("figure");if(t.test(n)){var a=n.match(t),i=Pa(a,2),o=(i[0],i[1]);e.attr("src","https://www.youtube.com/embed/".concat(o));var s=r.find("figcaption");r.empty().append([e,s])}else r.remove()},figure:function(e){if(!(e.find("iframe").length>0)){var t=e.find("img").slice(-1)[0],n=e.find("figcaption");e.empty().append([t,n])}},img:function(e){Aa(e.attr("width"),10)<100&&e.remove()}},clean:["span","svg"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:{selectors:[]},excerpt:{selectors:[]}},as={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".pane-node-body"],transforms:{".pane-node-body":function(e,t){var n=Pa(as.lead_image_url.selectors[0],2),r=n[0],a=n[1],i=t(r).attr(a);i&&e.prepend('<img src="'.concat(i,'" />'))}},clean:[]}},is={domain:"genius.com",title:{selectors:["h1"]},author:{selectors:["h2 a"]},date_published:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.release_date}]]},dek:{selectors:[]},lead_image_url:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.album.cover_art_url}]]},content:{selectors:[".lyrics"],transforms:{},clean:[]}},os={domain:"wired.jp",title:{selectors:["h1.post-title"]},author:{selectors:['p[itemprop="author"]']},date_published:{selectors:[["time","datetime"]]},dek:{selectors:[".post-intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.article-detail"],transforms:{"img[data-original]":function(e){var t=e.attr("data-original"),n=e.attr("src"),r=Mr.resolve(n,t);e.attr("src",r)}},clean:[".post-category","time","h1.post-title",".social-area-syncer"]}},ss={domain:"www.abendblatt.de",title:{selectors:["h2.article__header__headline"]},author:{selectors:["span.author-info__name-text"]},date_published:{selectors:[["time.article__header__date","datetime"]]},dek:{selectors:["span[itemprop='description']"]},lead_image_url:{selectors:[["meta[name='og:image']","value"]]},content:{selectors:["div.article__body"],transforms:{p:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",n=0,r=e.text();n<r.length;n+=1){var a=r.charCodeAt(n);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":a>33&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null},div:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",n=0,r=e.text();n<r.length;n+=1){var a=r.charCodeAt(n);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":a>33&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null}},clean:[]}},us=Object.freeze({BloggerExtractor:es,NYMagExtractor:ts,WikipediaExtractor:{domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},TwitterExtractor:{domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var n=e.find(".tweet"),r=t('<div id="TWEETS_GO_HERE"></div>');r.append(n),e.replaceWith(r)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},NYTimesExtractor:{domain:"www.nytimes.com",title:{selectors:["h1.g-headline",'h1[itemprop="headline"]',"h1.headline","h1 .balancedHeadline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline",['meta[name="byl"]',"value"]]},content:{selectors:["div.g-blocks",'section[name="articleBody"]',"article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src");t=t.replace("{{size}}",640),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},TheAtlanticExtractor:{domain:"www.theatlantic.com",title:{selectors:["h1",".c-article-header__hed"]},author:{selectors:[['meta[name="author"]',"value"],".c-byline__author"]},content:{selectors:["article",".article-body"],transforms:[],clean:[".partner-box",".callout",".c-article-writer__image",".c-article-writer__content",".c-letters-cta__text",".c-footer__logo",".c-recirculation-link",".twitter-tweet"]},dek:{selectors:[['meta[name="description"]',"value"]]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]]},lead_image_url:{selectors:[['img[itemprop="url"]',"src"]]},next_page_url:null,excerpt:null},NewYorkerExtractor:{domain:"www.newyorker.com",title:{selectors:['h1[class^="content-header"]','h1[class^="ArticleHeader__hed"]',['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"],'div[class^="ArticleContributors"] a[rel="author"]','article header div[class*="Byline__multipleContributors"]']},content:{selectors:["article.article.main-content",'main[class^="Layout__content"]'],transforms:[],clean:['footer[class^="ArticleFooter__footer"]']},date_published:{selectors:["time.content-header__publish-date",['meta[name="pubdate"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:["div.content-header__dek",'h2[class^="ArticleHeader__dek"]']},next_page_url:null,excerpt:null},WiredExtractor:{domain:"www.wired.com",title:{selectors:["h1.content-header__hed","h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"],'a[rel="author"]']},content:{selectors:["article.article.main-content","article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo"]},date_published:{selectors:["time.content-header__publish-date",['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},MSNExtractor:{domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},YahooExtractor:{domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},BuzzfeedExtractor:{domain:"www.buzzfeed.com",title:{selectors:['h1[id="post-title"]']},author:{selectors:['a[data-action="user/username"]',"byline__author"]},content:{selectors:[[".longform_custom_header_media","#buzz_sub_buzz"],"#buzz_sub_buzz"],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print"]},date_published:{selectors:[".buzz-datetime"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},WikiaExtractor:{domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},LittleThingsExtractor:{domain:"www.littlethings.com",title:{selectors:["h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},PoliticoExtractor:{domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".story-main-content .byline .vcard"]},content:{selectors:[".story-main-content",".content-group",".story-core",".story-text"],transforms:[],clean:["figcaption"]},date_published:{selectors:[[".story-main-content .timestamp time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},DeadspinExtractor:{domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com","avclub.com","clickhole.com","splinternews.com","theonion.com","theroot.com","thetakeout.com","theinventory.com"],title:{selectors:["h1.headline"]},author:{selectors:[".author"]},content:{selectors:[".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/".concat(t))}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},BroadwayWorldExtractor:{domain:"www.broadwayworld.com",title:{selectors:["h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},ApartmentTherapyExtractor:ns,MediumExtractor:rs,WwwTmzComExtractor:{domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},WwwWashingtonpostComExtractor:{domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-author-name"]},date_published:{selectors:[['.author-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return e.has("img,iframe,video").length>0?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},WwwHuffingtonpostComExtractor:{domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},NewrepublicComExtractor:{domain:"newrepublic.com",title:{selectors:["h1.article-headline",".minutes-primary h1.minute-title"]},author:{selectors:["div.author-list",".minutes-primary h3.minute-byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-cover","div.content-body"],[".minute-image",".minutes-primary div.content-body"]],transforms:{},clean:["aside"]}},MoneyCnnComExtractor:{domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},WwwThevergeComExtractor:{domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},WwwCnnComExtractor:{domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[".metadata__byline__author"]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){return e.html()?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},WwwAolComExtractor:{domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},WwwYoutubeComExtractor:{domain:"www.youtube.com",title:{selectors:[".watch-title","h1.watch-title-container"]},author:{selectors:[".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:[["#player-api","#eow-description"]],transforms:{"#player-api":function(e,t){var n=t('meta[itemProp="videoId"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'.concat(n,'" frameborder="0" allowfullscreen></iframe>'))}},clean:[]}},WwwTheguardianComExtractor:{domain:"www.theguardian.com",title:{selectors:[".content__headline"]},author:{selectors:["p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},WwwSbnationComExtractor:{domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},WwwBloombergComExtractor:{domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title","h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author"]},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},WwwBustleComExtractor:{domain:"www.bustle.com",title:{selectors:["h1.post-page__title"]},author:{selectors:["div.content-meta__author"]},date_published:{selectors:[["time.content-meta__published-date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-page__body"],transforms:{},clean:[]}},WwwNprOrgExtractor:{domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},WwwRecodeNetExtractor:{domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},QzComExtractor:{domain:"qz.com",title:{selectors:["article header h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[name="twitter:image"]',"content"]]},content:{selectors:["#article-content"],transforms:{},clean:[]}},WwwDmagazineComExtractor:{domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago",format:"MMMM D, YYYY h:mm a"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},WwwReutersComExtractor:{domain:"www.reuters.com",title:{selectors:["h1.article-headline"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-text"],transforms:{".article-subtitle":"h4"},clean:["#article-byline .author"]}},MashableComExtractor:{domain:"mashable.com",title:{selectors:["h1.title"]},author:{selectors:["span.author_name a"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},WwwChicagotribuneComExtractor:{domain:"www.chicagotribune.com",title:{selectors:["h1.trb_ar_hl_t"]},author:{selectors:["span.trb_ar_by_nm_au"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.trb_ar_page"],transforms:{},clean:[]}},WwwVoxComExtractor:{domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},NewsNationalgeographicComExtractor:{domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");n&&e.prepend(t('<img class="__image-lead__" src="'.concat(n,'"/>')))}},clean:[".pull-quote.pull-quote--large"]}},WwwNationalgeographicComExtractor:{domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.children().first();if(n.hasClass("imageGroup")){var r=n.find(".media--medium__container").children().first(),a=r.data("platform-image1-path"),i=r.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n <img src="'.concat(a,'"/>\n <img src="').concat(i,'"/>\n </div>')))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'.concat(o,'"/>')))}}},clean:[".pull-quote.pull-quote--small"]}},WwwLatimesComExtractor:{domain:"www.latimes.com",title:{selectors:[".trb_ar_hl"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},PagesixComExtractor:{domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:["h1 a"]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},ThefederalistpapersOrgExtractor:{domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:["main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[["p[style]"]]}},WwwCbssportsComExtractor:{domain:"www.cbssports.com",title:{selectors:[".article-headline"]},author:{selectors:[".author-name"]},date_published:{selectors:[[".date-original-reading-time time","datetime"]],timezone:"UTC"},dek:{selectors:[".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwMsnbcComExtractor:as,WwwThepoliticalinsiderComExtractor:{domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},WwwMentalflossComExtractor:{domain:"www.mentalfloss.com",title:{selectors:["h1.title",".title-group",".inner"]},author:{selectors:[".field-name-field-enhanced-authors"]},date_published:{selectors:[".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.field.field-name-body"],transforms:{},clean:[]}},AbcnewsGoComExtractor:{domain:"abcnews.go.com",title:{selectors:[".article-header h1"]},author:{selectors:[".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-copy"],transforms:{},clean:[]}},WwwNydailynewsComExtractor:{domain:"www.nydailynews.com",title:{selectors:["h1#ra-headline"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},WwwCnbcComExtractor:{domain:"www.cnbc.com",title:{selectors:["h1.title","h1.ArticleHeader-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story","div.ArticleBody-articleBody"],transforms:{},clean:[]}},WwwPopsugarComExtractor:{domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ObserverComExtractor:{domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},PeopleComExtractor:{domain:"people.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author.url.fn"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__inner"],transforms:{},clean:[]}},WwwUsmagazineComExtractor:{domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:["time.article-published-date"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body-inner"],transforms:{},clean:[".module-related"]}},WwwRollingstoneComExtractor:{domain:"www.rollingstone.com",title:{selectors:["h1.content-title"]},author:{selectors:["a.content-author.tracked-offpage"]},date_published:{selectors:["time.content-published-date"],timezone:"America/New_York"},dek:{selectors:[".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".module-related"]}},twofortysevensportsComExtractor:{domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.body.article"],transforms:{},clean:[]}},UproxxComExtractor:{domain:"uproxx.com",title:{selectors:["div.post-top h1"]},author:{selectors:[".post-top .authorname"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},WwwEonlineComExtractor:{domain:"www.eonline.com",title:{selectors:["h1.article__title"]},author:{selectors:[".entry-meta__author a"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},WwwMiamiheraldComExtractor:{domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},WwwRefinery29ComExtractor:{domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},WwwMacrumorsComExtractor:{domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:[".author-url"]},date_published:{selectors:[".article .byline"],format:"dddd MMMM D, YYYY h:mm A zz",timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwAndroidcentralComExtractor:{domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".meta-by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[[".image-large","src"]]},content:{selectors:[".article-body"],transforms:{},clean:[".intro","blockquote"]}},WwwSiComExtractor:{domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},dek:{selectors:[".quick-hit ul"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},WwwRawstoryComExtractor:{domain:"www.rawstory.com",title:{selectors:[".blog-title"]},author:{selectors:[".blog-author a:first-of-type"]},date_published:{selectors:[".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog-content"],transforms:{},clean:[]}},WwwCnetComExtractor:{domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},WwwCinemablendComExtractor:{domain:"www.cinemablend.com",title:{selectors:[".story_title"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#wrap_left_content"],transforms:{},clean:[]}},WwwTodayComExtractor:{domain:"www.today.com",title:{selectors:["h1.entry-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-container"],transforms:{},clean:[".label-comment"]}},WwwHowtogeekComExtractor:{domain:"www.howtogeek.com",title:{selectors:["title"]},author:{selectors:["#authorinfobox a"]},date_published:{selectors:["#authorinfobox + div li"],timezone:"GMT"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".thecontent"],transforms:{},clean:[]}},WwwAlComExtractor:{domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwThepennyhoarderComExtractor:{domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text"],transforms:{},clean:[]}},WwwWesternjournalismComExtractor:{domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},FusionNetExtractor:{domain:"fusion.net",title:{selectors:[".post-title",".single-title",".headline"]},author:{selectors:[".show-for-medium .byline"]},date_published:{selectors:[["time.local-time","datetime"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-featured-media",".article-content"],".article-content"],transforms:{".fusion-youtube-oembed":"figure"},clean:[]}},WwwAmericanowComExtractor:{domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},ScienceflyComExtractor:{domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},HellogigglesComExtractor:{domain:"hellogiggles.com",title:{selectors:[".title"]},author:{selectors:[".author-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},ThoughtcatalogComExtractor:{domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark"]}},WwwNjComExtractor:{domain:"www.nj.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwInquisitrComExtractor:{domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},WwwNbcnewsComExtractor:{domain:"www.nbcnews.com",title:{selectors:["div.article-hed h1"]},author:{selectors:["span.byline_author"]},date_published:{selectors:[[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body"],transforms:{},clean:[]}},FortuneComExtractor:{domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},WwwLinkedinComExtractor:{domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},ObamawhitehouseArchivesGovExtractor:{domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},WwwOpposingviewsComExtractor:{domain:"www.opposingviews.com",title:{selectors:["h1.title"]},author:{selectors:["div.date span span a"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[".show-for-small-only"]}},WwwProspectmagazineCoUkExtractor:{domain:"www.prospectmagazine.co.uk",title:{selectors:[".page-title"]},author:{selectors:[".aside_author .title"]},date_published:{selectors:[".post-info"],timezone:"Europe/London"},dek:{selectors:[".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article .post_content"],transforms:{},clean:[]}},ForwardComExtractor:{domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".donate-box",".message",".subtitle"]}},WwwQdailyComExtractor:{domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},GothamistComExtractor:{domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".author"]},date_published:{selectors:["abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},WwwFoolComExtractor:{domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:["header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'.concat(t,'"/></figure>'))},".caption":"figcaption"},clean:["#pitch"]}},WwwSlateComExtractor:{domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},IciRadioCanadaCaExtractor:{domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],format:"YYYY-MM-DD|HH[h]mm",timezone:"America/New_York"},dek:{selectors:[".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},WwwFortinetComExtractor:{domain:"www.fortinet.com",title:{selectors:["h1"]},author:{selectors:[".b15-blog-meta__author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}}}},WwwFastcompanyComExtractor:{domain:"www.fastcompany.com",title:{selectors:["h1"]},author:{selectors:[".post__by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".post__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post__article"]}},BlisterreviewComExtractor:{domain:"blisterreview.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:["span.author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.entry-date","datetime"],['meta[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[itemprop="image"]',"content"],['meta[name="twitter:image"]',"content"],["img.attachment-large","src"]]},content:{selectors:[[".elementor-section-wrap",".elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text"]],transforms:{figcaption:"p"},clean:[".comments-area"]}},NewsMynaviJpExtractor:{domain:"news.mynavi.jp",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["main div.article-author a.article-author__name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main article div"],transforms:{img:function(e){var t=e.attr("data-original");""!==t&&e.attr("src",t)}},clean:[]}},ClinicaltrialsGovExtractor:{domain:"clinicaltrials.gov",title:{selectors:["h1.tr-solo_record"]},author:{selectors:["div#sponsor.tr-info-text"]},date_published:{selectors:['div:has(> span.term[data-term="Last Update Posted"])']},content:{selectors:["div#tab-body"],transforms:{},clean:[".usa-alert> img"]}},GithubComExtractor:{domain:"github.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[]},date_published:{selectors:[['span[itemprop="dateModified"] relative-time',"datetime"]]},dek:{selectors:['span[itemprop="about"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#readme article"]],transforms:{},clean:[]}},WwwRedditComExtractor:{domain:"www.reddit.com",title:{selectors:['div[data-test-id="post-content"] h2']},author:{selectors:['div[data-test-id="post-content"] a[href*="user/"]']},date_published:{selectors:['div[data-test-id="post-content"] a[data-click-id="timestamp"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[['div[data-test-id="post-content"] p'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])','div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])'],'div[data-test-id="post-content"]'],transforms:{'div[role="img"]':function(e){var t=e.find("img"),n=e.css("background-image");return 1===t.length&&n?(t.attr("src",n.match(/\((.*?)\)/)[1].replace(/('|")/g,"")),t):e}},clean:[".icon"]}},OtrsComExtractor:{domain:"otrs.com",title:{selectors:["#main article h1"]},author:{selectors:["div.dateplusauthor a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main article"],defaultCleaner:!1,transforms:{},clean:["div.dateplusauthor","div.gr-12.push-6.footershare","#atftbx","div.category-modul"]}},WwwOssnewsJpExtractor:{domain:"www.ossnews.jp",title:{selectors:["#alpha-block h1.hxnewstitle"]},author:null,date_published:{selectors:["p.fs12"],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#alpha-block .section:has(h1.hxnewstitle)"],defaultCleaner:!1,transforms:{},clean:[]}},BuzzapJpExtractor:{domain:"buzzap.jp",title:{selectors:["h1.entry-title"]},author:null,date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ctiframe"],defaultCleaner:!1,transforms:{},clean:[]}},WwwAsahiComExtractor:{domain:"www.asahi.com",title:{selectors:[".ArticleTitle h1"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#MainInner div.ArticleBody"],defaultCleaner:!1,transforms:{},clean:["div.AdMod","div.LoginSelectArea"]}},WwwSanwaCoJpExtractor:{domain:"www.sanwa.co.jp",title:{selectors:["#newsContent h1"]},author:null,date_published:{selectors:["p.date"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#newsContent"],defaultCleaner:!1,transforms:{},clean:["#smartphone","div.sns_box","div.contentFoot"]}},WwwElecomCoJpExtractor:{domain:"www.elecom.co.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["p.section-last"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["td.TableMain2"],defaultCleaner:!1,transforms:{table:function(e){e.attr("width","auto")}},clean:[]}},ScanNetsecurityNeJpExtractor:{domain:"scan.netsecurity.ne.jp",title:{selectors:["header.arti-header h1.head"]},author:null,date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["header.arti-header p.arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.arti-content.arti-content--thumbnail"],defaultCleaner:!1,transforms:{},clean:["aside.arti-giga"]}},JvndbJvnJpExtractor:{domain:"jvndb.jvn.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["div.modifytxt:nth-child(2)"],format:"YYYY/MM/DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#news-list"],defaultCleaner:!1,transforms:{},clean:[]}},GeniusComExtractor:is,WwwJnsaOrgExtractor:{domain:"www.jnsa.org",title:{selectors:["#wgtitle h2"]},author:null,date_published:null,dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main_area"],transforms:{},clean:["#pankuzu","#side"]}},PhpspotOrgExtractor:{domain:"phpspot.org",title:{selectors:["h3.hl"]},author:null,date_published:{selectors:["h4.hl"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["div.entrybody"],defaultCleaner:!1,transforms:{},clean:[]}},WwwInfoqComExtractor:{domain:"www.infoq.com",title:{selectors:["h1.heading"]},author:{selectors:["div.widget.article__authors"]},date_published:{selectors:[".article__readTime.date"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__data"],defaultCleaner:!1,transforms:{},clean:[]}},WwwMoongiftJpExtractor:{domain:"www.moongift.jp",title:{selectors:["h1.title a"]},author:null,date_published:{selectors:["ul.meta li:not(.social):first-of-type"],timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main"],transforms:{},clean:["ul.mg_service.cf"]}},WwwItmediaCoJpExtractor:{domain:"www.itmedia.co.jp",supportedDomains:["www.atmarkit.co.jp","techtarget.itmedia.co.jp","nlab.itmedia.co.jp"],title:{selectors:["#cmsTitle h1"]},author:{selectors:["#byline"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["#cmsAbstract h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#cmsBody"],defaultCleaner:!1,transforms:{},clean:["#snsSharebox"]}},WwwPublickey1JpExtractor:{domain:"www.publickey1.jp",title:{selectors:["h1"]},author:{selectors:["#subcol p:has(img)"]},date_published:{selectors:["div.pubdate"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincol"],defaultCleaner:!1,transforms:{},clean:["#breadcrumbs","div.sbm","div.ad_footer"]}},TakagihiromitsuJpExtractor:{domain:"takagi-hiromitsu.jp",title:{selectors:["h3"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[http-equiv="Last-Modified"]',"value"]]},dek:null,lead_image_url:null,content:{selectors:["div.body"],defaultCleaner:!1,transforms:{},clean:[]}},BookwalkerJpExtractor:{domain:"bookwalker.jp",title:{selectors:["h1.main-heading"]},author:{selectors:["div.authors"]},date_published:{selectors:[".work-info .work-detail:first-of-type .work-detail-contents:last-of-type"],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["div.main-info","div.main-cover-inner"]],defaultCleaner:!1,transforms:{},clean:["span.label.label--trial","dt.info-head.info-head--coin","dd.info-contents.info-contents--coin","div.info-notice.fn-toggleClass"]}},WwwYomiuriCoJpExtractor:{domain:"www.yomiuri.co.jp",title:{selectors:["h1.title-article.c-article-title"]},author:null,date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main-contents"],transforms:{},clean:[]}},JapanCnetComExtractor:{domain:"japan.cnet.com",title:{selectors:[".leaf-headline-ttl"]},author:{selectors:[".writer"]},date_published:{selectors:[".date"],format:"YYYY年MM月DD日 HH時mm分",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},DeadlineComExtractor:{domain:"deadline.com",title:{selectors:["h1"]},author:{selectors:["section.author h3"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item"],transforms:{".embed-twitter":function(e){var t=e.html();e.replaceWith(t)}},clean:[]}},WwwGizmodoJpExtractor:{domain:"www.gizmodo.jp",title:{selectors:["h1.p-post-title"]},author:{selectors:["li.p-post-AssistAuthor"]},date_published:{selectors:[["li.p-post-AssistTime time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.p-post"],transforms:{"img.p-post-thumbnailImage":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["h1.p-post-title","ul.p-post-Assist"]}},GetnewsJpExtractor:{domain:"getnews.jp",title:{selectors:["article h1"]},author:{selectors:["span.prof"]},date_published:{selectors:[["ul.cattag-top time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.post-bodycopy"],transforms:{},clean:[]}},WwwLifehackerJpExtractor:{domain:"www.lifehacker.jp",title:{selectors:["h1.lh-summary-title"]},author:{selectors:["p.lh-entryDetailInner--credit"]},date_published:{selectors:[["div.lh-entryDetail-header time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.lh-entryDetail-body"],transforms:{"img.lazyload":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["p.lh-entryDetailInner--credit"]}},SectIijAdJpExtractor:{domain:"sect.iij.ad.jp",title:{selectors:["h3"]},author:{selectors:["dl.entrydate dd"]},date_published:{selectors:["dl.entrydate dd"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article"],transforms:{},clean:["dl.entrydate"]}},WwwOreillyCoJpExtractor:{domain:"www.oreilly.co.jp",title:{selectors:["h3"]},author:{selectors:['li[itemprop="author"]']},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],defaultCleaner:!1,transforms:{},clean:[".social-tools"]}},WwwIpaGoJpExtractor:{domain:"www.ipa.go.jp",title:{selectors:["h1"]},author:null,date_published:{selectors:["p.ipar_text_right"],format:"YYYY年M月D日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#ipar_main"],defaultCleaner:!1,transforms:{},clean:["p.ipar_text_right"]}},WeeklyAsciiJpExtractor:{domain:"weekly.ascii.jp",title:{selectors:['h1[itemprop="headline"]']},author:{selectors:["p.author"]},date_published:{selectors:[['meta[name="odate"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article"],transforms:{},clean:[]}},TechlogIijAdJpExtractor:{domain:"techlog.iij.ad.jp",title:{selectors:["h1.entry-title"]},author:{selectors:['a[rel="author"]']},date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],defaultCleaner:!1,transforms:{},clean:[]}},WiredJpExtractor:os,JapanZdnetComExtractor:{domain:"japan.zdnet.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="cXenseParse:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},WwwRbbtodayComExtractor:{domain:"www.rbbtoday.com",title:{selectors:["h1"]},author:{selectors:[".writer.writer-name"]},date_published:{selectors:[["header time","datetime"]]},dek:{selectors:[".arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".arti-content"],transforms:{},clean:[".arti-giga"]}},WwwLemondeFrExtractor:{domain:"www.lemonde.fr",title:{selectors:["h1.article__title"]},author:{selectors:[".author__name"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},dek:{selectors:[".article__desc"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__content"],transforms:{},clean:[]}},WwwPhoronixComExtractor:{domain:"www.phoronix.com",title:{selectors:["article header"]},author:{selectors:[".author a:first-child"]},date_published:{selectors:[".author"],format:"D MMMM YYYY at hh:mm",timezone:"America/New_York"},dek:null,lead_image_url:null,content:{selectors:[".content"],transforms:{},clean:[]}},PitchforkComExtractor:{domain:"pitchfork.com",title:{selectors:["title"]},author:{selectors:[".authors-detail__display-name"]},date_published:{selectors:[[".pub-date","datetime"]]},dek:{selectors:[".review-detail__abstract"]},lead_image_url:{selectors:[[".single-album-tombstone__art img","src"]]},content:{selectors:[".review-detail__text"]},extend:{score:{selectors:[".score"]}}},BiorxivOrgExtractor:{domain:"biorxiv.org",title:{selectors:["h1#page-title"]},author:{selectors:["div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors"]},content:{selectors:["div#abstract-1"],transforms:{},clean:[]}},EpaperZeitDeExtractor:{domain:"epaper.zeit.de",title:{selectors:["p.title"]},author:{selectors:[".article__author"]},date_published:null,excerpt:{selectors:["subtitle"]},lead_image_url:null,content:{selectors:[".article"],transforms:{"p.title":"h1",".article__author":"p",byline:"p",linkbox:"p"},clean:["image-credits","box[type=citation]"]}},WwwLadbibleComExtractor:{domain:"www.ladbible.com",title:{selectors:["h1"]},author:{selectors:["[class*=Byline]"]},date_published:{selectors:["time"],timezone:"Europe/London"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["[class*=ArticleContainer]"],clean:["time","source",'a[href^="https://www.ladbible.com/"]',"picture","[class*=StyledCardBlock]"]}},TimesofindiaIndiatimesComExtractor:{domain:"timesofindia.indiatimes.com",title:{selectors:["h1"]},extend:{reporter:{selectors:["div.byline"],transforms:{}}},date_published:{selectors:[".byline"],format:"MMM D, YYYY, HH:mm z",timezone:"Asia/Kolkata"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.contentwrapper:has(section)"],defaultCleaner:!1,clean:["section","h1",".byline",".img_cptn"]}},MaTtiasBeExtractor:{domain:"ma.ttias.be",title:{selectors:[['meta[name="twitter:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},content:{selectors:[[".content"]],transforms:{h2:function(e){return e.attr("id",null),"h3"},h1:function(e){e.attr("id",null),e.after("<p></p>")},ul:function(e){e.attr("class","entry-content-asset")}}}},PastebinComExtractor:{domain:"pastebin.com",title:{selectors:["h1"]},author:{selectors:[".paste_box_line2 .t_us + a"]},date_published:{selectors:[".paste_box_line2 .t_da + span"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#selectable .text"],transforms:{ol:"div",li:"p"},clean:[]}},WwwAbendblattDeExtractor:ss,WwwGrueneDeExtractor:{domain:"www.gruene.de",title:{selectors:["header h1"]},author:null,date_published:null,dek:null,lead_image_url:{selectors:[['meta[property="og:image"]',"content"]]},content:{selectors:[["section header","section h2","section p","section ol"]],transforms:{},clean:["figcaption","p[class]"]}},WwwEngadgetComExtractor:{domain:"www.engadget.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:['a.th-meta[data-ylk*="subsec:author"]']},date_published:{selectors:[]},dek:{selectors:['div[class*="o-title_mark"] div']},lead_image_url:{selectors:[]},content:{selectors:[["#page_body figure:not(div.article-text figure)","div.article-text"]],transforms:{},clean:[]}},ArstechnicaComExtractor:{domain:"arstechnica.com",title:{selectors:["title"]},author:{selectors:['*[rel="author"] *[itemprop="name"]']},date_published:{selectors:[[".byline time","datetime"]]},dek:{selectors:['h2[itemprop="description"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{h2:function(e){e.before("<p></p>")}},clean:["figcaption .enlarge-link","figcaption .sep","figure.video",".gallery","aside",".sidebar"]}},WwwNdtvComExtractor:{domain:"www.ndtv.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:['span[itemprop="author"] span[itemprop="name"]']},date_published:{selectors:[['span[itemprop="dateModified"]',"content"]]},dek:{selectors:["h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{".place_cont":function(e){if(!e.parents("p").length){var t=e.next("p");t&&(e.remove(),t.prepend(e))}}},clean:[".highlghts_Wdgt",".ins_instory_dv_caption","input","._world-wrapper .mt20"]}},SpektrumExtractor:{domain:"www.spektrum.de",title:{selectors:[".content__title"]},author:{selectors:[".content__author__info__name"]},date_published:{selectors:[".content__meta__date"],timezone:"Europe/Berlin"},dek:{selectors:[".content__intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],".image__article__top img"]},content:{selectors:["article.content"],clean:[".breadcrumbs",".hide-for-print","aside","header h2",".image__article__top",".content__author",".copyright",".callout-box"]}}}),cs=ut(us).reduce((function(e,t){var n=us[t];return dt({},e,Xo(n))}),{}),ls=t((function(e,t){(function(){var e={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};function n(e){if(void 0===e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return"";if(e.indexOf("‎")>-1&&e.indexOf("‏")>-1)return"bidi";if(e.indexOf("‎")>-1)return"ltr";if(e.indexOf("‏")>-1)return"rtl";var t=r(e,"rtl"),n=r(e,"ltr");return t&&n?"bidi":n?"ltr":t?"rtl":""}function r(t,n){var r,i,o,s,u,c=!1,l=!1;for(u=t.search(/[0-9]/)>-1,t=t.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),r=0;r<t.length;r++){for(o in i=t.charAt(r),s=!1,e)e.hasOwnProperty(o)&&a(i,e[o][0],e[o][1])&&(c=!0,s=!0);!1===s&&(l=!0)}return"rtl"===n?c:"ltr"===n?l||!c&&u:void 0}function a(e,t,n){var r=e.charCodeAt(0),a=parseInt(t,16),i=parseInt(n,16);return r>a&&r<i}t.getDirection=n,t.patch=function(){String.prototype.getDirection=function(){return n(this.valueOf())}}}).call(this)})),fs=(ls.getDirection,ls.patch,/^\s*(posted |written )?by\s*:?\s*(.*)/i),ds=new RegExp("http(s)?://","i"),hs=/^\d{13}$/i,ps=/^\d{10}$/i,ms=/^\s*published\s*:?\s*(.*)/i,gs=/(.*\d)(am|pm)(.*)/i,vs=/\.m\./i,ys=/^\s*(just|right)?\s*now\s*/i,_s=["seconds?","minutes?","hours?","days?","weeks?","months?","years?"].join("|"),bs=new RegExp("(\\d+)\\s+(".concat(_s,")\\s+ago"),"i"),ws=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].join("|"),As=new RegExp("(".concat("[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",")|(").concat("[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",")|(").concat("-[0-9]{3,4}$",")|([0-9]{1,4})|(").concat(ws,")"),"ig"),xs=/-\d{3,4}$/,ks=/(: | - | \| )/g,Es=new RegExp(".com$|.net$|.org$|.co.uk$","g");function Ss(e){return la(e.replace(fs,"$2").trim())}var Ms=t((function(e){!function(e){e.exports.is_uri=n,e.exports.is_http_uri=r,e.exports.is_https_uri=a,e.exports.is_web_uri=i,e.exports.isUri=n,e.exports.isHttpUri=r,e.exports.isHttpsUri=a,e.exports.isWebUri=i;var t=function(e){return e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/)};function n(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var n,r,a,i,o,s="",u="";if(s=(n=t(e))[1],r=n[2],a=n[3],i=n[4],o=n[5],s&&s.length&&a.length>=0){if(r&&r.length){if(0!==a.length&&!/^\//.test(a))return}else if(/^\/\//.test(a))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(s.toLowerCase()))return u+=s+":",r&&r.length&&(u+="//"+r),u+=a,i&&i.length&&(u+="?"+i),o&&o.length&&(u+="#"+o),u}}}function r(e,r){if(n(e)){var a,i,o,s,u="",c="",l="",f="";if(u=(a=t(e))[1],c=a[2],i=a[3],o=a[4],s=a[5],u){if(r){if("https"!=u.toLowerCase())return}else if("http"!=u.toLowerCase())return;if(c)return/:(\d+)$/.test(c)&&(l=c.match(/:(\d+)$/)[0],c=c.replace(/:\d+$/,"")),f+=u+":",f+="//"+c,l&&(f+=l),f+=i,o&&o.length&&(f+="?"+o),s&&s.length&&(f+="#"+s),f}}}function a(e){return r(e,!0)}function i(e){return r(e)||a(e)}}(e)}));function Ts(e){return e=e.trim(),Ms.isWebUri(e)?e:null}var Cs=t((function(t,n){t.exports=function(){var n,r;function a(){return n.apply(null,arguments)}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function o(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function s(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function u(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(s(e,t))return!1;return!0}function c(e){return void 0===e}function l(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function f(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){var n,r=[],a=e.length;for(n=0;n<a;++n)r.push(t(e[n],n));return r}function h(e,t){for(var n in t)s(t,n)&&(e[n]=t[n]);return s(t,"toString")&&(e.toString=t.toString),s(t,"valueOf")&&(e.valueOf=t.valueOf),e}function p(e,t,n,r){return Et(e,t,n,r,!0).utc()}function m(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function g(e){if(null==e._isValid){var t=m(e),n=r.call(t.parsedDateParts,(function(e){return null!=e})),a=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(a=a&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return a;e._isValid=a}return e._isValid}function v(e){var t=p(NaN);return null!=e?h(m(t),e):m(t).userInvalidated=!0,t}r=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),r=n.length>>>0;for(t=0;t<r;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var y=a.momentProperties=[],_=!1;function b(e,t){var n,r,a,i=y.length;if(c(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),c(t._i)||(e._i=t._i),c(t._f)||(e._f=t._f),c(t._l)||(e._l=t._l),c(t._strict)||(e._strict=t._strict),c(t._tzm)||(e._tzm=t._tzm),c(t._isUTC)||(e._isUTC=t._isUTC),c(t._offset)||(e._offset=t._offset),c(t._pf)||(e._pf=m(t)),c(t._locale)||(e._locale=t._locale),i>0)for(n=0;n<i;n++)c(a=t[r=y[n]])||(e[r]=a);return e}function w(e){b(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===_&&(_=!0,a.updateOffset(this),_=!1)}function A(e){return e instanceof w||null!=e&&null!=e._isAMomentObject}function x(e){!1===a.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function k(e,t){var n=!0;return h((function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,e),n){var r,i,o,u=[],c=arguments.length;for(i=0;i<c;i++){if(r="","object"==typeof arguments[i]){for(o in r+="\n["+i+"] ",arguments[0])s(arguments[0],o)&&(r+=o+": "+arguments[0][o]+", ");r=r.slice(0,-2)}else r=arguments[i];u.push(r)}x(e+"\nArguments: "+Array.prototype.slice.call(u).join("")+"\n"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var E,S={};function M(e,t){null!=a.deprecationHandler&&a.deprecationHandler(e,t),S[e]||(x(t),S[e]=!0)}function T(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function C(e,t){var n,r=h({},e);for(n in t)s(t,n)&&(o(e[n])&&o(t[n])?(r[n]={},h(r[n],e[n]),h(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)s(e,n)&&!s(t,n)&&o(e[n])&&(r[n]=h({},r[n]));return r}function D(e){null!=e&&this.set(e)}function O(e,t,n){var r=""+Math.abs(e),a=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,E=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)s(e,t)&&n.push(t);return n};var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,j=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,P={},z={};function L(e,t,n,r){var a=r;"string"==typeof r&&(a=function(){return this[r]()}),e&&(z[e]=a),t&&(z[t[0]]=function(){return O(a.apply(this,arguments),t[1],t[2])}),n&&(z[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function R(e,t){return e.isValid()?(t=Y(t,e.localeData()),P[t]=P[t]||function(e){var t,n,r,a=e.match(N);for(t=0,n=a.length;t<n;t++)z[a[t]]?a[t]=z[a[t]]:a[t]=(r=a[t]).match(/\[[\s\S]/)?r.replace(/^\[|\]$/g,""):r.replace(/\\/g,"");return function(t){var r,i="";for(r=0;r<n;r++)i+=T(a[r])?a[r].call(t,e):a[r];return i}}(t),P[t](e)):e.localeData().invalidDate()}function Y(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(j.lastIndex=0;n>=0&&j.test(e);)e=e.replace(j,r),j.lastIndex=0,n-=1;return e}var W={};function q(e,t){var n=e.toLowerCase();W[n]=W[n+"s"]=W[t]=e}function I(e){return"string"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function H(e){var t,n,r={};for(n in e)s(e,n)&&(t=I(n))&&(r[t]=e[n]);return r}var B={};function F(e,t){B[e]=t}function G(e){return e%4==0&&e%100!=0||e%400==0}function U(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function $(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=U(t)),n}function V(e,t){return function(n){return null!=n?(K(this,e,n),a.updateOffset(this,t),this):J(this,e)}}function J(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function K(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&G(e.year())&&1===e.month()&&29===e.date()?(n=$(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Ae(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}var X,Z=/\d/,Q=/\d\d/,ee=/\d{3}/,te=/\d{4}/,ne=/[+-]?\d{6}/,re=/\d\d?/,ae=/\d\d\d\d?/,ie=/\d\d\d\d\d\d?/,oe=/\d{1,3}/,se=/\d{1,4}/,ue=/[+-]?\d{1,6}/,ce=/\d+/,le=/[+-]?\d+/,fe=/Z|[+-]\d\d:?\d\d/gi,de=/Z|[+-]\d\d(?::?\d\d)?/gi,he=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function pe(e,t,n){X[e]=T(t)?t:function(e,r){return e&&n?n:t}}function me(e,t){return s(X,e)?X[e](t._strict,t._locale):new RegExp(ge(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,a){return t||n||r||a}))))}function ge(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}X={};var ve,ye={};function _e(e,t){var n,r,a=t;for("string"==typeof e&&(e=[e]),l(t)&&(a=function(e,n){n[t]=$(e)}),r=e.length,n=0;n<r;n++)ye[e[n]]=a}function be(e,t){_e(e,(function(e,n,r,a){r._w=r._w||{},t(e,r._w,r,a)}))}function we(e,t,n){null!=t&&s(ye,e)&&ye[e](t,n._a,n,e)}function Ae(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,r=(t%(n=12)+n)%n;return e+=(t-r)/12,1===r?G(e)?29:28:31-r%7%2}ve=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},L("M",["MM",2],"Mo",(function(){return this.month()+1})),L("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),L("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),q("month","M"),F("month",8),pe("M",re),pe("MM",re,Q),pe("MMM",(function(e,t){return t.monthsShortRegex(e)})),pe("MMMM",(function(e,t){return t.monthsRegex(e)})),_e(["M","MM"],(function(e,t){t[1]=$(e)-1})),_e(["MMM","MMMM"],(function(e,t,n,r){var a=n._locale.monthsParse(e,r,n._strict);null!=a?t[1]=a:m(n).invalidMonth=e}));var xe="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ke="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ee=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Se=he,Me=he;function Te(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=p([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(a=ve.call(this._shortMonthsParse,o))?a:null:-1!==(a=ve.call(this._longMonthsParse,o))?a:null:"MMM"===t?-1!==(a=ve.call(this._shortMonthsParse,o))||-1!==(a=ve.call(this._longMonthsParse,o))?a:null:-1!==(a=ve.call(this._longMonthsParse,o))||-1!==(a=ve.call(this._shortMonthsParse,o))?a:null}function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=$(t);else if(!l(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Ae(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function De(e){return null!=e?(Ce(this,e),a.updateOffset(this,!0),this):J(this,"Month")}function Oe(){function e(e,t){return t.length-e.length}var t,n,r=[],a=[],i=[];for(t=0;t<12;t++)n=p([2e3,t]),r.push(this.monthsShort(n,"")),a.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(r.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)r[t]=ge(r[t]),a[t]=ge(a[t]);for(t=0;t<24;t++)i[t]=ge(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Ne(e){return G(e)?366:365}L("Y",0,0,(function(){var e=this.year();return e<=9999?O(e,4):"+"+e})),L(0,["YY",2],0,(function(){return this.year()%100})),L(0,["YYYY",4],0,"year"),L(0,["YYYYY",5],0,"year"),L(0,["YYYYYY",6,!0],0,"year"),q("year","y"),F("year",1),pe("Y",le),pe("YY",re,Q),pe("YYYY",se,te),pe("YYYYY",ue,ne),pe("YYYYYY",ue,ne),_e(["YYYYY","YYYYYY"],0),_e("YYYY",(function(e,t){t[0]=2===e.length?a.parseTwoDigitYear(e):$(e)})),_e("YY",(function(e,t){t[0]=a.parseTwoDigitYear(e)})),_e("Y",(function(e,t){t[0]=parseInt(e,10)})),a.parseTwoDigitYear=function(e){return $(e)+($(e)>68?1900:2e3)};var je=V("FullYear",!0);function Pe(e,t,n,r,a,i,o){var s;return e<100&&e>=0?(s=new Date(e+400,t,n,r,a,i,o),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,n,r,a,i,o),s}function ze(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Le(e,t,n){var r=7+t-n;return-(7+ze(e,0,r).getUTCDay()-t)%7+r-1}function Re(e,t,n,r,a){var i,o,s=1+7*(t-1)+(7+n-r)%7+Le(e,r,a);return s<=0?o=Ne(i=e-1)+s:s>Ne(e)?(i=e+1,o=s-Ne(e)):(i=e,o=s),{year:i,dayOfYear:o}}function Ye(e,t,n){var r,a,i=Le(e.year(),t,n),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?r=o+We(a=e.year()-1,t,n):o>We(e.year(),t,n)?(r=o-We(e.year(),t,n),a=e.year()+1):(a=e.year(),r=o),{week:r,year:a}}function We(e,t,n){var r=Le(e,t,n),a=Le(e+1,t,n);return(Ne(e)-r+a)/7}function qe(e,t){return e.slice(t,7).concat(e.slice(0,t))}L("w",["ww",2],"wo","week"),L("W",["WW",2],"Wo","isoWeek"),q("week","w"),q("isoWeek","W"),F("week",5),F("isoWeek",5),pe("w",re),pe("ww",re,Q),pe("W",re),pe("WW",re,Q),be(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=$(e)})),L("d",0,"do","day"),L("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),L("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),L("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),L("e",0,0,"weekday"),L("E",0,0,"isoWeekday"),q("day","d"),q("weekday","e"),q("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),pe("d",re),pe("e",re),pe("E",re),pe("dd",(function(e,t){return t.weekdaysMinRegex(e)})),pe("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),pe("dddd",(function(e,t){return t.weekdaysRegex(e)})),be(["dd","ddd","dddd"],(function(e,t,n,r){var a=n._locale.weekdaysParse(e,r,n._strict);null!=a?t.d=a:m(n).invalidWeekday=e})),be(["d","e","E"],(function(e,t,n,r){t[r]=$(e)}));var Ie="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),He="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Be="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Fe=he,Ge=he,Ue=he;function $e(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(a=ve.call(this._weekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ve.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=ve.call(this._minWeekdaysParse,o))?a:null:"dddd"===t?-1!==(a=ve.call(this._weekdaysParse,o))||-1!==(a=ve.call(this._shortWeekdaysParse,o))||-1!==(a=ve.call(this._minWeekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ve.call(this._shortWeekdaysParse,o))||-1!==(a=ve.call(this._weekdaysParse,o))||-1!==(a=ve.call(this._minWeekdaysParse,o))?a:null:-1!==(a=ve.call(this._minWeekdaysParse,o))||-1!==(a=ve.call(this._weekdaysParse,o))||-1!==(a=ve.call(this._shortWeekdaysParse,o))?a:null}function Ve(){function e(e,t){return t.length-e.length}var t,n,r,a,i,o=[],s=[],u=[],c=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=ge(this.weekdaysMin(n,"")),a=ge(this.weekdaysShort(n,"")),i=ge(this.weekdays(n,"")),o.push(r),s.push(a),u.push(i),c.push(r),c.push(a),c.push(i);o.sort(e),s.sort(e),u.sort(e),c.sort(e),this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Je(){return this.hours()%12||12}function Ke(e,t){L(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function Xe(e,t){return t._meridiemParse}L("H",["HH",2],0,"hour"),L("h",["hh",2],0,Je),L("k",["kk",2],0,(function(){return this.hours()||24})),L("hmm",0,0,(function(){return""+Je.apply(this)+O(this.minutes(),2)})),L("hmmss",0,0,(function(){return""+Je.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)})),L("Hmm",0,0,(function(){return""+this.hours()+O(this.minutes(),2)})),L("Hmmss",0,0,(function(){return""+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)})),Ke("a",!0),Ke("A",!1),q("hour","h"),F("hour",13),pe("a",Xe),pe("A",Xe),pe("H",re),pe("h",re),pe("k",re),pe("HH",re,Q),pe("hh",re,Q),pe("kk",re,Q),pe("hmm",ae),pe("hmmss",ie),pe("Hmm",ae),pe("Hmmss",ie),_e(["H","HH"],3),_e(["k","kk"],(function(e,t,n){var r=$(e);t[3]=24===r?0:r})),_e(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),_e(["h","hh"],(function(e,t,n){t[3]=$(e),m(n).bigHour=!0})),_e("hmm",(function(e,t,n){var r=e.length-2;t[3]=$(e.substr(0,r)),t[4]=$(e.substr(r)),m(n).bigHour=!0})),_e("hmmss",(function(e,t,n){var r=e.length-4,a=e.length-2;t[3]=$(e.substr(0,r)),t[4]=$(e.substr(r,2)),t[5]=$(e.substr(a)),m(n).bigHour=!0})),_e("Hmm",(function(e,t,n){var r=e.length-2;t[3]=$(e.substr(0,r)),t[4]=$(e.substr(r))})),_e("Hmmss",(function(e,t,n){var r=e.length-4,a=e.length-2;t[3]=$(e.substr(0,r)),t[4]=$(e.substr(r,2)),t[5]=$(e.substr(a))}));var Ze,Qe=V("Hours",!0),et={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:xe,monthsShort:ke,week:{dow:0,doy:6},weekdays:Ie,weekdaysMin:Be,weekdaysShort:He,meridiemParse:/[ap]\.?m?\.?/i},tt={},nt={};function rt(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n+=1)if(e[n]!==t[n])return n;return r}function at(e){return e?e.toLowerCase().replace("_","-"):e}function it(n){var r=null;if(void 0===tt[n]&&t&&t.exports&&function(e){return null!=e.match("^[^/\\\\]*$")}(n))try{r=Ze._abbr,e(),ot(r)}catch(e){tt[n]=null}return tt[n]}function ot(e,t){var n;return e&&((n=c(t)?ut(e):st(e,t))?Ze=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),Ze._abbr}function st(e,t){if(null!==t){var n,r=et;if(t.abbr=e,null!=tt[e])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=tt[e]._config;else if(null!=t.parentLocale)if(null!=tt[t.parentLocale])r=tt[t.parentLocale]._config;else{if(null==(n=it(t.parentLocale)))return nt[t.parentLocale]||(nt[t.parentLocale]=[]),nt[t.parentLocale].push({name:e,config:t}),null;r=n._config}return tt[e]=new D(C(r,t)),nt[e]&&nt[e].forEach((function(e){st(e.name,e.config)})),ot(e),tt[e]}return delete tt[e],null}function ut(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Ze;if(!i(e)){if(t=it(e))return t;e=[e]}return function(e){for(var t,n,r,a,i=0;i<e.length;){for(t=(a=at(e[i]).split("-")).length,n=(n=at(e[i+1]))?n.split("-"):null;t>0;){if(r=it(a.slice(0,t).join("-")))return r;if(n&&n.length>=t&&rt(a,n)>=t-1)break;t--}i++}return Ze}(e)}function ct(e){var t,n=e._a;return n&&-2===m(e).overflow&&(t=n[1]<0||n[1]>11?1:n[2]<1||n[2]>Ae(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,m(e)._overflowDayOfYear&&(t<0||t>2)&&(t=2),m(e)._overflowWeeks&&-1===t&&(t=7),m(e)._overflowWeekday&&-1===t&&(t=8),m(e).overflow=t),e}var lt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ft=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,dt=/Z|[+-]\d\d(?::?\d\d)?/,ht=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],pt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],mt=/^\/?Date\((-?\d+)/i,gt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,vt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function yt(e){var t,n,r,a,i,o,s=e._i,u=lt.exec(s)||ft.exec(s),c=ht.length,l=pt.length;if(u){for(m(e).iso=!0,t=0,n=c;t<n;t++)if(ht[t][1].exec(u[1])){a=ht[t][0],r=!1!==ht[t][2];break}if(null==a)return void(e._isValid=!1);if(u[3]){for(t=0,n=l;t<n;t++)if(pt[t][1].exec(u[3])){i=(u[2]||" ")+pt[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(u[4]){if(!dt.exec(u[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),xt(e)}else e._isValid=!1}function _t(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function bt(e){var t,n=gt.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(n){if(t=function(e,t,n,r,a,i){var o=[_t(e),ke.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(a,10)];return i&&o.push(parseInt(i,10)),o}(n[4],n[3],n[2],n[5],n[6],n[7]),!function(e,t,n){return!e||He.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(m(n).weekdayMismatch=!0,n._isValid=!1,!1)}(n[1],t,e))return;e._a=t,e._tzm=function(e,t,n){if(e)return vt[e];if(t)return 0;var r=parseInt(n,10),a=r%100;return(r-a)/100*60+a}(n[8],n[9],n[10]),e._d=ze.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),m(e).rfc2822=!0}else e._isValid=!1}function wt(e,t,n){return null!=e?e:null!=t?t:n}function At(e){var t,n,r,i,o,s=[];if(!e._d){for(r=function(e){var t=new Date(a.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}(e),e._w&&null==e._a[2]&&null==e._a[1]&&function(e){var t,n,r,a,i,o,s,u,c;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,o=4,n=wt(t.GG,e._a[0],Ye(St(),1,4).year),r=wt(t.W,1),((a=wt(t.E,1))<1||a>7)&&(u=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,c=Ye(St(),i,o),n=wt(t.gg,e._a[0],c.year),r=wt(t.w,c.week),null!=t.d?((a=t.d)<0||a>6)&&(u=!0):null!=t.e?(a=t.e+i,(t.e<0||t.e>6)&&(u=!0)):a=i),r<1||r>We(n,i,o)?m(e)._overflowWeeks=!0:null!=u?m(e)._overflowWeekday=!0:(s=Re(n,r,a,i,o),e._a[0]=s.year,e._dayOfYear=s.dayOfYear)}(e),null!=e._dayOfYear&&(o=wt(e._a[0],r[0]),(e._dayOfYear>Ne(o)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),n=ze(o,0,e._dayOfYear),e._a[1]=n.getUTCMonth(),e._a[2]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=r[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[3]&&0===e._a[4]&&0===e._a[5]&&0===e._a[6]&&(e._nextDay=!0,e._a[3]=0),e._d=(e._useUTC?ze:Pe).apply(null,s),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[3]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(m(e).weekdayMismatch=!0)}}function xt(e){if(e._f!==a.ISO_8601)if(e._f!==a.RFC_2822){e._a=[],m(e).empty=!0;var t,n,r,i,o,s,u,c=""+e._i,l=c.length,f=0;for(u=(r=Y(e._f,e._locale).match(N)||[]).length,t=0;t<u;t++)i=r[t],(n=(c.match(me(i,e))||[])[0])&&((o=c.substr(0,c.indexOf(n))).length>0&&m(e).unusedInput.push(o),c=c.slice(c.indexOf(n)+n.length),f+=n.length),z[i]?(n?m(e).empty=!1:m(e).unusedTokens.push(i),we(i,n,e)):e._strict&&!n&&m(e).unusedTokens.push(i);m(e).charsLeftOver=l-f,c.length>0&&m(e).unusedInput.push(c),e._a[3]<=12&&!0===m(e).bigHour&&e._a[3]>0&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[3]=function(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}(e._locale,e._a[3],e._meridiem),null!==(s=m(e).era)&&(e._a[0]=e._locale.erasConvertYear(s,e._a[0])),At(e),ct(e)}else bt(e);else yt(e)}function kt(e){var t=e._i,n=e._f;return e._locale=e._locale||ut(e._l),null===t||void 0===n&&""===t?v({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),A(t)?new w(ct(t)):(f(t)?e._d=t:i(n)?function(e){var t,n,r,a,i,o,s=!1,u=e._f.length;if(0===u)return m(e).invalidFormat=!0,void(e._d=new Date(NaN));for(a=0;a<u;a++)i=0,o=!1,t=b({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],xt(t),g(t)&&(o=!0),i+=m(t).charsLeftOver,i+=10*m(t).unusedTokens.length,m(t).score=i,s?i<r&&(r=i,n=t):(null==r||i<r||o)&&(r=i,n=t,o&&(s=!0));h(e,n||t)}(e):n?xt(e):function(e){var t=e._i;c(t)?e._d=new Date(a.now()):f(t)?e._d=new Date(t.valueOf()):"string"==typeof t?function(e){var t=mt.exec(e._i);null===t?(yt(e),!1===e._isValid&&(delete e._isValid,bt(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:a.createFromInputFallback(e)))):e._d=new Date(+t[1])}(e):i(t)?(e._a=d(t.slice(0),(function(e){return parseInt(e,10)})),At(e)):o(t)?function(e){if(!e._d){var t=H(e._i),n=void 0===t.day?t.date:t.day;e._a=d([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),At(e)}}(e):l(t)?e._d=new Date(t):a.createFromInputFallback(e)}(e),g(e)||(e._d=null),e))}function Et(e,t,n,r,a){var s,c={};return!0!==t&&!1!==t||(r=t,t=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(o(e)&&u(e)||i(e)&&0===e.length)&&(e=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=a,c._l=n,c._i=e,c._f=t,c._strict=r,(s=new w(ct(kt(c))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function St(e,t,n,r){return Et(e,t,n,r,!1)}a.createFromInputFallback=k("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),a.ISO_8601=function(){},a.RFC_2822=function(){};var Mt=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=St.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()})),Tt=k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=St.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:v()}));function Ct(e,t){var n,r;if(1===t.length&&i(t[0])&&(t=t[0]),!t.length)return St();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}var Dt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ot(e){var t=H(e),n=t.year||0,r=t.quarter||0,a=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,u=t.hour||0,c=t.minute||0,l=t.second||0,f=t.millisecond||0;this._isValid=function(e){var t,n,r=!1,a=Dt.length;for(t in e)if(s(e,t)&&(-1===ve.call(Dt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<a;++n)if(e[Dt[n]]){if(r)return!1;parseFloat(e[Dt[n]])!==$(e[Dt[n]])&&(r=!0)}return!0}(t),this._milliseconds=+f+1e3*l+6e4*c+1e3*u*60*60,this._days=+o+7*i,this._months=+a+3*r+12*n,this._data={},this._locale=ut(),this._bubble()}function Nt(e){return e instanceof Ot}function jt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Pt(e,t){L(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+O(~~(e/60),2)+t+O(~~e%60,2)}))}Pt("Z",":"),Pt("ZZ",""),pe("Z",de),pe("ZZ",de),_e(["Z","ZZ"],(function(e,t,n){n._useUTC=!0,n._tzm=Lt(de,e)}));var zt=/([\+\-]|\d\d)/gi;function Lt(e,t){var n,r,a=(t||"").match(e);return null===a?null:0===(r=60*(n=((a[a.length-1]||[])+"").match(zt)||["-",0,0])[1]+$(n[2]))?0:"+"===n[0]?r:-r}function Rt(e,t){var n,r;return t._isUTC?(n=t.clone(),r=(A(e)||f(e)?e.valueOf():St(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),a.updateOffset(n,!1),n):St(e).local()}function Yt(e){return-Math.round(e._d.getTimezoneOffset())}function Wt(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var qt=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,It=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ht(e,t){var n,r,a,i,o,u,c=e,f=null;return Nt(e)?c={ms:e._milliseconds,d:e._days,M:e._months}:l(e)||!isNaN(+e)?(c={},t?c[t]=+e:c.milliseconds=+e):(f=qt.exec(e))?(n="-"===f[1]?-1:1,c={y:0,d:$(f[2])*n,h:$(f[3])*n,m:$(f[4])*n,s:$(f[5])*n,ms:$(jt(1e3*f[6]))*n}):(f=It.exec(e))?(n="-"===f[1]?-1:1,c={y:Bt(f[2],n),M:Bt(f[3],n),w:Bt(f[4],n),d:Bt(f[5],n),h:Bt(f[6],n),m:Bt(f[7],n),s:Bt(f[8],n)}):null==c?c={}:"object"==typeof c&&("from"in c||"to"in c)&&(i=St(c.from),o=St(c.to),a=i.isValid()&&o.isValid()?(o=Rt(o,i),i.isBefore(o)?u=Ft(i,o):((u=Ft(o,i)).milliseconds=-u.milliseconds,u.months=-u.months),u):{milliseconds:0,months:0},(c={}).ms=a.milliseconds,c.M=a.months),r=new Ot(c),Nt(e)&&s(e,"_locale")&&(r._locale=e._locale),Nt(e)&&s(e,"_isValid")&&(r._isValid=e._isValid),r}function Bt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Ft(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Gt(e,t){return function(n,r){var a;return null===r||isNaN(+r)||(M(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=n,n=r,r=a),Ut(this,Ht(n,r),e),this}}function Ut(e,t,n,r){var i=t._milliseconds,o=jt(t._days),s=jt(t._months);e.isValid()&&(r=null==r||r,s&&Ce(e,J(e,"Month")+s*n),o&&K(e,"Date",J(e,"Date")+o*n),i&&e._d.setTime(e._d.valueOf()+i*n),r&&a.updateOffset(e,o||s))}Ht.fn=Ot.prototype,Ht.invalid=function(){return Ht(NaN)};var $t=Gt(1,"add"),Vt=Gt(-1,"subtract");function Jt(e){return"string"==typeof e||e instanceof String}function Kt(e){return A(e)||f(e)||Jt(e)||l(e)||function(e){var t=i(e),n=!1;return t&&(n=0===e.filter((function(t){return!l(t)&&Jt(e)})).length),t&&n}(e)||function(e){var t,n,r=o(e)&&!u(e),a=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],c=i.length;for(t=0;t<c;t+=1)n=i[t],a=a||s(e,n);return r&&a}(e)||null==e}function Xt(e){var t,n=o(e)&&!u(e),r=!1,a=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<a.length;t+=1)r=r||s(e,a[t]);return n&&r}function Zt(e,t){if(e.date()<t.date())return-Zt(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,"months");return-(n+(t-r<0?(t-r)/(r-e.clone().add(n-1,"months")):(t-r)/(e.clone().add(n+1,"months")-r)))||0}function Qt(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ut(e))&&(this._locale=t),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var en=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function tn(){return this._locale}function nn(e,t){return(e%t+t)%t}function rn(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-126227808e5:new Date(e,t,n).valueOf()}function an(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-126227808e5:Date.UTC(e,t,n)}function on(e,t){return t.erasAbbrRegex(e)}function sn(){var e,t,n=[],r=[],a=[],i=[],o=this.eras();for(e=0,t=o.length;e<t;++e)r.push(ge(o[e].name)),n.push(ge(o[e].abbr)),a.push(ge(o[e].narrow)),i.push(ge(o[e].name)),i.push(ge(o[e].abbr)),i.push(ge(o[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+r.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function un(e,t){L(0,[e,e.length],0,t)}function cn(e,t,n,r,a){var i;return null==e?Ye(this,r,a).year:(t>(i=We(e,r,a))&&(t=i),ln.call(this,e,t,n,r,a))}function ln(e,t,n,r,a){var i=Re(e,t,n,r,a),o=ze(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}L("N",0,0,"eraAbbr"),L("NN",0,0,"eraAbbr"),L("NNN",0,0,"eraAbbr"),L("NNNN",0,0,"eraName"),L("NNNNN",0,0,"eraNarrow"),L("y",["y",1],"yo","eraYear"),L("y",["yy",2],0,"eraYear"),L("y",["yyy",3],0,"eraYear"),L("y",["yyyy",4],0,"eraYear"),pe("N",on),pe("NN",on),pe("NNN",on),pe("NNNN",(function(e,t){return t.erasNameRegex(e)})),pe("NNNNN",(function(e,t){return t.erasNarrowRegex(e)})),_e(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var a=n._locale.erasParse(e,r,n._strict);a?m(n).era=a:m(n).invalidEra=e})),pe("y",ce),pe("yy",ce),pe("yyy",ce),pe("yyyy",ce),pe("yo",(function(e,t){return t._eraYearOrdinalRegex||ce})),_e(["y","yy","yyy","yyyy"],0),_e(["yo"],(function(e,t,n,r){var a;n._locale._eraYearOrdinalRegex&&(a=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[0]=n._locale.eraYearOrdinalParse(e,a):t[0]=parseInt(e,10)})),L(0,["gg",2],0,(function(){return this.weekYear()%100})),L(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),un("gggg","weekYear"),un("ggggg","weekYear"),un("GGGG","isoWeekYear"),un("GGGGG","isoWeekYear"),q("weekYear","gg"),q("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),pe("G",le),pe("g",le),pe("GG",re,Q),pe("gg",re,Q),pe("GGGG",se,te),pe("gggg",se,te),pe("GGGGG",ue,ne),pe("ggggg",ue,ne),be(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=$(e)})),be(["gg","GG"],(function(e,t,n,r){t[r]=a.parseTwoDigitYear(e)})),L("Q",0,"Qo","quarter"),q("quarter","Q"),F("quarter",7),pe("Q",Z),_e("Q",(function(e,t){t[1]=3*($(e)-1)})),L("D",["DD",2],"Do","date"),q("date","D"),F("date",9),pe("D",re),pe("DD",re,Q),pe("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),_e(["D","DD"],2),_e("Do",(function(e,t){t[2]=$(e.match(re)[0])}));var fn=V("Date",!0);L("DDD",["DDDD",3],"DDDo","dayOfYear"),q("dayOfYear","DDD"),F("dayOfYear",4),pe("DDD",oe),pe("DDDD",ee),_e(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=$(e)})),L("m",["mm",2],0,"minute"),q("minute","m"),F("minute",14),pe("m",re),pe("mm",re,Q),_e(["m","mm"],4);var dn=V("Minutes",!1);L("s",["ss",2],0,"second"),q("second","s"),F("second",15),pe("s",re),pe("ss",re,Q),_e(["s","ss"],5);var hn,pn,mn=V("Seconds",!1);for(L("S",0,0,(function(){return~~(this.millisecond()/100)})),L(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),L(0,["SSS",3],0,"millisecond"),L(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),L(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),L(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),L(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),L(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),L(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),q("millisecond","ms"),F("millisecond",16),pe("S",oe,Z),pe("SS",oe,Q),pe("SSS",oe,ee),hn="SSSS";hn.length<=9;hn+="S")pe(hn,ce);function gn(e,t){t[6]=$(1e3*("0."+e))}for(hn="S";hn.length<=9;hn+="S")_e(hn,gn);pn=V("Milliseconds",!1),L("z",0,0,"zoneAbbr"),L("zz",0,0,"zoneName");var vn=w.prototype;function yn(e){return e}vn.add=$t,vn.calendar=function(e,t){1===arguments.length&&(arguments[0]?Kt(arguments[0])?(e=arguments[0],t=void 0):Xt(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||St(),r=Rt(n,this).startOf("day"),i=a.calendarFormat(this,r)||"sameElse",o=t&&(T(t[i])?t[i].call(this,n):t[i]);return this.format(o||this.localeData().calendar(i,this,St(n)))},vn.clone=function(){return new w(this)},vn.diff=function(e,t,n){var r,a,i;if(!this.isValid())return NaN;if(!(r=Rt(e,this)).isValid())return NaN;switch(a=6e4*(r.utcOffset()-this.utcOffset()),t=I(t)){case"year":i=Zt(this,r)/12;break;case"month":i=Zt(this,r);break;case"quarter":i=Zt(this,r)/3;break;case"second":i=(this-r)/1e3;break;case"minute":i=(this-r)/6e4;break;case"hour":i=(this-r)/36e5;break;case"day":i=(this-r-a)/864e5;break;case"week":i=(this-r-a)/6048e5;break;default:i=this-r}return n?i:U(i)},vn.endOf=function(e){var t,n;if(void 0===(e=I(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?an:rn,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-nn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-nn(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-nn(t,1e3)-1}return this._d.setTime(t),a.updateOffset(this,!0),this},vn.format=function(e){e||(e=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var t=R(this,e);return this.localeData().postformat(t)},vn.from=function(e,t){return this.isValid()&&(A(e)&&e.isValid()||St(e).isValid())?Ht({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},vn.fromNow=function(e){return this.from(St(),e)},vn.to=function(e,t){return this.isValid()&&(A(e)&&e.isValid()||St(e).isValid())?Ht({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},vn.toNow=function(e){return this.to(St(),e)},vn.get=function(e){return T(this[e=I(e)])?this[e]():this},vn.invalidAt=function(){return m(this).overflow},vn.isAfter=function(e,t){var n=A(e)?e:St(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=I(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},vn.isBefore=function(e,t){var n=A(e)?e:St(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=I(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},vn.isBetween=function(e,t,n,r){var a=A(e)?e:St(e),i=A(t)?t:St(t);return!!(this.isValid()&&a.isValid()&&i.isValid())&&(("("===(r=r||"()")[0]?this.isAfter(a,n):!this.isBefore(a,n))&&(")"===r[1]?this.isBefore(i,n):!this.isAfter(i,n)))},vn.isSame=function(e,t){var n,r=A(e)?e:St(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=I(t)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},vn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},vn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},vn.isValid=function(){return g(this)},vn.lang=en,vn.locale=Qt,vn.localeData=tn,vn.max=Tt,vn.min=Mt,vn.parsingFlags=function(){return h({},m(this))},vn.set=function(e,t){if("object"==typeof e){var n,r=function(e){var t,n=[];for(t in e)s(e,t)&&n.push({unit:t,priority:B[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}(e=H(e)),a=r.length;for(n=0;n<a;n++)this[r[n].unit](e[r[n].unit])}else if(T(this[e=I(e)]))return this[e](t);return this},vn.startOf=function(e){var t,n;if(void 0===(e=I(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?an:rn,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=nn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=nn(t,6e4);break;case"second":t=this._d.valueOf(),t-=nn(t,1e3)}return this._d.setTime(t),a.updateOffset(this,!0),this},vn.subtract=Vt,vn.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},vn.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},vn.toDate=function(){return new Date(this.valueOf())},vn.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?R(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",R(n,"Z")):R(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},vn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r="moment",a="";return this.isLocal()||(r=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),e="["+r+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=a+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(vn[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),vn.toJSON=function(){return this.isValid()?this.toISOString():null},vn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},vn.unix=function(){return Math.floor(this.valueOf()/1e3)},vn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},vn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},vn.eraName=function(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].name;if(r[e].until<=n&&n<=r[e].since)return r[e].name}return""},vn.eraNarrow=function(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].narrow;if(r[e].until<=n&&n<=r[e].since)return r[e].narrow}return""},vn.eraAbbr=function(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].abbr;if(r[e].until<=n&&n<=r[e].since)return r[e].abbr}return""},vn.eraYear=function(){var e,t,n,r,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(n=i[e].since<=i[e].until?1:-1,r=this.clone().startOf("day").valueOf(),i[e].since<=r&&r<=i[e].until||i[e].until<=r&&r<=i[e].since)return(this.year()-a(i[e].since).year())*n+i[e].offset;return this.year()},vn.year=je,vn.isLeapYear=function(){return G(this.year())},vn.weekYear=function(e){return cn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},vn.isoWeekYear=function(e){return cn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},vn.quarter=vn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},vn.month=De,vn.daysInMonth=function(){return Ae(this.year(),this.month())},vn.week=vn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},vn.isoWeek=vn.isoWeeks=function(e){var t=Ye(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},vn.weeksInYear=function(){var e=this.localeData()._week;return We(this.year(),e.dow,e.doy)},vn.weeksInWeekYear=function(){var e=this.localeData()._week;return We(this.weekYear(),e.dow,e.doy)},vn.isoWeeksInYear=function(){return We(this.year(),1,4)},vn.isoWeeksInISOWeekYear=function(){return We(this.isoWeekYear(),1,4)},vn.date=fn,vn.day=vn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},vn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},vn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},vn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},vn.hour=vn.hours=Qe,vn.minute=vn.minutes=dn,vn.second=vn.seconds=mn,vn.millisecond=vn.milliseconds=pn,vn.utcOffset=function(e,t,n){var r,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=Lt(de,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(r=Yt(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==e&&(!t||this._changeInProgress?Ut(this,Ht(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Yt(this)},vn.utc=function(e){return this.utcOffset(0,e)},vn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Yt(this),"m")),this},vn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Lt(fe,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},vn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?St(e).utcOffset():0,(this.utcOffset()-e)%60==0)},vn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},vn.isLocal=function(){return!!this.isValid()&&!this._isUTC},vn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},vn.isUtc=Wt,vn.isUTC=Wt,vn.zoneAbbr=function(){return this._isUTC?"UTC":""},vn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},vn.dates=k("dates accessor is deprecated. Use date instead.",fn),vn.months=k("months accessor is deprecated. Use month instead",De),vn.years=k("years accessor is deprecated. Use year instead",je),vn.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),vn.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var e,t={};return b(t,this),(t=kt(t))._a?(e=t._isUTC?p(t._a):St(t._a),this._isDSTShifted=this.isValid()&&function(e,t,n){var r,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(r=0;r<a;r++)(n&&e[r]!==t[r]||!n&&$(e[r])!==$(t[r]))&&o++;return o+i}(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}));var _n=D.prototype;function bn(e,t,n,r){var a=ut(),i=p().set(r,t);return a[n](i,e)}function wn(e,t,n){if(l(e)&&(t=e,e=void 0),e=e||"",null!=t)return bn(e,t,n,"month");var r,a=[];for(r=0;r<12;r++)a[r]=bn(e,r,n,"month");return a}function An(e,t,n,r){"boolean"==typeof e?(l(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,l(t)&&(n=t,t=void 0),t=t||"");var a,i=ut(),o=e?i._week.dow:0,s=[];if(null!=n)return bn(t,(n+o)%7,r,"day");for(a=0;a<7;a++)s[a]=bn(t,(a+o)%7,r,"day");return s}_n.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return T(r)?r.call(t,n):r},_n.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(N).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])},_n.invalidDate=function(){return this._invalidDate},_n.ordinal=function(e){return this._ordinal.replace("%d",e)},_n.preparse=yn,_n.postformat=yn,_n.relativeTime=function(e,t,n,r){var a=this._relativeTime[n];return T(a)?a(e,t,n,r):a.replace(/%d/i,e)},_n.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return T(n)?n(t):n.replace(/%s/i,t)},_n.set=function(e){var t,n;for(n in e)s(e,n)&&(T(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},_n.eras=function(e,t){var n,r,i,o=this._eras||ut("en")._eras;for(n=0,r=o.length;n<r;++n){switch(typeof o[n].since){case"string":i=a(o[n].since).startOf("day"),o[n].since=i.valueOf()}switch(typeof o[n].until){case"undefined":o[n].until=1/0;break;case"string":i=a(o[n].until).startOf("day").valueOf(),o[n].until=i.valueOf()}}return o},_n.erasParse=function(e,t,n){var r,a,i,o,s,u=this.eras();for(e=e.toUpperCase(),r=0,a=u.length;r<a;++r)if(i=u[r].name.toUpperCase(),o=u[r].abbr.toUpperCase(),s=u[r].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(o===e)return u[r];break;case"NNNN":if(i===e)return u[r];break;case"NNNNN":if(s===e)return u[r]}else if([i,o,s].indexOf(e)>=0)return u[r]},_n.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?a(e.since).year():a(e.since).year()+(t-e.offset)*n},_n.erasAbbrRegex=function(e){return s(this,"_erasAbbrRegex")||sn.call(this),e?this._erasAbbrRegex:this._erasRegex},_n.erasNameRegex=function(e){return s(this,"_erasNameRegex")||sn.call(this),e?this._erasNameRegex:this._erasRegex},_n.erasNarrowRegex=function(e){return s(this,"_erasNarrowRegex")||sn.call(this),e?this._erasNarrowRegex:this._erasRegex},_n.months=function(e,t){return e?i(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Ee).test(t)?"format":"standalone"][e.month()]:i(this._months)?this._months:this._months.standalone},_n.monthsShort=function(e,t){return e?i(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Ee.test(t)?"format":"standalone"][e.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},_n.monthsParse=function(e,t,n){var r,a,i;if(this._monthsParseExact)return Te.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(a=p([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},_n.monthsRegex=function(e){return this._monthsParseExact?(s(this,"_monthsRegex")||Oe.call(this),e?this._monthsStrictRegex:this._monthsRegex):(s(this,"_monthsRegex")||(this._monthsRegex=Me),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},_n.monthsShortRegex=function(e){return this._monthsParseExact?(s(this,"_monthsRegex")||Oe.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,"_monthsShortRegex")||(this._monthsShortRegex=Se),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},_n.week=function(e){return Ye(e,this._week.dow,this._week.doy).week},_n.firstDayOfYear=function(){return this._week.doy},_n.firstDayOfWeek=function(){return this._week.dow},_n.weekdays=function(e,t){var n=i(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?qe(n,this._week.dow):e?n[e.day()]:n},_n.weekdaysMin=function(e){return!0===e?qe(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},_n.weekdaysShort=function(e){return!0===e?qe(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},_n.weekdaysParse=function(e,t,n){var r,a,i;if(this._weekdaysParseExact)return $e.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},_n.weekdaysRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ve.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,"_weekdaysRegex")||(this._weekdaysRegex=Fe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},_n.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ve.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ge),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},_n.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ve.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ue),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},_n.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},_n.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},ot("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===$(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),a.lang=k("moment.lang is deprecated. Use moment.locale instead.",ot),a.langData=k("moment.langData is deprecated. Use moment.localeData instead.",ut);var xn=Math.abs;function kn(e,t,n,r){var a=Ht(t,n);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function En(e){return e<0?Math.floor(e):Math.ceil(e)}function Sn(e){return 4800*e/146097}function Mn(e){return 146097*e/4800}function Tn(e){return function(){return this.as(e)}}var Cn=Tn("ms"),Dn=Tn("s"),On=Tn("m"),Nn=Tn("h"),jn=Tn("d"),Pn=Tn("w"),zn=Tn("M"),Ln=Tn("Q"),Rn=Tn("y");function Yn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Wn=Yn("milliseconds"),qn=Yn("seconds"),In=Yn("minutes"),Hn=Yn("hours"),Bn=Yn("days"),Fn=Yn("months"),Gn=Yn("years"),Un=Math.round,$n={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Vn(e,t,n,r,a){return a.relativeTime(t||1,!!n,e,r)}var Jn=Math.abs;function Kn(e){return(e>0)-(e<0)||+e}function Xn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,a,i,o,s,u=Jn(this._milliseconds)/1e3,c=Jn(this._days),l=Jn(this._months),f=this.asSeconds();return f?(e=U(u/60),t=U(e/60),u%=60,e%=60,n=U(l/12),l%=12,r=u?u.toFixed(3).replace(/\.?0+$/,""):"",a=f<0?"-":"",i=Kn(this._months)!==Kn(f)?"-":"",o=Kn(this._days)!==Kn(f)?"-":"",s=Kn(this._milliseconds)!==Kn(f)?"-":"",a+"P"+(n?i+n+"Y":"")+(l?i+l+"M":"")+(c?o+c+"D":"")+(t||e||u?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(u?s+r+"S":"")):"P0D"}var Zn=Ot.prototype;return Zn.isValid=function(){return this._isValid},Zn.abs=function(){var e=this._data;return this._milliseconds=xn(this._milliseconds),this._days=xn(this._days),this._months=xn(this._months),e.milliseconds=xn(e.milliseconds),e.seconds=xn(e.seconds),e.minutes=xn(e.minutes),e.hours=xn(e.hours),e.months=xn(e.months),e.years=xn(e.years),this},Zn.add=function(e,t){return kn(this,e,t,1)},Zn.subtract=function(e,t){return kn(this,e,t,-1)},Zn.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=I(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+Sn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Mn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}},Zn.asMilliseconds=Cn,Zn.asSeconds=Dn,Zn.asMinutes=On,Zn.asHours=Nn,Zn.asDays=jn,Zn.asWeeks=Pn,Zn.asMonths=zn,Zn.asQuarters=Ln,Zn.asYears=Rn,Zn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*$(this._months/12):NaN},Zn._bubble=function(){var e,t,n,r,a,i=this._milliseconds,o=this._days,s=this._months,u=this._data;return i>=0&&o>=0&&s>=0||i<=0&&o<=0&&s<=0||(i+=864e5*En(Mn(s)+o),o=0,s=0),u.milliseconds=i%1e3,e=U(i/1e3),u.seconds=e%60,t=U(e/60),u.minutes=t%60,n=U(t/60),u.hours=n%24,o+=U(n/24),a=U(Sn(o)),s+=a,o-=En(Mn(a)),r=U(s/12),s%=12,u.days=o,u.months=s,u.years=r,this},Zn.clone=function(){return Ht(this)},Zn.get=function(e){return e=I(e),this.isValid()?this[e+"s"]():NaN},Zn.milliseconds=Wn,Zn.seconds=qn,Zn.minutes=In,Zn.hours=Hn,Zn.days=Bn,Zn.weeks=function(){return U(this.days()/7)},Zn.months=Fn,Zn.years=Gn,Zn.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,a=!1,i=$n;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(a=e),"object"==typeof t&&(i=Object.assign({},$n,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),n=this.localeData(),r=function(e,t,n,r){var a=Ht(e).abs(),i=Un(a.as("s")),o=Un(a.as("m")),s=Un(a.as("h")),u=Un(a.as("d")),c=Un(a.as("M")),l=Un(a.as("w")),f=Un(a.as("y")),d=i<=n.ss&&["s",i]||i<n.s&&["ss",i]||o<=1&&["m"]||o<n.m&&["mm",o]||s<=1&&["h"]||s<n.h&&["hh",s]||u<=1&&["d"]||u<n.d&&["dd",u];return null!=n.w&&(d=d||l<=1&&["w"]||l<n.w&&["ww",l]),(d=d||c<=1&&["M"]||c<n.M&&["MM",c]||f<=1&&["y"]||["yy",f])[2]=t,d[3]=+e>0,d[4]=r,Vn.apply(null,d)}(this,!a,i,n),a&&(r=n.pastFuture(+this,r)),n.postformat(r)},Zn.toISOString=Xn,Zn.toString=Xn,Zn.toJSON=Xn,Zn.locale=Qt,Zn.localeData=tn,Zn.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Xn),Zn.lang=en,L("X",0,0,"unix"),L("x",0,0,"valueOf"),pe("x",le),pe("X",/[+-]?\d+(\.\d{1,3})?/),_e("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),_e("x",(function(e,t,n){n._d=new Date($(e))})),//! moment.js -a.version="2.29.4",n=St,a.fn=vn,a.min=function(){var e=[].slice.call(arguments,0);return Ct("isBefore",e)},a.max=function(){var e=[].slice.call(arguments,0);return Ct("isAfter",e)},a.now=function(){return Date.now?Date.now():+new Date},a.utc=p,a.unix=function(e){return St(1e3*e)},a.months=function(e,t){return wn(e,t,"months")},a.isDate=f,a.locale=ot,a.invalid=v,a.duration=Ht,a.isMoment=A,a.weekdays=function(e,t,n){return An(e,t,n,"weekdays")},a.parseZone=function(){return St.apply(null,arguments).parseZone()},a.localeData=ut,a.isDuration=Nt,a.monthsShort=function(e,t){return wn(e,t,"monthsShort")},a.weekdaysMin=function(e,t,n){return An(e,t,n,"weekdaysMin")},a.defineLocale=st,a.updateLocale=function(e,t){if(null!=t){var n,r,a=et;null!=tt[e]&&null!=tt[e].parentLocale?tt[e].set(C(tt[e]._config,t)):(null!=(r=it(e))&&(a=r._config),t=C(a,t),null==r&&(t.abbr=e),(n=new D(t)).parentLocale=tt[e],tt[e]=n),ot(e)}else null!=tt[e]&&(null!=tt[e].parentLocale?(tt[e]=tt[e].parentLocale,e===ot()&&ot(e)):null!=tt[e]&&delete tt[e]);return tt[e]},a.locales=function(){return E(tt)},a.weekdaysShort=function(e,t,n){return An(e,t,n,"weekdaysShort")},a.normalizeUnits=I,a.relativeTimeRounding=function(e){return void 0===e?Un:"function"==typeof e&&(Un=e,!0)},a.relativeTimeThreshold=function(e,t){return void 0!==$n[e]&&(void 0===t?$n[e]:($n[e]=t,"s"===e&&($n.ss=t-1),!0))},a.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},a.prototype=vn,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()})),Ds=t((function(e){!function(t,n){e.exports?e.exports=n(Cs):n(t.moment)}(this,(function(e){var t,n={},r={},a={},i={};e&&"string"==typeof e.version||S("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var o=e.version.split("."),s=+o[0],u=+o[1];function c(e){return 96<e?e-87:64<e?e-29:e-48}function l(e){var t=0,n=e.split("."),r=n[0],a=n[1]||"",i=1,o=0,s=1;for(45===e.charCodeAt(0)&&(s=-(t=1));t<r.length;t++)o=60*o+c(r.charCodeAt(t));for(t=0;t<a.length;t++)i/=60,o+=c(a.charCodeAt(t))*i;return o*s}function f(e){for(var t=0;t<e.length;t++)e[t]=l(e[t])}function d(e,t){var n,r=[];for(n=0;n<t.length;n++)r[n]=e[t[n]];return r}function h(e){var t=e.split("|"),n=t[2].split(" "),r=t[3].split(""),a=t[4].split(" ");return f(n),f(r),f(a),function(e,t){for(var n=0;n<t;n++)e[n]=Math.round((e[n-1]||0)+6e4*e[n]);e[t-1]=1/0}(a,r.length),{name:t[0],abbrs:d(t[1].split(" "),r),offsets:d(n,r),untils:a,population:0|t[5]}}function p(e){e&&this._set(h(e))}function m(e){var t=e.toTimeString(),n=t.match(/\([a-z ]+\)/i);"GMT"===(n=n&&n[0]?(n=n[0].match(/[A-Z]/g))?n.join(""):void 0:(n=t.match(/[A-Z]{3,5}/g))?n[0]:void 0)&&(n=void 0),this.at=+e,this.abbr=n,this.offset=e.getTimezoneOffset()}function g(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function v(e,t){for(var n,r;r=6e4*((t.at-e.at)/12e4|0);)(n=new m(new Date(e.at+r))).offset===e.offset?e=n:t=n;return e}function y(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:t.zone.population-e.zone.population}function _(e,t){var n,r;for(f(t),n=0;n<t.length;n++)r=t[n],i[r]=i[r]||{},i[r][e]=!0}function b(e){return(e||"").toLowerCase().replace(/\//g,"_")}function w(e){var t,r,i,o;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)o=b(r=(i=e[t].split("|"))[0]),n[o]=e[t],a[o]=r,_(o,i[2].split(" "))}function A(e,t){e=b(e);var i,o=n[e];return o instanceof p?o:"string"==typeof o?(o=new p(o),n[e]=o):r[e]&&t!==A&&(i=A(r[e],A))?((o=n[e]=new p)._set(i),o.name=a[e],o):null}function x(e){var t,n,i,o;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)i=b((n=e[t].split("|"))[0]),o=b(n[1]),r[i]=o,a[i]=n[0],r[o]=i,a[o]=n[1]}function k(e){w(e.zones),x(e.links),M.dataVersion=e.version}function E(e){var t="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||t)}function S(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function M(t){var n=Array.prototype.slice.call(arguments,0,-1),r=arguments[arguments.length-1],a=A(r),i=e.utc.apply(null,n);return a&&!e.isMoment(t)&&E(i)&&i.add(a.parse(i),"minutes"),i.tz(r),i}(s<2||2==s&&u<6)&&S("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+e.version+". See momentjs.com"),p.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,n=+e,r=this.untils;for(t=0;t<r.length;t++)if(n<r[t])return t},parse:function(e){var t,n,r,a,i=+e,o=this.offsets,s=this.untils,u=s.length-1;for(a=0;a<u;a++)if(t=o[a],n=o[a+1],r=o[a?a-1:a],t<n&&M.moveAmbiguousForward?t=n:r<t&&M.moveInvalidForward&&(t=r),i<s[a]-6e4*t)return o[a];return o[u]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return S("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},g.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},M.version="0.5.26",M.dataVersion="",M._zones=n,M._links=r,M._names=a,M.add=w,M.link=x,M.load=k,M.zone=A,M.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,S("moment.tz.zoneExists('"+t+"') has been deprecated in favor of !moment.tz.zone('"+t+"')")),!!A(t)},M.guess=function(e){return t&&!e||(t=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&3<e.length){var t=a[b(e)];if(t)return t;S("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var n,r,o,s=function(){var e,t,n,r=(new Date).getFullYear()-2,a=new m(new Date(r,0,1)),i=[a];for(n=1;n<48;n++)(t=new m(new Date(r,n,1))).offset!==a.offset&&(e=v(a,t),i.push(e),i.push(new m(new Date(e.at+6e4)))),a=t;for(n=0;n<4;n++)i.push(new m(new Date(r+n,0,1))),i.push(new m(new Date(r+n,6,1)));return i}(),u=s.length,c=function(e){var t,n,r,o=e.length,s={},u=[];for(t=0;t<o;t++)for(n in r=i[e[t].offset]||{})r.hasOwnProperty(n)&&(s[n]=!0);for(t in s)s.hasOwnProperty(t)&&u.push(a[t]);return u}(s),l=[];for(r=0;r<c.length;r++){for(n=new g(A(c[r]),u),o=0;o<u;o++)n.scoreOffsetAt(s[o]);l.push(n)}return l.sort(y),0<l.length?l[0].zone.name:void 0}()),t},M.names=function(){var e,t=[];for(e in a)a.hasOwnProperty(e)&&(n[e]||n[r[e]])&&a[e]&&t.push(a[e]);return t.sort()},M.Zone=p,M.unpack=h,M.unpackBase60=l,M.needsOffset=E,M.moveInvalidForward=!0,M.moveAmbiguousForward=!1;var T,C=e.fn;function D(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function O(e){return function(){return this._z=null,e.apply(this,arguments)}}e.tz=M,e.defaultZone=null,e.updateOffset=function(t,n){var r,a=e.defaultZone;if(void 0===t._z&&(a&&E(t)&&!t._isUTC&&(t._d=e.utc(t._a)._d,t.utc().add(a.parse(t),"minutes")),t._z=a),t._z)if(r=t._z.utcOffset(t),Math.abs(r)<16&&(r/=60),void 0!==t.utcOffset){var i=t._z;t.utcOffset(-r,n),t._z=i}else t.zone(r,n)},C.tz=function(t,n){if(t){if("string"!=typeof t)throw new Error("Time zone name must be a string, got "+t+" ["+typeof t+"]");return this._z=A(t),this._z?e.updateOffset(this,n):S("Moment Timezone has no data for "+t+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},C.zoneName=D(C.zoneName),C.zoneAbbr=D(C.zoneAbbr),C.utc=O(C.utc),C.local=O(C.local),C.utcOffset=(T=C.utcOffset,function(){return 0<arguments.length&&(this._z=null),T.apply(this,arguments)}),e.tz.setDefault=function(t){return(s<2||2==s&&u<9)&&S("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+e.version+"."),e.defaultZone=t?A(t):null,e};var N=e.momentProperties;return"[object Array]"===Object.prototype.toString.call(N)?(N.push("_z"),N.push("_a")):N&&(N._z=null),k({version:"2019b",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|0101010121010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|0101|1GAF0 blz0 3m10|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Guadalcanal|+11|-b0|0||11e4","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Kuala_Lumpur|+08|-80|0||71e5","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PST|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5","Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0|","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0|","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0|","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0|","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UTC|UTC|0|0|","Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Volgograd|+04 +03|-40 -30|010|1N7y0 9Jd0|10e5","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Juba","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qostanay","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Brunei","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Etc/GMT-8","Asia/Kuala_Lumpur|Singapore","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Ulyanovsk|Europe/Astrakhan","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Antarctica/Macquarie","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"]}),e}))})),Os=function(e,t){var n=e.toString();function r(e){return function(t,n,r){return e+n+(r[0].toUpperCase()===r[0]?"A":"a")}}if((t=t||{}).preferredOrder=t.preferredOrder||vu,(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=n.replace(mu,"x")).replace(gu,"X")).replace(pu,"[$1]")).replace(Ns,"dddd")).replace(js,"ddd")).replace(Ps,"dd")).replace(Rs,"Do")).replace(zs,"MMMM")).replace(Ls,"MMM")).replace(Ys,yu.bind(null,t))).replace(Ws,"Z")).replace($s,"HH:mm:ss.SSS")).replace(Vs,"HH:mm:ss.SS")).replace(Js,"HH:mm:ss.S")).replace(Is,r("hh:mm:ss"))).replace(Fs,r("h:mm:ss"))).replace(Hs,r("hh:mm"))).replace(Gs,r("h:mm"))).replace(Bs,r("hh"))).replace(Us,r("h"))).replace(Ks,"HH:mm:ss")).replace(Qs,"H:mm:ss.SSS")).replace(eu,"H:mm:ss.SS")).replace(tu,"H:mm:ss.S")).replace(Zs,"H:mm:ss")).replace(Xs,"HH:mm")).replace(nu,"H:mm")).replace(ru,"YYYY")).replace(su,"D/M")).replace(uu,"D/MM")).replace(cu,"DD/M")).replace(lu,"DD/MM")).replace(fu,"M/YY")).replace(du,"MM/YY")).match(hu)){n=(n=n.replace(/0\d.\d{2}|\d{2}.\d{2}/,"H.mm")).replace(/\d{1}.\d{2}/,"h.mm")}(n=(n=(n=n.replace(au,"DD")).replace(iu,"D")).replace(ou,"YY")).length<1&&(n=void 0);return n},Ns=new RegExp(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].join("|"),"i"),js=new RegExp(["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].join("|"),"i"),Ps=new RegExp("\\b("+["Su","Mo","Tu","We","Th","Fr","Sa"].join("|")+")\\b","i"),zs=new RegExp(["January","February","March","April","May","June","July","August","September","October","November","December"].join("|"),"i"),Ls=new RegExp(["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].join("|"),"i"),Rs=/(\d+)(st|nd|rd|th)\b/i,Ys=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,Ws=/((\+|-)\d\d:?\d\d)$/,qs="("+["AM?","PM?"].join("|")+")",Is=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+qs,"i"),Hs=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+qs,"i"),Bs=new RegExp("0\\d(\\s*)"+qs,"i"),Fs=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+qs,"i"),Gs=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+qs,"i"),Us=new RegExp("\\d{1,2}(\\s*)"+qs,"i"),$s=/\d{2}:\d{2}:\d{2}\.\d{3}/,Vs=/\d{2}:\d{2}:\d{2}\.\d{2}/,Js=/\d{2}:\d{2}:\d{2}\.\d{1}/,Ks=/0\d:\d{2}:\d{2}/,Xs=/0\d:\d{2}/,Zs=/\d{1,2}:\d{2}:\d{2}/,Qs=/\d{1,2}:\d{2}:\d{2}\.\d{3}/,eu=/\d{1,2}:\d{2}:\d{2}\.\d{2}/,tu=/\d{1,2}:\d{2}:\d{2}\.\d{1}/,nu=/\d{1,2}:\d{2}/,ru=/\d{4}/,au=/0\d/,iu=/\d{1,2}/,ou=/\d{2}/,su=/^([1-9])\/([1-9]|0[1-9])$/,uu=/^([1-9])\/(1[012])$/,cu=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,lu=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,fu=/^([1-9])\/([1-9][0-9])$/,du=/^(0[1-9]|1[012])\/([1-9][0-9])$/,hu=/([/][M]|[M][/]|[MM]|[MMMM])/,pu=/\b(at)\b/i,mu=/\d{13}/,gu=/\d{10}/,vu={"/":"MDY",".":"DMY","-":"YMD"};function yu(e,t,n,r,a,i){var o,s=1===Math.min(n.length,a.length,i.length),u=4===Math.max(n.length,a.length,i.length),c="string"==typeof e.preferredOrder?e.preferredOrder:e.preferredOrder[r];return o=[n=parseInt(n,10),a=parseInt(a,10),i=parseInt(i,10)],c=c.toUpperCase(),n>31?(o[0]=u?"YYYY":"YY",o[1]=s?"M":"MM",o[2]=s?"D":"DD",o.join(r)):a>12?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o[2]=u?"YYYY":"YY",o.join(r)):i>31?(o[2]=u?"YYYY":"YY","M"===c[0]&&n<13?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o.join(r)):(o[0]=s?"D":"DD",o[1]=s?"M":"MM",o.join(r))):(o[c.indexOf("D")]=s?"D":"DD",o[c.indexOf("M")]=s?"M":"MM",o[c.indexOf("Y")]=u?"YYYY":"YY",o.join(r))}var _u=Os;function bu(e){return(e.match(As)||[]).join(" ").replace(vs,"m").replace(gs,"$1 $2 $3").replace(ms,"$1").trim()}function wu(e,t,n){if(xs.test(e))return Ds(new Date(e));if(bs.test(e)){var r=bs.exec(e);return Ds().subtract(r[1],r[2])}return ys.test(e)?Ds():t?Ds.tz(e,n||_u(e),t):Ds(e,n||_u(e))}function Au(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.timezone,r=t.format;if(hs.test(e)||ps.test(e))return new Date(Aa(e,10)).toISOString();var a=wu(e,n,r);return a.isValid()||(a=wu(e=bu(e),n,r)),a.isValid()?a.toISOString():null}function xu(e,t){var n=t.$,r=(t.cleanConditionally,t.title),a=void 0===r?"":r,i=t.url,o=void 0===i?"":i,s=t.defaultCleaner,u=void 0===s||s;return function(e,t){t=Ei(t("html"),t,"div"),t=Ei(t("body"),t,"div")}(0,n),u&&Si(e,n),xo(e,n,o),zi(e,n,o),function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];0===n.length&&(n=li),t(n.join(","),e).not(".".concat(ui)).remove()}(e,n),function(e,t){var n=t("h1",e);n.length<3?n.each((function(e,n){return t(n).remove()})):n.each((function(e,n){Ei(t(n),t,"h2")}))}(e,n),function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";t(hi,e).each((function(r,a){var i=t(a);return 0===t(i,e).prevAll("p").length||la(t(a).text())===n||Ui(t(a))<0?i.remove():i}))}(e,n,a),u&&co(e,n),function(e,t){e.find("p").each((function(e,n){var r=t(n);0===r.find("iframe, img").length&&""===r.text().trim()&&r.remove()}))}(e,n),function(e,t){Li(e.parent().length?e.parent():e,t)}(e,n),e}function ku(e,t){var n=t.url,r=t.$;if(ks.test(e)&&(e=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=e.split(ks);if(1===n.length)return e;var r=Tu(n,e);return r||((r=Cu(n,t))||e)}(e,n)),e.length>150){var a=r("h1");1===a.length&&(e=a.text())}return la(No(e,r).trim())}"undefined"!=typeof window&&window.moment&&(window.moment.parseFormat=Os);var Eu=t((function(e,t){(function(){var n="Expected a function",r="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],i="[object Arguments]",o="[object Array]",s="[object Boolean]",u="[object Date]",c="[object Error]",l="[object Function]",f="[object GeneratorFunction]",d="[object Map]",h="[object Number]",p="[object Object]",m="[object RegExp]",g="[object Set]",v="[object String]",y="[object Symbol]",_="[object WeakMap]",b="[object ArrayBuffer]",w="[object DataView]",A="[object Float32Array]",x="[object Float64Array]",k="[object Int8Array]",E="[object Int16Array]",S="[object Int32Array]",M="[object Uint8Array]",T="[object Uint16Array]",C="[object Uint32Array]",D=/\b__p \+= '';/g,O=/\b(__p \+=) '' \+/g,N=/(__e\(.*?\)|\b__t\)) \+\n'';/g,j=/&(?:amp|lt|gt|quot|#39);/g,P=/[&<>"']/g,z=RegExp(j.source),L=RegExp(P.source),R=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,W=/<%=([\s\S]+?)%>/g,q=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,I=/^\w*$/,H=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,B=/[\\^$.*+?()[\]{}|]/g,F=RegExp(B.source),G=/^\s+/,U=/\s/,$=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,V=/\{\n\/\* \[wrapped with (.+)\] \*/,J=/,? & /,K=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,X=/[()=,{}\[\]\/\s]/,Z=/\\(\\)?/g,Q=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ee=/\w*$/,te=/^[-+]0x[0-9a-f]+$/i,ne=/^0b[01]+$/i,re=/^\[object .+?Constructor\]$/,ae=/^0o[0-7]+$/i,ie=/^(?:0|[1-9]\d*)$/,oe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,se=/($^)/,ue=/['\n\r\u2028\u2029\\]/g,ce="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",le="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",fe="[\\ud800-\\udfff]",de="["+le+"]",he="["+ce+"]",pe="\\d+",me="[\\u2700-\\u27bf]",ge="[a-z\\xdf-\\xf6\\xf8-\\xff]",ve="[^\\ud800-\\udfff"+le+pe+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",ye="\\ud83c[\\udffb-\\udfff]",_e="[^\\ud800-\\udfff]",be="(?:\\ud83c[\\udde6-\\uddff]){2}",we="[\\ud800-\\udbff][\\udc00-\\udfff]",Ae="[A-Z\\xc0-\\xd6\\xd8-\\xde]",xe="(?:"+ge+"|"+ve+")",ke="(?:"+Ae+"|"+ve+")",Ee="(?:"+he+"|"+ye+")"+"?",Se="[\\ufe0e\\ufe0f]?"+Ee+("(?:\\u200d(?:"+[_e,be,we].join("|")+")[\\ufe0e\\ufe0f]?"+Ee+")*"),Me="(?:"+[me,be,we].join("|")+")"+Se,Te="(?:"+[_e+he+"?",he,be,we,fe].join("|")+")",Ce=RegExp("['’]","g"),De=RegExp(he,"g"),Oe=RegExp(ye+"(?="+ye+")|"+Te+Se,"g"),Ne=RegExp([Ae+"?"+ge+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[de,Ae,"$"].join("|")+")",ke+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[de,Ae+xe,"$"].join("|")+")",Ae+"?"+xe+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Ae+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",pe,Me].join("|"),"g"),je=RegExp("[\\u200d\\ud800-\\udfff"+ce+"\\ufe0e\\ufe0f]"),Pe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ze=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Le=-1,Re={};Re[A]=Re[x]=Re[k]=Re[E]=Re[S]=Re[M]=Re["[object Uint8ClampedArray]"]=Re[T]=Re[C]=!0,Re[i]=Re[o]=Re[b]=Re[s]=Re[w]=Re[u]=Re[c]=Re[l]=Re[d]=Re[h]=Re[p]=Re[m]=Re[g]=Re[v]=Re[_]=!1;var Ye={};Ye[i]=Ye[o]=Ye[b]=Ye[w]=Ye[s]=Ye[u]=Ye[A]=Ye[x]=Ye[k]=Ye[E]=Ye[S]=Ye[d]=Ye[h]=Ye[p]=Ye[m]=Ye[g]=Ye[v]=Ye[y]=Ye[M]=Ye["[object Uint8ClampedArray]"]=Ye[T]=Ye[C]=!0,Ye[c]=Ye[l]=Ye[_]=!1;var We={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},qe=parseFloat,Ie=parseInt,He="object"==typeof Kn&&Kn&&Kn.Object===Object&&Kn,Be="object"==typeof self&&self&&self.Object===Object&&self,Fe=He||Be||Function("return this")(),Ge=t&&!t.nodeType&&t,Ue=Ge&&e&&!e.nodeType&&e,$e=Ue&&Ue.exports===Ge,Ve=$e&&He.process,Je=function(){try{var e=Ue&&Ue.require&&Ue.require("util").types;return e||Ve&&Ve.binding&&Ve.binding("util")}catch(e){}}(),Ke=Je&&Je.isArrayBuffer,Xe=Je&&Je.isDate,Ze=Je&&Je.isMap,Qe=Je&&Je.isRegExp,et=Je&&Je.isSet,tt=Je&&Je.isTypedArray;function nt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function rt(e,t,n,r){for(var a=-1,i=null==e?0:e.length;++a<i;){var o=e[a];t(r,o,n(o),e)}return r}function at(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function it(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function ot(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function st(e,t){for(var n=-1,r=null==e?0:e.length,a=0,i=[];++n<r;){var o=e[n];t(o,n,e)&&(i[a++]=o)}return i}function ut(e,t){return!!(null==e?0:e.length)&&yt(e,t,0)>-1}function ct(e,t,n){for(var r=-1,a=null==e?0:e.length;++r<a;)if(n(t,e[r]))return!0;return!1}function lt(e,t){for(var n=-1,r=null==e?0:e.length,a=Array(r);++n<r;)a[n]=t(e[n],n,e);return a}function ft(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}function dt(e,t,n,r){var a=-1,i=null==e?0:e.length;for(r&&i&&(n=e[++a]);++a<i;)n=t(n,e[a],a,e);return n}function ht(e,t,n,r){var a=null==e?0:e.length;for(r&&a&&(n=e[--a]);a--;)n=t(n,e[a],a,e);return n}function pt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var mt=At("length");function gt(e,t,n){var r;return n(e,(function(e,n,a){if(t(e,n,a))return r=n,!1})),r}function vt(e,t,n,r){for(var a=e.length,i=n+(r?1:-1);r?i--:++i<a;)if(t(e[i],i,e))return i;return-1}function yt(e,t,n){return t==t?function(e,t,n){var r=n-1,a=e.length;for(;++r<a;)if(e[r]===t)return r;return-1}(e,t,n):vt(e,bt,n)}function _t(e,t,n,r){for(var a=n-1,i=e.length;++a<i;)if(r(e[a],t))return a;return-1}function bt(e){return e!=e}function wt(e,t){var n=null==e?0:e.length;return n?Et(e,t)/n:NaN}function At(e){return function(t){return null==t?void 0:t[e]}}function xt(e){return function(t){return null==e?void 0:e[t]}}function kt(e,t,n,r,a){return a(e,(function(e,a,i){n=r?(r=!1,e):t(n,e,a,i)})),n}function Et(e,t){for(var n,r=-1,a=e.length;++r<a;){var i=t(e[r]);void 0!==i&&(n=void 0===n?i:n+i)}return n}function St(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function Mt(e){return e?e.slice(0,Gt(e)+1).replace(G,""):e}function Tt(e){return function(t){return e(t)}}function Ct(e,t){return lt(t,(function(t){return e[t]}))}function Dt(e,t){return e.has(t)}function Ot(e,t){for(var n=-1,r=e.length;++n<r&&yt(t,e[n],0)>-1;);return n}function Nt(e,t){for(var n=e.length;n--&&yt(t,e[n],0)>-1;);return n}function jt(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var Pt=xt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),zt=xt({"&":"&","<":"<",">":">",'"':""","'":"'"});function Lt(e){return"\\"+We[e]}function Rt(e){return je.test(e)}function Yt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function Wt(e,t){return function(n){return e(t(n))}}function qt(e,t){for(var n=-1,a=e.length,i=0,o=[];++n<a;){var s=e[n];s!==t&&s!==r||(e[n]=r,o[i++]=n)}return o}function It(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}function Ht(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n}function Bt(e){return Rt(e)?function(e){var t=Oe.lastIndex=0;for(;Oe.test(e);)++t;return t}(e):mt(e)}function Ft(e){return Rt(e)?function(e){return e.match(Oe)||[]}(e):function(e){return e.split("")}(e)}function Gt(e){for(var t=e.length;t--&&U.test(e.charAt(t)););return t}var Ut=xt({"&":"&","<":"<",">":">",""":'"',"'":"'"});var $t=function e(t){var U,ce=(t=null==t?Fe:$t.defaults(Fe.Object(),t,$t.pick(Fe,ze))).Array,le=t.Date,fe=t.Error,de=t.Function,he=t.Math,pe=t.Object,me=t.RegExp,ge=t.String,ve=t.TypeError,ye=ce.prototype,_e=de.prototype,be=pe.prototype,we=t["__core-js_shared__"],Ae=_e.toString,xe=be.hasOwnProperty,ke=0,Ee=(U=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||""))?"Symbol(src)_1."+U:"",Se=be.toString,Me=Ae.call(pe),Te=Fe._,Oe=me("^"+Ae.call(xe).replace(B,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),je=$e?t.Buffer:void 0,We=t.Symbol,He=t.Uint8Array,Be=je?je.allocUnsafe:void 0,Ge=Wt(pe.getPrototypeOf,pe),Ue=pe.create,Ve=be.propertyIsEnumerable,Je=ye.splice,mt=We?We.isConcatSpreadable:void 0,xt=We?We.iterator:void 0,Vt=We?We.toStringTag:void 0,Jt=function(){try{var e=ei(pe,"defineProperty");return e({},"",{}),e}catch(e){}}(),Kt=t.clearTimeout!==Fe.clearTimeout&&t.clearTimeout,Xt=le&&le.now!==Fe.Date.now&&le.now,Zt=t.setTimeout!==Fe.setTimeout&&t.setTimeout,Qt=he.ceil,en=he.floor,tn=pe.getOwnPropertySymbols,nn=je?je.isBuffer:void 0,rn=t.isFinite,an=ye.join,on=Wt(pe.keys,pe),sn=he.max,un=he.min,cn=le.now,ln=t.parseInt,fn=he.random,dn=ye.reverse,hn=ei(t,"DataView"),pn=ei(t,"Map"),mn=ei(t,"Promise"),gn=ei(t,"Set"),vn=ei(t,"WeakMap"),yn=ei(pe,"create"),_n=vn&&new vn,bn={},wn=Mi(hn),An=Mi(pn),xn=Mi(mn),kn=Mi(gn),En=Mi(vn),Sn=We?We.prototype:void 0,Mn=Sn?Sn.valueOf:void 0,Tn=Sn?Sn.toString:void 0;function Cn(e){if(Go(e)&&!Po(e)&&!(e instanceof jn)){if(e instanceof Nn)return e;if(xe.call(e,"__wrapped__"))return Ti(e)}return new Nn(e)}var Dn=function(){function e(){}return function(t){if(!Fo(t))return{};if(Ue)return Ue(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function On(){}function Nn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function jn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Pn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function zn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Ln(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Rn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Ln;++t<n;)this.add(e[t])}function Yn(e){var t=this.__data__=new zn(e);this.size=t.size}function Wn(e,t){var n=Po(e),r=!n&&jo(e),a=!n&&!r&&Yo(e),i=!n&&!r&&!a&&Qo(e),o=n||r||a||i,s=o?St(e.length,ge):[],u=s.length;for(var c in e)!t&&!xe.call(e,c)||o&&("length"==c||a&&("offset"==c||"parent"==c)||i&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||si(c,u))||s.push(c);return s}function qn(e){var t=e.length;return t?e[Rr(0,t-1)]:void 0}function In(e,t){return ki(ya(e),Kn(t,0,e.length))}function Hn(e){return ki(ya(e))}function Bn(e,t,n){(void 0!==n&&!Do(e[t],n)||void 0===n&&!(t in e))&&Vn(e,t,n)}function Fn(e,t,n){var r=e[t];xe.call(e,t)&&Do(r,n)&&(void 0!==n||t in e)||Vn(e,t,n)}function Gn(e,t){for(var n=e.length;n--;)if(Do(e[n][0],t))return n;return-1}function Un(e,t,n,r){return tr(e,(function(e,a,i){t(r,e,n(e),i)})),r}function $n(e,t){return e&&_a(t,ws(t),e)}function Vn(e,t,n){"__proto__"==t&&Jt?Jt(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function Jn(e,t){for(var n=-1,r=t.length,a=ce(r),i=null==e;++n<r;)a[n]=i?void 0:gs(e,t[n]);return a}function Kn(e,t,n){return e==e&&(void 0!==n&&(e=e<=n?e:n),void 0!==t&&(e=e>=t?e:t)),e}function Xn(e,t,n,r,a,o){var c,_=1&t,D=2&t,O=4&t;if(n&&(c=a?n(e,r,a,o):n(e)),void 0!==c)return c;if(!Fo(e))return e;var N=Po(e);if(N){if(c=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&xe.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!_)return ya(e,c)}else{var j=ri(e),P=j==l||j==f;if(Yo(e))return da(e,_);if(j==p||j==i||P&&!a){if(c=D||P?{}:ii(e),!_)return D?function(e,t){return _a(e,ni(e),t)}(e,function(e,t){return e&&_a(t,As(t),e)}(c,e)):function(e,t){return _a(e,ti(e),t)}(e,$n(c,e))}else{if(!Ye[j])return a?e:{};c=function(e,t,n){var r=e.constructor;switch(t){case b:return ha(e);case s:case u:return new r(+e);case w:return function(e,t){var n=t?ha(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case A:case x:case k:case E:case S:case M:case"[object Uint8ClampedArray]":case T:case C:return pa(e,n);case d:return new r;case h:case v:return new r(e);case m:return function(e){var t=new e.constructor(e.source,ee.exec(e));return t.lastIndex=e.lastIndex,t}(e);case g:return new r;case y:return function(e){return Mn?pe(Mn.call(e)):{}}(e)}}(e,j,_)}}o||(o=new Yn);var z=o.get(e);if(z)return z;o.set(e,c),Ko(e)?e.forEach((function(r){c.add(Xn(r,t,n,r,e,o))})):Uo(e)&&e.forEach((function(r,a){c.set(a,Xn(r,t,n,a,e,o))}));var L=N?void 0:(O?D?$a:Ua:D?As:ws)(e);return at(L||e,(function(r,a){L&&(r=e[a=r]),Fn(c,a,Xn(r,t,n,a,e,o))})),c}function Zn(e,t,n){var r=n.length;if(null==e)return!r;for(e=pe(e);r--;){var a=n[r],i=t[a],o=e[a];if(void 0===o&&!(a in e)||!i(o))return!1}return!0}function Qn(e,t,r){if("function"!=typeof e)throw new ve(n);return bi((function(){e.apply(void 0,r)}),t)}function er(e,t,n,r){var a=-1,i=ut,o=!0,s=e.length,u=[],c=t.length;if(!s)return u;n&&(t=lt(t,Tt(n))),r?(i=ct,o=!1):t.length>=200&&(i=Dt,o=!1,t=new Rn(t));e:for(;++a<s;){var l=e[a],f=null==n?l:n(l);if(l=r||0!==l?l:0,o&&f==f){for(var d=c;d--;)if(t[d]===f)continue e;u.push(l)}else i(t,f,r)||u.push(l)}return u}Cn.templateSettings={escape:R,evaluate:Y,interpolate:W,variable:"",imports:{_:Cn}},Cn.prototype=On.prototype,Cn.prototype.constructor=Cn,Nn.prototype=Dn(On.prototype),Nn.prototype.constructor=Nn,jn.prototype=Dn(On.prototype),jn.prototype.constructor=jn,Pn.prototype.clear=function(){this.__data__=yn?yn(null):{},this.size=0},Pn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Pn.prototype.get=function(e){var t=this.__data__;if(yn){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return xe.call(t,e)?t[e]:void 0},Pn.prototype.has=function(e){var t=this.__data__;return yn?void 0!==t[e]:xe.call(t,e)},Pn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=yn&&void 0===t?"__lodash_hash_undefined__":t,this},zn.prototype.clear=function(){this.__data__=[],this.size=0},zn.prototype.delete=function(e){var t=this.__data__,n=Gn(t,e);return!(n<0)&&(n==t.length-1?t.pop():Je.call(t,n,1),--this.size,!0)},zn.prototype.get=function(e){var t=this.__data__,n=Gn(t,e);return n<0?void 0:t[n][1]},zn.prototype.has=function(e){return Gn(this.__data__,e)>-1},zn.prototype.set=function(e,t){var n=this.__data__,r=Gn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Ln.prototype.clear=function(){this.size=0,this.__data__={hash:new Pn,map:new(pn||zn),string:new Pn}},Ln.prototype.delete=function(e){var t=Za(this,e).delete(e);return this.size-=t?1:0,t},Ln.prototype.get=function(e){return Za(this,e).get(e)},Ln.prototype.has=function(e){return Za(this,e).has(e)},Ln.prototype.set=function(e,t){var n=Za(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Rn.prototype.add=Rn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Rn.prototype.has=function(e){return this.__data__.has(e)},Yn.prototype.clear=function(){this.__data__=new zn,this.size=0},Yn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Yn.prototype.get=function(e){return this.__data__.get(e)},Yn.prototype.has=function(e){return this.__data__.has(e)},Yn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof zn){var r=n.__data__;if(!pn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Ln(r)}return n.set(e,t),this.size=n.size,this};var tr=Aa(cr),nr=Aa(lr,!0);function rr(e,t){var n=!0;return tr(e,(function(e,r,a){return n=!!t(e,r,a)})),n}function ar(e,t,n){for(var r=-1,a=e.length;++r<a;){var i=e[r],o=t(i);if(null!=o&&(void 0===s?o==o&&!Zo(o):n(o,s)))var s=o,u=i}return u}function ir(e,t){var n=[];return tr(e,(function(e,r,a){t(e,r,a)&&n.push(e)})),n}function or(e,t,n,r,a){var i=-1,o=e.length;for(n||(n=oi),a||(a=[]);++i<o;){var s=e[i];t>0&&n(s)?t>1?or(s,t-1,n,r,a):ft(a,s):r||(a[a.length]=s)}return a}var sr=xa(),ur=xa(!0);function cr(e,t){return e&&sr(e,t,ws)}function lr(e,t){return e&&ur(e,t,ws)}function fr(e,t){return st(t,(function(t){return Io(e[t])}))}function dr(e,t){for(var n=0,r=(t=ua(t,e)).length;null!=e&&n<r;)e=e[Si(t[n++])];return n&&n==r?e:void 0}function hr(e,t,n){var r=t(e);return Po(e)?r:ft(r,n(e))}function pr(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Vt&&Vt in pe(e)?function(e){var t=xe.call(e,Vt),n=e[Vt];try{e[Vt]=void 0;var r=!0}catch(e){}var a=Se.call(e);r&&(t?e[Vt]=n:delete e[Vt]);return a}(e):function(e){return Se.call(e)}(e)}function mr(e,t){return e>t}function gr(e,t){return null!=e&&xe.call(e,t)}function vr(e,t){return null!=e&&t in pe(e)}function yr(e,t,n){for(var r=n?ct:ut,a=e[0].length,i=e.length,o=i,s=ce(i),u=1/0,c=[];o--;){var l=e[o];o&&t&&(l=lt(l,Tt(t))),u=un(l.length,u),s[o]=!n&&(t||a>=120&&l.length>=120)?new Rn(o&&l):void 0}l=e[0];var f=-1,d=s[0];e:for(;++f<a&&c.length<u;){var h=l[f],p=t?t(h):h;if(h=n||0!==h?h:0,!(d?Dt(d,p):r(c,p,n))){for(o=i;--o;){var m=s[o];if(!(m?Dt(m,p):r(e[o],p,n)))continue e}d&&d.push(p),c.push(h)}}return c}function _r(e,t,n){var r=null==(e=gi(e,t=ua(t,e)))?e:e[Si(Wi(t))];return null==r?void 0:nt(r,e,n)}function br(e){return Go(e)&&pr(e)==i}function wr(e,t,n,r,a){return e===t||(null==e||null==t||!Go(e)&&!Go(t)?e!=e&&t!=t:function(e,t,n,r,a,l){var f=Po(e),_=Po(t),A=f?o:ri(e),x=_?o:ri(t),k=(A=A==i?p:A)==p,E=(x=x==i?p:x)==p,S=A==x;if(S&&Yo(e)){if(!Yo(t))return!1;f=!0,k=!1}if(S&&!k)return l||(l=new Yn),f||Qo(e)?Fa(e,t,n,r,a,l):function(e,t,n,r,a,i,o){switch(n){case w:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case b:return!(e.byteLength!=t.byteLength||!i(new He(e),new He(t)));case s:case u:case h:return Do(+e,+t);case c:return e.name==t.name&&e.message==t.message;case m:case v:return e==t+"";case d:var l=Yt;case g:var f=1&r;if(l||(l=It),e.size!=t.size&&!f)return!1;var p=o.get(e);if(p)return p==t;r|=2,o.set(e,t);var _=Fa(l(e),l(t),r,a,i,o);return o.delete(e),_;case y:if(Mn)return Mn.call(e)==Mn.call(t)}return!1}(e,t,A,n,r,a,l);if(!(1&n)){var M=k&&xe.call(e,"__wrapped__"),T=E&&xe.call(t,"__wrapped__");if(M||T){var C=M?e.value():e,D=T?t.value():t;return l||(l=new Yn),a(C,D,n,r,l)}}if(!S)return!1;return l||(l=new Yn),function(e,t,n,r,a,i){var o=1&n,s=Ua(e),u=s.length,c=Ua(t).length;if(u!=c&&!o)return!1;var l=u;for(;l--;){var f=s[l];if(!(o?f in t:xe.call(t,f)))return!1}var d=i.get(e),h=i.get(t);if(d&&h)return d==t&&h==e;var p=!0;i.set(e,t),i.set(t,e);var m=o;for(;++l<u;){f=s[l];var g=e[f],v=t[f];if(r)var y=o?r(v,g,f,t,e,i):r(g,v,f,e,t,i);if(!(void 0===y?g===v||a(g,v,n,r,i):y)){p=!1;break}m||(m="constructor"==f)}if(p&&!m){var _=e.constructor,b=t.constructor;_==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof _&&_ instanceof _&&"function"==typeof b&&b instanceof b||(p=!1)}return i.delete(e),i.delete(t),p}(e,t,n,r,a,l)}(e,t,n,r,wr,a))}function Ar(e,t,n,r){var a=n.length,i=a,o=!r;if(null==e)return!i;for(e=pe(e);a--;){var s=n[a];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<i;){var u=(s=n[a])[0],c=e[u],l=s[1];if(o&&s[2]){if(void 0===c&&!(u in e))return!1}else{var f=new Yn;if(r)var d=r(c,l,u,e,t,f);if(!(void 0===d?wr(l,c,3,r,f):d))return!1}}return!0}function xr(e){return!(!Fo(e)||(t=e,Ee&&Ee in t))&&(Io(e)?Oe:re).test(Mi(e));var t}function kr(e){return"function"==typeof e?e:null==e?$s:"object"==typeof e?Po(e)?Dr(e[0],e[1]):Cr(e):nu(e)}function Er(e){if(!di(e))return on(e);var t=[];for(var n in pe(e))xe.call(e,n)&&"constructor"!=n&&t.push(n);return t}function Sr(e){if(!Fo(e))return function(e){var t=[];if(null!=e)for(var n in pe(e))t.push(n);return t}(e);var t=di(e),n=[];for(var r in e)("constructor"!=r||!t&&xe.call(e,r))&&n.push(r);return n}function Mr(e,t){return e<t}function Tr(e,t){var n=-1,r=Lo(e)?ce(e.length):[];return tr(e,(function(e,a,i){r[++n]=t(e,a,i)})),r}function Cr(e){var t=Qa(e);return 1==t.length&&t[0][2]?pi(t[0][0],t[0][1]):function(n){return n===e||Ar(n,e,t)}}function Dr(e,t){return ci(e)&&hi(t)?pi(Si(e),t):function(n){var r=gs(n,e);return void 0===r&&r===t?vs(n,e):wr(t,r,3)}}function Or(e,t,n,r,a){e!==t&&sr(t,(function(i,o){if(a||(a=new Yn),Fo(i))!function(e,t,n,r,a,i,o){var s=yi(e,n),u=yi(t,n),c=o.get(u);if(c)return void Bn(e,n,c);var l=i?i(s,u,n+"",e,t,o):void 0,f=void 0===l;if(f){var d=Po(u),h=!d&&Yo(u),p=!d&&!h&&Qo(u);l=u,d||h||p?Po(s)?l=s:Ro(s)?l=ya(s):h?(f=!1,l=da(u,!0)):p?(f=!1,l=pa(u,!0)):l=[]:Vo(u)||jo(u)?(l=s,jo(s)?l=ss(s):Fo(s)&&!Io(s)||(l=ii(u))):f=!1}f&&(o.set(u,l),a(l,u,r,i,o),o.delete(u));Bn(e,n,l)}(e,t,o,n,Or,r,a);else{var s=r?r(yi(e,o),i,o+"",e,t,a):void 0;void 0===s&&(s=i),Bn(e,o,s)}}),As)}function Nr(e,t){var n=e.length;if(n)return si(t+=t<0?n:0,n)?e[t]:void 0}function jr(e,t,n){t=t.length?lt(t,(function(e){return Po(e)?function(t){return dr(t,1===e.length?e[0]:e)}:e})):[$s];var r=-1;return t=lt(t,Tt(Xa())),function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(Tr(e,(function(e,n,a){return{criteria:lt(t,(function(t){return t(e)})),index:++r,value:e}})),(function(e,t){return function(e,t,n){var r=-1,a=e.criteria,i=t.criteria,o=a.length,s=n.length;for(;++r<o;){var u=ma(a[r],i[r]);if(u){if(r>=s)return u;var c=n[r];return u*("desc"==c?-1:1)}}return e.index-t.index}(e,t,n)}))}function Pr(e,t,n){for(var r=-1,a=t.length,i={};++r<a;){var o=t[r],s=dr(e,o);n(s,o)&&Hr(i,ua(o,e),s)}return i}function zr(e,t,n,r){var a=r?_t:yt,i=-1,o=t.length,s=e;for(e===t&&(t=ya(t)),n&&(s=lt(e,Tt(n)));++i<o;)for(var u=0,c=t[i],l=n?n(c):c;(u=a(s,l,u,r))>-1;)s!==e&&Je.call(s,u,1),Je.call(e,u,1);return e}function Lr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var a=t[n];if(n==r||a!==i){var i=a;si(a)?Je.call(e,a,1):ea(e,a)}}return e}function Rr(e,t){return e+en(fn()*(t-e+1))}function Yr(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=en(t/2))&&(e+=e)}while(t);return n}function Wr(e,t){return wi(mi(e,t,$s),e+"")}function qr(e){return qn(Ds(e))}function Ir(e,t){var n=Ds(e);return ki(n,Kn(t,0,n.length))}function Hr(e,t,n,r){if(!Fo(e))return e;for(var a=-1,i=(t=ua(t,e)).length,o=i-1,s=e;null!=s&&++a<i;){var u=Si(t[a]),c=n;if("__proto__"===u||"constructor"===u||"prototype"===u)return e;if(a!=o){var l=s[u];void 0===(c=r?r(l,u,s):void 0)&&(c=Fo(l)?l:si(t[a+1])?[]:{})}Fn(s,u,c),s=s[u]}return e}var Br=_n?function(e,t){return _n.set(e,t),e}:$s,Fr=Jt?function(e,t){return Jt(e,"toString",{configurable:!0,enumerable:!1,value:Fs(t),writable:!0})}:$s;function Gr(e){return ki(Ds(e))}function Ur(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),(n=n>a?a:n)<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var i=ce(a);++r<a;)i[r]=e[r+t];return i}function $r(e,t){var n;return tr(e,(function(e,r,a){return!(n=t(e,r,a))})),!!n}function Vr(e,t,n){var r=0,a=null==e?r:e.length;if("number"==typeof t&&t==t&&a<=2147483647){for(;r<a;){var i=r+a>>>1,o=e[i];null!==o&&!Zo(o)&&(n?o<=t:o<t)?r=i+1:a=i}return a}return Jr(e,t,$s,n)}function Jr(e,t,n,r){var a=0,i=null==e?0:e.length;if(0===i)return 0;for(var o=(t=n(t))!=t,s=null===t,u=Zo(t),c=void 0===t;a<i;){var l=en((a+i)/2),f=n(e[l]),d=void 0!==f,h=null===f,p=f==f,m=Zo(f);if(o)var g=r||p;else g=c?p&&(r||d):s?p&&d&&(r||!h):u?p&&d&&!h&&(r||!m):!h&&!m&&(r?f<=t:f<t);g?a=l+1:i=l}return un(i,4294967294)}function Kr(e,t){for(var n=-1,r=e.length,a=0,i=[];++n<r;){var o=e[n],s=t?t(o):o;if(!n||!Do(s,u)){var u=s;i[a++]=0===o?0:o}}return i}function Xr(e){return"number"==typeof e?e:Zo(e)?NaN:+e}function Zr(e){if("string"==typeof e)return e;if(Po(e))return lt(e,Zr)+"";if(Zo(e))return Tn?Tn.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Qr(e,t,n){var r=-1,a=ut,i=e.length,o=!0,s=[],u=s;if(n)o=!1,a=ct;else if(i>=200){var c=t?null:Ya(e);if(c)return It(c);o=!1,a=Dt,u=new Rn}else u=t?[]:s;e:for(;++r<i;){var l=e[r],f=t?t(l):l;if(l=n||0!==l?l:0,o&&f==f){for(var d=u.length;d--;)if(u[d]===f)continue e;t&&u.push(f),s.push(l)}else a(u,f,n)||(u!==s&&u.push(f),s.push(l))}return s}function ea(e,t){return null==(e=gi(e,t=ua(t,e)))||delete e[Si(Wi(t))]}function ta(e,t,n,r){return Hr(e,t,n(dr(e,t)),r)}function na(e,t,n,r){for(var a=e.length,i=r?a:-1;(r?i--:++i<a)&&t(e[i],i,e););return n?Ur(e,r?0:i,r?i+1:a):Ur(e,r?i+1:0,r?a:i)}function ra(e,t){var n=e;return n instanceof jn&&(n=n.value()),dt(t,(function(e,t){return t.func.apply(t.thisArg,ft([e],t.args))}),n)}function aa(e,t,n){var r=e.length;if(r<2)return r?Qr(e[0]):[];for(var a=-1,i=ce(r);++a<r;)for(var o=e[a],s=-1;++s<r;)s!=a&&(i[a]=er(i[a]||o,e[s],t,n));return Qr(or(i,1),t,n)}function ia(e,t,n){for(var r=-1,a=e.length,i=t.length,o={};++r<a;){var s=r<i?t[r]:void 0;n(o,e[r],s)}return o}function oa(e){return Ro(e)?e:[]}function sa(e){return"function"==typeof e?e:$s}function ua(e,t){return Po(e)?e:ci(e,t)?[e]:Ei(us(e))}var ca=Wr;function la(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:Ur(e,t,n)}var fa=Kt||function(e){return Fe.clearTimeout(e)};function da(e,t){if(t)return e.slice();var n=e.length,r=Be?Be(n):new e.constructor(n);return e.copy(r),r}function ha(e){var t=new e.constructor(e.byteLength);return new He(t).set(new He(e)),t}function pa(e,t){var n=t?ha(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function ma(e,t){if(e!==t){var n=void 0!==e,r=null===e,a=e==e,i=Zo(e),o=void 0!==t,s=null===t,u=t==t,c=Zo(t);if(!s&&!c&&!i&&e>t||i&&o&&u&&!s&&!c||r&&o&&u||!n&&u||!a)return 1;if(!r&&!i&&!c&&e<t||c&&n&&a&&!r&&!i||s&&n&&a||!o&&a||!u)return-1}return 0}function ga(e,t,n,r){for(var a=-1,i=e.length,o=n.length,s=-1,u=t.length,c=sn(i-o,0),l=ce(u+c),f=!r;++s<u;)l[s]=t[s];for(;++a<o;)(f||a<i)&&(l[n[a]]=e[a]);for(;c--;)l[s++]=e[a++];return l}function va(e,t,n,r){for(var a=-1,i=e.length,o=-1,s=n.length,u=-1,c=t.length,l=sn(i-s,0),f=ce(l+c),d=!r;++a<l;)f[a]=e[a];for(var h=a;++u<c;)f[h+u]=t[u];for(;++o<s;)(d||a<i)&&(f[h+n[o]]=e[a++]);return f}function ya(e,t){var n=-1,r=e.length;for(t||(t=ce(r));++n<r;)t[n]=e[n];return t}function _a(e,t,n,r){var a=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var s=t[i],u=r?r(n[s],e[s],s,n,e):void 0;void 0===u&&(u=e[s]),a?Vn(n,s,u):Fn(n,s,u)}return n}function ba(e,t){return function(n,r){var a=Po(n)?rt:Un,i=t?t():{};return a(n,e,Xa(r,2),i)}}function wa(e){return Wr((function(t,n){var r=-1,a=n.length,i=a>1?n[a-1]:void 0,o=a>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(a--,i):void 0,o&&ui(n[0],n[1],o)&&(i=a<3?void 0:i,a=1),t=pe(t);++r<a;){var s=n[r];s&&e(t,s,r,i)}return t}))}function Aa(e,t){return function(n,r){if(null==n)return n;if(!Lo(n))return e(n,r);for(var a=n.length,i=t?a:-1,o=pe(n);(t?i--:++i<a)&&!1!==r(o[i],i,o););return n}}function xa(e){return function(t,n,r){for(var a=-1,i=pe(t),o=r(t),s=o.length;s--;){var u=o[e?s:++a];if(!1===n(i[u],u,i))break}return t}}function ka(e){return function(t){var n=Rt(t=us(t))?Ft(t):void 0,r=n?n[0]:t.charAt(0),a=n?la(n,1).join(""):t.slice(1);return r[e]()+a}}function Ea(e){return function(t){return dt(Is(js(t).replace(Ce,"")),e,"")}}function Sa(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Dn(e.prototype),r=e.apply(n,t);return Fo(r)?r:n}}function Ma(e){return function(t,n,r){var a=pe(t);if(!Lo(t)){var i=Xa(n,3);t=ws(t),n=function(e){return i(a[e],e,a)}}var o=e(t,n,r);return o>-1?a[i?t[o]:o]:void 0}}function Ta(e){return Ga((function(t){var r=t.length,a=r,i=Nn.prototype.thru;for(e&&t.reverse();a--;){var o=t[a];if("function"!=typeof o)throw new ve(n);if(i&&!s&&"wrapper"==Ja(o))var s=new Nn([],!0)}for(a=s?a:r;++a<r;){var u=Ja(o=t[a]),c="wrapper"==u?Va(o):void 0;s=c&&li(c[0])&&424==c[1]&&!c[4].length&&1==c[9]?s[Ja(c[0])].apply(s,c[3]):1==o.length&&li(o)?s[u]():s.thru(o)}return function(){var e=arguments,n=e[0];if(s&&1==e.length&&Po(n))return s.plant(n).value();for(var a=0,i=r?t[a].apply(this,e):n;++a<r;)i=t[a].call(this,i);return i}}))}function Ca(e,t,n,r,a,i,o,s,u,c){var l=128&t,f=1&t,d=2&t,h=24&t,p=512&t,m=d?void 0:Sa(e);return function g(){for(var v=arguments.length,y=ce(v),_=v;_--;)y[_]=arguments[_];if(h)var b=Ka(g),w=jt(y,b);if(r&&(y=ga(y,r,a,h)),i&&(y=va(y,i,o,h)),v-=w,h&&v<c){var A=qt(y,b);return La(e,t,Ca,g.placeholder,n,y,A,s,u,c-v)}var x=f?n:this,k=d?x[e]:e;return v=y.length,s?y=vi(y,s):p&&v>1&&y.reverse(),l&&u<v&&(y.length=u),this&&this!==Fe&&this instanceof g&&(k=m||Sa(k)),k.apply(x,y)}}function Da(e,t){return function(n,r){return function(e,t,n,r){return cr(e,(function(e,a,i){t(r,n(e),a,i)})),r}(n,e,t(r),{})}}function Oa(e,t){return function(n,r){var a;if(void 0===n&&void 0===r)return t;if(void 0!==n&&(a=n),void 0!==r){if(void 0===a)return r;"string"==typeof n||"string"==typeof r?(n=Zr(n),r=Zr(r)):(n=Xr(n),r=Xr(r)),a=e(n,r)}return a}}function Na(e){return Ga((function(t){return t=lt(t,Tt(Xa())),Wr((function(n){var r=this;return e(t,(function(e){return nt(e,r,n)}))}))}))}function ja(e,t){var n=(t=void 0===t?" ":Zr(t)).length;if(n<2)return n?Yr(t,e):t;var r=Yr(t,Qt(e/Bt(t)));return Rt(t)?la(Ft(r),0,e).join(""):r.slice(0,e)}function Pa(e){return function(t,n,r){return r&&"number"!=typeof r&&ui(t,n,r)&&(n=r=void 0),t=rs(t),void 0===n?(n=t,t=0):n=rs(n),function(e,t,n,r){for(var a=-1,i=sn(Qt((t-e)/(n||1)),0),o=ce(i);i--;)o[r?i:++a]=e,e+=n;return o}(t,n,r=void 0===r?t<n?1:-1:rs(r),e)}}function za(e){return function(t,n){return"string"==typeof t&&"string"==typeof n||(t=os(t),n=os(n)),e(t,n)}}function La(e,t,n,r,a,i,o,s,u,c){var l=8&t;t|=l?32:64,4&(t&=~(l?64:32))||(t&=-4);var f=[e,t,a,l?i:void 0,l?o:void 0,l?void 0:i,l?void 0:o,s,u,c],d=n.apply(void 0,f);return li(e)&&_i(d,f),d.placeholder=r,Ai(d,e,t)}function Ra(e){var t=he[e];return function(e,n){if(e=os(e),(n=null==n?0:un(as(n),292))&&rn(e)){var r=(us(e)+"e").split("e");return+((r=(us(t(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return t(e)}}var Ya=gn&&1/It(new gn([,-0]))[1]==1/0?function(e){return new gn(e)}:Zs;function Wa(e){return function(t){var n=ri(t);return n==d?Yt(t):n==g?Ht(t):function(e,t){return lt(t,(function(t){return[t,e[t]]}))}(t,e(t))}}function qa(e,t,a,i,o,s,u,c){var l=2&t;if(!l&&"function"!=typeof e)throw new ve(n);var f=i?i.length:0;if(f||(t&=-97,i=o=void 0),u=void 0===u?u:sn(as(u),0),c=void 0===c?c:as(c),f-=o?o.length:0,64&t){var d=i,h=o;i=o=void 0}var p=l?void 0:Va(e),m=[e,t,a,i,o,d,h,s,u,c];if(p&&function(e,t){var n=e[1],a=t[1],i=n|a,o=i<131,s=128==a&&8==n||128==a&&256==n&&e[7].length<=t[8]||384==a&&t[7].length<=t[8]&&8==n;if(!o&&!s)return e;1&a&&(e[2]=t[2],i|=1&n?0:4);var u=t[3];if(u){var c=e[3];e[3]=c?ga(c,u,t[4]):u,e[4]=c?qt(e[3],r):t[4]}(u=t[5])&&(c=e[5],e[5]=c?va(c,u,t[6]):u,e[6]=c?qt(e[5],r):t[6]);(u=t[7])&&(e[7]=u);128&a&&(e[8]=null==e[8]?t[8]:un(e[8],t[8]));null==e[9]&&(e[9]=t[9]);e[0]=t[0],e[1]=i}(m,p),e=m[0],t=m[1],a=m[2],i=m[3],o=m[4],!(c=m[9]=void 0===m[9]?l?0:e.length:sn(m[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)g=8==t||16==t?function(e,t,n){var r=Sa(e);return function a(){for(var i=arguments.length,o=ce(i),s=i,u=Ka(a);s--;)o[s]=arguments[s];var c=i<3&&o[0]!==u&&o[i-1]!==u?[]:qt(o,u);if((i-=c.length)<n)return La(e,t,Ca,a.placeholder,void 0,o,c,void 0,void 0,n-i);var l=this&&this!==Fe&&this instanceof a?r:e;return nt(l,this,o)}}(e,t,c):32!=t&&33!=t||o.length?Ca.apply(void 0,m):function(e,t,n,r){var a=1&t,i=Sa(e);return function t(){for(var o=-1,s=arguments.length,u=-1,c=r.length,l=ce(c+s),f=this&&this!==Fe&&this instanceof t?i:e;++u<c;)l[u]=r[u];for(;s--;)l[u++]=arguments[++o];return nt(f,a?n:this,l)}}(e,t,a,i);else var g=function(e,t,n){var r=1&t,a=Sa(e);return function t(){var i=this&&this!==Fe&&this instanceof t?a:e;return i.apply(r?n:this,arguments)}}(e,t,a);return Ai((p?Br:_i)(g,m),e,t)}function Ia(e,t,n,r){return void 0===e||Do(e,be[n])&&!xe.call(r,n)?t:e}function Ha(e,t,n,r,a,i){return Fo(e)&&Fo(t)&&(i.set(t,e),Or(e,t,void 0,Ha,i),i.delete(t)),e}function Ba(e){return Vo(e)?void 0:e}function Fa(e,t,n,r,a,i){var o=1&n,s=e.length,u=t.length;if(s!=u&&!(o&&u>s))return!1;var c=i.get(e),l=i.get(t);if(c&&l)return c==t&&l==e;var f=-1,d=!0,h=2&n?new Rn:void 0;for(i.set(e,t),i.set(t,e);++f<s;){var p=e[f],m=t[f];if(r)var g=o?r(m,p,f,t,e,i):r(p,m,f,e,t,i);if(void 0!==g){if(g)continue;d=!1;break}if(h){if(!pt(t,(function(e,t){if(!Dt(h,t)&&(p===e||a(p,e,n,r,i)))return h.push(t)}))){d=!1;break}}else if(p!==m&&!a(p,m,n,r,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function Ga(e){return wi(mi(e,void 0,Pi),e+"")}function Ua(e){return hr(e,ws,ti)}function $a(e){return hr(e,As,ni)}var Va=_n?function(e){return _n.get(e)}:Zs;function Ja(e){for(var t=e.name+"",n=bn[t],r=xe.call(bn,t)?n.length:0;r--;){var a=n[r],i=a.func;if(null==i||i==e)return a.name}return t}function Ka(e){return(xe.call(Cn,"placeholder")?Cn:e).placeholder}function Xa(){var e=Cn.iteratee||Vs;return e=e===Vs?kr:e,arguments.length?e(arguments[0],arguments[1]):e}function Za(e,t){var n,r,a=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?a["string"==typeof t?"string":"hash"]:a.map}function Qa(e){for(var t=ws(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,hi(a)]}return t}function ei(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return xr(n)?n:void 0}var ti=tn?function(e){return null==e?[]:(e=pe(e),st(tn(e),(function(t){return Ve.call(e,t)})))}:iu,ni=tn?function(e){for(var t=[];e;)ft(t,ti(e)),e=Ge(e);return t}:iu,ri=pr;function ai(e,t,n){for(var r=-1,a=(t=ua(t,e)).length,i=!1;++r<a;){var o=Si(t[r]);if(!(i=null!=e&&n(e,o)))break;e=e[o]}return i||++r!=a?i:!!(a=null==e?0:e.length)&&Bo(a)&&si(o,a)&&(Po(e)||jo(e))}function ii(e){return"function"!=typeof e.constructor||di(e)?{}:Dn(Ge(e))}function oi(e){return Po(e)||jo(e)||!!(mt&&e&&e[mt])}function si(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&ie.test(e))&&e>-1&&e%1==0&&e<t}function ui(e,t,n){if(!Fo(n))return!1;var r=typeof t;return!!("number"==r?Lo(n)&&si(t,n.length):"string"==r&&t in n)&&Do(n[t],e)}function ci(e,t){if(Po(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Zo(e))||(I.test(e)||!q.test(e)||null!=t&&e in pe(t))}function li(e){var t=Ja(e),n=Cn[t];if("function"!=typeof n||!(t in jn.prototype))return!1;if(e===n)return!0;var r=Va(n);return!!r&&e===r[0]}(hn&&ri(new hn(new ArrayBuffer(1)))!=w||pn&&ri(new pn)!=d||mn&&"[object Promise]"!=ri(mn.resolve())||gn&&ri(new gn)!=g||vn&&ri(new vn)!=_)&&(ri=function(e){var t=pr(e),n=t==p?e.constructor:void 0,r=n?Mi(n):"";if(r)switch(r){case wn:return w;case An:return d;case xn:return"[object Promise]";case kn:return g;case En:return _}return t});var fi=we?Io:ou;function di(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||be)}function hi(e){return e==e&&!Fo(e)}function pi(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in pe(n)))}}function mi(e,t,n){return t=sn(void 0===t?e.length-1:t,0),function(){for(var r=arguments,a=-1,i=sn(r.length-t,0),o=ce(i);++a<i;)o[a]=r[t+a];a=-1;for(var s=ce(t+1);++a<t;)s[a]=r[a];return s[t]=n(o),nt(e,this,s)}}function gi(e,t){return t.length<2?e:dr(e,Ur(t,0,-1))}function vi(e,t){for(var n=e.length,r=un(t.length,n),a=ya(e);r--;){var i=t[r];e[r]=si(i,n)?a[i]:void 0}return e}function yi(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var _i=xi(Br),bi=Zt||function(e,t){return Fe.setTimeout(e,t)},wi=xi(Fr);function Ai(e,t,n){var r=t+"";return wi(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace($,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return at(a,(function(n){var r="_."+n[0];t&n[1]&&!ut(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(V);return t?t[1].split(J):[]}(r),n)))}function xi(e){var t=0,n=0;return function(){var r=cn(),a=16-(r-n);if(n=r,a>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function ki(e,t){var n=-1,r=e.length,a=r-1;for(t=void 0===t?r:t;++n<t;){var i=Rr(n,a),o=e[i];e[i]=e[n],e[n]=o}return e.length=t,e}var Ei=function(e){var t=ko(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(H,(function(e,n,r,a){t.push(r?a.replace(Z,"$1"):n||e)})),t}));function Si(e){if("string"==typeof e||Zo(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Mi(e){if(null!=e){try{return Ae.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Ti(e){if(e instanceof jn)return e.clone();var t=new Nn(e.__wrapped__,e.__chain__);return t.__actions__=ya(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Ci=Wr((function(e,t){return Ro(e)?er(e,or(t,1,Ro,!0)):[]})),Di=Wr((function(e,t){var n=Wi(t);return Ro(n)&&(n=void 0),Ro(e)?er(e,or(t,1,Ro,!0),Xa(n,2)):[]})),Oi=Wr((function(e,t){var n=Wi(t);return Ro(n)&&(n=void 0),Ro(e)?er(e,or(t,1,Ro,!0),void 0,n):[]}));function Ni(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=null==n?0:as(n);return a<0&&(a=sn(r+a,0)),vt(e,Xa(t,3),a)}function ji(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=r-1;return void 0!==n&&(a=as(n),a=n<0?sn(r+a,0):un(a,r-1)),vt(e,Xa(t,3),a,!0)}function Pi(e){return(null==e?0:e.length)?or(e,1):[]}function zi(e){return e&&e.length?e[0]:void 0}var Li=Wr((function(e){var t=lt(e,oa);return t.length&&t[0]===e[0]?yr(t):[]})),Ri=Wr((function(e){var t=Wi(e),n=lt(e,oa);return t===Wi(n)?t=void 0:n.pop(),n.length&&n[0]===e[0]?yr(n,Xa(t,2)):[]})),Yi=Wr((function(e){var t=Wi(e),n=lt(e,oa);return(t="function"==typeof t?t:void 0)&&n.pop(),n.length&&n[0]===e[0]?yr(n,void 0,t):[]}));function Wi(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}var qi=Wr(Ii);function Ii(e,t){return e&&e.length&&t&&t.length?zr(e,t):e}var Hi=Ga((function(e,t){var n=null==e?0:e.length,r=Jn(e,t);return Lr(e,lt(t,(function(e){return si(e,n)?+e:e})).sort(ma)),r}));function Bi(e){return null==e?e:dn.call(e)}var Fi=Wr((function(e){return Qr(or(e,1,Ro,!0))})),Gi=Wr((function(e){var t=Wi(e);return Ro(t)&&(t=void 0),Qr(or(e,1,Ro,!0),Xa(t,2))})),Ui=Wr((function(e){var t=Wi(e);return t="function"==typeof t?t:void 0,Qr(or(e,1,Ro,!0),void 0,t)}));function $i(e){if(!e||!e.length)return[];var t=0;return e=st(e,(function(e){if(Ro(e))return t=sn(e.length,t),!0})),St(t,(function(t){return lt(e,At(t))}))}function Vi(e,t){if(!e||!e.length)return[];var n=$i(e);return null==t?n:lt(n,(function(e){return nt(t,void 0,e)}))}var Ji=Wr((function(e,t){return Ro(e)?er(e,t):[]})),Ki=Wr((function(e){return aa(st(e,Ro))})),Xi=Wr((function(e){var t=Wi(e);return Ro(t)&&(t=void 0),aa(st(e,Ro),Xa(t,2))})),Zi=Wr((function(e){var t=Wi(e);return t="function"==typeof t?t:void 0,aa(st(e,Ro),void 0,t)})),Qi=Wr($i);var eo=Wr((function(e){var t=e.length,n=t>1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Vi(e,n)}));function to(e){var t=Cn(e);return t.__chain__=!0,t}function no(e,t){return t(e)}var ro=Ga((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,a=function(t){return Jn(t,e)};return!(t>1||this.__actions__.length)&&r instanceof jn&&si(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:no,args:[a],thisArg:void 0}),new Nn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(a)}));var ao=ba((function(e,t,n){xe.call(e,n)?++e[n]:Vn(e,n,1)}));var io=Ma(Ni),oo=Ma(ji);function so(e,t){return(Po(e)?at:tr)(e,Xa(t,3))}function uo(e,t){return(Po(e)?it:nr)(e,Xa(t,3))}var co=ba((function(e,t,n){xe.call(e,n)?e[n].push(t):Vn(e,n,[t])}));var lo=Wr((function(e,t,n){var r=-1,a="function"==typeof t,i=Lo(e)?ce(e.length):[];return tr(e,(function(e){i[++r]=a?nt(t,e,n):_r(e,t,n)})),i})),fo=ba((function(e,t,n){Vn(e,n,t)}));function ho(e,t){return(Po(e)?lt:Tr)(e,Xa(t,3))}var po=ba((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var mo=Wr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&ui(e,t[0],t[1])?t=[]:n>2&&ui(t[0],t[1],t[2])&&(t=[t[0]]),jr(e,or(t,1),[])})),go=Xt||function(){return Fe.Date.now()};function vo(e,t,n){return t=n?void 0:t,qa(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function yo(e,t){var r;if("function"!=typeof t)throw new ve(n);return e=as(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=void 0),r}}var _o=Wr((function(e,t,n){var r=1;if(n.length){var a=qt(n,Ka(_o));r|=32}return qa(e,r,t,n,a)})),bo=Wr((function(e,t,n){var r=3;if(n.length){var a=qt(n,Ka(bo));r|=32}return qa(t,r,e,n,a)}));function wo(e,t,r){var a,i,o,s,u,c,l=0,f=!1,d=!1,h=!0;if("function"!=typeof e)throw new ve(n);function p(t){var n=a,r=i;return a=i=void 0,l=t,s=e.apply(r,n)}function m(e){return l=e,u=bi(v,t),f?p(e):s}function g(e){var n=e-c;return void 0===c||n>=t||n<0||d&&e-l>=o}function v(){var e=go();if(g(e))return y(e);u=bi(v,function(e){var n=t-(e-c);return d?un(n,o-(e-l)):n}(e))}function y(e){return u=void 0,h&&a?p(e):(a=i=void 0,s)}function _(){var e=go(),n=g(e);if(a=arguments,i=this,c=e,n){if(void 0===u)return m(c);if(d)return fa(u),u=bi(v,t),p(c)}return void 0===u&&(u=bi(v,t)),s}return t=os(t)||0,Fo(r)&&(f=!!r.leading,o=(d="maxWait"in r)?sn(os(r.maxWait)||0,t):o,h="trailing"in r?!!r.trailing:h),_.cancel=function(){void 0!==u&&fa(u),l=0,a=c=i=u=void 0},_.flush=function(){return void 0===u?s:y(go())},_}var Ao=Wr((function(e,t){return Qn(e,1,t)})),xo=Wr((function(e,t,n){return Qn(e,os(t)||0,n)}));function ko(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ve(n);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],i=r.cache;if(i.has(a))return i.get(a);var o=e.apply(this,n);return r.cache=i.set(a,o)||i,o};return r.cache=new(ko.Cache||Ln),r}function Eo(e){if("function"!=typeof e)throw new ve(n);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}ko.Cache=Ln;var So=ca((function(e,t){var n=(t=1==t.length&&Po(t[0])?lt(t[0],Tt(Xa())):lt(or(t,1),Tt(Xa()))).length;return Wr((function(r){for(var a=-1,i=un(r.length,n);++a<i;)r[a]=t[a].call(this,r[a]);return nt(e,this,r)}))})),Mo=Wr((function(e,t){return qa(e,32,void 0,t,qt(t,Ka(Mo)))})),To=Wr((function(e,t){return qa(e,64,void 0,t,qt(t,Ka(To)))})),Co=Ga((function(e,t){return qa(e,256,void 0,void 0,void 0,t)}));function Do(e,t){return e===t||e!=e&&t!=t}var Oo=za(mr),No=za((function(e,t){return e>=t})),jo=br(function(){return arguments}())?br:function(e){return Go(e)&&xe.call(e,"callee")&&!Ve.call(e,"callee")},Po=ce.isArray,zo=Ke?Tt(Ke):function(e){return Go(e)&&pr(e)==b};function Lo(e){return null!=e&&Bo(e.length)&&!Io(e)}function Ro(e){return Go(e)&&Lo(e)}var Yo=nn||ou,Wo=Xe?Tt(Xe):function(e){return Go(e)&&pr(e)==u};function qo(e){if(!Go(e))return!1;var t=pr(e);return t==c||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Vo(e)}function Io(e){if(!Fo(e))return!1;var t=pr(e);return t==l||t==f||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ho(e){return"number"==typeof e&&e==as(e)}function Bo(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Fo(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Go(e){return null!=e&&"object"==typeof e}var Uo=Ze?Tt(Ze):function(e){return Go(e)&&ri(e)==d};function $o(e){return"number"==typeof e||Go(e)&&pr(e)==h}function Vo(e){if(!Go(e)||pr(e)!=p)return!1;var t=Ge(e);if(null===t)return!0;var n=xe.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Ae.call(n)==Me}var Jo=Qe?Tt(Qe):function(e){return Go(e)&&pr(e)==m};var Ko=et?Tt(et):function(e){return Go(e)&&ri(e)==g};function Xo(e){return"string"==typeof e||!Po(e)&&Go(e)&&pr(e)==v}function Zo(e){return"symbol"==typeof e||Go(e)&&pr(e)==y}var Qo=tt?Tt(tt):function(e){return Go(e)&&Bo(e.length)&&!!Re[pr(e)]};var es=za(Mr),ts=za((function(e,t){return e<=t}));function ns(e){if(!e)return[];if(Lo(e))return Xo(e)?Ft(e):ya(e);if(xt&&e[xt])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[xt]());var t=ri(e);return(t==d?Yt:t==g?It:Ds)(e)}function rs(e){return e?(e=os(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function as(e){var t=rs(e),n=t%1;return t==t?n?t-n:t:0}function is(e){return e?Kn(as(e),0,4294967295):0}function os(e){if("number"==typeof e)return e;if(Zo(e))return NaN;if(Fo(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Fo(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Mt(e);var n=ne.test(e);return n||ae.test(e)?Ie(e.slice(2),n?2:8):te.test(e)?NaN:+e}function ss(e){return _a(e,As(e))}function us(e){return null==e?"":Zr(e)}var cs=wa((function(e,t){if(di(t)||Lo(t))_a(t,ws(t),e);else for(var n in t)xe.call(t,n)&&Fn(e,n,t[n])})),ls=wa((function(e,t){_a(t,As(t),e)})),fs=wa((function(e,t,n,r){_a(t,As(t),e,r)})),ds=wa((function(e,t,n,r){_a(t,ws(t),e,r)})),hs=Ga(Jn);var ps=Wr((function(e,t){e=pe(e);var n=-1,r=t.length,a=r>2?t[2]:void 0;for(a&&ui(t[0],t[1],a)&&(r=1);++n<r;)for(var i=t[n],o=As(i),s=-1,u=o.length;++s<u;){var c=o[s],l=e[c];(void 0===l||Do(l,be[c])&&!xe.call(e,c))&&(e[c]=i[c])}return e})),ms=Wr((function(e){return e.push(void 0,Ha),nt(ks,void 0,e)}));function gs(e,t,n){var r=null==e?void 0:dr(e,t);return void 0===r?n:r}function vs(e,t){return null!=e&&ai(e,t,vr)}var ys=Da((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=Se.call(t)),e[t]=n}),Fs($s)),_s=Da((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=Se.call(t)),xe.call(e,t)?e[t].push(n):e[t]=[n]}),Xa),bs=Wr(_r);function ws(e){return Lo(e)?Wn(e):Er(e)}function As(e){return Lo(e)?Wn(e,!0):Sr(e)}var xs=wa((function(e,t,n){Or(e,t,n)})),ks=wa((function(e,t,n,r){Or(e,t,n,r)})),Es=Ga((function(e,t){var n={};if(null==e)return n;var r=!1;t=lt(t,(function(t){return t=ua(t,e),r||(r=t.length>1),t})),_a(e,$a(e),n),r&&(n=Xn(n,7,Ba));for(var a=t.length;a--;)ea(n,t[a]);return n}));var Ss=Ga((function(e,t){return null==e?{}:function(e,t){return Pr(e,t,(function(t,n){return vs(e,n)}))}(e,t)}));function Ms(e,t){if(null==e)return{};var n=lt($a(e),(function(e){return[e]}));return t=Xa(t),Pr(e,n,(function(e,n){return t(e,n[0])}))}var Ts=Wa(ws),Cs=Wa(As);function Ds(e){return null==e?[]:Ct(e,ws(e))}var Os=Ea((function(e,t,n){return t=t.toLowerCase(),e+(n?Ns(t):t)}));function Ns(e){return qs(us(e).toLowerCase())}function js(e){return(e=us(e))&&e.replace(oe,Pt).replace(De,"")}var Ps=Ea((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),zs=Ea((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Ls=ka("toLowerCase");var Rs=Ea((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var Ys=Ea((function(e,t,n){return e+(n?" ":"")+qs(t)}));var Ws=Ea((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),qs=ka("toUpperCase");function Is(e,t,n){return e=us(e),void 0===(t=n?void 0:t)?function(e){return Pe.test(e)}(e)?function(e){return e.match(Ne)||[]}(e):function(e){return e.match(K)||[]}(e):e.match(t)||[]}var Hs=Wr((function(e,t){try{return nt(e,void 0,t)}catch(e){return qo(e)?e:new fe(e)}})),Bs=Ga((function(e,t){return at(t,(function(t){t=Si(t),Vn(e,t,_o(e[t],e))})),e}));function Fs(e){return function(){return e}}var Gs=Ta(),Us=Ta(!0);function $s(e){return e}function Vs(e){return kr("function"==typeof e?e:Xn(e,1))}var Js=Wr((function(e,t){return function(n){return _r(n,e,t)}})),Ks=Wr((function(e,t){return function(n){return _r(e,n,t)}}));function Xs(e,t,n){var r=ws(t),a=fr(t,r);null!=n||Fo(t)&&(a.length||!r.length)||(n=t,t=e,e=this,a=fr(t,ws(t)));var i=!(Fo(n)&&"chain"in n&&!n.chain),o=Io(e);return at(a,(function(n){var r=t[n];e[n]=r,o&&(e.prototype[n]=function(){var t=this.__chain__;if(i||t){var n=e(this.__wrapped__),a=n.__actions__=ya(this.__actions__);return a.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,ft([this.value()],arguments))})})),e}function Zs(){}var Qs=Na(lt),eu=Na(ot),tu=Na(pt);function nu(e){return ci(e)?At(Si(e)):function(e){return function(t){return dr(t,e)}}(e)}var ru=Pa(),au=Pa(!0);function iu(){return[]}function ou(){return!1}var su=Oa((function(e,t){return e+t}),0),uu=Ra("ceil"),cu=Oa((function(e,t){return e/t}),1),lu=Ra("floor");var fu,du=Oa((function(e,t){return e*t}),1),hu=Ra("round"),pu=Oa((function(e,t){return e-t}),0);return Cn.after=function(e,t){if("function"!=typeof t)throw new ve(n);return e=as(e),function(){if(--e<1)return t.apply(this,arguments)}},Cn.ary=vo,Cn.assign=cs,Cn.assignIn=ls,Cn.assignInWith=fs,Cn.assignWith=ds,Cn.at=hs,Cn.before=yo,Cn.bind=_o,Cn.bindAll=Bs,Cn.bindKey=bo,Cn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Po(e)?e:[e]},Cn.chain=to,Cn.chunk=function(e,t,n){t=(n?ui(e,t,n):void 0===t)?1:sn(as(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var a=0,i=0,o=ce(Qt(r/t));a<r;)o[i++]=Ur(e,a,a+=t);return o},Cn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,a=[];++t<n;){var i=e[t];i&&(a[r++]=i)}return a},Cn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=ce(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return ft(Po(n)?ya(n):[n],or(t,1))},Cn.cond=function(e){var t=null==e?0:e.length,r=Xa();return e=t?lt(e,(function(e){if("function"!=typeof e[1])throw new ve(n);return[r(e[0]),e[1]]})):[],Wr((function(n){for(var r=-1;++r<t;){var a=e[r];if(nt(a[0],this,n))return nt(a[1],this,n)}}))},Cn.conforms=function(e){return function(e){var t=ws(e);return function(n){return Zn(n,e,t)}}(Xn(e,1))},Cn.constant=Fs,Cn.countBy=ao,Cn.create=function(e,t){var n=Dn(e);return null==t?n:$n(n,t)},Cn.curry=function e(t,n,r){var a=qa(t,8,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return a.placeholder=e.placeholder,a},Cn.curryRight=function e(t,n,r){var a=qa(t,16,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return a.placeholder=e.placeholder,a},Cn.debounce=wo,Cn.defaults=ps,Cn.defaultsDeep=ms,Cn.defer=Ao,Cn.delay=xo,Cn.difference=Ci,Cn.differenceBy=Di,Cn.differenceWith=Oi,Cn.drop=function(e,t,n){var r=null==e?0:e.length;return r?Ur(e,(t=n||void 0===t?1:as(t))<0?0:t,r):[]},Cn.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?Ur(e,0,(t=r-(t=n||void 0===t?1:as(t)))<0?0:t):[]},Cn.dropRightWhile=function(e,t){return e&&e.length?na(e,Xa(t,3),!0,!0):[]},Cn.dropWhile=function(e,t){return e&&e.length?na(e,Xa(t,3),!0):[]},Cn.fill=function(e,t,n,r){var a=null==e?0:e.length;return a?(n&&"number"!=typeof n&&ui(e,t,n)&&(n=0,r=a),function(e,t,n,r){var a=e.length;for((n=as(n))<0&&(n=-n>a?0:a+n),(r=void 0===r||r>a?a:as(r))<0&&(r+=a),r=n>r?0:is(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},Cn.filter=function(e,t){return(Po(e)?st:ir)(e,Xa(t,3))},Cn.flatMap=function(e,t){return or(ho(e,t),1)},Cn.flatMapDeep=function(e,t){return or(ho(e,t),1/0)},Cn.flatMapDepth=function(e,t,n){return n=void 0===n?1:as(n),or(ho(e,t),n)},Cn.flatten=Pi,Cn.flattenDeep=function(e){return(null==e?0:e.length)?or(e,1/0):[]},Cn.flattenDepth=function(e,t){return(null==e?0:e.length)?or(e,t=void 0===t?1:as(t)):[]},Cn.flip=function(e){return qa(e,512)},Cn.flow=Gs,Cn.flowRight=Us,Cn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var a=e[t];r[a[0]]=a[1]}return r},Cn.functions=function(e){return null==e?[]:fr(e,ws(e))},Cn.functionsIn=function(e){return null==e?[]:fr(e,As(e))},Cn.groupBy=co,Cn.initial=function(e){return(null==e?0:e.length)?Ur(e,0,-1):[]},Cn.intersection=Li,Cn.intersectionBy=Ri,Cn.intersectionWith=Yi,Cn.invert=ys,Cn.invertBy=_s,Cn.invokeMap=lo,Cn.iteratee=Vs,Cn.keyBy=fo,Cn.keys=ws,Cn.keysIn=As,Cn.map=ho,Cn.mapKeys=function(e,t){var n={};return t=Xa(t,3),cr(e,(function(e,r,a){Vn(n,t(e,r,a),e)})),n},Cn.mapValues=function(e,t){var n={};return t=Xa(t,3),cr(e,(function(e,r,a){Vn(n,r,t(e,r,a))})),n},Cn.matches=function(e){return Cr(Xn(e,1))},Cn.matchesProperty=function(e,t){return Dr(e,Xn(t,1))},Cn.memoize=ko,Cn.merge=xs,Cn.mergeWith=ks,Cn.method=Js,Cn.methodOf=Ks,Cn.mixin=Xs,Cn.negate=Eo,Cn.nthArg=function(e){return e=as(e),Wr((function(t){return Nr(t,e)}))},Cn.omit=Es,Cn.omitBy=function(e,t){return Ms(e,Eo(Xa(t)))},Cn.once=function(e){return yo(2,e)},Cn.orderBy=function(e,t,n,r){return null==e?[]:(Po(t)||(t=null==t?[]:[t]),Po(n=r?void 0:n)||(n=null==n?[]:[n]),jr(e,t,n))},Cn.over=Qs,Cn.overArgs=So,Cn.overEvery=eu,Cn.overSome=tu,Cn.partial=Mo,Cn.partialRight=To,Cn.partition=po,Cn.pick=Ss,Cn.pickBy=Ms,Cn.property=nu,Cn.propertyOf=function(e){return function(t){return null==e?void 0:dr(e,t)}},Cn.pull=qi,Cn.pullAll=Ii,Cn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?zr(e,t,Xa(n,2)):e},Cn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?zr(e,t,void 0,n):e},Cn.pullAt=Hi,Cn.range=ru,Cn.rangeRight=au,Cn.rearg=Co,Cn.reject=function(e,t){return(Po(e)?st:ir)(e,Eo(Xa(t,3)))},Cn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,a=[],i=e.length;for(t=Xa(t,3);++r<i;){var o=e[r];t(o,r,e)&&(n.push(o),a.push(r))}return Lr(e,a),n},Cn.rest=function(e,t){if("function"!=typeof e)throw new ve(n);return Wr(e,t=void 0===t?t:as(t))},Cn.reverse=Bi,Cn.sampleSize=function(e,t,n){return t=(n?ui(e,t,n):void 0===t)?1:as(t),(Po(e)?In:Ir)(e,t)},Cn.set=function(e,t,n){return null==e?e:Hr(e,t,n)},Cn.setWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:Hr(e,t,n,r)},Cn.shuffle=function(e){return(Po(e)?Hn:Gr)(e)},Cn.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&"number"!=typeof n&&ui(e,t,n)?(t=0,n=r):(t=null==t?0:as(t),n=void 0===n?r:as(n)),Ur(e,t,n)):[]},Cn.sortBy=mo,Cn.sortedUniq=function(e){return e&&e.length?Kr(e):[]},Cn.sortedUniqBy=function(e,t){return e&&e.length?Kr(e,Xa(t,2)):[]},Cn.split=function(e,t,n){return n&&"number"!=typeof n&&ui(e,t,n)&&(t=n=void 0),(n=void 0===n?4294967295:n>>>0)?(e=us(e))&&("string"==typeof t||null!=t&&!Jo(t))&&!(t=Zr(t))&&Rt(e)?la(Ft(e),0,n):e.split(t,n):[]},Cn.spread=function(e,t){if("function"!=typeof e)throw new ve(n);return t=null==t?0:sn(as(t),0),Wr((function(n){var r=n[t],a=la(n,0,t);return r&&ft(a,r),nt(e,this,a)}))},Cn.tail=function(e){var t=null==e?0:e.length;return t?Ur(e,1,t):[]},Cn.take=function(e,t,n){return e&&e.length?Ur(e,0,(t=n||void 0===t?1:as(t))<0?0:t):[]},Cn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Ur(e,(t=r-(t=n||void 0===t?1:as(t)))<0?0:t,r):[]},Cn.takeRightWhile=function(e,t){return e&&e.length?na(e,Xa(t,3),!1,!0):[]},Cn.takeWhile=function(e,t){return e&&e.length?na(e,Xa(t,3)):[]},Cn.tap=function(e,t){return t(e),e},Cn.throttle=function(e,t,r){var a=!0,i=!0;if("function"!=typeof e)throw new ve(n);return Fo(r)&&(a="leading"in r?!!r.leading:a,i="trailing"in r?!!r.trailing:i),wo(e,t,{leading:a,maxWait:t,trailing:i})},Cn.thru=no,Cn.toArray=ns,Cn.toPairs=Ts,Cn.toPairsIn=Cs,Cn.toPath=function(e){return Po(e)?lt(e,Si):Zo(e)?[e]:ya(Ei(us(e)))},Cn.toPlainObject=ss,Cn.transform=function(e,t,n){var r=Po(e),a=r||Yo(e)||Qo(e);if(t=Xa(t,4),null==n){var i=e&&e.constructor;n=a?r?new i:[]:Fo(e)&&Io(i)?Dn(Ge(e)):{}}return(a?at:cr)(e,(function(e,r,a){return t(n,e,r,a)})),n},Cn.unary=function(e){return vo(e,1)},Cn.union=Fi,Cn.unionBy=Gi,Cn.unionWith=Ui,Cn.uniq=function(e){return e&&e.length?Qr(e):[]},Cn.uniqBy=function(e,t){return e&&e.length?Qr(e,Xa(t,2)):[]},Cn.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Qr(e,void 0,t):[]},Cn.unset=function(e,t){return null==e||ea(e,t)},Cn.unzip=$i,Cn.unzipWith=Vi,Cn.update=function(e,t,n){return null==e?e:ta(e,t,sa(n))},Cn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:ta(e,t,sa(n),r)},Cn.values=Ds,Cn.valuesIn=function(e){return null==e?[]:Ct(e,As(e))},Cn.without=Ji,Cn.words=Is,Cn.wrap=function(e,t){return Mo(sa(t),e)},Cn.xor=Ki,Cn.xorBy=Xi,Cn.xorWith=Zi,Cn.zip=Qi,Cn.zipObject=function(e,t){return ia(e||[],t||[],Fn)},Cn.zipObjectDeep=function(e,t){return ia(e||[],t||[],Hr)},Cn.zipWith=eo,Cn.entries=Ts,Cn.entriesIn=Cs,Cn.extend=ls,Cn.extendWith=fs,Xs(Cn,Cn),Cn.add=su,Cn.attempt=Hs,Cn.camelCase=Os,Cn.capitalize=Ns,Cn.ceil=uu,Cn.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=os(n))==n?n:0),void 0!==t&&(t=(t=os(t))==t?t:0),Kn(os(e),t,n)},Cn.clone=function(e){return Xn(e,4)},Cn.cloneDeep=function(e){return Xn(e,5)},Cn.cloneDeepWith=function(e,t){return Xn(e,5,t="function"==typeof t?t:void 0)},Cn.cloneWith=function(e,t){return Xn(e,4,t="function"==typeof t?t:void 0)},Cn.conformsTo=function(e,t){return null==t||Zn(e,t,ws(t))},Cn.deburr=js,Cn.defaultTo=function(e,t){return null==e||e!=e?t:e},Cn.divide=cu,Cn.endsWith=function(e,t,n){e=us(e),t=Zr(t);var r=e.length,a=n=void 0===n?r:Kn(as(n),0,r);return(n-=t.length)>=0&&e.slice(n,a)==t},Cn.eq=Do,Cn.escape=function(e){return(e=us(e))&&L.test(e)?e.replace(P,zt):e},Cn.escapeRegExp=function(e){return(e=us(e))&&F.test(e)?e.replace(B,"\\$&"):e},Cn.every=function(e,t,n){var r=Po(e)?ot:rr;return n&&ui(e,t,n)&&(t=void 0),r(e,Xa(t,3))},Cn.find=io,Cn.findIndex=Ni,Cn.findKey=function(e,t){return gt(e,Xa(t,3),cr)},Cn.findLast=oo,Cn.findLastIndex=ji,Cn.findLastKey=function(e,t){return gt(e,Xa(t,3),lr)},Cn.floor=lu,Cn.forEach=so,Cn.forEachRight=uo,Cn.forIn=function(e,t){return null==e?e:sr(e,Xa(t,3),As)},Cn.forInRight=function(e,t){return null==e?e:ur(e,Xa(t,3),As)},Cn.forOwn=function(e,t){return e&&cr(e,Xa(t,3))},Cn.forOwnRight=function(e,t){return e&&lr(e,Xa(t,3))},Cn.get=gs,Cn.gt=Oo,Cn.gte=No,Cn.has=function(e,t){return null!=e&&ai(e,t,gr)},Cn.hasIn=vs,Cn.head=zi,Cn.identity=$s,Cn.includes=function(e,t,n,r){e=Lo(e)?e:Ds(e),n=n&&!r?as(n):0;var a=e.length;return n<0&&(n=sn(a+n,0)),Xo(e)?n<=a&&e.indexOf(t,n)>-1:!!a&&yt(e,t,n)>-1},Cn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=null==n?0:as(n);return a<0&&(a=sn(r+a,0)),yt(e,t,a)},Cn.inRange=function(e,t,n){return t=rs(t),void 0===n?(n=t,t=0):n=rs(n),function(e,t,n){return e>=un(t,n)&&e<sn(t,n)}(e=os(e),t,n)},Cn.invoke=bs,Cn.isArguments=jo,Cn.isArray=Po,Cn.isArrayBuffer=zo,Cn.isArrayLike=Lo,Cn.isArrayLikeObject=Ro,Cn.isBoolean=function(e){return!0===e||!1===e||Go(e)&&pr(e)==s},Cn.isBuffer=Yo,Cn.isDate=Wo,Cn.isElement=function(e){return Go(e)&&1===e.nodeType&&!Vo(e)},Cn.isEmpty=function(e){if(null==e)return!0;if(Lo(e)&&(Po(e)||"string"==typeof e||"function"==typeof e.splice||Yo(e)||Qo(e)||jo(e)))return!e.length;var t=ri(e);if(t==d||t==g)return!e.size;if(di(e))return!Er(e).length;for(var n in e)if(xe.call(e,n))return!1;return!0},Cn.isEqual=function(e,t){return wr(e,t)},Cn.isEqualWith=function(e,t,n){var r=(n="function"==typeof n?n:void 0)?n(e,t):void 0;return void 0===r?wr(e,t,void 0,n):!!r},Cn.isError=qo,Cn.isFinite=function(e){return"number"==typeof e&&rn(e)},Cn.isFunction=Io,Cn.isInteger=Ho,Cn.isLength=Bo,Cn.isMap=Uo,Cn.isMatch=function(e,t){return e===t||Ar(e,t,Qa(t))},Cn.isMatchWith=function(e,t,n){return n="function"==typeof n?n:void 0,Ar(e,t,Qa(t),n)},Cn.isNaN=function(e){return $o(e)&&e!=+e},Cn.isNative=function(e){if(fi(e))throw new fe("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return xr(e)},Cn.isNil=function(e){return null==e},Cn.isNull=function(e){return null===e},Cn.isNumber=$o,Cn.isObject=Fo,Cn.isObjectLike=Go,Cn.isPlainObject=Vo,Cn.isRegExp=Jo,Cn.isSafeInteger=function(e){return Ho(e)&&e>=-9007199254740991&&e<=9007199254740991},Cn.isSet=Ko,Cn.isString=Xo,Cn.isSymbol=Zo,Cn.isTypedArray=Qo,Cn.isUndefined=function(e){return void 0===e},Cn.isWeakMap=function(e){return Go(e)&&ri(e)==_},Cn.isWeakSet=function(e){return Go(e)&&"[object WeakSet]"==pr(e)},Cn.join=function(e,t){return null==e?"":an.call(e,t)},Cn.kebabCase=Ps,Cn.last=Wi,Cn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=r;return void 0!==n&&(a=(a=as(n))<0?sn(r+a,0):un(a,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,a):vt(e,bt,a,!0)},Cn.lowerCase=zs,Cn.lowerFirst=Ls,Cn.lt=es,Cn.lte=ts,Cn.max=function(e){return e&&e.length?ar(e,$s,mr):void 0},Cn.maxBy=function(e,t){return e&&e.length?ar(e,Xa(t,2),mr):void 0},Cn.mean=function(e){return wt(e,$s)},Cn.meanBy=function(e,t){return wt(e,Xa(t,2))},Cn.min=function(e){return e&&e.length?ar(e,$s,Mr):void 0},Cn.minBy=function(e,t){return e&&e.length?ar(e,Xa(t,2),Mr):void 0},Cn.stubArray=iu,Cn.stubFalse=ou,Cn.stubObject=function(){return{}},Cn.stubString=function(){return""},Cn.stubTrue=function(){return!0},Cn.multiply=du,Cn.nth=function(e,t){return e&&e.length?Nr(e,as(t)):void 0},Cn.noConflict=function(){return Fe._===this&&(Fe._=Te),this},Cn.noop=Zs,Cn.now=go,Cn.pad=function(e,t,n){e=us(e);var r=(t=as(t))?Bt(e):0;if(!t||r>=t)return e;var a=(t-r)/2;return ja(en(a),n)+e+ja(Qt(a),n)},Cn.padEnd=function(e,t,n){e=us(e);var r=(t=as(t))?Bt(e):0;return t&&r<t?e+ja(t-r,n):e},Cn.padStart=function(e,t,n){e=us(e);var r=(t=as(t))?Bt(e):0;return t&&r<t?ja(t-r,n)+e:e},Cn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),ln(us(e).replace(G,""),t||0)},Cn.random=function(e,t,n){if(n&&"boolean"!=typeof n&&ui(e,t,n)&&(t=n=void 0),void 0===n&&("boolean"==typeof t?(n=t,t=void 0):"boolean"==typeof e&&(n=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=rs(e),void 0===t?(t=e,e=0):t=rs(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var a=fn();return un(e+a*(t-e+qe("1e-"+((a+"").length-1))),t)}return Rr(e,t)},Cn.reduce=function(e,t,n){var r=Po(e)?dt:kt,a=arguments.length<3;return r(e,Xa(t,4),n,a,tr)},Cn.reduceRight=function(e,t,n){var r=Po(e)?ht:kt,a=arguments.length<3;return r(e,Xa(t,4),n,a,nr)},Cn.repeat=function(e,t,n){return t=(n?ui(e,t,n):void 0===t)?1:as(t),Yr(us(e),t)},Cn.replace=function(){var e=arguments,t=us(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Cn.result=function(e,t,n){var r=-1,a=(t=ua(t,e)).length;for(a||(a=1,e=void 0);++r<a;){var i=null==e?void 0:e[Si(t[r])];void 0===i&&(r=a,i=n),e=Io(i)?i.call(e):i}return e},Cn.round=hu,Cn.runInContext=e,Cn.sample=function(e){return(Po(e)?qn:qr)(e)},Cn.size=function(e){if(null==e)return 0;if(Lo(e))return Xo(e)?Bt(e):e.length;var t=ri(e);return t==d||t==g?e.size:Er(e).length},Cn.snakeCase=Rs,Cn.some=function(e,t,n){var r=Po(e)?pt:$r;return n&&ui(e,t,n)&&(t=void 0),r(e,Xa(t,3))},Cn.sortedIndex=function(e,t){return Vr(e,t)},Cn.sortedIndexBy=function(e,t,n){return Jr(e,t,Xa(n,2))},Cn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=Vr(e,t);if(r<n&&Do(e[r],t))return r}return-1},Cn.sortedLastIndex=function(e,t){return Vr(e,t,!0)},Cn.sortedLastIndexBy=function(e,t,n){return Jr(e,t,Xa(n,2),!0)},Cn.sortedLastIndexOf=function(e,t){if(null==e?0:e.length){var n=Vr(e,t,!0)-1;if(Do(e[n],t))return n}return-1},Cn.startCase=Ys,Cn.startsWith=function(e,t,n){return e=us(e),n=null==n?0:Kn(as(n),0,e.length),t=Zr(t),e.slice(n,n+t.length)==t},Cn.subtract=pu,Cn.sum=function(e){return e&&e.length?Et(e,$s):0},Cn.sumBy=function(e,t){return e&&e.length?Et(e,Xa(t,2)):0},Cn.template=function(e,t,n){var r=Cn.templateSettings;n&&ui(e,t,n)&&(t=void 0),e=us(e),t=fs({},t,r,Ia);var a,i,o=fs({},t.imports,r.imports,Ia),s=ws(o),u=Ct(o,s),c=0,l=t.interpolate||se,f="__p += '",d=me((t.escape||se).source+"|"+l.source+"|"+(l===W?Q:se).source+"|"+(t.evaluate||se).source+"|$","g"),h="//# sourceURL="+(xe.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Le+"]")+"\n";e.replace(d,(function(t,n,r,o,s,u){return r||(r=o),f+=e.slice(c,u).replace(ue,Lt),n&&(a=!0,f+="' +\n__e("+n+") +\n'"),s&&(i=!0,f+="';\n"+s+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=u+t.length,t})),f+="';\n";var p=xe.call(t,"variable")&&t.variable;if(p){if(X.test(p))throw new fe("Invalid `variable` option passed into `_.template`")}else f="with (obj) {\n"+f+"\n}\n";f=(i?f.replace(D,""):f).replace(O,"$1").replace(N,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=Hs((function(){return de(s,h+"return "+f).apply(void 0,u)}));if(m.source=f,qo(m))throw m;return m},Cn.times=function(e,t){if((e=as(e))<1||e>9007199254740991)return[];var n=4294967295,r=un(e,4294967295);e-=4294967295;for(var a=St(r,t=Xa(t));++n<e;)t(n);return a},Cn.toFinite=rs,Cn.toInteger=as,Cn.toLength=is,Cn.toLower=function(e){return us(e).toLowerCase()},Cn.toNumber=os,Cn.toSafeInteger=function(e){return e?Kn(as(e),-9007199254740991,9007199254740991):0===e?e:0},Cn.toString=us,Cn.toUpper=function(e){return us(e).toUpperCase()},Cn.trim=function(e,t,n){if((e=us(e))&&(n||void 0===t))return Mt(e);if(!e||!(t=Zr(t)))return e;var r=Ft(e),a=Ft(t);return la(r,Ot(r,a),Nt(r,a)+1).join("")},Cn.trimEnd=function(e,t,n){if((e=us(e))&&(n||void 0===t))return e.slice(0,Gt(e)+1);if(!e||!(t=Zr(t)))return e;var r=Ft(e);return la(r,0,Nt(r,Ft(t))+1).join("")},Cn.trimStart=function(e,t,n){if((e=us(e))&&(n||void 0===t))return e.replace(G,"");if(!e||!(t=Zr(t)))return e;var r=Ft(e);return la(r,Ot(r,Ft(t))).join("")},Cn.truncate=function(e,t){var n=30,r="...";if(Fo(t)){var a="separator"in t?t.separator:a;n="length"in t?as(t.length):n,r="omission"in t?Zr(t.omission):r}var i=(e=us(e)).length;if(Rt(e)){var o=Ft(e);i=o.length}if(n>=i)return e;var s=n-Bt(r);if(s<1)return r;var u=o?la(o,0,s).join(""):e.slice(0,s);if(void 0===a)return u+r;if(o&&(s+=u.length-s),Jo(a)){if(e.slice(s).search(a)){var c,l=u;for(a.global||(a=me(a.source,us(ee.exec(a))+"g")),a.lastIndex=0;c=a.exec(l);)var f=c.index;u=u.slice(0,void 0===f?s:f)}}else if(e.indexOf(Zr(a),s)!=s){var d=u.lastIndexOf(a);d>-1&&(u=u.slice(0,d))}return u+r},Cn.unescape=function(e){return(e=us(e))&&z.test(e)?e.replace(j,Ut):e},Cn.uniqueId=function(e){var t=++ke;return us(e)+t},Cn.upperCase=Ws,Cn.upperFirst=qs,Cn.each=so,Cn.eachRight=uo,Cn.first=zi,Xs(Cn,(fu={},cr(Cn,(function(e,t){xe.call(Cn.prototype,t)||(fu[t]=e)})),fu),{chain:!1}),Cn.VERSION="4.17.21",at(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Cn[e].placeholder=Cn})),at(["drop","take"],(function(e,t){jn.prototype[e]=function(n){n=void 0===n?1:sn(as(n),0);var r=this.__filtered__&&!t?new jn(this):this.clone();return r.__filtered__?r.__takeCount__=un(n,r.__takeCount__):r.__views__.push({size:un(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},jn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),at(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;jn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Xa(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),at(["head","last"],(function(e,t){var n="take"+(t?"Right":"");jn.prototype[e]=function(){return this[n](1).value()[0]}})),at(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");jn.prototype[e]=function(){return this.__filtered__?new jn(this):this[n](1)}})),jn.prototype.compact=function(){return this.filter($s)},jn.prototype.find=function(e){return this.filter(e).head()},jn.prototype.findLast=function(e){return this.reverse().find(e)},jn.prototype.invokeMap=Wr((function(e,t){return"function"==typeof e?new jn(this):this.map((function(n){return _r(n,e,t)}))})),jn.prototype.reject=function(e){return this.filter(Eo(Xa(e)))},jn.prototype.slice=function(e,t){e=as(e);var n=this;return n.__filtered__&&(e>0||t<0)?new jn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=as(t))<0?n.dropRight(-t):n.take(t-e)),n)},jn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},jn.prototype.toArray=function(){return this.take(4294967295)},cr(jn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),a=Cn[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);a&&(Cn.prototype[t]=function(){var t=this.__wrapped__,o=r?[1]:arguments,s=t instanceof jn,u=o[0],c=s||Po(t),l=function(e){var t=a.apply(Cn,ft([e],o));return r&&f?t[0]:t};c&&n&&"function"==typeof u&&1!=u.length&&(s=c=!1);var f=this.__chain__,d=!!this.__actions__.length,h=i&&!f,p=s&&!d;if(!i&&c){t=p?t:new jn(this);var m=e.apply(t,o);return m.__actions__.push({func:no,args:[l],thisArg:void 0}),new Nn(m,f)}return h&&p?e.apply(this,o):(m=this.thru(l),h?r?m.value()[0]:m.value():m)})})),at(["pop","push","shift","sort","splice","unshift"],(function(e){var t=ye[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);Cn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var a=this.value();return t.apply(Po(a)?a:[],e)}return this[n]((function(n){return t.apply(Po(n)?n:[],e)}))}})),cr(jn.prototype,(function(e,t){var n=Cn[t];if(n){var r=n.name+"";xe.call(bn,r)||(bn[r]=[]),bn[r].push({name:t,func:n})}})),bn[Ca(void 0,2).name]=[{name:"wrapper",func:void 0}],jn.prototype.clone=function(){var e=new jn(this.__wrapped__);return e.__actions__=ya(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=ya(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=ya(this.__views__),e},jn.prototype.reverse=function(){if(this.__filtered__){var e=new jn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},jn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Po(e),r=t<0,a=n?e.length:0,i=function(e,t,n){var r=-1,a=n.length;for(;++r<a;){var i=n[r],o=i.size;switch(i.type){case"drop":e+=o;break;case"dropRight":t-=o;break;case"take":t=un(t,e+o);break;case"takeRight":e=sn(e,t-o)}}return{start:e,end:t}}(0,a,this.__views__),o=i.start,s=i.end,u=s-o,c=r?s:o-1,l=this.__iteratees__,f=l.length,d=0,h=un(u,this.__takeCount__);if(!n||!r&&a==u&&h==u)return ra(e,this.__actions__);var p=[];e:for(;u--&&d<h;){for(var m=-1,g=e[c+=t];++m<f;){var v=l[m],y=v.iteratee,_=v.type,b=y(g);if(2==_)g=b;else if(!b){if(1==_)continue e;break e}}p[d++]=g}return p},Cn.prototype.at=ro,Cn.prototype.chain=function(){return to(this)},Cn.prototype.commit=function(){return new Nn(this.value(),this.__chain__)},Cn.prototype.next=function(){void 0===this.__values__&&(this.__values__=ns(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},Cn.prototype.plant=function(e){for(var t,n=this;n instanceof On;){var r=Ti(n);r.__index__=0,r.__values__=void 0,t?a.__wrapped__=r:t=r;var a=r;n=n.__wrapped__}return a.__wrapped__=e,t},Cn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof jn){var t=e;return this.__actions__.length&&(t=new jn(this)),(t=t.reverse()).__actions__.push({func:no,args:[Bi],thisArg:void 0}),new Nn(t,this.__chain__)}return this.thru(Bi)},Cn.prototype.toJSON=Cn.prototype.valueOf=Cn.prototype.value=function(){return ra(this.__wrapped__,this.__actions__)},Cn.prototype.first=Cn.prototype.head,xt&&(Cn.prototype[xt]=function(){return this}),Cn}();Ue?((Ue.exports=$t)._=$t,Ge._=$t):Fe._=$t}).call(this)}));function Su(e){if(Eu.isArray(e))return e;if("string"==typeof e)return e.split("");throw Error("Parameter must be a string or array.")}var Mu=function(e,t,n){if(e=Su(e),t=Su(t),0===e.length)return t.length;if(0===t.length)return e.length;var r,a,i,o,s=n||{d:1,i:1,s:1},u=[],c=[],l=t.length+1;for(r=0;r<l;r++)u[r]=r;for(r=0;r<e.length;r++){for(c[0]=r+1,a=0;a<t.length;a++)i=e[r]===t[a]?0:s.s,c[a+1]=Math.min(c[a]+s.d,u[a+1]+s.i,u[a]+i);for(a=0;a<l;a++)u[a]=c[a]}return((o=Math.max(e.length,t.length))-c[t.length])/o};function Tu(e,t){if(e.length>=6){var n=e.reduce((function(e,t){return e[t]=e[t]?e[t]+1:1,e}),{}),r=oi(n).reduce((function(e,t){return e[1]<n[t]?[t,n[t]]:e}),[0,0]),a=Pa(r,2),i=a[0];a[1]>=2&&i.length<=4&&(e=t.split(i));var o=[e[0],e.slice(-1)].reduce((function(e,t){return e.length>t.length?e:t}),"");return o.length>10?o:t}return null}function Cu(e,t){var n=Mr.parse(t).host.replace(Es,""),r=e[0].toLowerCase().replace(" ","");if(Mu(r,n)>.4&&r.length>5)return e.slice(2).join("");var a=e.slice(-1)[0].toLowerCase().replace(" ","");return Mu(a,n)>.4&&a.length>=5?e.slice(0,-2).join(""):null}var Du={author:Ss,lead_image_url:Ts,dek:function(e,t){var n=t.$,r=t.excerpt;if(e.length>1e3||e.length<5)return null;if(r&&Ra(r,10)===Ra(e,10))return null;var a=No(e,n);return ds.test(a)?null:la(a.trim())},date_published:Au,content:xu,title:ku};function Ou(e,t){return t.stripUnlikelyCandidates&&(e=function(e){return e("*").not("a").each((function(t,n){var r=e(n),a=r.attr("class"),i=r.attr("id");if(i||a){var o="".concat(a||""," ").concat(i||"");Ai.test(o)||bi.test(o)&&r.remove()}})),e}(e)),function(e){var t,n=0;return e("[score]").each((function(r,a){if(!Ri.test(a.tagName)){var i=e(a),o=Xi(i);o>n&&(n=o,t=i)}})),t?t=uo(t,n,e):e("body")||e("*").first()}(e=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Yi.forEach((function(t){var n=Pa(t,2),r=n[0],a=n[1];e("".concat(r," ").concat(a)).each((function(t,n){no(e(n).parent(r),e,80)}))})),so(e,t),so(e,t),e}(e=ki(e),t.weightNodes))}var Nu={defaultOpts:{stripUnlikelyCandidates:!0,weightNodes:!0,cleanConditionally:!0},extract:function(e,t){var n=e.$,r=e.html,a=e.title,i=e.url;t=dt({},this.defaultOpts,t),n=n||Cr.load(r);var o=this.getContentNode(n,a,i,t);if(jo(o))return this.cleanAndReturnNode(o,n);var s=!0,u=!1,c=void 0;try{for(var l,f=Oa(oi(t).filter((function(e){return!0===t[e]})));!(s=(l=f.next()).done);s=!0){var d=l.value;if(t[d]=!1,n=Cr.load(r),jo(o=this.getContentNode(n,a,i,t)))break}}catch(e){u=!0,c=e}finally{try{s||null==f.return||f.return()}finally{if(u)throw c}}return this.cleanAndReturnNode(o,n)},getContentNode:function(e,t,n,r){return xu(Ou(e,r),{$:e,cleanConditionally:r.cleanConditionally,title:t,url:n})},cleanAndReturnNode:function(e,t){return e?la(t.html(e)):null}},ju=["tweetmeme-title","dc.title","rbtitle","headline","title"],Pu=["og:title"],zu=[".hentry .entry-title","h1#articleHeader","h1.articleHeader","h1.article",".instapaper_title","#meebo-title"],Lu=["article h1","#entry-title",".entry-title","#entryTitle","#entrytitle",".entryTitle",".entrytitle","#articleTitle",".articleTitle","post post-title","h1.title","h2.article","h1","html head title","title"],Ru={extract:function(e){var t,n=e.$,r=e.url,a=e.metaCache;return(t=Co(n,ju,a))||(t=Oo(n,zu))||(t=Co(n,Pu,a))||(t=Oo(n,Lu))?ku(t,{url:r,$:n}):""}},Yu=["byl","clmst","dc.author","dcsext.author","dc.creator","rbauthors","authors"],Wu=[".entry .entry-author",".author.vcard .fn",".author .vcard .fn",".byline.vcard .fn",".byline .vcard .fn",".byline .by .author",".byline .by",".byline .author",".post-author.vcard",".post-author .vcard","a[rel=author]","#by_author",".by_author","#entryAuthor",".entryAuthor",".byline a[href*=author]","#author .authorname",".author .authorname","#author",".author",".articleauthor",".ArticleAuthor",".byline"],qu=/^[\n\s]*By/i,Iu=[["#byline",qu],[".byline",qu]],Hu={extract:function(e){var t,n=e.$,r=e.metaCache;if((t=Co(n,Yu,r))&&t.length<300)return Ss(t);if((t=Oo(n,Wu,2))&&t.length<300)return Ss(t);var a=!0,i=!1,o=void 0;try{for(var s,u=Oa(Iu);!(a=(s=u.next()).done);a=!0){var c=Pa(s.value,2),l=c[0],f=c[1],d=n(l);if(1===d.length){var h=d.text();if(f.test(h))return Ss(h)}}}catch(e){i=!0,o=e}finally{try{a||null==u.return||u.return()}finally{if(i)throw o}}return null}},Bu=["article:published_time","displaydate","dc.date","dc.date.issued","rbpubdate","publish_date","pub_date","pagedate","pubdate","revision_date","doc_date","date_created","content_create_date","lastmodified","created","date"],Fu=[".hentry .dtstamp.published",".hentry .published",".hentry .dtstamp.updated",".hentry .updated",".single .published",".meta .published",".meta .postDate",".entry-date",".byline .date",".postmetadata .date",".article_datetime",".date-header",".story-date",".dateStamp","#story .datetime",".dateline",".pubdate"],Gu=[new RegExp("/(20\\d{2}/\\d{2}/\\d{2})/","i"),new RegExp("(20\\d{2}-[01]\\d-[0-3]\\d)","i"),new RegExp("/(20\\d{2}/".concat("(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)","/[0-3]\\d)/"),"i")],Uu={extract:function(e){var t,n=e.$,r=e.url,a=e.metaCache;return(t=Co(n,Bu,a,!1))||(t=Oo(n,Fu))||(t=function(e,t){var n=t.find((function(t){return t.test(e)}));return n?n.exec(e)[1]:null}(r,Gu))?Au(t):null}},$u=["og:image","twitter:image","image_src"],Vu=["link[rel=image_src]"],Ju=new RegExp(["upload","wp-content","large","photo","wp-image"].join("|"),"i"),Ku=new RegExp(["spacer","sprite","blank","throbber","gradient","tile","bg","background","icon","social","header","hdr","advert","spinner","loader","loading","default","rating","share","facebook","twitter","theme","promo","ads","wp-includes"].join("|"),"i"),Xu=/\.gif(\?.*)?$/i,Zu=/\.jpe?g(\?.*)?$/i;function Qu(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}var ec={extract:function(e){var t,n=e.$,r=e.content,a=e.metaCache,i=e.html;n.browser||0!==n("head").length||n("*").first().prepend(i);var o=Co(n,$u,a,!1);if(o&&(t=Ts(o)))return t;var s=n(r),u=n("img",s).toArray(),c={};u.forEach((function(e,t){var r=n(e),a=r.attr("src");if(a){var i=function(e){e=e.trim();var t=0;return Ju.test(e)&&(t+=20),Ku.test(e)&&(t-=20),Xu.test(e)&&(t-=10),Zu.test(e)&&(t+=10),t}(a);i+=function(e){return e.attr("alt")?5:0}(r),i+=function(e){var t=0;1===e.parents("figure").first().length&&(t+=25);var n,r=e.parent();return 1===r.length&&(n=r.parent()),[r,n].forEach((function(e){Wi.test(Qu(e))&&(t+=15)})),t}(r),i+=function(e){var t=0,n=e.next(),r=n.get(0);return r&&"figcaption"===r.tagName.toLowerCase()&&(t+=25),Wi.test(Qu(n))&&(t+=15),t}(r),i+=function(e){var t=0,n=Ki(e.attr("width")),r=Ki(e.attr("height")),a=e.attr("src");if(n&&n<=50&&(t-=50),r&&r<=50&&(t-=50),n&&r&&!a.includes("sprite")){var i=n*r;i<5e3?t-=100:t+=Math.round(i/1e3)}return t}(r),i+=function(e,t){return e.length/2-t}(u,t),c[a]=i}}));var l=oi(c).reduce((function(e,t){return c[t]>e[1]?[t,c[t]]:e}),[null,0]),f=Pa(l,2),d=f[0];if(f[1]>0&&(t=Ts(d)))return t;var h=!0,p=!1,m=void 0;try{for(var g,v=Oa(Vu);!(h=(g=v.next()).done);h=!0){var y=g.value,_=n(y).first(),b=_.attr("src");if(b&&(t=Ts(b)))return t;var w=_.attr("href");if(w&&(t=Ts(w)))return t;var A=_.attr("value");if(A&&(t=Ts(A)))return t}}catch(e){p=!0,m=e}finally{try{h||null==v.return||v.return()}finally{if(p)throw m}}return null}},tc=t((function(e,t){(function(){var t,n,r,a,i,o,s,u,c,l,f,d,h,p,m;r=Math.floor,l=Math.min,n=function(e,t){return e<t?-1:e>t?1:0},c=function(e,t,a,i,o){var s;if(null==a&&(a=0),null==o&&(o=n),a<0)throw new Error("lo must be non-negative");for(null==i&&(i=e.length);a<i;)o(t,e[s=r((a+i)/2)])<0?i=s:a=s+1;return[].splice.apply(e,[a,a-a].concat(t)),t},o=function(e,t,r){return null==r&&(r=n),e.push(t),p(e,0,e.length-1,r)},i=function(e,t){var r,a;return null==t&&(t=n),r=e.pop(),e.length?(a=e[0],e[0]=r,m(e,0,t)):a=r,a},u=function(e,t,r){var a;return null==r&&(r=n),a=e[0],e[0]=t,m(e,0,r),a},s=function(e,t,r){var a;return null==r&&(r=n),e.length&&r(e[0],t)<0&&(t=(a=[e[0],t])[0],e[0]=a[1],m(e,0,r)),t},a=function(e,t){var a,i,o,s,u,c;for(null==t&&(t=n),u=[],i=0,o=(s=function(){c=[];for(var t=0,n=r(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)c.push(t);return c}.apply(this).reverse()).length;i<o;i++)a=s[i],u.push(m(e,a,t));return u},h=function(e,t,r){var a;if(null==r&&(r=n),-1!==(a=e.indexOf(t)))return p(e,0,a,r),m(e,a,r)},f=function(e,t,r){var i,o,u,c,l;if(null==r&&(r=n),!(o=e.slice(0,t)).length)return o;for(a(o,r),u=0,c=(l=e.slice(t)).length;u<c;u++)i=l[u],s(o,i,r);return o.sort(r).reverse()},d=function(e,t,r){var o,s,u,f,d,h,p,m,g;if(null==r&&(r=n),10*t<=e.length){if(!(u=e.slice(0,t).sort(r)).length)return u;for(s=u[u.length-1],f=0,h=(p=e.slice(t)).length;f<h;f++)r(o=p[f],s)<0&&(c(u,o,0,null,r),u.pop(),s=u[u.length-1]);return u}for(a(e,r),g=[],d=0,m=l(t,e.length);0<=m?d<m:d>m;0<=m?++d:--d)g.push(i(e,r));return g},p=function(e,t,r,a){var i,o,s;for(null==a&&(a=n),i=e[r];r>t&&a(i,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=i},m=function(e,t,r){var a,i,o,s,u;for(null==r&&(r=n),i=e.length,u=t,o=e[t],a=2*t+1;a<i;)(s=a+1)<i&&!(r(e[a],e[s])<0)&&(a=s),e[t]=e[a],a=2*(t=a)+1;return e[t]=o,p(e,u,t,r)},t=function(){function e(e){this.cmp=null!=e?e:n,this.nodes=[]}return e.push=o,e.pop=i,e.replace=u,e.pushpop=s,e.heapify=a,e.updateItem=h,e.nlargest=f,e.nsmallest=d,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return i(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return u(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return s(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return a(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return h(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),e.exports=t}).call(this)})),nc=t((function(e,t){(function(){var e,n,r,a,i,o,s,u,c,l,f,d,h,p,m,g,v,y,_,b,w=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1};s=Math.floor,c=Math.max,l=Math.min,n=tc,g=function(e,t){return t?2*e/t:1},m=function(e,t){var n,r,a,i,o,s;for(o=[e.length,t.length],n=i=0,s=l(r=o[0],a=o[1]);0<=s?i<s:i>s;n=0<=s?++i:--i){if(e[n]<t[n])return-1;if(e[n]>t[n])return 1}return r-a},b=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},p=function(e){var t,n;for(t=0,n=e.length;t<n;t++)if(e[t])return!0;return!1},i=function(){function e(e,t,n,r){this.isjunk=e,null==t&&(t=""),null==n&&(n=""),this.autojunk=null==r||r,this.a=this.b=null,this.setSeqs(t,n)}return e.prototype.setSeqs=function(e,t){return this.setSeq1(e),this.setSeq2(t)},e.prototype.setSeq1=function(e){if(e!==this.a)return this.a=e,this.matchingBlocks=this.opcodes=null},e.prototype.setSeq2=function(e){if(e!==this.b)return this.b=e,this.matchingBlocks=this.opcodes=null,this.fullbcount=null,this._chainB()},e.prototype._chainB=function(){var e,t,n,r,a,i,o,u,c,l,f,d,h,p;for(e=this.b,this.b2j=t={},r=l=0,d=e.length;l<d;r=++l)n=e[r],(b(t,n)?t[n]:t[n]=[]).push(r);if(i={},a=this.isjunk)for(f=0,h=(p=Object.keys(t)).length;f<h;f++)a(n=p[f])&&(i[n]=!0,delete t[n]);if(c={},o=e.length,this.autojunk&&o>=200)for(n in u=s(o/100)+1,t)t[n].length>u&&(c[n]=!0,delete t[n]);return this.isbjunk=function(e){return b(i,e)},this.isbpopular=function(e){return b(c,e)}},e.prototype.findLongestMatch=function(e,t,n,r){var a,i,o,s,u,c,l,f,d,h,p,m,g,v,y,_,w,A,x,k,E;for(a=(_=[this.a,this.b,this.b2j,this.isbjunk])[0],i=_[1],o=_[2],f=_[3],s=(w=[e,n,0])[0],u=w[1],c=w[2],h={},l=g=e;e<=t?g<t:g>t;l=e<=t?++g:--g){for(m={},v=0,y=(A=b(o,a[l])?o[a[l]]:[]).length;v<y;v++)if(!((d=A[v])<n)){if(d>=r)break;(p=m[d]=(h[d-1]||0)+1)>c&&(s=(x=[l-p+1,d-p+1,p])[0],u=x[1],c=x[2])}h=m}for(;s>e&&u>n&&!f(i[u-1])&&a[s-1]===i[u-1];)s=(k=[s-1,u-1,c+1])[0],u=k[1],c=k[2];for(;s+c<t&&u+c<r&&!f(i[u+c])&&a[s+c]===i[u+c];)c++;for(;s>e&&u>n&&f(i[u-1])&&a[s-1]===i[u-1];)s=(E=[s-1,u-1,c+1])[0],u=E[1],c=E[2];for(;s+c<t&&u+c<r&&f(i[u+c])&&a[s+c]===i[u+c];)c++;return[s,u,c]},e.prototype.getMatchingBlocks=function(){var e,t,n,r,a,i,o,s,u,c,l,f,d,h,p,g,v,y,_,b,w,A,x,k,E,S;if(this.matchingBlocks)return this.matchingBlocks;for(y=[[0,h=(A=[this.a.length,this.b.length])[0],0,p=A[1]]],g=[];y.length;)t=(x=y.pop())[0],e=x[1],r=x[2],n=x[3],a=(k=_=this.findLongestMatch(t,e,r,n))[0],s=k[1],(l=k[2])&&(g.push(_),t<a&&r<s&&y.push([t,a,r,s]),a+l<e&&s+l<n&&y.push([a+l,e,s+l,n]));for(g.sort(m),i=u=f=0,v=[],b=0,w=g.length;b<w;b++)o=(E=g[b])[0],c=E[1],d=E[2],i+f===o&&u+f===c?f+=d:(f&&v.push([i,u,f]),i=(S=[o,c,d])[0],u=S[1],f=S[2]);return f&&v.push([i,u,f]),v.push([h,p,0]),this.matchingBlocks=v},e.prototype.getOpcodes=function(){var e,t,n,r,a,i,o,s,u,c,l,f;if(this.opcodes)return this.opcodes;for(r=a=0,this.opcodes=t=[],s=0,u=(c=this.getMatchingBlocks()).length;s<u;s++)e=(l=c[s])[0],n=l[1],i=l[2],o="",r<e&&a<n?o="replace":r<e?o="delete":a<n&&(o="insert"),o&&t.push([o,r,e,a,n]),r=(f=[e+i,n+i])[0],a=f[1],i&&t.push(["equal",e,r,n,a]);return t},e.prototype.getGroupedOpcodes=function(e){var t,n,r,a,i,o,s,u,f,d,h,p,m,g,v;for(null==e&&(e=3),(t=this.getOpcodes()).length||(t=[["equal",0,1,0,1]]),"equal"===t[0][0]&&(f=(p=t[0])[0],a=p[1],i=p[2],o=p[3],s=p[4],t[0]=[f,c(a,i-e),i,c(o,s-e),s]),"equal"===t[t.length-1][0]&&(f=(m=t[t.length-1])[0],a=m[1],i=m[2],o=m[3],s=m[4],t[t.length-1]=[f,a,l(i,a+e),o,l(s,o+e)]),u=e+e,r=[],n=[],d=0,h=t.length;d<h;d++)f=(g=t[d])[0],a=g[1],i=g[2],o=g[3],s=g[4],"equal"===f&&i-a>u&&(n.push([f,a,l(i,a+e),o,l(s,o+e)]),r.push(n),n=[],a=(v=[c(a,i-e),c(o,s-e)])[0],o=v[1]),n.push([f,a,i,o,s]);return!n.length||1===n.length&&"equal"===n[0][0]||r.push(n),r},e.prototype.ratio=function(){var e,t,n,r;for(e=0,t=0,n=(r=this.getMatchingBlocks()).length;t<n;t++)e+=r[t][2];return g(e,this.a.length+this.b.length)},e.prototype.quickRatio=function(){var e,t,n,r,a,i,o,s,u,c,l;if(!this.fullbcount)for(this.fullbcount=n={},i=0,s=(c=this.b).length;i<s;i++)n[t=c[i]]=(n[t]||0)+1;for(n=this.fullbcount,e={},r=0,o=0,u=(l=this.a).length;o<u;o++)t=l[o],a=b(e,t)?e[t]:n[t]||0,e[t]=a-1,a>0&&r++;return g(r,this.a.length+this.b.length)},e.prototype.realQuickRatio=function(){var e,t,n;return n=[this.a.length,this.b.length],g(l(e=n[0],t=n[1]),e+t)},e}(),u=function(e,t,r,a){var o,s,u,c,l,f,d,h,p;if(null==r&&(r=3),null==a&&(a=.6),!(r>0))throw new Error("n must be > 0: ("+r+")");if(!(0<=a&&a<=1))throw new Error("cutoff must be in [0.0, 1.0]: ("+a+")");for(o=[],(s=new i).setSeq2(e),c=0,f=t.length;c<f;c++)u=t[c],s.setSeq1(u),s.realQuickRatio()>=a&&s.quickRatio()>=a&&s.ratio()>=a&&o.push([s.ratio(),u]);for(p=[],l=0,d=(o=n.nlargest(o,r,m)).length;l<d;l++)(h=o[l])[0],u=h[1],p.push(u);return p},v=function(e,t){var n,r,a;for(n=(a=[0,e.length])[0],r=a[1];n<r&&e[n]===t;)n++;return n},e=function(){function e(e,t){this.linejunk=e,this.charjunk=t}return e.prototype.compare=function(e,t){var n,r,a,o,s,u,c,l,f,d,h,p,m,g;for(c=[],f=0,h=(m=new i(this.linejunk,e,t).getOpcodes()).length;f<h;f++){switch(l=(g=m[f])[0],r=g[1],n=g[2],o=g[3],a=g[4],l){case"replace":s=this._fancyReplace(e,r,n,t,o,a);break;case"delete":s=this._dump("-",e,r,n);break;case"insert":s=this._dump("+",t,o,a);break;case"equal":s=this._dump(" ",e,r,n);break;default:throw new Error("unknow tag ("+l+")")}for(d=0,p=s.length;d<p;d++)u=s[d],c.push(u)}return c},e.prototype._dump=function(e,t,n,r){var a,i,o;for(o=[],a=i=n;n<=r?i<r:i>r;a=n<=r?++i:--i)o.push(e+" "+t[a]);return o},e.prototype._plainReplace=function(e,t,n,r,a,i){var o,s,u,c,l,f,d,h,p,m;for(i-a<n-t?(o=this._dump("+",r,a,i),l=this._dump("-",e,t,n)):(o=this._dump("-",e,t,n),l=this._dump("+",r,a,i)),c=[],f=0,h=(m=[o,l]).length;f<h;f++)for(d=0,p=(s=m[f]).length;d<p;d++)u=s[d],c.push(u);return c},e.prototype._fancyReplace=function(e,t,n,r,a,o){var s,u,c,l,f,d,h,p,m,g,v,y,_,b,w,A,x,k,E,S,M,T,C,D,O,N,j,P,z,L,R,Y,W,q,I,H,B,F,G,U,$,V,J,K,X,Z,Q,ee;for(h=(H=[.74,.75])[0],b=H[1],_=new i(this.charjunk),w=(B=[null,null])[0],A=B[1],T=[],k=D=a;a<=o?D<o:D>o;k=a<=o?++D:--D)for(g=r[k],_.setSeq2(g),x=O=t;t<=n?O<n:O>n;x=t<=n?++O:--O)(u=e[x])!==g?(_.setSeq1(u),_.realQuickRatio()>h&&_.quickRatio()>h&&_.ratio()>h&&(h=(V=[_.ratio(),x,k])[0],p=V[1],m=V[2])):null===w&&(w=($=[x,k])[0],A=$[1]);if(h<b){if(null===w){for(N=0,P=(J=this._plainReplace(e,t,n,r,a,o)).length;N<P;N++)M=J[N],T.push(M);return T}p=(K=[w,A,1])[0],m=K[1],h=K[2]}else w=null;for(j=0,z=(X=this._fancyHelper(e,t,p,r,a,m)).length;j<z;j++)M=X[j],T.push(M);if(s=(Z=[e[p],r[m]])[0],d=Z[1],null===w){for(f=y="",_.setSeqs(s,d),W=0,L=(Q=_.getOpcodes()).length;W<L;W++)switch(C=(ee=Q[W])[0],c=ee[1],l=ee[2],v=ee[3],E=(F=[l-c,ee[4]-v])[0],S=F[1],C){case"replace":f+=Array(E+1).join("^"),y+=Array(S+1).join("^");break;case"delete":f+=Array(E+1).join("-");break;case"insert":y+=Array(S+1).join("+");break;case"equal":f+=Array(E+1).join(" "),y+=Array(S+1).join(" ");break;default:throw new Error("unknow tag ("+C+")")}for(q=0,R=(G=this._qformat(s,d,f,y)).length;q<R;q++)M=G[q],T.push(M)}else T.push(" "+s);for(I=0,Y=(U=this._fancyHelper(e,p+1,n,r,m+1,o)).length;I<Y;I++)M=U[I],T.push(M);return T},e.prototype._fancyHelper=function(e,t,n,r,a,i){var o;return o=[],t<n?o=a<i?this._fancyReplace(e,t,n,r,a,i):this._dump("-",e,t,n):a<i&&(o=this._dump("+",r,a,i)),o},e.prototype._qformat=function(e,t,n,r){var a,i;return i=[],a=l(v(e,"\t"),v(t,"\t")),a=l(a,v(n.slice(0,a)," ")),a=l(a,v(r.slice(0,a)," ")),n=n.slice(a).replace(/\s+$/,""),r=r.slice(a).replace(/\s+$/,""),i.push("- "+e),n.length&&i.push("? "+Array(a+1).join("\t")+n+"\n"),i.push("+ "+t),r.length&&i.push("? "+Array(a+1).join("\t")+r+"\n"),i},e}(),a=function(e,t){return null==t&&(t=/^\s*#?\s*$/),t.test(e)},r=function(e,t){return null==t&&(t=" \t"),w.call(t,e)>=0},_=function(e,t){var n,r;return n=e+1,1===(r=t-e)?""+n:(r||n--,n+","+r)},h=function(e,t,n){var r,a,o,s,u,c,l,f,d,h,p,m,g,v,y,b,w,A,x,k,E,S,M,T,C,D,O,N,j,P,z,L,R,Y,W,q,I;for(null==(u=(z=null!=n?n:{}).fromfile)&&(u=""),null==(x=z.tofile)&&(x=""),null==(c=z.fromfiledate)&&(c=""),null==(k=z.tofiledate)&&(k=""),null==z.n&&3,null==(y=z.lineterm)&&(y="\n"),v=[],b=!1,E=0,C=(L=new i(null,e,t).getGroupedOpcodes()).length;E<C;E++)for(l=L[E],b||(b=!0,s=c?"\t"+c:"",A=k?"\t"+k:"",v.push("--- "+u+s+y),v.push("+++ "+x+A+y)),m=(R=[l[0],l[l.length-1]])[1],r=_((o=R[0])[1],m[2]),a=_(o[3],m[4]),v.push("@@ -"+r+" +"+a+" @@"+y),S=0,D=l.length;S<D;S++)if(w=(Y=l[S])[0],f=Y[1],d=Y[2],h=Y[3],p=Y[4],"equal"!==w){if("replace"===w||"delete"===w)for(T=0,N=(q=e.slice(f,d)).length;T<N;T++)g=q[T],v.push("-"+g);if("replace"===w||"insert"===w)for(P=0,j=(I=t.slice(h,p)).length;P<j;P++)g=I[P],v.push("+"+g)}else for(M=0,O=(W=e.slice(f,d)).length;M<O;M++)g=W[M],v.push(" "+g);return v},y=function(e,t){var n,r;return n=e+1,(r=t-e)||n--,r<=1?""+n:n+","+(n+r-1)},o=function(e,t,n){var r,a,o,s,u,c,l,f,d,h,m,g,v,_,b,w,A,x,k,E,S,M,T,C,D,O,N,j,P,z,L,R,Y,W,q,I,H,B;for(null==(u=(R=null!=n?n:{}).fromfile)&&(u=""),null==(E=R.tofile)&&(E=""),null==(c=R.fromfiledate)&&(c=""),null==(S=R.tofiledate)&&(S=""),null==R.n&&3,null==(b=R.lineterm)&&(b="\n"),w={insert:"+ ",delete:"- ",replace:"! ",equal:" "},A=!1,_=[],M=0,O=(Y=new i(null,e,t).getGroupedOpcodes()).length;M<O;M++)if(l=Y[M],!A){if(A=!0,s=c?"\t"+c:"",k=S?"\t"+S:"",_.push("*** "+u+s+b),_.push("--- "+E+k+b),o=(W=[l[0],l[l.length-1]])[0],g=W[1],_.push("***************"+b),r=y(o[1],g[2]),_.push("*** "+r+" ****"+b),p(function(){var e,t,n,r;for(r=[],e=0,t=l.length;e<t;e++)n=l[e],x=n[0],n[1],n[2],n[3],n[4],r.push("replace"===x||"delete"===x);return r}()))for(T=0,N=l.length;T<N;T++)if(q=l[T],x=q[0],f=q[1],d=q[2],q[3],q[4],"insert"!==x)for(C=0,j=(I=e.slice(f,d)).length;C<j;C++)v=I[C],_.push(w[x]+v);if(a=y(o[3],g[4]),_.push("--- "+a+" ----"+b),p(function(){var e,t,n,r;for(r=[],e=0,t=l.length;e<t;e++)n=l[e],x=n[0],n[1],n[2],n[3],n[4],r.push("replace"===x||"insert"===x);return r}()))for(D=0,P=l.length;D<P;D++)if(H=l[D],x=H[0],H[1],H[2],h=H[3],m=H[4],"delete"!==x)for(L=0,z=(B=t.slice(h,m)).length;L<z;L++)v=B[L],_.push(w[x]+v)}return _},f=function(t,n,a,i){return null==i&&(i=r),new e(a,i).compare(t,n)},d=function(e,t){var n,r,a,i,o,s,u;if(!(i={1:"- ",2:"+ "}[t]))throw new Error("unknow delta choice (must be 1 or 2): "+t);for(a=[" ",i],r=[],o=0,s=e.length;o<s;o++)u=(n=e[o]).slice(0,2),w.call(a,u)>=0&&r.push(n.slice(2));return r},t._arrayCmp=m,t.SequenceMatcher=i,t.getCloseMatches=u,t._countLeading=v,t.Differ=e,t.IS_LINE_JUNK=a,t.IS_CHARACTER_JUNK=r,t._formatRangeUnified=_,t.unifiedDiff=h,t._formatRangeContext=y,t.contextDiff=o,t.ndiff=f,t.restore=d}).call(this)})),rc=(nc._arrayCmp,nc.SequenceMatcher,nc.getCloseMatches,nc._countLeading,nc.Differ,nc.IS_LINE_JUNK,nc.IS_CHARACTER_JUNK,nc._formatRangeUnified,nc.unifiedDiff,nc._formatRangeContext,nc.contextDiff,nc.ndiff,nc.restore,nc);var ac=/\d/,ic=new RegExp(["print","archive","comment","discuss","e-mail","email","share","reply","all","login","sign","single","adx","entry-unrelated"].join("|"),"i"),oc=new RegExp("(next|weiter|continue|>([^|]|$)|»([^|]|$))","i"),sc=new RegExp("(first|last|end)","i"),uc=new RegExp("(prev|earl|old|new|<|«)","i");function cc(e){var t=e.links,n=e.articleUrl,r=e.baseUrl,a=e.parsedUrl,i=e.$,o=e.previousUrls,s=void 0===o?[]:o;a=a||Mr.parse(n);var u=function(e){return new RegExp("^".concat(e),"i")}(r),c=function(e){return e("meta[name=generator][value^=WordPress]").length>0}(i),l=t.reduce((function(e,t){var o=Po(t);if(!o.href)return e;var l=Ta(o.href),f=i(t),d=f.text();if(!function(e,t,n,r,a,i){if(void 0!==i.find((function(t){return e===t})))return!1;if(!e||e===t||e===n)return!1;var o=r.hostname;if(Mr.parse(e).hostname!==o)return!1;var s=e.replace(n,"");return!!ac.test(s)&&(!ic.test(a)&&!(a.length>25))}(l,n,r,a,d,s))return e;e[l]?e[l].linkText="".concat(e[l].linkText,"|").concat(d):e[l]={score:0,linkText:d,href:l};var h=e[l],p=function(e,t){return"".concat(t||e.text()," ").concat(e.attr("class")||""," ").concat(e.attr("id")||"")}(f,d),m=function(e){var t=e.match(xa);if(!t)return null;var n=Aa(t[6],10);return n<100?n:null}(l),g=function(e,t){return t.test(e)?0:-25}(l,u);return g+=function(e){return oc.test(e)?50:0}(p),g+=function(e){return sc.test(e)&&oc.test(e)?-65:0}(p),g+=function(e){return uc.test(e)?-200:0}(p),g+=function(e){var t=e.parent(),n=!1,r=!1,a=0;return Ci(Go(0,4)).forEach((function(){if(0!==t.length){var e=function(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}(t);!n&&vi.test(e)&&(n=!0,a+=25),!r&&gi.test(e)&&ic.test(e)&&(mi.test(e)||(r=!0,a-=25)),t=t.parent()}})),a}(f),g+=function(e){return ic.test(e)?-25:0}(l),g+=function(e,t){return e&&!t?50:0}(m,c),g+=function(e,t){var n=0;if(Sa.test(e.trim())){var r=Aa(e,10);n=r<2?-30:Math.max(0,10-r),t&&t>=r&&(n-=50)}return n}(d,m),g+=function(e,t,n){return e>0?e+-250*(1-new rc.SequenceMatcher(null,t,n).ratio()-.2):0}(g,n,l),h.score=g,e}),{});return 0===oi(l).length?null:l}var lc={extract:function(e){var t=e.$,n=e.url,r=e.parsedUrl,a=e.previousUrls,i=void 0===a?[]:a;r=r||Mr.parse(n);var o=Ta(n),s=za(n,r),u=cc({links:t("a[href]").toArray(),articleUrl:o,baseUrl:s,parsedUrl:r,$:t,previousUrls:i});if(!u)return null;var c=oi(u).reduce((function(e,t){var n=u[t];return n.score>e.score?n:e}),{score:-100});return c.score>=50?c.href:null}},fc=["og:url"];function dc(e){return Mr.parse(e).hostname}function hc(e){return{url:e,domain:dc(e)}}var pc={extract:function(e){var t=e.$,n=e.url,r=e.metaCache,a=t("link[rel=canonical]");if(0!==a.length){var i=a.attr("href");if(i)return hc(i)}var o=Co(t,fc,r);return hc(o||n)}},mc={ellipse:"…",chars:[" ","-"],max:140,truncate:!0};var gc=function(e,t,n){if("string"!=typeof e||0===e.length)return"";if(0===t)return"";for(var r in n=n||{},mc)null!==n[r]&&void 0!==n[r]||(n[r]=mc[r]);return n.max=t||n.max,function(e,t,n,r,a){if(e.length<t)return e;for(var i=0,o="",s=Math.floor(t/2),u="middle"===a?s:t,c=0,l=e.length;c<l;c++)if(o=e.charAt(c),-1!==r.indexOf(o)&&"middle"!==a&&(i=c),!(c<u))return 0===i?a?e.substring(0,u-1)+n+("middle"===a?e.substring(e.length-s,e.length):""):"":e.substring(0,i)+n;return e}(e,n.max,n.ellipse,n.chars,n.truncate)},vc=["og:description","twitter:description"];function yc(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200;return e=e.replace(/[\s\n]+/g," ").trim(),gc(e,n,{ellipse:"…"})}var _c={extract:function(e){var t=e.$,n=e.content,r=e.metaCache,a=Co(t,vc,r);if(a)return yc(No(a,t));return yc(t(n.slice(0,1e3)).text(),t,200)}},bc={extract:function(e){var t=e.content;return la(Cr.load(t)("div").first().text()).split(/\s/).length}},wc={domain:"*",title:Ru.extract,date_published:Uu.extract,author:Hu.extract,content:Nu.extract.bind(Nu),lead_image_url:ec.extract,dek:function(){return null},next_page_url:lc.extract,url_and_domain:pc.extract,excerpt:_c.extract,word_count:bc.extract,direction:function(e){var t=e.title;return ls.getDirection(t)},extract:function(e){var t=e.html,n=e.$;if(t&&!n){var r=Cr.load(t);e.$=r}var a=this.title(e),i=this.date_published(e),o=this.author(e),s=this.content(dt({},e,{title:a})),u=this.lead_image_url(dt({},e,{content:s})),c=this.dek(dt({},e,{content:s})),l=this.next_page_url(e),f=this.excerpt(dt({},e,{content:s})),d=this.word_count(dt({},e,{content:s})),h=this.direction({title:a}),p=this.url_and_domain(e);return{title:a,author:o,date_published:i||null,dek:c,lead_image_url:u,content:s,next_page_url:l,url:p.url,domain:p.domain,excerpt:f,word_count:d,direction:h}}},Ac={'meta[name="al:ios:app_name"][value="Medium"]':rs,'meta[name="generator"][value="blogger"]':es};function xc(e,t,n){var r=(t=t||Mr.parse(e)).hostname,a=r.split(".").slice(-2).join(".");return Zo[r]||Zo[a]||cs[r]||cs[a]||function(e){var t=oi(Ac).find((function(t){return e(t).length>0}));return Ac[t]}(n)||wc}function kc(e){var t=e.$,n=e.type,r=e.extractionOpts,a=e.extractHtml,i=void 0!==a&&a;if(!r)return null;if("string"==typeof r)return r;var o,s=r.selectors,u=r.defaultCleaner,c=void 0===u||u,l=r.allowMultiple,f=function(e,t,n,r){return t.find((function(t){if(Ca(t)){if(n)return t.reduce((function(t,n){return t&&e(n).length>0}),!0);var a=Pa(t,2),i=a[0],o=a[1];return(r||!r&&1===e(i).length)&&e(i).attr(o)&&""!==e(i).attr(o).trim()}return(r||!r&&1===e(t).length)&&""!==e(t).text().trim()}))}(t,s,i,l);if(!f)return null;function d(n){return xo(n,t,e.url||""),function(e,t,n){var r=n.clean;r&&t(r.join(","),e).remove()}(n,t,r),function(e,t,n){var r=n.transforms;r&&oi(r).forEach((function(n){var a=t(n,e),i=r[n];"string"==typeof i?a.each((function(e,a){Ei(t(a),t,r[n])})):"function"==typeof i&&a.each((function(e,n){var r=i(t(n),t);"string"==typeof r&&Ei(t(n),t,r)}))}))}(n,t,r),n}if(i)return function(){var r;if(Ca(f)){r=t(f.join(","));var a=t("<div></div>");r.each((function(e,t){a.append(t)})),r=a}else r=t(f);return r.wrap(t("<div></div>")),r=d(r=r.parent()),Du[n]&&Du[n](r,dt({},e,{defaultCleaner:c})),l?r.children().toArray().map((function(e){return t.html(t(e))})):t.html(r)}();if(Ca(f)){var h=Pa(f,3),p=h[0],m=h[1],g=h[2];o=d(t(p)).map((function(e,n){var r=t(n).attr(m).trim();return g?g(r):r}))}else o=d(t(f)).map((function(e,n){return t(n).text().trim()}));return o=Ca(o.toArray())&&l?o.toArray():o[0],c&&Du[n]?Du[n](o,dt({},e,r)):o}function Ec(e,t){var n={};return oi(e).forEach((function(r){n[r]||(n[r]=kc(dt({},t,{type:r,extractionOpts:e[r]})))})),n}function Sc(e){var t=e.type,n=e.extractor,r=e.fallback,a=void 0===r||r,i=kc(dt({},e,{extractionOpts:n[t]}));return i||(a?wc[t](e):null)}var Mc=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:wc,t=arguments.length>1?arguments[1]:void 0,n=t,r=n.contentOnly,a=n.extractedTitle;if("*"===e.domain)return e.extract(t);if(t=dt({},t,{extractor:e}),r){var i=Sc(dt({},t,{type:"content",extractHtml:!0,title:a}));return{content:i}}var o=Sc(dt({},t,{type:"title"})),s=Sc(dt({},t,{type:"date_published"})),u=Sc(dt({},t,{type:"author"})),c=Sc(dt({},t,{type:"next_page_url"})),l=Sc(dt({},t,{type:"content",extractHtml:!0,title:o})),f=Sc(dt({},t,{type:"lead_image_url",content:l})),d=Sc(dt({},t,{type:"excerpt",content:l})),h=Sc(dt({},t,{type:"dek",content:l,excerpt:d})),p=Sc(dt({},t,{type:"word_count",content:l})),m=Sc(dt({},t,{type:"direction",title:o})),g=Sc(dt({},t,{type:"url_and_domain"}))||{url:null,domain:null},v=g.url,y=g.domain,_={};return e.extend&&(_=Ec(e.extend,t)),dt({title:o,content:l,author:u,date_published:s,lead_image_url:f,dek:h,next_page_url:c,url:v,domain:y,excerpt:d,word_count:p,direction:m},_)};function Tc(e){return Cc.apply(this,arguments)}function Cc(){return(Cc=Jn(s.mark((function e(t){var n,r,a,i,o,u,c,l,f,d,h,p;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.next_page_url,r=t.html,a=t.$,i=t.metaCache,o=t.result,u=t.Extractor,c=t.title,l=t.url,f=1,d=[Ta(l)];case 3:if(!(n&&f<26)){e.next=16;break}return f+=1,e.next=7,Bo.create(n);case 7:a=e.sent,r=a.html(),h=Mc(u,{url:n,html:r,$:a,metaCache:i,extractedTitle:c,previousUrls:d}),d.push(n),o=dt({},o,{content:"".concat(o.content,"<hr><h4>Page ").concat(f,"</h4>").concat(h.content)}),n=h.next_page_url,e.next=3;break;case 16:return p=wc.word_count({content:"<div>".concat(o.content,"</div>")}),e.abrupt("return",dt({},o,{total_pages:f,pages_rendered:f,word_count:p}));case 18:case"end":return e.stop()}}),e,this)})))).apply(this,arguments)}var Dc,Oc={parse:(Dc=Jn(s.mark((function e(t){var n,r,a,i,o,u,c,l,f,d,h,p,m,g,v,y,_,b,w,A,x,k,E,S=arguments;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=S.length>1&&void 0!==S[1]?S[1]:{},r=n.html,a=pt(n,["html"]),i=a.fetchAllPages,o=void 0===i||i,u=a.fallback,c=void 0===u||u,l=a.contentType,f=void 0===l?"html":l,d=a.headers,h=void 0===d?{}:d,p=a.extend,m=a.customExtractor,!t&&Cr.browser&&(t=window.location.href,r=r||Cr.html()),Uo(g=Mr.parse(t))){e.next=6;break}return e.abrupt("return",{error:!0,message:"The url parameter passed does not look like a valid URL. Please check your URL and try again."});case 6:return e.next=8,Bo.create(t,r,g,h);case 8:if(!(v=e.sent).failed){e.next=11;break}return e.abrupt("return",v);case 11:if(m&&Qo(m),y=xc(t,g,v),r||(r=v.html()),_=v("meta").map((function(e,t){return v(t).attr("name")})).toArray(),b={},p&&(b=Ec(p,{$:v,url:t,html:r})),w=Mc(y,{url:t,html:r,$:v,metaCache:_,parsedUrl:g,fallback:c,contentType:f}),x=(A=w).title,k=A.next_page_url,!o||!k){e.next=25;break}return e.next=22,Tc({Extractor:y,next_page_url:k,html:r,$:v,metaCache:_,result:w,title:x,url:t});case 22:w=e.sent,e.next=26;break;case 25:w=dt({},w,{total_pages:1,rendered_pages:1});case 26:return"markdown"===f?(E=new na,w.content=E.turndown(w.content)):"text"===f&&(w.content=v.text(v(w.content))),e.abrupt("return",dt({},w,b));case 28:case"end":return e.stop()}}),e,this)}))),function(e){return Dc.apply(this,arguments)}),browser:!!Cr.browser,fetchResource:function(e){return Bo.create(e)},addExtractor:function(e){return Qo(e)}};export default Oc; +!function(t,r){e.exports=t.document?r(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return r(e)}}("undefined"!=typeof window?window:this,(function(e,t){var r=[],n=Object.getPrototypeOf,a=r.slice,i=r.flat?function(e){return r.flat.call(e)}:function(e){return r.concat.apply([],e)},o=r.push,s=r.indexOf,c={},u=c.toString,l=c.hasOwnProperty,f=l.toString,d=f.call(Object),h={},p=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},m=function(e){return null!=e&&e===e.window},g=e.document,v={type:!0,src:!0,nonce:!0,noModule:!0};function y(e,t,r){var n,a,i=(r=r||g).createElement("script");if(i.text=e,t)for(n in v)(a=t[n]||t.getAttribute&&t.getAttribute(n))&&i.setAttribute(n,a);r.head.appendChild(i).parentNode.removeChild(i)}function _(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[u.call(e)]||"object":typeof e}var b="3.6.0",A=function(e,t){return new A.fn.init(e,t)};function w(e){var t=!!e&&"length"in e&&e.length,r=_(e);return!p(e)&&!m(e)&&("array"===r||0===t||"number"==typeof t&&0<t&&t-1 in e)}A.fn=A.prototype={jquery:b,constructor:A,length:0,toArray:function(){return a.call(this)},get:function(e){return null==e?a.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=A.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return A.each(this,e)},map:function(e){return this.pushStack(A.map(this,(function(t,r){return e.call(t,r,t)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(A.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(A.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,r=+e+(e<0?t:0);return this.pushStack(0<=r&&r<t?[this[r]]:[])},end:function(){return this.prevObject||this.constructor()},push:o,sort:r.sort,splice:r.splice},A.extend=A.fn.extend=function(){var e,t,r,n,a,i,o=arguments[0]||{},s=1,c=arguments.length,u=!1;for("boolean"==typeof o&&(u=o,o=arguments[s]||{},s++),"object"==typeof o||p(o)||(o={}),s===c&&(o=this,s--);s<c;s++)if(null!=(e=arguments[s]))for(t in e)n=e[t],"__proto__"!==t&&o!==n&&(u&&n&&(A.isPlainObject(n)||(a=Array.isArray(n)))?(r=o[t],i=a&&!Array.isArray(r)?[]:a||A.isPlainObject(r)?r:{},a=!1,o[t]=A.extend(u,i,n)):void 0!==n&&(o[t]=n));return o},A.extend({expando:"jQuery"+(b+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,r;return!(!e||"[object Object]"!==u.call(e)||(t=n(e))&&("function"!=typeof(r=l.call(t,"constructor")&&t.constructor)||f.call(r)!==d))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,r){y(e,{nonce:t&&t.nonce},r)},each:function(e,t){var r,n=0;if(w(e))for(r=e.length;n<r&&!1!==t.call(e[n],n,e[n]);n++);else for(n in e)if(!1===t.call(e[n],n,e[n]))break;return e},makeArray:function(e,t){var r=t||[];return null!=e&&(w(Object(e))?A.merge(r,"string"==typeof e?[e]:e):o.call(r,e)),r},inArray:function(e,t,r){return null==t?-1:s.call(t,e,r)},merge:function(e,t){for(var r=+t.length,n=0,a=e.length;n<r;n++)e[a++]=t[n];return e.length=a,e},grep:function(e,t,r){for(var n=[],a=0,i=e.length,o=!r;a<i;a++)!t(e[a],a)!==o&&n.push(e[a]);return n},map:function(e,t,r){var n,a,o=0,s=[];if(w(e))for(n=e.length;o<n;o++)null!=(a=t(e[o],o,r))&&s.push(a);else for(o in e)null!=(a=t(e[o],o,r))&&s.push(a);return i(s)},guid:1,support:h}),"function"==typeof Symbol&&(A.fn[Symbol.iterator]=r[Symbol.iterator]),A.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(e,t){c["[object "+t+"]"]=t.toLowerCase()}));var x=function(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b="sizzle"+1*new Date,A=e.document,w=0,x=0,k=ce(),E=ce(),M=ce(),S=ce(),T=function(e,t){return e===t&&(f=!0),0},C={}.hasOwnProperty,D=[],O=D.pop,N=D.push,P=D.push,j=D.slice,R=function(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},z="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",Y="(?:\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+L+"*("+Y+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+Y+"))|)"+L+"*\\]",I=":("+Y+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(L+"+","g"),q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),H=new RegExp("^"+L+"*,"+L+"*"),F=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),G=new RegExp(L+"|>"),U=new RegExp(I),$=new RegExp("^"+Y+"$"),V={ID:new RegExp("^#("+Y+")"),CLASS:new RegExp("^\\.("+Y+")"),TAG:new RegExp("^("+Y+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+I),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+z+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},K=/HTML$/i,J=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\([^\\r\\n\\f])","g"),re=function(e,t){var r="0x"+e.slice(1)-65536;return t||(r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320))},ne=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){d()},oe=be((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{P.apply(D=j.call(A.childNodes),A.childNodes),D[A.childNodes.length].nodeType}catch(t){P={apply:D.length?function(e,t){N.apply(e,j.call(t))}:function(e,t){for(var r=e.length,n=0;e[r++]=t[n++];);e.length=r-1}}}function se(e,t,n,a){var i,s,u,l,f,p,v,y=t&&t.ownerDocument,A=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==A&&9!==A&&11!==A)return n;if(!a&&(d(t),t=t||h,m)){if(11!==A&&(f=Q.exec(e)))if(i=f[1]){if(9===A){if(!(u=t.getElementById(i)))return n;if(u.id===i)return n.push(u),n}else if(y&&(u=y.getElementById(i))&&_(t,u)&&u.id===i)return n.push(u),n}else{if(f[2])return P.apply(n,t.getElementsByTagName(e)),n;if((i=f[3])&&r.getElementsByClassName&&t.getElementsByClassName)return P.apply(n,t.getElementsByClassName(i)),n}if(r.qsa&&!S[e+" "]&&(!g||!g.test(e))&&(1!==A||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===A&&(G.test(e)||F.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&r.scope||((l=t.getAttribute("id"))?l=l.replace(ne,ae):t.setAttribute("id",l=b)),s=(p=o(e)).length;s--;)p[s]=(l?"#"+l:":scope")+" "+_e(p[s]);v=p.join(",")}try{return P.apply(n,y.querySelectorAll(v)),n}catch(t){S(e,!0)}finally{l===b&&t.removeAttribute("id")}}}return c(e.replace(q,"$1"),t,n,a)}function ce(){var e=[];return function t(r,a){return e.push(r+" ")>n.cacheLength&&delete t[e.shift()],t[r+" "]=a}}function ue(e){return e[b]=!0,e}function le(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var r=e.split("|"),a=r.length;a--;)n.attrHandle[r[a]]=t}function de(e,t){var r=t&&e,n=r&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(n)return n;if(r)for(;r=r.nextSibling;)if(r===t)return-1;return e?1:-1}function he(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var r=t.nodeName.toLowerCase();return("input"===r||"button"===r)&&t.type===e}}function me(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&oe(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ge(e){return ue((function(t){return t=+t,ue((function(r,n){for(var a,i=e([],r.length,t),o=i.length;o--;)r[a=i[o]]&&(r[a]=!(n[a]=r[a]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in r=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,r=e&&(e.ownerDocument||e).documentElement;return!K.test(t||r&&r.nodeName||"HTML")},d=se.setDocument=function(e){var t,a,o=e?e.ownerDocument||e:A;return o!=h&&9===o.nodeType&&o.documentElement&&(p=(h=o).documentElement,m=!i(h),A!=h&&(a=h.defaultView)&&a.top!==a&&(a.addEventListener?a.addEventListener("unload",ie,!1):a.attachEvent&&a.attachEvent("onunload",ie)),r.scope=le((function(e){return p.appendChild(e).appendChild(h.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),r.attributes=le((function(e){return e.className="i",!e.getAttribute("className")})),r.getElementsByTagName=le((function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length})),r.getElementsByClassName=X.test(h.getElementsByClassName),r.getById=le((function(e){return p.appendChild(e).id=b,!h.getElementsByName||!h.getElementsByName(b).length})),r.getById?(n.filter.ID=function(e){var t=e.replace(te,re);return function(e){return e.getAttribute("id")===t}},n.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var r=t.getElementById(e);return r?[r]:[]}}):(n.filter.ID=function(e){var t=e.replace(te,re);return function(e){var r=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return r&&r.value===t}},n.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var r,n,a,i=t.getElementById(e);if(i){if((r=i.getAttributeNode("id"))&&r.value===e)return[i];for(a=t.getElementsByName(e),n=0;i=a[n++];)if((r=i.getAttributeNode("id"))&&r.value===e)return[i]}return[]}}),n.find.TAG=r.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):r.qsa?t.querySelectorAll(e):void 0}:function(e,t){var r,n=[],a=0,i=t.getElementsByTagName(e);if("*"===e){for(;r=i[a++];)1===r.nodeType&&n.push(r);return n}return i},n.find.CLASS=r.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(r.qsa=X.test(h.querySelectorAll))&&(le((function(e){var t;p.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+L+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+L+"*(?:value|"+z+")"),e.querySelectorAll("[id~="+b+"-]").length||g.push("~="),(t=h.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+L+"*name"+L+"*="+L+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),le((function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+L+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")}))),(r.matchesSelector=X.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&le((function(e){r.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",I)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=X.test(p.compareDocumentPosition),_=t||X.test(p.contains)?function(e,t){var r=9===e.nodeType?e.documentElement:e,n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(r.contains?r.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},T=t?function(e,t){if(e===t)return f=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!r.sortDetached&&t.compareDocumentPosition(e)===n?e==h||e.ownerDocument==A&&_(A,e)?-1:t==h||t.ownerDocument==A&&_(A,t)?1:l?R(l,e)-R(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return f=!0,0;var r,n=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e==h?-1:t==h?1:a?-1:i?1:l?R(l,e)-R(l,t):0;if(a===i)return de(e,t);for(r=e;r=r.parentNode;)o.unshift(r);for(r=t;r=r.parentNode;)s.unshift(r);for(;o[n]===s[n];)n++;return n?de(o[n],s[n]):o[n]==A?-1:s[n]==A?1:0}),h},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(d(e),r.matchesSelector&&m&&!S[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){S(t,!0)}return 0<se(t,h,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=h&&d(e),_(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=h&&d(e);var a=n.attrHandle[t.toLowerCase()],i=a&&C.call(n.attrHandle,t.toLowerCase())?a(e,t,!m):void 0;return void 0!==i?i:r.attributes||!m?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},se.escape=function(e){return(e+"").replace(ne,ae)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],a=0,i=0;if(f=!r.detectDuplicates,l=!r.sortStable&&e.slice(0),e.sort(T),f){for(;t=e[i++];)t===e[i]&&(a=n.push(i));for(;a--;)e.splice(n[a],1)}return l=null,e},a=se.getText=function(e){var t,r="",n=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)r+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[n++];)r+=a(t);return r},(n=se.selectors={cacheLength:50,createPseudo:ue,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,re),e[3]=(e[3]||e[4]||e[5]||"").replace(te,re),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,r=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":r&&U.test(r)&&(t=o(r,!0))&&(t=r.indexOf(")",r.length-t)-r.length)&&(e[0]=e[0].slice(0,t),e[2]=r.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,re).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=k[e+" "];return t||(t=new RegExp("(^|"+L+")"+e+"("+L+"|$)"))&&k(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,r){return function(n){var a=se.attr(n,e);return null==a?"!="===t:!t||(a+="","="===t?a===r:"!="===t?a!==r:"^="===t?r&&0===a.indexOf(r):"*="===t?r&&-1<a.indexOf(r):"$="===t?r&&a.slice(-r.length)===r:"~="===t?-1<(" "+a.replace(B," ")+" ").indexOf(r):"|="===t&&(a===r||a.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,r,n,a){var i="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===n&&0===a?function(e){return!!e.parentNode}:function(t,r,c){var u,l,f,d,h,p,m=i!==o?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!c&&!s,_=!1;if(g){if(i){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?g.firstChild:g.lastChild],o&&y){for(_=(h=(u=(l=(f=(d=g)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===w&&u[1])&&u[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(_=h=0)||p.pop();)if(1===d.nodeType&&++_&&d===t){l[e]=[w,h,_];break}}else if(y&&(_=h=(u=(l=(f=(d=t)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===w&&u[1]),!1===_)for(;(d=++h&&d&&d[m]||(_=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++_||(y&&((l=(f=d[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[w,_]),d!==t)););return(_-=a)===n||_%n==0&&0<=_/n}}},PSEUDO:function(e,t){var r,a=n.pseudos[e]||n.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[b]?a(t):1<a.length?(r=[e,e,"",t],n.setFilters.hasOwnProperty(e.toLowerCase())?ue((function(e,r){for(var n,i=a(e,t),o=i.length;o--;)e[n=R(e,i[o])]=!(r[n]=i[o])})):function(e){return a(e,0,r)}):a}},pseudos:{not:ue((function(e){var t=[],r=[],n=s(e.replace(q,"$1"));return n[b]?ue((function(e,t,r,a){for(var i,o=n(e,null,a,[]),s=e.length;s--;)(i=o[s])&&(e[s]=!(t[s]=i))})):function(e,a,i){return t[0]=e,n(t,null,i,r),t[0]=null,!r.pop()}})),has:ue((function(e){return function(t){return 0<se(e,t).length}})),contains:ue((function(e){return e=e.replace(te,re),function(t){return-1<(t.textContent||a(t)).indexOf(e)}})),lang:ue((function(e){return $.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,re).toLowerCase(),function(t){var r;do{if(r=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(r=r.toLowerCase())===e||0===r.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var r=e.location&&e.location.hash;return r&&r.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!n.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge((function(){return[0]})),last:ge((function(e,t){return[t-1]})),eq:ge((function(e,t,r){return[r<0?r+t:r]})),even:ge((function(e,t){for(var r=0;r<t;r+=2)e.push(r);return e})),odd:ge((function(e,t){for(var r=1;r<t;r+=2)e.push(r);return e})),lt:ge((function(e,t,r){for(var n=r<0?r+t:t<r?t:r;0<=--n;)e.push(n);return e})),gt:ge((function(e,t,r){for(var n=r<0?r+t:r;++n<t;)e.push(n);return e}))}}).pseudos.nth=n.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})n.pseudos[t]=he(t);for(t in{submit:!0,reset:!0})n.pseudos[t]=pe(t);function ye(){}function _e(e){for(var t=0,r=e.length,n="";t<r;t++)n+=e[t].value;return n}function be(e,t,r){var n=t.dir,a=t.next,i=a||n,o=r&&"parentNode"===i,s=x++;return t.first?function(t,r,a){for(;t=t[n];)if(1===t.nodeType||o)return e(t,r,a);return!1}:function(t,r,c){var u,l,f,d=[w,s];if(c){for(;t=t[n];)if((1===t.nodeType||o)&&e(t,r,c))return!0}else for(;t=t[n];)if(1===t.nodeType||o)if(l=(f=t[b]||(t[b]={}))[t.uniqueID]||(f[t.uniqueID]={}),a&&a===t.nodeName.toLowerCase())t=t[n]||t;else{if((u=l[i])&&u[0]===w&&u[1]===s)return d[2]=u[2];if((l[i]=d)[2]=e(t,r,c))return!0}return!1}}function Ae(e){return 1<e.length?function(t,r,n){for(var a=e.length;a--;)if(!e[a](t,r,n))return!1;return!0}:e[0]}function we(e,t,r,n,a){for(var i,o=[],s=0,c=e.length,u=null!=t;s<c;s++)(i=e[s])&&(r&&!r(i,n,a)||(o.push(i),u&&t.push(s)));return o}function xe(e,t,r,n,a,i){return n&&!n[b]&&(n=xe(n)),a&&!a[b]&&(a=xe(a,i)),ue((function(i,o,s,c){var u,l,f,d=[],h=[],p=o.length,m=i||function(e,t,r){for(var n=0,a=t.length;n<a;n++)se(e,t[n],r);return r}(t||"*",s.nodeType?[s]:s,[]),g=!e||!i&&t?m:we(m,d,e,s,c),v=r?a||(i?e:p||n)?[]:o:g;if(r&&r(g,v,s,c),n)for(u=we(v,h),n(u,[],s,c),l=u.length;l--;)(f=u[l])&&(v[h[l]]=!(g[h[l]]=f));if(i){if(a||e){if(a){for(u=[],l=v.length;l--;)(f=v[l])&&u.push(g[l]=f);a(null,v=[],u,c)}for(l=v.length;l--;)(f=v[l])&&-1<(u=a?R(i,f):d[l])&&(i[u]=!(o[u]=f))}}else v=we(v===o?v.splice(p,v.length):v),a?a(null,o,v,c):P.apply(o,v)}))}function ke(e){for(var t,r,a,i=e.length,o=n.relative[e[0].type],s=o||n.relative[" "],c=o?1:0,l=be((function(e){return e===t}),s,!0),f=be((function(e){return-1<R(t,e)}),s,!0),d=[function(e,r,n){var a=!o&&(n||r!==u)||((t=r).nodeType?l(e,r,n):f(e,r,n));return t=null,a}];c<i;c++)if(r=n.relative[e[c].type])d=[be(Ae(d),r)];else{if((r=n.filter[e[c].type].apply(null,e[c].matches))[b]){for(a=++c;a<i&&!n.relative[e[a].type];a++);return xe(1<c&&Ae(d),1<c&&_e(e.slice(0,c-1).concat({value:" "===e[c-2].type?"*":""})).replace(q,"$1"),r,c<a&&ke(e.slice(c,a)),a<i&&ke(e=e.slice(a)),a<i&&_e(e))}d.push(r)}return Ae(d)}return ye.prototype=n.filters=n.pseudos,n.setFilters=new ye,o=se.tokenize=function(e,t){var r,a,i,o,s,c,u,l=E[e+" "];if(l)return t?0:l.slice(0);for(s=e,c=[],u=n.preFilter;s;){for(o in r&&!(a=H.exec(s))||(a&&(s=s.slice(a[0].length)||s),c.push(i=[])),r=!1,(a=F.exec(s))&&(r=a.shift(),i.push({value:r,type:a[0].replace(q," ")}),s=s.slice(r.length)),n.filter)!(a=V[o].exec(s))||u[o]&&!(a=u[o](a))||(r=a.shift(),i.push({value:r,type:o,matches:a}),s=s.slice(r.length));if(!r)break}return t?s.length:s?se.error(e):E(e,c).slice(0)},s=se.compile=function(e,t){var r,a,i,s,c,l,f=[],p=[],g=M[e+" "];if(!g){for(t||(t=o(e)),r=t.length;r--;)(g=ke(t[r]))[b]?f.push(g):p.push(g);(g=M(e,(a=p,s=0<(i=f).length,c=0<a.length,l=function(e,t,r,o,l){var f,p,g,v=0,y="0",_=e&&[],b=[],A=u,x=e||c&&n.find.TAG("*",l),k=w+=null==A?1:Math.random()||.1,E=x.length;for(l&&(u=t==h||t||l);y!==E&&null!=(f=x[y]);y++){if(c&&f){for(p=0,t||f.ownerDocument==h||(d(f),r=!m);g=a[p++];)if(g(f,t||h,r)){o.push(f);break}l&&(w=k)}s&&((f=!g&&f)&&v--,e&&_.push(f))}if(v+=y,s&&y!==v){for(p=0;g=i[p++];)g(_,b,t,r);if(e){if(0<v)for(;y--;)_[y]||b[y]||(b[y]=O.call(o));b=we(b)}P.apply(o,b),l&&!e&&0<b.length&&1<v+i.length&&se.uniqueSort(o)}return l&&(w=k,u=A),_},s?ue(l):l))).selector=e}return g},c=se.select=function(e,t,r,a){var i,c,u,l,f,d="function"==typeof e&&e,h=!a&&o(e=d.selector||e);if(r=r||[],1===h.length){if(2<(c=h[0]=h[0].slice(0)).length&&"ID"===(u=c[0]).type&&9===t.nodeType&&m&&n.relative[c[1].type]){if(!(t=(n.find.ID(u.matches[0].replace(te,re),t)||[])[0]))return r;d&&(t=t.parentNode),e=e.slice(c.shift().value.length)}for(i=V.needsContext.test(e)?0:c.length;i--&&(u=c[i],!n.relative[l=u.type]);)if((f=n.find[l])&&(a=f(u.matches[0].replace(te,re),ee.test(c[0].type)&&ve(t.parentNode)||t))){if(c.splice(i,1),!(e=a.length&&_e(c)))return P.apply(r,a),r;break}}return(d||s(e,h))(a,t,!m,r,!t||ee.test(e)&&ve(t.parentNode)||t),r},r.sortStable=b.split("").sort(T).join("")===b,r.detectDuplicates=!!f,d(),r.sortDetached=le((function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))})),le((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||fe("type|href|height|width",(function(e,t,r){if(!r)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),r.attributes&&le((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||fe("value",(function(e,t,r){if(!r&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),le((function(e){return null==e.getAttribute("disabled")}))||fe(z,(function(e,t,r){var n;if(!r)return!0===e[t]?t.toLowerCase():(n=e.getAttributeNode(t))&&n.specified?n.value:null})),se}(e);A.find=x,A.expr=x.selectors,A.expr[":"]=A.expr.pseudos,A.uniqueSort=A.unique=x.uniqueSort,A.text=x.getText,A.isXMLDoc=x.isXML,A.contains=x.contains,A.escapeSelector=x.escape;var k=function(e,t,r){for(var n=[],a=void 0!==r;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&A(e).is(r))break;n.push(e)}return n},E=function(e,t){for(var r=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&r.push(e);return r},M=A.expr.match.needsContext;function S(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var T=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function C(e,t,r){return p(t)?A.grep(e,(function(e,n){return!!t.call(e,n,e)!==r})):t.nodeType?A.grep(e,(function(e){return e===t!==r})):"string"!=typeof t?A.grep(e,(function(e){return-1<s.call(t,e)!==r})):A.filter(t,e,r)}A.filter=function(e,t,r){var n=t[0];return r&&(e=":not("+e+")"),1===t.length&&1===n.nodeType?A.find.matchesSelector(n,e)?[n]:[]:A.find.matches(e,A.grep(t,(function(e){return 1===e.nodeType})))},A.fn.extend({find:function(e){var t,r,n=this.length,a=this;if("string"!=typeof e)return this.pushStack(A(e).filter((function(){for(t=0;t<n;t++)if(A.contains(a[t],this))return!0})));for(r=this.pushStack([]),t=0;t<n;t++)A.find(e,a[t],r);return 1<n?A.uniqueSort(r):r},filter:function(e){return this.pushStack(C(this,e||[],!1))},not:function(e){return this.pushStack(C(this,e||[],!0))},is:function(e){return!!C(this,"string"==typeof e&&M.test(e)?A(e):e||[],!1).length}});var D,O=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(A.fn.init=function(e,t,r){var n,a;if(!e)return this;if(r=r||D,"string"==typeof e){if(!(n="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:O.exec(e))||!n[1]&&t)return!t||t.jquery?(t||r).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof A?t[0]:t,A.merge(this,A.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:g,!0)),T.test(n[1])&&A.isPlainObject(t))for(n in t)p(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(a=g.getElementById(n[2]))&&(this[0]=a,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):p(e)?void 0!==r.ready?r.ready(e):e(A):A.makeArray(e,this)}).prototype=A.fn,D=A(g);var N=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function j(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}A.fn.extend({has:function(e){var t=A(e,this),r=t.length;return this.filter((function(){for(var e=0;e<r;e++)if(A.contains(this,t[e]))return!0}))},closest:function(e,t){var r,n=0,a=this.length,i=[],o="string"!=typeof e&&A(e);if(!M.test(e))for(;n<a;n++)for(r=this[n];r&&r!==t;r=r.parentNode)if(r.nodeType<11&&(o?-1<o.index(r):1===r.nodeType&&A.find.matchesSelector(r,e))){i.push(r);break}return this.pushStack(1<i.length?A.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?s.call(A(e),this[0]):s.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(A.uniqueSort(A.merge(this.get(),A(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),A.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,r){return k(e,"parentNode",r)},next:function(e){return j(e,"nextSibling")},prev:function(e){return j(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,r){return k(e,"nextSibling",r)},prevUntil:function(e,t,r){return k(e,"previousSibling",r)},siblings:function(e){return E((e.parentNode||{}).firstChild,e)},children:function(e){return E(e.firstChild)},contents:function(e){return null!=e.contentDocument&&n(e.contentDocument)?e.contentDocument:(S(e,"template")&&(e=e.content||e),A.merge([],e.childNodes))}},(function(e,t){A.fn[e]=function(r,n){var a=A.map(this,t,r);return"Until"!==e.slice(-5)&&(n=r),n&&"string"==typeof n&&(a=A.filter(n,a)),1<this.length&&(P[e]||A.uniqueSort(a),N.test(e)&&a.reverse()),this.pushStack(a)}}));var R=/[^\x20\t\r\n\f]+/g;function z(e){return e}function L(e){throw e}function Y(e,t,r,n){var a;try{e&&p(a=e.promise)?a.call(e).done(t).fail(r):e&&p(a=e.then)?a.call(e,t,r):t.apply(void 0,[e].slice(n))}catch(e){r.apply(void 0,[e])}}A.Callbacks=function(e){var t,r;e="string"==typeof e?(t=e,r={},A.each(t.match(R)||[],(function(e,t){r[t]=!0})),r):A.extend({},e);var n,a,i,o,s=[],c=[],u=-1,l=function(){for(o=o||e.once,i=n=!0;c.length;u=-1)for(a=c.shift();++u<s.length;)!1===s[u].apply(a[0],a[1])&&e.stopOnFalse&&(u=s.length,a=!1);e.memory||(a=!1),n=!1,o&&(s=a?[]:"")},f={add:function(){return s&&(a&&!n&&(u=s.length-1,c.push(a)),function t(r){A.each(r,(function(r,n){p(n)?e.unique&&f.has(n)||s.push(n):n&&n.length&&"string"!==_(n)&&t(n)}))}(arguments),a&&!n&&l()),this},remove:function(){return A.each(arguments,(function(e,t){for(var r;-1<(r=A.inArray(t,s,r));)s.splice(r,1),r<=u&&u--})),this},has:function(e){return e?-1<A.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return o=c=[],s=a="",this},disabled:function(){return!s},lock:function(){return o=c=[],a||n||(s=a=""),this},locked:function(){return!!o},fireWith:function(e,t){return o||(t=[e,(t=t||[]).slice?t.slice():t],c.push(t),n||l()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},A.extend({Deferred:function(t){var r=[["notify","progress",A.Callbacks("memory"),A.Callbacks("memory"),2],["resolve","done",A.Callbacks("once memory"),A.Callbacks("once memory"),0,"resolved"],["reject","fail",A.Callbacks("once memory"),A.Callbacks("once memory"),1,"rejected"]],n="pending",a={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var e=arguments;return A.Deferred((function(t){A.each(r,(function(r,n){var a=p(e[n[4]])&&e[n[4]];i[n[1]]((function(){var e=a&&a.apply(this,arguments);e&&p(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[n[0]+"With"](this,a?[e]:arguments)}))})),e=null})).promise()},then:function(t,n,a){var i=0;function o(t,r,n,a){return function(){var s=this,c=arguments,u=function(){var e,u;if(!(t<i)){if((e=n.apply(s,c))===r.promise())throw new TypeError("Thenable self-resolution");u=e&&("object"==typeof e||"function"==typeof e)&&e.then,p(u)?a?u.call(e,o(i,r,z,a),o(i,r,L,a)):(i++,u.call(e,o(i,r,z,a),o(i,r,L,a),o(i,r,z,r.notifyWith))):(n!==z&&(s=void 0,c=[e]),(a||r.resolveWith)(s,c))}},l=a?u:function(){try{u()}catch(e){A.Deferred.exceptionHook&&A.Deferred.exceptionHook(e,l.stackTrace),i<=t+1&&(n!==L&&(s=void 0,c=[e]),r.rejectWith(s,c))}};t?l():(A.Deferred.getStackHook&&(l.stackTrace=A.Deferred.getStackHook()),e.setTimeout(l))}}return A.Deferred((function(e){r[0][3].add(o(0,e,p(a)?a:z,e.notifyWith)),r[1][3].add(o(0,e,p(t)?t:z)),r[2][3].add(o(0,e,p(n)?n:L))})).promise()},promise:function(e){return null!=e?A.extend(e,a):a}},i={};return A.each(r,(function(e,t){var o=t[2],s=t[5];a[t[1]]=o.add,s&&o.add((function(){n=s}),r[3-e][2].disable,r[3-e][3].disable,r[0][2].lock,r[0][3].lock),o.add(t[3].fire),i[t[0]]=function(){return i[t[0]+"With"](this===i?void 0:this,arguments),this},i[t[0]+"With"]=o.fireWith})),a.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,r=t,n=Array(r),i=a.call(arguments),o=A.Deferred(),s=function(e){return function(r){n[e]=this,i[e]=1<arguments.length?a.call(arguments):r,--t||o.resolveWith(n,i)}};if(t<=1&&(Y(e,o.done(s(r)).resolve,o.reject,!t),"pending"===o.state()||p(i[r]&&i[r].then)))return o.then();for(;r--;)Y(i[r],s(r),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;A.Deferred.exceptionHook=function(t,r){e.console&&e.console.warn&&t&&W.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,r)},A.readyException=function(t){e.setTimeout((function(){throw t}))};var I=A.Deferred();function B(){g.removeEventListener("DOMContentLoaded",B),e.removeEventListener("load",B),A.ready()}A.fn.ready=function(e){return I.then(e).catch((function(e){A.readyException(e)})),this},A.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--A.readyWait:A.isReady)||(A.isReady=!0)!==e&&0<--A.readyWait||I.resolveWith(g,[A])}}),A.ready.then=I.then,"complete"===g.readyState||"loading"!==g.readyState&&!g.documentElement.doScroll?e.setTimeout(A.ready):(g.addEventListener("DOMContentLoaded",B),e.addEventListener("load",B));var q=function(e,t,r,n,a,i,o){var s=0,c=e.length,u=null==r;if("object"===_(r))for(s in a=!0,r)q(e,t,s,r[s],!0,i,o);else if(void 0!==n&&(a=!0,p(n)||(o=!0),u&&(o?(t.call(e,n),t=null):(u=t,t=function(e,t,r){return u.call(A(e),r)})),t))for(;s<c;s++)t(e[s],r,o?n:n.call(e[s],s,t(e[s],r)));return a?e:u?t.call(e):c?t(e[0],r):i},H=/^-ms-/,F=/-([a-z])/g;function G(e,t){return t.toUpperCase()}function U(e){return e.replace(H,"ms-").replace(F,G)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function V(){this.expando=A.expando+V.uid++}V.uid=1,V.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,r){var n,a=this.cache(e);if("string"==typeof t)a[U(t)]=r;else for(n in t)a[U(n)]=t[n];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][U(t)]},access:function(e,t,r){return void 0===t||t&&"string"==typeof t&&void 0===r?this.get(e,t):(this.set(e,t,r),void 0!==r?r:t)},remove:function(e,t){var r,n=e[this.expando];if(void 0!==n){if(void 0!==t){r=(t=Array.isArray(t)?t.map(U):(t=U(t))in n?[t]:t.match(R)||[]).length;for(;r--;)delete n[t[r]]}(void 0===t||A.isEmptyObject(n))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!A.isEmptyObject(t)}};var K=new V,J=new V,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,X=/[A-Z]/g;function Q(e,t,r){var n,a;if(void 0===r&&1===e.nodeType)if(n="data-"+t.replace(X,"-$&").toLowerCase(),"string"==typeof(r=e.getAttribute(n))){try{r="true"===(a=r)||"false"!==a&&("null"===a?null:a===+a+""?+a:Z.test(a)?JSON.parse(a):a)}catch(e){}J.set(e,t,r)}else r=void 0;return r}A.extend({hasData:function(e){return J.hasData(e)||K.hasData(e)},data:function(e,t,r){return J.access(e,t,r)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,r){return K.access(e,t,r)},_removeData:function(e,t){K.remove(e,t)}}),A.fn.extend({data:function(e,t){var r,n,a,i=this[0],o=i&&i.attributes;if(void 0===e){if(this.length&&(a=J.get(i),1===i.nodeType&&!K.get(i,"hasDataAttrs"))){for(r=o.length;r--;)o[r]&&0===(n=o[r].name).indexOf("data-")&&(n=U(n.slice(5)),Q(i,n,a[n]));K.set(i,"hasDataAttrs",!0)}return a}return"object"==typeof e?this.each((function(){J.set(this,e)})):q(this,(function(t){var r;if(i&&void 0===t)return void 0!==(r=J.get(i,e))||void 0!==(r=Q(i,e))?r:void 0;this.each((function(){J.set(this,e,t)}))}),null,t,1<arguments.length,null,!0)},removeData:function(e){return this.each((function(){J.remove(this,e)}))}}),A.extend({queue:function(e,t,r){var n;if(e)return t=(t||"fx")+"queue",n=K.get(e,t),r&&(!n||Array.isArray(r)?n=K.access(e,t,A.makeArray(r)):n.push(r)),n||[]},dequeue:function(e,t){t=t||"fx";var r=A.queue(e,t),n=r.length,a=r.shift(),i=A._queueHooks(e,t);"inprogress"===a&&(a=r.shift(),n--),a&&("fx"===t&&r.unshift("inprogress"),delete i.stop,a.call(e,(function(){A.dequeue(e,t)}),i)),!n&&i&&i.empty.fire()},_queueHooks:function(e,t){var r=t+"queueHooks";return K.get(e,r)||K.access(e,r,{empty:A.Callbacks("once memory").add((function(){K.remove(e,[t+"queue",r])}))})}}),A.fn.extend({queue:function(e,t){var r=2;return"string"!=typeof e&&(t=e,e="fx",r--),arguments.length<r?A.queue(this[0],e):void 0===t?this:this.each((function(){var r=A.queue(this,e,t);A._queueHooks(this,e),"fx"===e&&"inprogress"!==r[0]&&A.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){A.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var r,n=1,a=A.Deferred(),i=this,o=this.length,s=function(){--n||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)(r=K.get(i[o],e+"queueHooks"))&&r.empty&&(n++,r.empty.add(s));return s(),a.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ne=g.documentElement,ae=function(e){return A.contains(e.ownerDocument,e)},ie={composed:!0};ne.getRootNode&&(ae=function(e){return A.contains(e.ownerDocument,e)||e.getRootNode(ie)===e.ownerDocument});var oe=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ae(e)&&"none"===A.css(e,"display")};function se(e,t,r,n){var a,i,o=20,s=n?function(){return n.cur()}:function(){return A.css(e,t,"")},c=s(),u=r&&r[3]||(A.cssNumber[t]?"":"px"),l=e.nodeType&&(A.cssNumber[t]||"px"!==u&&+c)&&te.exec(A.css(e,t));if(l&&l[3]!==u){for(c/=2,u=u||l[3],l=+c||1;o--;)A.style(e,t,l+u),(1-i)*(1-(i=s()/c||.5))<=0&&(o=0),l/=i;l*=2,A.style(e,t,l+u),r=r||[]}return r&&(l=+l||+c||0,a=r[1]?l+(r[1]+1)*r[2]:+r[2],n&&(n.unit=u,n.start=l,n.end=a)),a}var ce={};function ue(e,t){for(var r,n,a,i,o,s,c,u=[],l=0,f=e.length;l<f;l++)(n=e[l]).style&&(r=n.style.display,t?("none"===r&&(u[l]=K.get(n,"display")||null,u[l]||(n.style.display="")),""===n.style.display&&oe(n)&&(u[l]=(c=o=i=void 0,o=(a=n).ownerDocument,s=a.nodeName,(c=ce[s])||(i=o.body.appendChild(o.createElement(s)),c=A.css(i,"display"),i.parentNode.removeChild(i),"none"===c&&(c="block"),ce[s]=c)))):"none"!==r&&(u[l]="none",K.set(n,"display",r)));for(l=0;l<f;l++)null!=u[l]&&(e[l].style.display=u[l]);return e}A.fn.extend({show:function(){return ue(this,!0)},hide:function(){return ue(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){oe(this)?A(this).show():A(this).hide()}))}});var le,fe,de=/^(?:checkbox|radio)$/i,he=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=g.createDocumentFragment().appendChild(g.createElement("div")),(fe=g.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),le.appendChild(fe),h.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="<option></option>",h.option=!!le.lastChild;var me={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ge(e,t){var r;return r=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?A.merge([e],r):r}function ve(e,t){for(var r=0,n=e.length;r<n;r++)K.set(e[r],"globalEval",!t||K.get(t[r],"globalEval"))}me.tbody=me.tfoot=me.colgroup=me.caption=me.thead,me.th=me.td,h.option||(me.optgroup=me.option=[1,"<select multiple='multiple'>","</select>"]);var ye=/<|&#?\w+;/;function _e(e,t,r,n,a){for(var i,o,s,c,u,l,f=t.createDocumentFragment(),d=[],h=0,p=e.length;h<p;h++)if((i=e[h])||0===i)if("object"===_(i))A.merge(d,i.nodeType?[i]:i);else if(ye.test(i)){for(o=o||f.appendChild(t.createElement("div")),s=(he.exec(i)||["",""])[1].toLowerCase(),c=me[s]||me._default,o.innerHTML=c[1]+A.htmlPrefilter(i)+c[2],l=c[0];l--;)o=o.lastChild;A.merge(d,o.childNodes),(o=f.firstChild).textContent=""}else d.push(t.createTextNode(i));for(f.textContent="",h=0;i=d[h++];)if(n&&-1<A.inArray(i,n))a&&a.push(i);else if(u=ae(i),o=ge(f.appendChild(i),"script"),u&&ve(o),r)for(l=0;i=o[l++];)pe.test(i.type||"")&&r.push(i);return f}var be=/^([^.]*)(?:\.(.+)|)/;function Ae(){return!0}function we(){return!1}function xe(e,t){return e===function(){try{return g.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,r,n,a,i){var o,s;if("object"==typeof t){for(s in"string"!=typeof r&&(n=n||r,r=void 0),t)ke(e,s,r,n,t[s],i);return e}if(null==n&&null==a?(a=r,n=r=void 0):null==a&&("string"==typeof r?(a=n,n=void 0):(a=n,n=r,r=void 0)),!1===a)a=we;else if(!a)return e;return 1===i&&(o=a,(a=function(e){return A().off(e),o.apply(this,arguments)}).guid=o.guid||(o.guid=A.guid++)),e.each((function(){A.event.add(this,t,a,n,r)}))}function Ee(e,t,r){r?(K.set(e,t,!1),A.event.add(e,t,{namespace:!1,handler:function(e){var n,i,o=K.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(A.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=a.call(arguments),K.set(this,t,o),n=r(this,t),this[t](),o!==(i=K.get(this,t))||n?K.set(this,t,!1):i={},o!==i)return e.stopImmediatePropagation(),e.preventDefault(),i&&i.value}else o.length&&(K.set(this,t,{value:A.event.trigger(A.extend(o[0],A.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===K.get(e,t)&&A.event.add(e,t,Ae)}A.event={global:{},add:function(e,t,r,n,a){var i,o,s,c,u,l,f,d,h,p,m,g=K.get(e);if($(e))for(r.handler&&(r=(i=r).handler,a=i.selector),a&&A.find.matchesSelector(ne,a),r.guid||(r.guid=A.guid++),(c=g.events)||(c=g.events=Object.create(null)),(o=g.handle)||(o=g.handle=function(t){return void 0!==A&&A.event.triggered!==t.type?A.event.dispatch.apply(e,arguments):void 0}),u=(t=(t||"").match(R)||[""]).length;u--;)h=m=(s=be.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=A.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=A.event.special[h]||{},l=A.extend({type:h,origType:m,data:n,handler:r,guid:r.guid,selector:a,needsContext:a&&A.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=c[h])||((d=c[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,n,p,o)||e.addEventListener&&e.addEventListener(h,o)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=r.guid)),a?d.splice(d.delegateCount++,0,l):d.push(l),A.event.global[h]=!0)},remove:function(e,t,r,n,a){var i,o,s,c,u,l,f,d,h,p,m,g=K.hasData(e)&&K.get(e);if(g&&(c=g.events)){for(u=(t=(t||"").match(R)||[""]).length;u--;)if(h=m=(s=be.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=A.event.special[h]||{},d=c[h=(n?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)l=d[i],!a&&m!==l.origType||r&&r.guid!==l.guid||s&&!s.test(l.namespace)||n&&n!==l.selector&&("**"!==n||!l.selector)||(d.splice(i,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||A.removeEvent(e,h,g.handle),delete c[h])}else for(h in c)A.event.remove(e,h+t[u],r,n,!0);A.isEmptyObject(c)&&K.remove(e,"handle events")}},dispatch:function(e){var t,r,n,a,i,o,s=new Array(arguments.length),c=A.event.fix(e),u=(K.get(this,"events")||Object.create(null))[c.type]||[],l=A.event.special[c.type]||{};for(s[0]=c,t=1;t<arguments.length;t++)s[t]=arguments[t];if(c.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,c)){for(o=A.event.handlers.call(this,c,u),t=0;(a=o[t++])&&!c.isPropagationStopped();)for(c.currentTarget=a.elem,r=0;(i=a.handlers[r++])&&!c.isImmediatePropagationStopped();)c.rnamespace&&!1!==i.namespace&&!c.rnamespace.test(i.namespace)||(c.handleObj=i,c.data=i.data,void 0!==(n=((A.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,s))&&!1===(c.result=n)&&(c.preventDefault(),c.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,c),c.result}},handlers:function(e,t){var r,n,a,i,o,s=[],c=t.delegateCount,u=e.target;if(c&&u.nodeType&&!("click"===e.type&&1<=e.button))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(i=[],o={},r=0;r<c;r++)void 0===o[a=(n=t[r]).selector+" "]&&(o[a]=n.needsContext?-1<A(a,this).index(u):A.find(a,this,null,[u]).length),o[a]&&i.push(n);i.length&&s.push({elem:u,handlers:i})}return u=this,c<t.length&&s.push({elem:u,handlers:t.slice(c)}),s},addProp:function(e,t){Object.defineProperty(A.Event.prototype,e,{enumerable:!0,configurable:!0,get:p(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[A.expando]?e:new A.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return de.test(t.type)&&t.click&&S(t,"input")&&Ee(t,"click",Ae),!1},trigger:function(e){var t=this||e;return de.test(t.type)&&t.click&&S(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return de.test(t.type)&&t.click&&S(t,"input")&&K.get(t,"click")||S(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},A.removeEvent=function(e,t,r){e.removeEventListener&&e.removeEventListener(t,r)},A.Event=function(e,t){if(!(this instanceof A.Event))return new A.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ae:we,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&A.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[A.expando]=!0},A.Event.prototype={constructor:A.Event,isDefaultPrevented:we,isPropagationStopped:we,isImmediatePropagationStopped:we,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ae,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ae,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ae,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},A.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},A.event.addProp),A.each({focus:"focusin",blur:"focusout"},(function(e,t){A.event.special[e]={setup:function(){return Ee(this,e,xe),!1},trigger:function(){return Ee(this,e),!0},_default:function(){return!0},delegateType:t}})),A.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){A.event.special[e]={delegateType:t,bindType:t,handle:function(e){var r,n=e.relatedTarget,a=e.handleObj;return n&&(n===this||A.contains(this,n))||(e.type=a.origType,r=a.handler.apply(this,arguments),e.type=t),r}}})),A.fn.extend({on:function(e,t,r,n){return ke(this,e,t,r,n)},one:function(e,t,r,n){return ke(this,e,t,r,n,1)},off:function(e,t,r){var n,a;if(e&&e.preventDefault&&e.handleObj)return n=e.handleObj,A(e.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler),this;if("object"==typeof e){for(a in e)this.off(a,t,e[a]);return this}return!1!==t&&"function"!=typeof t||(r=t,t=void 0),!1===r&&(r=we),this.each((function(){A.event.remove(this,e,r,t)}))}});var Me=/<script|<style|<link/i,Se=/checked\s*(?:[^=]|=\s*.checked.)/i,Te=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ce(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&A(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var r,n,a,i,o,s;if(1===t.nodeType){if(K.hasData(e)&&(s=K.get(e).events))for(a in K.remove(t,"handle events"),s)for(r=0,n=s[a].length;r<n;r++)A.event.add(t,a,s[a][r]);J.hasData(e)&&(i=J.access(e),o=A.extend({},i),J.set(t,o))}}function Pe(e,t,r,n){t=i(t);var a,o,s,c,u,l,f=0,d=e.length,m=d-1,g=t[0],v=p(g);if(v||1<d&&"string"==typeof g&&!h.checkClone&&Se.test(g))return e.each((function(a){var i=e.eq(a);v&&(t[0]=g.call(this,a,i.html())),Pe(i,t,r,n)}));if(d&&(o=(a=_e(t,e[0].ownerDocument,!1,e,n)).firstChild,1===a.childNodes.length&&(a=o),o||n)){for(c=(s=A.map(ge(a,"script"),De)).length;f<d;f++)u=a,f!==m&&(u=A.clone(u,!0,!0),c&&A.merge(s,ge(u,"script"))),r.call(e[f],u,f);if(c)for(l=s[s.length-1].ownerDocument,A.map(s,Oe),f=0;f<c;f++)u=s[f],pe.test(u.type||"")&&!K.access(u,"globalEval")&&A.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?A._evalUrl&&!u.noModule&&A._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):y(u.textContent.replace(Te,""),u,l))}return e}function je(e,t,r){for(var n,a=t?A.filter(t,e):e,i=0;null!=(n=a[i]);i++)r||1!==n.nodeType||A.cleanData(ge(n)),n.parentNode&&(r&&ae(n)&&ve(ge(n,"script")),n.parentNode.removeChild(n));return e}A.extend({htmlPrefilter:function(e){return e},clone:function(e,t,r){var n,a,i,o,s,c,u,l=e.cloneNode(!0),f=ae(e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||A.isXMLDoc(e)))for(o=ge(l),n=0,a=(i=ge(e)).length;n<a;n++)s=i[n],"input"===(u=(c=o[n]).nodeName.toLowerCase())&&de.test(s.type)?c.checked=s.checked:"input"!==u&&"textarea"!==u||(c.defaultValue=s.defaultValue);if(t)if(r)for(i=i||ge(e),o=o||ge(l),n=0,a=i.length;n<a;n++)Ne(i[n],o[n]);else Ne(e,l);return 0<(o=ge(l,"script")).length&&ve(o,!f&&ge(e,"script")),l},cleanData:function(e){for(var t,r,n,a=A.event.special,i=0;void 0!==(r=e[i]);i++)if($(r)){if(t=r[K.expando]){if(t.events)for(n in t.events)a[n]?A.event.remove(r,n):A.removeEvent(r,n,t.handle);r[K.expando]=void 0}r[J.expando]&&(r[J.expando]=void 0)}}}),A.fn.extend({detach:function(e){return je(this,e,!0)},remove:function(e){return je(this,e)},text:function(e){return q(this,(function(e){return void 0===e?A.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Pe(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ce(this,e).appendChild(e)}))},prepend:function(){return Pe(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Ce(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Pe(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Pe(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(A.cleanData(ge(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return A.clone(this,e,t)}))},html:function(e){return q(this,(function(e){var t=this[0]||{},r=0,n=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Me.test(e)&&!me[(he.exec(e)||["",""])[1].toLowerCase()]){e=A.htmlPrefilter(e);try{for(;r<n;r++)1===(t=this[r]||{}).nodeType&&(A.cleanData(ge(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return Pe(this,arguments,(function(t){var r=this.parentNode;A.inArray(this,e)<0&&(A.cleanData(ge(this)),r&&r.replaceChild(t,this))}),e)}}),A.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){A.fn[e]=function(e){for(var r,n=[],a=A(e),i=a.length-1,s=0;s<=i;s++)r=s===i?this:this.clone(!0),A(a[s])[t](r),o.apply(n,r.get());return this.pushStack(n)}}));var Re=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),ze=function(t){var r=t.ownerDocument.defaultView;return r&&r.opener||(r=e),r.getComputedStyle(t)},Le=function(e,t,r){var n,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in n=r.call(e),t)e.style[a]=i[a];return n},Ye=new RegExp(re.join("|"),"i");function We(e,t,r){var n,a,i,o,s=e.style;return(r=r||ze(e))&&(""!==(o=r.getPropertyValue(t)||r[t])||ae(e)||(o=A.style(e,t)),!h.pixelBoxStyles()&&Re.test(o)&&Ye.test(t)&&(n=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=r.width,s.width=n,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function Ie(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function t(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ne.appendChild(u).appendChild(l);var t=e.getComputedStyle(l);n="1%"!==t.top,c=12===r(t.marginLeft),l.style.right="60%",o=36===r(t.right),a=36===r(t.width),l.style.position="absolute",i=12===r(l.offsetWidth/3),ne.removeChild(u),l=null}}function r(e){return Math.round(parseFloat(e))}var n,a,i,o,s,c,u=g.createElement("div"),l=g.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===l.style.backgroundClip,A.extend(h,{boxSizingReliable:function(){return t(),a},pixelBoxStyles:function(){return t(),o},pixelPosition:function(){return t(),n},reliableMarginLeft:function(){return t(),c},scrollboxSize:function(){return t(),i},reliableTrDimensions:function(){var t,r,n,a;return null==s&&(t=g.createElement("table"),r=g.createElement("tr"),n=g.createElement("div"),t.style.cssText="position:absolute;left:-11111px;border-collapse:separate",r.style.cssText="border:1px solid",r.style.height="1px",n.style.height="9px",n.style.display="block",ne.appendChild(t).appendChild(r).appendChild(n),a=e.getComputedStyle(r),s=parseInt(a.height,10)+parseInt(a.borderTopWidth,10)+parseInt(a.borderBottomWidth,10)===r.offsetHeight,ne.removeChild(t)),s}}))}();var Be=["Webkit","Moz","ms"],qe=g.createElement("div").style,He={};function Fe(e){return A.cssProps[e]||He[e]||(e in qe?e:He[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),r=Be.length;r--;)if((e=Be[r]+t)in qe)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ue=/^--/,$e={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"};function Ke(e,t,r){var n=te.exec(t);return n?Math.max(0,n[2]-(r||0))+(n[3]||"px"):t}function Je(e,t,r,n,a,i){var o="width"===t?1:0,s=0,c=0;if(r===(n?"border":"content"))return 0;for(;o<4;o+=2)"margin"===r&&(c+=A.css(e,r+re[o],!0,a)),n?("content"===r&&(c-=A.css(e,"padding"+re[o],!0,a)),"margin"!==r&&(c-=A.css(e,"border"+re[o]+"Width",!0,a))):(c+=A.css(e,"padding"+re[o],!0,a),"padding"!==r?c+=A.css(e,"border"+re[o]+"Width",!0,a):s+=A.css(e,"border"+re[o]+"Width",!0,a));return!n&&0<=i&&(c+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-c-s-.5))||0),c}function Ze(e,t,r){var n=ze(e),a=(!h.boxSizingReliable()||r)&&"border-box"===A.css(e,"boxSizing",!1,n),i=a,o=We(e,t,n),s="offset"+t[0].toUpperCase()+t.slice(1);if(Re.test(o)){if(!r)return o;o="auto"}return(!h.boxSizingReliable()&&a||!h.reliableTrDimensions()&&S(e,"tr")||"auto"===o||!parseFloat(o)&&"inline"===A.css(e,"display",!1,n))&&e.getClientRects().length&&(a="border-box"===A.css(e,"boxSizing",!1,n),(i=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+Je(e,t,r||(a?"border":"content"),i,n,o)+"px"}function Xe(e,t,r,n,a){return new Xe.prototype.init(e,t,r,n,a)}A.extend({cssHooks:{opacity:{get:function(e,t){if(t){var r=We(e,"opacity");return""===r?"1":r}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,r,n){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=U(t),c=Ue.test(t),u=e.style;if(c||(t=Fe(s)),o=A.cssHooks[t]||A.cssHooks[s],void 0===r)return o&&"get"in o&&void 0!==(a=o.get(e,!1,n))?a:u[t];"string"==(i=typeof r)&&(a=te.exec(r))&&a[1]&&(r=se(e,t,a),i="number"),null!=r&&r==r&&("number"!==i||c||(r+=a&&a[3]||(A.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==r||0!==t.indexOf("background")||(u[t]="inherit"),o&&"set"in o&&void 0===(r=o.set(e,r,n))||(c?u.setProperty(t,r):u[t]=r))}},css:function(e,t,r,n){var a,i,o,s=U(t);return Ue.test(t)||(t=Fe(s)),(o=A.cssHooks[t]||A.cssHooks[s])&&"get"in o&&(a=o.get(e,!0,r)),void 0===a&&(a=We(e,t,n)),"normal"===a&&t in Ve&&(a=Ve[t]),""===r||r?(i=parseFloat(a),!0===r||isFinite(i)?i||0:a):a}}),A.each(["height","width"],(function(e,t){A.cssHooks[t]={get:function(e,r,n){if(r)return!Ge.test(A.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,t,n):Le(e,$e,(function(){return Ze(e,t,n)}))},set:function(e,r,n){var a,i=ze(e),o=!h.scrollboxSize()&&"absolute"===i.position,s=(o||n)&&"border-box"===A.css(e,"boxSizing",!1,i),c=n?Je(e,t,n,s,i):0;return s&&o&&(c-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-Je(e,t,"border",!1,i)-.5)),c&&(a=te.exec(r))&&"px"!==(a[3]||"px")&&(e.style[t]=r,r=A.css(e,t)),Ke(0,r,c)}}})),A.cssHooks.marginLeft=Ie(h.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Le(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),A.each({margin:"",padding:"",border:"Width"},(function(e,t){A.cssHooks[e+t]={expand:function(r){for(var n=0,a={},i="string"==typeof r?r.split(" "):[r];n<4;n++)a[e+re[n]+t]=i[n]||i[n-2]||i[0];return a}},"margin"!==e&&(A.cssHooks[e+t].set=Ke)})),A.fn.extend({css:function(e,t){return q(this,(function(e,t,r){var n,a,i={},o=0;if(Array.isArray(t)){for(n=ze(e),a=t.length;o<a;o++)i[t[o]]=A.css(e,t[o],!1,n);return i}return void 0!==r?A.style(e,t,r):A.css(e,t)}),e,t,1<arguments.length)}}),((A.Tween=Xe).prototype={constructor:Xe,init:function(e,t,r,n,a,i){this.elem=e,this.prop=r,this.easing=a||A.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=n,this.unit=i||(A.cssNumber[r]?"":"px")},cur:function(){var e=Xe.propHooks[this.prop];return e&&e.get?e.get(this):Xe.propHooks._default.get(this)},run:function(e){var t,r=Xe.propHooks[this.prop];return this.options.duration?this.pos=t=A.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),r&&r.set?r.set(this):Xe.propHooks._default.set(this),this}}).init.prototype=Xe.prototype,(Xe.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=A.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){A.fx.step[e.prop]?A.fx.step[e.prop](e):1!==e.elem.nodeType||!A.cssHooks[e.prop]&&null==e.elem.style[Fe(e.prop)]?e.elem[e.prop]=e.now:A.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Xe.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},A.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},A.fx=Xe.prototype.init,A.fx.step={};var Qe,et,tt,rt,nt=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function it(){et&&(!1===g.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(it):e.setTimeout(it,A.fx.interval),A.fx.tick())}function ot(){return e.setTimeout((function(){Qe=void 0})),Qe=Date.now()}function st(e,t){var r,n=0,a={height:e};for(t=t?1:0;n<4;n+=2-t)a["margin"+(r=re[n])]=a["padding"+r]=e;return t&&(a.opacity=a.width=e),a}function ct(e,t,r){for(var n,a=(ut.tweeners[t]||[]).concat(ut.tweeners["*"]),i=0,o=a.length;i<o;i++)if(n=a[i].call(r,t,e))return n}function ut(e,t,r){var n,a,i=0,o=ut.prefilters.length,s=A.Deferred().always((function(){delete c.elem})),c=function(){if(a)return!1;for(var t=Qe||ot(),r=Math.max(0,u.startTime+u.duration-t),n=1-(r/u.duration||0),i=0,o=u.tweens.length;i<o;i++)u.tweens[i].run(n);return s.notifyWith(e,[u,n,r]),n<1&&o?r:(o||s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:A.extend({},t),opts:A.extend(!0,{specialEasing:{},easing:A.easing._default},r),originalProperties:t,originalOptions:r,startTime:Qe||ot(),duration:r.duration,tweens:[],createTween:function(t,r){var n=A.Tween(e,u.opts,t,r,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(n),n},stop:function(t){var r=0,n=t?u.tweens.length:0;if(a)return this;for(a=!0;r<n;r++)u.tweens[r].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),l=u.props;for(function(e,t){var r,n,a,i,o;for(r in e)if(a=t[n=U(r)],i=e[r],Array.isArray(i)&&(a=i[1],i=e[r]=i[0]),r!==n&&(e[n]=i,delete e[r]),(o=A.cssHooks[n])&&"expand"in o)for(r in i=o.expand(i),delete e[n],i)r in e||(e[r]=i[r],t[r]=a);else t[n]=a}(l,u.opts.specialEasing);i<o;i++)if(n=ut.prefilters[i].call(u,e,l,u.opts))return p(n.stop)&&(A._queueHooks(u.elem,u.opts.queue).stop=n.stop.bind(n)),n;return A.map(l,ct,u),p(u.opts.start)&&u.opts.start.call(e,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),A.fx.timer(A.extend(c,{elem:e,anim:u,queue:u.opts.queue})),u}A.Animation=A.extend(ut,{tweeners:{"*":[function(e,t){var r=this.createTween(e,t);return se(r.elem,e,te.exec(t),r),r}]},tweener:function(e,t){p(e)?(t=e,e=["*"]):e=e.match(R);for(var r,n=0,a=e.length;n<a;n++)r=e[n],ut.tweeners[r]=ut.tweeners[r]||[],ut.tweeners[r].unshift(t)},prefilters:[function(e,t,r){var n,a,i,o,s,c,u,l,f="width"in t||"height"in t,d=this,h={},p=e.style,m=e.nodeType&&oe(e),g=K.get(e,"fxshow");for(n in r.queue||(null==(o=A._queueHooks(e,"fx")).unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,d.always((function(){d.always((function(){o.unqueued--,A.queue(e,"fx").length||o.empty.fire()}))}))),t)if(a=t[n],nt.test(a)){if(delete t[n],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!g||void 0===g[n])continue;m=!0}h[n]=g&&g[n]||A.style(e,n)}if((c=!A.isEmptyObject(t))||!A.isEmptyObject(h))for(n in f&&1===e.nodeType&&(r.overflow=[p.overflow,p.overflowX,p.overflowY],null==(u=g&&g.display)&&(u=K.get(e,"display")),"none"===(l=A.css(e,"display"))&&(u?l=u:(ue([e],!0),u=e.style.display||u,l=A.css(e,"display"),ue([e]))),("inline"===l||"inline-block"===l&&null!=u)&&"none"===A.css(e,"float")&&(c||(d.done((function(){p.display=u})),null==u&&(l=p.display,u="none"===l?"":l)),p.display="inline-block")),r.overflow&&(p.overflow="hidden",d.always((function(){p.overflow=r.overflow[0],p.overflowX=r.overflow[1],p.overflowY=r.overflow[2]}))),c=!1,h)c||(g?"hidden"in g&&(m=g.hidden):g=K.access(e,"fxshow",{display:u}),i&&(g.hidden=!m),m&&ue([e],!0),d.done((function(){for(n in m||ue([e]),K.remove(e,"fxshow"),h)A.style(e,n,h[n])}))),c=ct(m?g[n]:0,n,d),n in g||(g[n]=c.start,m&&(c.end=c.start,c.start=0))}],prefilter:function(e,t){t?ut.prefilters.unshift(e):ut.prefilters.push(e)}}),A.speed=function(e,t,r){var n=e&&"object"==typeof e?A.extend({},e):{complete:r||!r&&t||p(e)&&e,duration:e,easing:r&&t||t&&!p(t)&&t};return A.fx.off?n.duration=0:"number"!=typeof n.duration&&(n.duration in A.fx.speeds?n.duration=A.fx.speeds[n.duration]:n.duration=A.fx.speeds._default),null!=n.queue&&!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){p(n.old)&&n.old.call(this),n.queue&&A.dequeue(this,n.queue)},n},A.fn.extend({fadeTo:function(e,t,r,n){return this.filter(oe).css("opacity",0).show().end().animate({opacity:t},e,r,n)},animate:function(e,t,r,n){var a=A.isEmptyObject(e),i=A.speed(t,r,n),o=function(){var t=ut(this,A.extend({},e),i);(a||K.get(this,"finish"))&&t.stop(!0)};return o.finish=o,a||!1===i.queue?this.each(o):this.queue(i.queue,o)},stop:function(e,t,r){var n=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=t,t=e,e=void 0),t&&this.queue(e||"fx",[]),this.each((function(){var t=!0,a=null!=e&&e+"queueHooks",i=A.timers,o=K.get(this);if(a)o[a]&&o[a].stop&&n(o[a]);else for(a in o)o[a]&&o[a].stop&&at.test(a)&&n(o[a]);for(a=i.length;a--;)i[a].elem!==this||null!=e&&i[a].queue!==e||(i[a].anim.stop(r),t=!1,i.splice(a,1));!t&&r||A.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,r=K.get(this),n=r[e+"queue"],a=r[e+"queueHooks"],i=A.timers,o=n?n.length:0;for(r.finish=!0,A.queue(this,e,[]),a&&a.stop&&a.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<o;t++)n[t]&&n[t].finish&&n[t].finish.call(this);delete r.finish}))}}),A.each(["toggle","show","hide"],(function(e,t){var r=A.fn[t];A.fn[t]=function(e,n,a){return null==e||"boolean"==typeof e?r.apply(this,arguments):this.animate(st(t,!0),e,n,a)}})),A.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){A.fn[e]=function(e,r,n){return this.animate(t,e,r,n)}})),A.timers=[],A.fx.tick=function(){var e,t=0,r=A.timers;for(Qe=Date.now();t<r.length;t++)(e=r[t])()||r[t]!==e||r.splice(t--,1);r.length||A.fx.stop(),Qe=void 0},A.fx.timer=function(e){A.timers.push(e),A.fx.start()},A.fx.interval=13,A.fx.start=function(){et||(et=!0,it())},A.fx.stop=function(){et=null},A.fx.speeds={slow:600,fast:200,_default:400},A.fn.delay=function(t,r){return t=A.fx&&A.fx.speeds[t]||t,r=r||"fx",this.queue(r,(function(r,n){var a=e.setTimeout(r,t);n.stop=function(){e.clearTimeout(a)}}))},tt=g.createElement("input"),rt=g.createElement("select").appendChild(g.createElement("option")),tt.type="checkbox",h.checkOn=""!==tt.value,h.optSelected=rt.selected,(tt=g.createElement("input")).value="t",tt.type="radio",h.radioValue="t"===tt.value;var lt,ft=A.expr.attrHandle;A.fn.extend({attr:function(e,t){return q(this,A.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each((function(){A.removeAttr(this,e)}))}}),A.extend({attr:function(e,t,r){var n,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?A.prop(e,t,r):(1===i&&A.isXMLDoc(e)||(a=A.attrHooks[t.toLowerCase()]||(A.expr.match.bool.test(t)?lt:void 0)),void 0!==r?null===r?void A.removeAttr(e,t):a&&"set"in a&&void 0!==(n=a.set(e,r,t))?n:(e.setAttribute(t,r+""),r):a&&"get"in a&&null!==(n=a.get(e,t))?n:null==(n=A.find.attr(e,t))?void 0:n)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&S(e,"input")){var r=e.value;return e.setAttribute("type",t),r&&(e.value=r),t}}}},removeAttr:function(e,t){var r,n=0,a=t&&t.match(R);if(a&&1===e.nodeType)for(;r=a[n++];)e.removeAttribute(r)}}),lt={set:function(e,t,r){return!1===t?A.removeAttr(e,r):e.setAttribute(r,r),r}},A.each(A.expr.match.bool.source.match(/\w+/g),(function(e,t){var r=ft[t]||A.find.attr;ft[t]=function(e,t,n){var a,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=a,a=null!=r(e,t,n)?o:null,ft[o]=i),a}}));var dt=/^(?:input|select|textarea|button)$/i,ht=/^(?:a|area)$/i;function pt(e){return(e.match(R)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function gt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}A.fn.extend({prop:function(e,t){return q(this,A.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each((function(){delete this[A.propFix[e]||e]}))}}),A.extend({prop:function(e,t,r){var n,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&A.isXMLDoc(e)||(t=A.propFix[t]||t,a=A.propHooks[t]),void 0!==r?a&&"set"in a&&void 0!==(n=a.set(e,r,t))?n:e[t]=r:a&&"get"in a&&null!==(n=a.get(e,t))?n:e[t]},propHooks:{tabIndex:{get:function(e){var t=A.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||ht.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),h.optSelected||(A.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),A.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){A.propFix[this.toLowerCase()]=this})),A.fn.extend({addClass:function(e){var t,r,n,a,i,o,s,c=0;if(p(e))return this.each((function(t){A(this).addClass(e.call(this,t,mt(this)))}));if((t=gt(e)).length)for(;r=this[c++];)if(a=mt(r),n=1===r.nodeType&&" "+pt(a)+" "){for(o=0;i=t[o++];)n.indexOf(" "+i+" ")<0&&(n+=i+" ");a!==(s=pt(n))&&r.setAttribute("class",s)}return this},removeClass:function(e){var t,r,n,a,i,o,s,c=0;if(p(e))return this.each((function(t){A(this).removeClass(e.call(this,t,mt(this)))}));if(!arguments.length)return this.attr("class","");if((t=gt(e)).length)for(;r=this[c++];)if(a=mt(r),n=1===r.nodeType&&" "+pt(a)+" "){for(o=0;i=t[o++];)for(;-1<n.indexOf(" "+i+" ");)n=n.replace(" "+i+" "," ");a!==(s=pt(n))&&r.setAttribute("class",s)}return this},toggleClass:function(e,t){var r=typeof e,n="string"===r||Array.isArray(e);return"boolean"==typeof t&&n?t?this.addClass(e):this.removeClass(e):p(e)?this.each((function(r){A(this).toggleClass(e.call(this,r,mt(this),t),t)})):this.each((function(){var t,a,i,o;if(n)for(a=0,i=A(this),o=gt(e);t=o[a++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==r||((t=mt(this))&&K.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":K.get(this,"__className__")||""))}))},hasClass:function(e){var t,r,n=0;for(t=" "+e+" ";r=this[n++];)if(1===r.nodeType&&-1<(" "+pt(mt(r))+" ").indexOf(t))return!0;return!1}});var vt=/\r/g;A.fn.extend({val:function(e){var t,r,n,a=this[0];return arguments.length?(n=p(e),this.each((function(r){var a;1===this.nodeType&&(null==(a=n?e.call(this,r,A(this).val()):e)?a="":"number"==typeof a?a+="":Array.isArray(a)&&(a=A.map(a,(function(e){return null==e?"":e+""}))),(t=A.valHooks[this.type]||A.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,a,"value")||(this.value=a))}))):a?(t=A.valHooks[a.type]||A.valHooks[a.nodeName.toLowerCase()])&&"get"in t&&void 0!==(r=t.get(a,"value"))?r:"string"==typeof(r=a.value)?r.replace(vt,""):null==r?"":r:void 0}}),A.extend({valHooks:{option:{get:function(e){var t=A.find.attr(e,"value");return null!=t?t:pt(A.text(e))}},select:{get:function(e){var t,r,n,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],c=o?i+1:a.length;for(n=i<0?c:o?i:0;n<c;n++)if(((r=a[n]).selected||n===i)&&!r.disabled&&(!r.parentNode.disabled||!S(r.parentNode,"optgroup"))){if(t=A(r).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var r,n,a=e.options,i=A.makeArray(t),o=a.length;o--;)((n=a[o]).selected=-1<A.inArray(A.valHooks.option.get(n),i))&&(r=!0);return r||(e.selectedIndex=-1),i}}}}),A.each(["radio","checkbox"],(function(){A.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<A.inArray(A(e).val(),t)}},h.checkOn||(A.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),h.focusin="onfocusin"in e;var yt=/^(?:focusinfocus|focusoutblur)$/,_t=function(e){e.stopPropagation()};A.extend(A.event,{trigger:function(t,r,n,a){var i,o,s,c,u,f,d,h,v=[n||g],y=l.call(t,"type")?t.type:t,_=l.call(t,"namespace")?t.namespace.split("."):[];if(o=h=s=n=n||g,3!==n.nodeType&&8!==n.nodeType&&!yt.test(y+A.event.triggered)&&(-1<y.indexOf(".")&&(y=(_=y.split(".")).shift(),_.sort()),u=y.indexOf(":")<0&&"on"+y,(t=t[A.expando]?t:new A.Event(y,"object"==typeof t&&t)).isTrigger=a?2:3,t.namespace=_.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+_.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),r=null==r?[t]:A.makeArray(r,[t]),d=A.event.special[y]||{},a||!d.trigger||!1!==d.trigger.apply(n,r))){if(!a&&!d.noBubble&&!m(n)){for(c=d.delegateType||y,yt.test(c+y)||(o=o.parentNode);o;o=o.parentNode)v.push(o),s=o;s===(n.ownerDocument||g)&&v.push(s.defaultView||s.parentWindow||e)}for(i=0;(o=v[i++])&&!t.isPropagationStopped();)h=o,t.type=1<i?c:d.bindType||y,(f=(K.get(o,"events")||Object.create(null))[t.type]&&K.get(o,"handle"))&&f.apply(o,r),(f=u&&o[u])&&f.apply&&$(o)&&(t.result=f.apply(o,r),!1===t.result&&t.preventDefault());return t.type=y,a||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),r)||!$(n)||u&&p(n[y])&&!m(n)&&((s=n[u])&&(n[u]=null),A.event.triggered=y,t.isPropagationStopped()&&h.addEventListener(y,_t),n[y](),t.isPropagationStopped()&&h.removeEventListener(y,_t),A.event.triggered=void 0,s&&(n[u]=s)),t.result}},simulate:function(e,t,r){var n=A.extend(new A.Event,r,{type:e,isSimulated:!0});A.event.trigger(n,null,t)}}),A.fn.extend({trigger:function(e,t){return this.each((function(){A.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var r=this[0];if(r)return A.event.trigger(e,t,r,!0)}}),h.focusin||A.each({focus:"focusin",blur:"focusout"},(function(e,t){var r=function(e){A.event.simulate(t,e.target,A.event.fix(e))};A.event.special[t]={setup:function(){var n=this.ownerDocument||this.document||this,a=K.access(n,t);a||n.addEventListener(e,r,!0),K.access(n,t,(a||0)+1)},teardown:function(){var n=this.ownerDocument||this.document||this,a=K.access(n,t)-1;a?K.access(n,t,a):(n.removeEventListener(e,r,!0),K.remove(n,t))}}}));var bt=e.location,At={guid:Date.now()},wt=/\?/;A.parseXML=function(t){var r,n;if(!t||"string"!=typeof t)return null;try{r=(new e.DOMParser).parseFromString(t,"text/xml")}catch(t){}return n=r&&r.getElementsByTagName("parsererror")[0],r&&!n||A.error("Invalid XML: "+(n?A.map(n.childNodes,(function(e){return e.textContent})).join("\n"):t)),r};var xt=/\[\]$/,kt=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,Mt=/^(?:input|select|textarea|keygen)/i;function St(e,t,r,n){var a;if(Array.isArray(t))A.each(t,(function(t,a){r||xt.test(e)?n(e,a):St(e+"["+("object"==typeof a&&null!=a?t:"")+"]",a,r,n)}));else if(r||"object"!==_(t))n(e,t);else for(a in t)St(e+"["+a+"]",t[a],r,n)}A.param=function(e,t){var r,n=[],a=function(e,t){var r=p(t)?t():t;n[n.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==r?"":r)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!A.isPlainObject(e))A.each(e,(function(){a(this.name,this.value)}));else for(r in e)St(r,e[r],t,a);return n.join("&")},A.fn.extend({serialize:function(){return A.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=A.prop(this,"elements");return e?A.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!A(this).is(":disabled")&&Mt.test(this.nodeName)&&!Et.test(e)&&(this.checked||!de.test(e))})).map((function(e,t){var r=A(this).val();return null==r?null:Array.isArray(r)?A.map(r,(function(e){return{name:t.name,value:e.replace(kt,"\r\n")}})):{name:t.name,value:r.replace(kt,"\r\n")}})).get()}});var Tt=/%20/g,Ct=/#.*$/,Dt=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Nt=/^(?:GET|HEAD)$/,Pt=/^\/\//,jt={},Rt={},zt="*/".concat("*"),Lt=g.createElement("a");function Yt(e){return function(t,r){"string"!=typeof t&&(r=t,t="*");var n,a=0,i=t.toLowerCase().match(R)||[];if(p(r))for(;n=i[a++];)"+"===n[0]?(n=n.slice(1)||"*",(e[n]=e[n]||[]).unshift(r)):(e[n]=e[n]||[]).push(r)}}function Wt(e,t,r,n){var a={},i=e===Rt;function o(s){var c;return a[s]=!0,A.each(e[s]||[],(function(e,s){var u=s(t,r,n);return"string"!=typeof u||i||a[u]?i?!(c=u):void 0:(t.dataTypes.unshift(u),o(u),!1)})),c}return o(t.dataTypes[0])||!a["*"]&&o("*")}function It(e,t){var r,n,a=A.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((a[r]?e:n||(n={}))[r]=t[r]);return n&&A.extend(!0,e,n),e}Lt.href=bt.href,A.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":A.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?It(It(e,A.ajaxSettings),t):It(A.ajaxSettings,e)},ajaxPrefilter:Yt(jt),ajaxTransport:Yt(Rt),ajax:function(t,r){"object"==typeof t&&(r=t,t=void 0),r=r||{};var n,a,i,o,s,c,u,l,f,d,h=A.ajaxSetup({},r),p=h.context||h,m=h.context&&(p.nodeType||p.jquery)?A(p):A.event,v=A.Deferred(),y=A.Callbacks("once memory"),_=h.statusCode||{},b={},w={},x="canceled",k={readyState:0,getResponseHeader:function(e){var t;if(u){if(!o)for(o={};t=Ot.exec(i);)o[t[1].toLowerCase()+" "]=(o[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=o[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return u?i:null},setRequestHeader:function(e,t){return null==u&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==u&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)k.always(e[k.status]);else for(t in e)_[t]=[_[t],e[t]];return this},abort:function(e){var t=e||x;return n&&n.abort(t),E(0,t),this}};if(v.promise(k),h.url=((t||h.url||bt.href)+"").replace(Pt,bt.protocol+"//"),h.type=r.method||r.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(R)||[""],null==h.crossDomain){c=g.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Lt.protocol+"//"+Lt.host!=c.protocol+"//"+c.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=A.param(h.data,h.traditional)),Wt(jt,h,r,k),u)return k;for(f in(l=A.event&&h.global)&&0==A.active++&&A.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Nt.test(h.type),a=h.url.replace(Ct,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Tt,"+")):(d=h.url.slice(a.length),h.data&&(h.processData||"string"==typeof h.data)&&(a+=(wt.test(a)?"&":"?")+h.data,delete h.data),!1===h.cache&&(a=a.replace(Dt,"$1"),d=(wt.test(a)?"&":"?")+"_="+At.guid+++d),h.url=a+d),h.ifModified&&(A.lastModified[a]&&k.setRequestHeader("If-Modified-Since",A.lastModified[a]),A.etag[a]&&k.setRequestHeader("If-None-Match",A.etag[a])),(h.data&&h.hasContent&&!1!==h.contentType||r.contentType)&&k.setRequestHeader("Content-Type",h.contentType),k.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+zt+"; q=0.01":""):h.accepts["*"]),h.headers)k.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(p,k,h)||u))return k.abort();if(x="abort",y.add(h.complete),k.done(h.success),k.fail(h.error),n=Wt(Rt,h,r,k)){if(k.readyState=1,l&&m.trigger("ajaxSend",[k,h]),u)return k;h.async&&0<h.timeout&&(s=e.setTimeout((function(){k.abort("timeout")}),h.timeout));try{u=!1,n.send(b,E)}catch(t){if(u)throw t;E(-1,t)}}else E(-1,"No Transport");function E(t,r,o,c){var f,d,g,b,w,x=r;u||(u=!0,s&&e.clearTimeout(s),n=void 0,i=c||"",k.readyState=0<t?4:0,f=200<=t&&t<300||304===t,o&&(b=function(e,t,r){for(var n,a,i,o,s=e.contents,c=e.dataTypes;"*"===c[0];)c.shift(),void 0===n&&(n=e.mimeType||t.getResponseHeader("Content-Type"));if(n)for(a in s)if(s[a]&&s[a].test(n)){c.unshift(a);break}if(c[0]in r)i=c[0];else{for(a in r){if(!c[0]||e.converters[a+" "+c[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==c[0]&&c.unshift(i),r[i]}(h,k,o)),!f&&-1<A.inArray("script",h.dataTypes)&&A.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),b=function(e,t,r,n){var a,i,o,s,c,u={},l=e.dataTypes.slice();if(l[1])for(o in e.converters)u[o.toLowerCase()]=e.converters[o];for(i=l.shift();i;)if(e.responseFields[i]&&(r[e.responseFields[i]]=t),!c&&n&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=i,i=l.shift())if("*"===i)i=c;else if("*"!==c&&c!==i){if(!(o=u[c+" "+i]||u["* "+i]))for(a in u)if((s=a.split(" "))[1]===i&&(o=u[c+" "+s[0]]||u["* "+s[0]])){!0===o?o=u[a]:!0!==u[a]&&(i=s[0],l.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+c+" to "+i}}}return{state:"success",data:t}}(h,b,k,f),f?(h.ifModified&&((w=k.getResponseHeader("Last-Modified"))&&(A.lastModified[a]=w),(w=k.getResponseHeader("etag"))&&(A.etag[a]=w)),204===t||"HEAD"===h.type?x="nocontent":304===t?x="notmodified":(x=b.state,d=b.data,f=!(g=b.error))):(g=x,!t&&x||(x="error",t<0&&(t=0))),k.status=t,k.statusText=(r||x)+"",f?v.resolveWith(p,[d,x,k]):v.rejectWith(p,[k,x,g]),k.statusCode(_),_=void 0,l&&m.trigger(f?"ajaxSuccess":"ajaxError",[k,h,f?d:g]),y.fireWith(p,[k,x]),l&&(m.trigger("ajaxComplete",[k,h]),--A.active||A.event.trigger("ajaxStop")))}return k},getJSON:function(e,t,r){return A.get(e,t,r,"json")},getScript:function(e,t){return A.get(e,void 0,t,"script")}}),A.each(["get","post"],(function(e,t){A[t]=function(e,r,n,a){return p(r)&&(a=a||n,n=r,r=void 0),A.ajax(A.extend({url:e,type:t,dataType:a,data:r,success:n},A.isPlainObject(e)&&e))}})),A.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),A._evalUrl=function(e,t,r){return A.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){A.globalEval(e,t,r)}})},A.fn.extend({wrapAll:function(e){var t;return this[0]&&(p(e)&&(e=e.call(this[0])),t=A(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return p(e)?this.each((function(t){A(this).wrapInner(e.call(this,t))})):this.each((function(){var t=A(this),r=t.contents();r.length?r.wrapAll(e):t.append(e)}))},wrap:function(e){var t=p(e);return this.each((function(r){A(this).wrapAll(t?e.call(this,r):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){A(this).replaceWith(this.childNodes)})),this}}),A.expr.pseudos.hidden=function(e){return!A.expr.pseudos.visible(e)},A.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},A.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},qt=A.ajaxSettings.xhr();h.cors=!!qt&&"withCredentials"in qt,h.ajax=qt=!!qt,A.ajaxTransport((function(t){var r,n;if(h.cors||qt&&!t.crossDomain)return{send:function(a,i){var o,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)s[o]=t.xhrFields[o];for(o in t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||a["X-Requested-With"]||(a["X-Requested-With"]="XMLHttpRequest"),a)s.setRequestHeader(o,a[o]);r=function(e){return function(){r&&(r=n=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?i(0,"error"):i(s.status,s.statusText):i(Bt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=r(),n=s.onerror=s.ontimeout=r("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout((function(){r&&n()}))},r=r("abort");try{s.send(t.hasContent&&t.data||null)}catch(a){if(r)throw a}},abort:function(){r&&r()}}})),A.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),A.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return A.globalEval(e),e}}}),A.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),A.ajaxTransport("script",(function(e){var t,r;if(e.crossDomain||e.scriptAttrs)return{send:function(n,a){t=A("<script>").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",r=function(e){t.remove(),r=null,e&&a("error"===e.type?404:200,e.type)}),g.head.appendChild(t[0])},abort:function(){r&&r()}}}));var Ht,Ft=[],Gt=/(=)\?(?=&|$)|\?\?/;A.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ft.pop()||A.expando+"_"+At.guid++;return this[e]=!0,e}}),A.ajaxPrefilter("json jsonp",(function(t,r,n){var a,i,o,s=!1!==t.jsonp&&(Gt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return a=t.jsonpCallback=p(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Gt,"$1"+a):!1!==t.jsonp&&(t.url+=(wt.test(t.url)?"&":"?")+t.jsonp+"="+a),t.converters["script json"]=function(){return o||A.error(a+" was not called"),o[0]},t.dataTypes[0]="json",i=e[a],e[a]=function(){o=arguments},n.always((function(){void 0===i?A(e).removeProp(a):e[a]=i,t[a]&&(t.jsonpCallback=r.jsonpCallback,Ft.push(a)),o&&p(i)&&i(o[0]),o=i=void 0})),"script"})),h.createHTMLDocument=((Ht=g.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ht.childNodes.length),A.parseHTML=function(e,t,r){return"string"!=typeof e?[]:("boolean"==typeof t&&(r=t,t=!1),t||(h.createHTMLDocument?((n=(t=g.implementation.createHTMLDocument("")).createElement("base")).href=g.location.href,t.head.appendChild(n)):t=g),i=!r&&[],(a=T.exec(e))?[t.createElement(a[1])]:(a=_e([e],t,i),i&&i.length&&A(i).remove(),A.merge([],a.childNodes)));var n,a,i},A.fn.load=function(e,t,r){var n,a,i,o=this,s=e.indexOf(" ");return-1<s&&(n=pt(e.slice(s)),e=e.slice(0,s)),p(t)?(r=t,t=void 0):t&&"object"==typeof t&&(a="POST"),0<o.length&&A.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done((function(e){i=arguments,o.html(n?A("<div>").append(A.parseHTML(e)).find(n):e)})).always(r&&function(e,t){o.each((function(){r.apply(this,i||[e.responseText,t,e])}))}),this},A.expr.pseudos.animated=function(e){return A.grep(A.timers,(function(t){return e===t.elem})).length},A.offset={setOffset:function(e,t,r){var n,a,i,o,s,c,u=A.css(e,"position"),l=A(e),f={};"static"===u&&(e.style.position="relative"),s=l.offset(),i=A.css(e,"top"),c=A.css(e,"left"),("absolute"===u||"fixed"===u)&&-1<(i+c).indexOf("auto")?(o=(n=l.position()).top,a=n.left):(o=parseFloat(i)||0,a=parseFloat(c)||0),p(t)&&(t=t.call(e,r,A.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):l.css(f)}},A.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){A.offset.setOffset(this,e,t)}));var t,r,n=this[0];return n?n.getClientRects().length?(t=n.getBoundingClientRect(),r=n.ownerDocument.defaultView,{top:t.top+r.pageYOffset,left:t.left+r.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,r,n=this[0],a={top:0,left:0};if("fixed"===A.css(n,"position"))t=n.getBoundingClientRect();else{for(t=this.offset(),r=n.ownerDocument,e=n.offsetParent||r.documentElement;e&&(e===r.body||e===r.documentElement)&&"static"===A.css(e,"position");)e=e.parentNode;e&&e!==n&&1===e.nodeType&&((a=A(e).offset()).top+=A.css(e,"borderTopWidth",!0),a.left+=A.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-A.css(n,"marginTop",!0),left:t.left-a.left-A.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===A.css(e,"position");)e=e.offsetParent;return e||ne}))}}),A.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var r="pageYOffset"===t;A.fn[e]=function(n){return q(this,(function(e,n,a){var i;if(m(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===a)return i?i[t]:e[n];i?i.scrollTo(r?i.pageXOffset:a,r?a:i.pageYOffset):e[n]=a}),e,n,arguments.length)}})),A.each(["top","left"],(function(e,t){A.cssHooks[t]=Ie(h.pixelPosition,(function(e,r){if(r)return r=We(e,t),Re.test(r)?A(e).position()[t]+"px":r}))})),A.each({Height:"height",Width:"width"},(function(e,t){A.each({padding:"inner"+e,content:t,"":"outer"+e},(function(r,n){A.fn[n]=function(a,i){var o=arguments.length&&(r||"boolean"!=typeof a),s=r||(!0===a||!0===i?"margin":"border");return q(this,(function(t,r,a){var i;return m(t)?0===n.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===a?A.css(t,r,s):A.style(t,r,a,s)}),t,o?a:void 0,o)}}))})),A.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){A.fn[t]=function(e){return this.on(t,e)}})),A.fn.extend({bind:function(e,t,r){return this.on(e,null,t,r)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,r,n){return this.on(t,e,r,n)},undelegate:function(e,t,r){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",r)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),A.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(e,t){A.fn[t]=function(e,r){return 0<arguments.length?this.on(t,null,e,r):this.trigger(t)}}));var Ut=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;A.proxy=function(e,t){var r,n,i;if("string"==typeof t&&(r=e[t],t=e,e=r),p(e))return n=a.call(arguments,2),(i=function(){return e.apply(t||this,n.concat(a.call(arguments)))}).guid=e.guid=e.guid||A.guid++,i},A.holdReady=function(e){e?A.readyWait++:A.ready(!0)},A.isArray=Array.isArray,A.parseJSON=JSON.parse,A.nodeName=S,A.isFunction=p,A.isWindow=m,A.camelCase=U,A.type=_,A.now=Date.now,A.isNumeric=function(e){var t=A.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},A.trim=function(e){return null==e?"":(e+"").replace(Ut,"")};var $t=e.jQuery,Vt=e.$;return A.noConflict=function(t){return e.$===A&&(e.$=Vt),t&&e.jQuery===A&&(e.jQuery=$t),A},void 0===t&&(e.jQuery=e.$=A),A}))}));Tn.noConflict();var Cn=function(e,t,r){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return n&&(t&&"string"==typeof t?t=Mn.find(t):t||(t=Mn)),new Tn.fn.init(e,t,r)};Cn.fn=Cn.prototype=Tn.fn,Tn.extend(Cn,Tn);var Dn=function(e){return e.find('script, style, link[rel="stylesheet"]').remove(),e};Cn.cloneHtml=function(){return Dn(Cn("html",null,null,!1).clone()).children().wrap("<div />").wrap("<div />")},Cn.root=function(){return Cn("*").first()},Cn.browser=!0;var On=function(e){var t=e.get(0);return!(!t||!t.tagName)&&"container"===t.tagName.toLowerCase()};function Nn(e,t){return Array(t+1).join(e)}Cn.html=function(e){if(e)return On(e)||On(e.children("container"))?e.children("container").html()||e.html():Cn("<div>").append(e.eq(0).clone()).html();var t=Dn(Cn("body",null,null,!1).clone()),r=Dn(Cn("head",null,null,!1).clone());return Mn&&Mn.length>0?Mn.children().html():Cn("<container />").append(Cn("<container>".concat(r.html(),"</container>"))).append(Cn("<container>".concat(t.html(),"</container>"))).wrap("<container />").parent().html()},Cn.load=function(e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e=e?Cn("<container />").html(e):Cn.cloneHtml(),Mn=Mn||Cn('<div class="'.concat("mercury-parsing-container",'" style="display:none;" />')),(e=Dn(e)).find("*").contents().each((function(){this.nodeType===Node.COMMENT_NODE&&Cn(this).remove()})),Mn.html(e),t?{$:Cn,html:e.html()}:Cn};var Pn=["ADDRESS","ARTICLE","ASIDE","AUDIO","BLOCKQUOTE","BODY","CANVAS","CENTER","DD","DIR","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","FRAMESET","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","HTML","ISINDEX","LI","MAIN","MENU","NAV","NOFRAMES","NOSCRIPT","OL","OUTPUT","P","PRE","SECTION","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","UL"];function jn(e){return Yn(e,Pn)}var Rn=["AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR"];function zn(e){return Yn(e,Rn)}var Ln=["A","TABLE","THEAD","TBODY","TFOOT","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"];function Yn(e,t){return t.indexOf(e.nodeName)>=0}function Wn(e,t){return e.getElementsByTagName&&t.some((function(t){return e.getElementsByTagName(t).length}))}var In={};function Bn(e){return e?e.replace(/(\n+\s*)+/g,"\n"):""}function qn(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function Hn(e,t,r){for(var n=0;n<e.length;n++){var a=e[n];if(Fn(a,t,r))return a}}function Fn(e,t,r){var n=e.filter;if("string"==typeof n){if(n===t.nodeName.toLowerCase())return!0}else if(Array.isArray(n)){if(n.indexOf(t.nodeName.toLowerCase())>-1)return!0}else{if("function"!=typeof n)throw new TypeError("`filter` needs to be a string, array, or function");if(n.call(e,t,r))return!0}}function Gn(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function Un(e,t,r){return e&&e.parentNode===t||r(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}In.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},In.lineBreak={filter:"br",replacement:function(e,t,r){return r.br+"\n"}},In.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,t,r){var n=Number(t.nodeName.charAt(1));return"setext"===r.headingStyle&&n<3?"\n\n"+e+"\n"+Nn(1===n?"=":"-",e.length)+"\n\n":"\n\n"+Nn("#",n)+" "+e+"\n\n"}},In.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},In.list={filter:["ul","ol"],replacement:function(e,t){var r=t.parentNode;return"LI"===r.nodeName&&r.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},In.listItem={filter:"li",replacement:function(e,t,r){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n ");var n=r.bulletListMarker+" ",a=t.parentNode;if("OL"===a.nodeName){var i=a.getAttribute("start"),o=Array.prototype.indexOf.call(a.children,t);n=(i?Number(i)+o:o+1)+". "}return n+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},In.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,r){return"\n\n "+t.firstChild.textContent.replace(/\n/g,"\n ")+"\n\n"}},In.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,r){for(var n,a=((t.firstChild.getAttribute("class")||"").match(/language-(\S+)/)||[null,""])[1],i=t.firstChild.textContent,o=r.fence.charAt(0),s=3,c=new RegExp("^"+o+"{3,}","gm");n=c.exec(i);)n[0].length>=s&&(s=n[0].length+1);var u=Nn(o,s);return"\n\n"+u+a+"\n"+i.replace(/\n$/,"")+"\n"+u+"\n\n"}},In.horizontalRule={filter:"hr",replacement:function(e,t,r){return"\n\n"+r.hr+"\n\n"}},In.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){var r=t.getAttribute("href"),n=Bn(t.getAttribute("title"));return n&&(n=' "'+n+'"'),"["+e+"]("+r+n+")"}},In.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,r){var n,a,i=t.getAttribute("href"),o=Bn(t.getAttribute("title"));switch(o&&(o=' "'+o+'"'),r.linkReferenceStyle){case"collapsed":n="["+e+"][]",a="["+e+"]: "+i+o;break;case"shortcut":n="["+e+"]",a="["+e+"]: "+i+o;break;default:var s=this.references.length+1;n="["+e+"]["+s+"]",a="["+s+"]: "+i+o}return this.references.push(a),n},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},In.emphasis={filter:["em","i"],replacement:function(e,t,r){return e.trim()?r.emDelimiter+e+r.emDelimiter:""}},In.strong={filter:["strong","b"],replacement:function(e,t,r){return e.trim()?r.strongDelimiter+e+r.strongDelimiter:""}},In.code={filter:function(e){var t=e.previousSibling||e.nextSibling,r="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!r},replacement:function(e){if(!e)return"";e=e.replace(/\r?\n|\r/g," ");for(var t=/^`|^ .*?[^ ].* $|`$/.test(e)?" ":"",r="`",n=e.match(/`+/gm)||[];-1!==n.indexOf(r);)r+="`";return r+t+e+t+r}},In.image={filter:"img",replacement:function(e,t){var r=Bn(t.getAttribute("alt")),n=t.getAttribute("src")||"",a=Bn(t.getAttribute("title"));return n?"!["+r+"]("+n+(a?' "'+a+'"':"")+")":""}},qn.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=Hn(this.array,e,this.options))||(t=Hn(this._keep,e,this.options))||(t=Hn(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t<this.array.length;t++)e(this.array[t],t)}};var $n="undefined"!=typeof window?window:{};var Vn,Kn=function(){var e=$n.DOMParser,t=!1;try{(new e).parseFromString("","text/html")&&(t=!0)}catch(e){}return t}()?$n.DOMParser:function(){var e=function(){};return!function(){var e=!1;try{document.implementation.createHTMLDocument("").open()}catch(t){window.ActiveXObject&&(e=!0)}return e}()?e.prototype.parseFromString=function(e){var t=document.implementation.createHTMLDocument("");return t.open(),t.write(e),t.close(),t}:e.prototype.parseFromString=function(e){var t=new window.ActiveXObject("htmlfile");return t.designMode="on",t.open(),t.write(e),t.close(),t},e}();function Jn(e,t){var r;"string"==typeof e?r=(Vn=Vn||new Kn).parseFromString('<x-turndown id="turndown-root">'+e+"</x-turndown>","text/html").getElementById("turndown-root"):r=e.cloneNode(!0);return function(e){var t=e.element,r=e.isBlock,n=e.isVoid,a=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!a(t)){for(var i=null,o=!1,s=null,c=Un(s,t,a);c!==t;){if(3===c.nodeType||4===c.nodeType){var u=c.data.replace(/[ \r\n\t]+/g," ");if(i&&!/ $/.test(i.data)||o||" "!==u[0]||(u=u.substr(1)),!u){c=Gn(c);continue}c.data=u,i=c}else{if(1!==c.nodeType){c=Gn(c);continue}r(c)||"BR"===c.nodeName?(i&&(i.data=i.data.replace(/ $/,"")),i=null,o=!1):n(c)||a(c)?(i=null,o=!0):i&&(o=!1)}var l=Un(s,c,a);s=c,c=l}i&&(i.data=i.data.replace(/ $/,""),i.data||Gn(i))}}({element:r,isBlock:jn,isVoid:zn,isPre:t.preformattedCode?Zn:null}),r}function Zn(e){return"PRE"===e.nodeName||"CODE"===e.nodeName}function Xn(e,t){return e.isBlock=jn(e),e.isCode="CODE"===e.nodeName||e.parentNode.isCode,e.isBlank=function(e){return!zn(e)&&!function(e){return Yn(e,Ln)}(e)&&/^\s*$/i.test(e.textContent)&&!function(e){return Wn(e,Rn)}(e)&&!function(e){return Wn(e,Ln)}(e)}(e),e.flankingWhitespace=function(e,t){if(e.isBlock||t.preformattedCode&&e.isCode)return{leading:"",trailing:""};var r=(n=e.textContent,a=n.match(/^(([ \t\r\n]*)(\s*))[\s\S]*?((\s*?)([ \t\r\n]*))$/),{leading:a[1],leadingAscii:a[2],leadingNonAscii:a[3],trailing:a[4],trailingNonAscii:a[5],trailingAscii:a[6]});var n,a;r.leadingAscii&&Qn("left",e,t)&&(r.leading=r.leadingNonAscii);r.trailingAscii&&Qn("right",e,t)&&(r.trailing=r.trailingNonAscii);return{leading:r.leading,trailing:r.trailing}}(e,t),e}function Qn(e,t,r){var n,a,i;return"left"===e?(n=t.previousSibling,a=/ $/):(n=t.nextSibling,a=/^ /),n&&(3===n.nodeType?i=a.test(n.nodeValue):r.preformattedCode&&"CODE"===n.nodeName?i=!1:1!==n.nodeType||jn(n)||(i=a.test(n.textContent))),i}var ea=Array.prototype.reduce,ta=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function ra(e){if(!(this instanceof ra))return new ra(e);var t={rules:In,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",preformattedCode:!1,blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}return e}({},t,e),this.rules=new qn(this.options)}function na(e){var t=this;return ea.call(e.childNodes,(function(e,r){var n="";return 3===(r=new Xn(r,t.options)).nodeType?n=r.isCode?r.nodeValue:t.escape(r.nodeValue):1===r.nodeType&&(n=ia.call(t,r)),oa(e,n)}),"")}function aa(e){var t=this;return this.rules.forEach((function(r){"function"==typeof r.append&&(e=oa(e,r.append(t.options)))})),e.replace(/^[\t\r\n]+/,"").replace(/[\t\r\n\s]+$/,"")}function ia(e){var t=this.rules.forNode(e),r=na.call(this,e),n=e.flankingWhitespace;return(n.leading||n.trailing)&&(r=r.trim()),n.leading+t.replacement(r,e,this.options)+n.trailing}function oa(e,t){var r=function(e){for(var t=e.length;t>0&&"\n"===e[t-1];)t--;return e.substring(0,t)}(e),n=t.replace(/^\n*/,""),a=Math.max(e.length-r.length,t.length-n.length);return r+"\n\n".substring(0,a)+n}ra.prototype={turndown:function(e){if(!function(e){return null!=e&&("string"==typeof e||e.nodeType&&(1===e.nodeType||9===e.nodeType||11===e.nodeType))}(e))throw new TypeError(e+" is not a string, or an element/document/fragment node.");if(""===e)return"";var t=na.call(this,new Jn(e,this.options));return aa.call(this,t)},use:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)this.use(e[t]);else{if("function"!=typeof e)throw new TypeError("plugin must be a Function or an Array of Functions");e(this)}return this},addRule:function(e,t){return this.rules.add(e,t),this},keep:function(e){return this.rules.keep(e),this},remove:function(e){return this.rules.remove(e),this},escape:function(e){return ta.reduce((function(e,t){return e.replace(t[0],t[1])}),e)}};var sa=function(){return!1},ca=function(e){return e},ua=/\s{2,}(?![^<>]*<\/(pre|code|textarea)>)/g;function la(e){return e.replace(ua," ").trim()}var fa="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",da="["+fa+"]",ha=RegExp("^"+da+da+"*"),pa=RegExp(da+da+"*$"),ma=function(e,t,r){var n={},a=_((function(){return!!fa[e]()||"​…"!="​…"[e]()})),i=n[e]=a?t(ga):fa[e];r&&(n[r]=i),z(z.P+z.F*a,"String",n)},ga=ma.trim=function(e,t){return e=String(f(e)),1&t&&(e=e.replace(ha,"")),2&t&&(e=e.replace(pa,"")),e},va=ma,ya=A.parseInt,_a=va.trim,ba=/^[-+]?0[xX]/,Aa=8!==ya(fa+"08")||22!==ya(fa+"0x16")?function(e,t){var r=_a(String(e),3);return ya(r,t>>>0||(ba.test(r)?16:10))}:ya;z(z.G+z.F*(parseInt!=Aa),{parseInt:Aa});var wa=T.parseInt,xa=new RegExp("(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})","i"),ka=/[a-z]/i,Ea=/^[a-z]+$/i,Ma=/^[0-9]+$/i,Sa=/charset=([\w-]+)\b/;function Ta(e){return e.split("#")[0].replace(/\/$/,"")}z(z.S,"Array",{isArray:ge});var Ca=T.Array.isArray;var Da=function(e){if(Ca(e))return e},Oa=T.getIterator=function(e){var t=Ut(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return O(t.call(e))};var Na=function(e,t){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=Oa(e);!(n=(o=s.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){a=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}return r};var Pa=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var ja=function(e,t){return Da(e)||Na(e,t)||Pa()};function Ra(e,t){var r=t||Sn.parse(e),n=r.protocol,a=r.host,i=r.path,o=!1,s=i.split("/").reverse().reduce((function(e,t,r){var n=t;if(n.includes(".")){var a=n.split("."),i=ja(a,2),s=i[0],c=i[1];Ea.test(c)&&(n=s)}return xa.test(n)&&r<2&&(n=n.replace(xa,"")),0===r&&(o=ka.test(n)),function(e,t,r){var n=!0;return t<2&&Ma.test(e)&&e.length<3&&(n=!0),0===t&&"index"===e.toLowerCase()&&(n=!1),t<2&&e.length<3&&!r&&(n=!1),n}(n,r,o)&&e.push(n),e}),[]);return"".concat(n,"//").concat(a).concat(s.reverse().join("/"))}var za=new RegExp(".( |$)");function La(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return e.trim().split(/\s+/).slice(0,t).join(" ")}function Ya(e){var t="utf-8",r=Sa.exec(e);null!==r&&(e=ja(r,2)[1]);return sa(e)&&(t=e),t}var Wa=/^[A-Z_]+(\/\d\.\d)? /,Ia=/^([A-Z_]+) (.+) [A-Z]+\/(\d)\.(\d)$/,Ba=/^[A-Z]+\/(\d)\.(\d) (\d{3}) (.*)$/,qa=function(e,t){return function(e,t){var r,n=function(e){var t=e.indexOf("\r\n");return-1===t?e:e.slice(0,t)}(e);return t&&Wa.test(n)?Ha(e):null!==(r=n.match(Ia))?{method:r[1],url:r[2],version:{major:parseInt(r[3],10),minor:parseInt(r[4],10)},headers:Ha(e)}:null!==(r=n.match(Ba))?{version:{major:parseInt(r[1],10),minor:parseInt(r[2],10)},statusCode:parseInt(r[3],10),statusMessage:r[4],headers:Ha(e)}:Ha(e)}(function(e){e&&e._header&&(e=e._header);return e&&"function"==typeof e.toString?e.toString().trim():""}(e),t)};function Ha(e){var t,r,n,a={},i=function(e){var t=0;return e=e.toString(),function(){var n=e.indexOf("\r\n",t),a=e.indexOf("\n",t),i=e.indexOf("\r",t),o=[n,a,i].sort((function(e,t){return e>t?1:e<t?-1:0})).filter((function(e){return-1!==e}))[0];if(void 0!==o)return r(o,o===n?2:1);var s=e.length;return s===t?null:r(s,0)};function r(r,n){var a=e.substr(t,r-t);return t=r+n,a}}(e),o=i();for(Wa.test(o)&&(o=i());o;)" "!==o[0]&&"\t"!==o[0]?(r&&Fa(r,n,a),t=o.indexOf(":"),r=o.substr(0,t),n=o.substr(t+1).trim(),o=i()):(n+=" "+o.trim(),o=i());return r&&Fa(r,n,a),a}function Fa(e,t,r){switch(e=e.toLowerCase()){case"set-cookie":void 0!==r[e]?r[e].push(t):r[e]=[t];break;case"content-type":case"content-length":case"user-agent":case"referer":case"host":case"authorization":case"proxy-authorization":case"if-modified-since":case"if-unmodified-since":case"from":case"location":case"max-forwards":case"retry-after":case"etag":case"last-modified":case"server":case"age":case"expires":void 0===r[e]&&(r[e]=t);break;default:"string"==typeof r[e]?r[e]+=", "+t:r[e]=t}}var Ga=XMLHttpRequest;if(!Ga)throw new Error("missing XMLHttpRequest");Ua.log={trace:Va,debug:Va,info:Va,warn:Va,error:Va};function Ua(e,t){if("function"!=typeof t)throw new Error("Bad callback given: "+t);if(!e)throw new Error("No options given");var r=e.onResponse;if((e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e))).onResponse=r,e.verbose&&(Ua.log=function(){var e,t,r={},n=["trace","debug","info","warn","error"];for(t=0;t<n.length;t++)r[e=n[t]]=Va,"undefined"!=typeof console&&console&&console[e]&&(r[e]=Ka(console,e));return r}()),e.url&&(e.uri=e.url,delete e.url),!e.uri&&""!==e.uri)throw new Error("options.uri is a required argument");if("string"!=typeof e.uri)throw new Error("options.uri must be a string");for(var n=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],a=0;a<n.length;a++)if(e[n[a]])throw new Error("options."+n[a]+" is not supported");if(e.callback=t,e.method=e.method||"GET",e.headers=e.headers||{},e.body=e.body||null,e.timeout=e.timeout||Ua.DEFAULT_TIMEOUT,e.headers.host)throw new Error("Options.headers.host is not supported");e.json&&(e.headers.accept=e.headers.accept||"application/json","GET"!==e.method&&(e.headers["content-type"]="application/json"),"boolean"!=typeof e.json?e.body=JSON.stringify(e.json):"string"!=typeof e.body&&(e.body=JSON.stringify(e.body)));var i=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.join("&")};if(e.qs){var o="string"==typeof e.qs?e.qs:i(e.qs);-1!==e.uri.indexOf("?")?e.uri=e.uri+"&"+o:e.uri=e.uri+"?"+o}if(e.form){if("string"==typeof e.form)throw"form name unsupported";if("POST"===e.method){var s=(e.encoding||"application/x-www-form-urlencoded").toLowerCase();switch(e.headers["content-type"]=s,s){case"application/x-www-form-urlencoded":e.body=i(e.form).replace(/%20/g,"+");break;case"multipart/form-data":var c=function(e){var t={};t.boundry="-------------------------------"+Math.floor(1e9*Math.random());var r=[];for(var n in e)e.hasOwnProperty(n)&&r.push("--"+t.boundry+'\nContent-Disposition: form-data; name="'+n+'"\n\n'+e[n]+"\n");return r.push("--"+t.boundry+"--"),t.body=r.join(""),t.length=t.body.length,t.type="multipart/form-data; boundary="+t.boundry,t}(e.form);e.body=c.body,e.headers["content-type"]=c.type;break;default:throw new Error("unsupported encoding:"+s)}}}return e.onResponse=e.onResponse||Va,!0===e.onResponse&&(e.onResponse=t,e.callback=Va),!e.headers.authorization&&e.auth&&(e.headers.authorization="Basic "+function(e){var t,r,n,a,i,o,s,c,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,f=0,d="",h=[];if(!e)return e;do{t=e.charCodeAt(l++),r=e.charCodeAt(l++),n=e.charCodeAt(l++),a=(c=t<<16|r<<8|n)>>18&63,i=c>>12&63,o=c>>6&63,s=63&c,h[f++]=u.charAt(a)+u.charAt(i)+u.charAt(o)+u.charAt(s)}while(l<e.length);switch(d=h.join(""),e.length%3){case 1:d=d.slice(0,-2)+"==";break;case 2:d=d.slice(0,-1)+"="}return d}(e.auth.username+":"+e.auth.password)),function(e){var t=new Ga,r=!1,n=function(e){var t,r=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;try{t=location.href}catch(e){(t=document.createElement("a")).href="",t=t.href}var n=r.exec(t.toLowerCase())||[],a=r.exec(e.toLowerCase());return!(!a||a[1]==n[1]&&a[2]==n[2]&&(a[3]||("http:"===a[1]?80:443))==(n[3]||("http:"===n[1]?80:443)))}(e.uri),a="withCredentials"in t;if($a+=1,t.seq_id=$a,t.id=$a+": "+e.method+" "+e.uri,t._id=t.id,n&&!a){var i=new Error("Browser does not support cross-origin request: "+e.uri);return i.cors="unsupported",e.callback(i,t)}t.timeoutTimer=setTimeout((function(){r=!0;var n=new Error("ETIMEDOUT");return n.code="ETIMEDOUT",n.duration=e.timeout,Ua.log.error("Timeout",{id:t._id,milliseconds:e.timeout}),e.callback(n,t)}),e.timeout);var o={response:!1,loading:!1,end:!1};t.onreadystatechange=s,t.open(e.method,e.uri,!0),n&&(t.withCredentials=!!e.withCredentials);return t.send(e.body),t;function s(n){if(r)return Ua.log.debug("Ignoring timed out state change",{state:t.readyState,id:t.id});if(Ua.log.debug("State change",{state:t.readyState,id:t.id,timed_out:r}),t.readyState===Ga.OPENED)for(var a in Ua.log.debug("Request started",{id:t.id}),e.headers)t.setRequestHeader(a,e.headers[a]);else t.readyState===Ga.HEADERS_RECEIVED?c():t.readyState===Ga.LOADING?(c(),u()):t.readyState===Ga.DONE&&(c(),u(),function(){if(o.end)return;if(o.end=!0,Ua.log.debug("Request done",{id:t.id}),t.body=t.responseText,t.headers=qa(t.getAllResponseHeaders()),e.json)try{t.body=JSON.parse(t.responseText)}catch(r){return e.callback(r,t)}e.callback(null,t,t.body)}())}function c(){if(!o.response){if(o.response=!0,Ua.log.debug("Got response",{id:t.id,status:t.status}),clearTimeout(t.timeoutTimer),t.statusCode=t.status,n&&0==t.statusCode){var r=new Error("CORS request rejected: "+e.uri);return r.cors="rejected",o.loading=!0,o.end=!0,e.callback(r,t)}e.onResponse(null,t)}}function u(){o.loading||(o.loading=!0,Ua.log.debug("Response body loading",{id:t.id}))}}(e)}var $a=0;Ua.withCredentials=!1,Ua.DEFAULT_TIMEOUT=18e4,Ua.defaults=function(e,t){var r=function(t){return function(r,n){for(var a in r="string"==typeof r?{uri:r}:JSON.parse(JSON.stringify(r)),e)void 0===r[a]&&(r[a]=e[a]);return t(r,n)}},n=r(Ua);return n.get=r(Ua.get),n.post=r(Ua.post),n.put=r(Ua.put),n.head=r(Ua.head),n};function Va(){}function Ka(e,t){return function(r,n){"object"==typeof n&&(r+=" "+JSON.stringify(n));return e[t].call(e,r)}}["get","put","post","head"].forEach((function(e){var t=e.toUpperCase();Ua[e.toLowerCase()]=function(e){"string"==typeof e?e={method:t,uri:e}:(e=JSON.parse(JSON.stringify(e))).method=t;var r=[e].concat(Array.prototype.slice.apply(arguments,[1]));return Ua.apply(this,r)}})),Ua.couch=function(e,t){return"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,t=t||Va,Ua(e,(function(e,r,n){if(e)return t(e,r,n);if((r.statusCode<200||r.statusCode>299)&&n.error){for(var a in e=new Error("CouchDB error: "+(n.error.reason||n.error.error)),n)e[a]=n[a];return t(e,r,n)}return t(e,r,n)}))};var Ja=Ua,Za=Cn.browser?{}:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},Xa=new RegExp("^(".concat(["audio/mpeg","image/gif","image/jpeg","image/jpg"].join("|"),")$"),"i");function Qa(e){return new Ur((function(t,r){Ja(e,(function(e,n,a){e?r(e):t({body:a,response:n})}))}))}function ei(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e.statusMessage&&"OK"!==e.statusMessage||200!==e.statusCode){if(!e.statusCode)throw new Error("Unable to fetch content. Original exception was ".concat(e.error));if(!t)throw new Error("Resource returned a response status code of ".concat(e.statusCode," and resource was instructed to reject non-200 status codes."))}var r=e.headers,n=r["content-type"],a=r["content-length"];if(Xa.test(n))throw new Error("Content-type for this resource was ".concat(n," and is not allowed."));if(a>5242880)throw new Error("Content for this resource was too large. Maximum content length is ".concat(5242880,"."));return!0}function ti(e,t){return ri.apply(this,arguments)}function ri(){return(ri=Vr(s.mark((function e(t,r){var n,a,i,o,c,u=arguments;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=u.length>2&&void 0!==u[2]?u[2]:{},r=r||Sn.parse(encodeURI(t)),a=dt({url:r.href,headers:dt({},Za,n),timeout:1e4,jar:!0,encoding:null,gzip:!0,followAllRedirects:!0},"undefined"!=typeof window?{}:{followRedirect:!0}),e.next=5,Qa(a);case 5:return i=e.sent,o=i.response,c=i.body,e.prev=8,ei(o),e.abrupt("return",{body:c,response:o});case 13:return e.prev=13,e.t0=e.catch(8),e.abrupt("return",{error:!0,message:e.t0.message});case 16:case"end":return e.stop()}}),e,this,[[8,13]])})))).apply(this,arguments)}function ni(e,t,r){return e("meta[".concat(t,"]")).each((function(n,a){var i=e(a),o=i.attr(t);i.attr(r,o),i.removeAttr(t)})),e}var ai=A.Reflect,ii=ai&&ai.ownKeys||function(e){var t=Ee.f(O(e)),r=me.f;return r?t.concat(r(e)):t};z(z.S,"Reflect",{ownKeys:ii});var oi=T.Reflect.ownKeys,si=new RegExp("transparent|spacer|blank","i"),ci="mercury-parser-keep",ui=['iframe[src^="https://www.youtube.com"]','iframe[src^="https://www.youtube-nocookie.com"]','iframe[src^="http://www.youtube.com"]','iframe[src^="https://player.vimeo"]','iframe[src^="http://player.vimeo"]','iframe[src^="https://www.redditmedia.com"]'],li=["title","script","noscript","link","style","hr","embed","iframe","object"],fi=new RegExp("^(".concat(["src","srcset","sizes","type","href","class","id","alt","xlink:href","width","height"].join("|"),")$"),"i"),di=["ul","ol","table","div","button","form"].join(","),hi=["h2","h3","h4","h5","h6"].join(","),pi=["a","blockquote","dl","div","img","p","pre","table"].join(","),mi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),gi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),vi=new RegExp("pag(e|ing|inat)","i"),yi=new RegExp("^(".concat(["article","aside","blockquote","body","br","button","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","map","object","ol","output","p","pre","progress","section","table","tbody","textarea","tfoot","th","thead","tr","ul","video"].join("|"),")$"),"i"),_i=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","header","hidden","loader","login","menu","meta","nav","outbrain","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","taboola","tools"].join("|"),bi=new RegExp(_i,"i"),Ai=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"].join("|"),wi=new RegExp(Ai,"i");function xi(e){var t=!1;return e("br").each((function(r,n){var a=e(n),i=a.next().get(0);i&&"br"===i.tagName.toLowerCase()?(t=!0,a.remove()):t&&(t=!1,function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t(e);if(r){for(var a=e.nextSibling,i=t("<p></p>");a&&(!a.tagName||!yi.test(a.tagName));){var o=a,s=o.nextSibling;t(a).appendTo(i),a=s}return n.replaceWith(i),n.remove(),t}}(n,e,!0))})),e}function ki(e){return e=function(e){return e("span").each((function(t,r){var n=e(r);0===n.parents("p, div, li, figcaption").length&&Ei(n,e,"p")})),e}(e=function(e){return e("div").each((function(t,r){var n=e(r);0===n.children(pi).length&&Ei(n,e,"p")})),e}(e=xi(e)))}function Ei(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"p",n=e.get(0);if(!n)return t;var a,i=jo(n)||{},o=oi(i).map((function(e){return"".concat(e,"=").concat(i[e])})).join(" ");return a=t.browser?"noscript"===n.tagName.toLowerCase()?e.text():e.html():e.contents(),e.replaceWith("<".concat(r," ").concat(o,">").concat(a,"</").concat(r,">")),t}function Mi(e,t){return e.find("img").each((function(e,r){var n=t(r);!function(e,t){var r=wa(e.attr("height"),10),n=wa(e.attr("width"),10)||20;(r||20)<10||n<10?e.remove():r&&e.removeAttr("height")}(n,t),function(e,t){si.test(e.attr("src"))&&e.remove()}(n)})),t}var Si=function(e){if(Ca(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}},Ti=function(e,t,r){t in e?P.f(e,t,p(0,r)):e[t]=r};z(z.S+z.F*!Sr((function(e){})),"Array",{from:function(e){var t,r,n,a,i=st(e),o="function"==typeof this?this:Array,s=arguments.length,c=s>1?arguments[1]:void 0,u=void 0!==c,l=0,f=Ut(i);if(u&&(c=D(c,s>2?arguments[2]:void 0,2)),null==f||o==Array&&Ft(f))for(r=new o(t=ie(i.length));t>l;l++)Ti(r,l,u?c(i[l],l):i[l]);else for(a=f.call(i),r=new o;!(n=a.next()).done;l++)Ti(r,l,u?Bt(a,c,[n.value,l],!0):n.value);return r.length=l,r}});var Ci=T.Array.from,Di=V("iterator"),Oi=T.isIterable=function(e){var t=Object(e);return void 0!==t[Di]||"@@iterator"in t||mt.hasOwnProperty(Wt(t))};var Ni=function(e){if(Oi(Object(e))||"[object Arguments]"===Object.prototype.toString.call(e))return Ci(e)};var Pi=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")};var ji=function(e){return Si(e)||Ni(e)||Pi()};function Ri(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(0===n.length&&(n=ui),r){var a=Sn.parse(r),i=a.protocol,o=a.hostname;n=[].concat(ji(n),['iframe[src^="'.concat(i,"//").concat(o,'"]')])}return t(n.join(","),e).addClass(ci),t}function zi(e,t){return e.find("*").each((function(e,t){var r=jo(t);!function(e,t){if(e.attribs)e.attribs=t;else if(e.attributes){for(;e.attributes.length>0;)e.removeAttribute(e.attributes[0].name);oi(t).forEach((function(r){e.setAttribute(r,t[r])}))}}(t,oi(r).reduce((function(e,t){return fi.test(t)?dt({},e,ft({},t,r[t])):e}),{}))})),t(".".concat(ci),e).removeClass(ci),e}var Li=new RegExp("^(".concat(["br","b","i","label","hr","area","base","basefont","input","img","link","meta"].join("|"),")$"),"i"),Yi=[[".hentry",".entry-content"],["entry",".entry-content"],[".entry",".entry_content"],[".post",".postbody"],[".post",".post_body"],[".post",".post-body"]],Wi=new RegExp(["figure","photo","image","caption"].join("|"),"i"),Ii=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),Bi=new RegExp("entry-content-asset","i"),qi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),Hi=new RegExp("^(p|li|span|pre)$","i"),Fi=new RegExp("^(td|blockquote|ol|ul|dl)$","i"),Gi=new RegExp("^(address|form)$","i");function Ui(e){var t=e.attr("class"),r=e.attr("id"),n=0;return r&&(Ii.test(r)&&(n+=25),qi.test(r)&&(n-=25)),t&&(0===n&&(Ii.test(t)&&(n+=25),qi.test(t)&&(n-=25)),Wi.test(t)&&(n+=10),Bi.test(t)&&(n+=25)),n}var $i=A.parseFloat,Vi=va.trim,Ki=1/$i(fa+"-0")!=-1/0?function(e){var t=Vi(String(e),3),r=$i(t);return 0===r&&"-"==t.charAt(0)?-0:r}:$i;z(z.G+z.F*(parseFloat!=Ki),{parseFloat:Ki});var Ji=T.parseFloat;function Zi(e){return Ji(e.attr("score"))||null}function Xi(e){return(e.match(/,/g)||[]).length}var Qi=new RegExp("^(p|pre)$","i");function eo(e){var t=1,r=e.text().trim(),n=r.length;return n<25?0:(t+=Xi(r),t+=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"p",n=e/50;return n>0?(t=Qi.test(r)?n-2:n-1.25,Math.min(Math.max(t,0),3)):0}(n),":"===r.slice(-1)&&(t-=1),t)}function to(e,t,r){return e.attr("score",r),e}function ro(e,t,r){try{to(e,0,ao(e,t)+r)}catch(e){}return e}function no(e,t,r){var n=e.parent();return n&&ro(n,t,.25*r),e}function ao(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=Zi(e);return n||(n=io(e),r&&(n+=Ui(e)),no(e,t,n),n)}function io(e){var t=e.get(0).tagName;return Hi.test(t)?eo(e):"div"===t.toLowerCase()?5:Fi.test(t)?3:Gi.test(t)?-3:"th"===t.toLowerCase()?-5:0}function oo(e,t,r){e&&(!function(e,t){e.get(0)&&"span"===e.get(0).tagName&&Ei(e,t,"div")}(e,t),ro(e,t,r))}function so(e,t){return e("p, pre").not("[score]").each((function(r,n){var a=e(n),i=(a=to(a,0,ao(a,e,t))).parent(),o=io(a);oo(i,e,o),i&&oo(i.parent(),e,o/2)})),e}function co(e,t,r){if(!e.parent().length)return e;var n=Math.max(10,.25*t),a=r("<div></div>");return e.parent().children().each((function(i,o){var s=r(o);if(Li.test(o.tagName))return null;var c,u=Zi(s);if(u)if(s.get(0)===e.get(0))a.append(s);else{var l=0,f=Eo(s);if(f<.05&&(l+=20),f>=.5&&(l-=20),s.attr("class")===e.attr("class")&&(l+=.2*t),u+l>=n)return a.append(s);if("p"===o.tagName){var d=s.text(),h=ko(d);if(h>80&&f<.25)return a.append(s);if(h<=80&&0===f&&(c=d,za.test(c)))return a.append(s)}}return null})),1===a.children().length&&a.children().first().get(0)===e.get(0)?e:a}function uo(e,t){return t(di,e).each((function(e,r){var n=t(r);if(!(n.hasClass(ci)||n.find(".".concat(ci)).length>0)){var a=Zi(n);a||to(n,0,a=ao(n,t)),a<0?n.remove():function(e,t,r){if(!e.hasClass("entry-content-asset")){var n=la(e.text());if(Xi(n)<10){var a=t("p",e).length;if(t("input",e).length>a/3)return void e.remove();var i=n.length,o=t("img",e).length;if(i<25&&0===o)return void e.remove();var s=Eo(e);if(r<25&&s>.2&&i>75)return void e.remove();if(r>=25&&s>.5){var c=e.get(0).tagName.toLowerCase();if("ol"===c||"ul"===c){var u=e.prev();if(u&&":"===la(u.text()).slice(-1))return}return void e.remove()}t("script",e).length>0&&i<150&&e.remove()}}}(n,t,a)}})),t}var lo=function(e,t){if(!m(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},fo=P.f,ho=U.fastKey,po=b?"_s":"size",mo=function(e,t){var r,n=ho(t);if("F"!==n)return e._i[n];for(r=e._f;r;r=r.n)if(r.k==t)return r},go={getConstructor:function(e,t,r,n){var a=e((function(e,i){It(e,a,t,"_i"),e._t=t,e._i=xe(null),e._f=void 0,e._l=void 0,e[po]=0,null!=i&&$t(i,r,e[n],e)}));return yr(a.prototype,{clear:function(){for(var e=lo(this,t),r=e._i,n=e._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];e._f=e._l=void 0,e[po]=0},delete:function(e){var r=lo(this,t),n=mo(r,e);if(n){var a=n.n,i=n.p;delete r._i[n.i],n.r=!0,i&&(i.n=a),a&&(a.p=i),r._f==n&&(r._f=a),r._l==n&&(r._l=i),r[po]--}return!!n},forEach:function(e){lo(this,t);for(var r,n=D(e,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(e){return!!mo(lo(this,t),e)}}),b&&fo(a.prototype,"size",{get:function(){return lo(this,t)[po]}}),a},def:function(e,t,r){var n,a,i=mo(e,t);return i?i.v=r:(e._l=i={i:a=ho(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=i),n&&(n.n=i),e[po]++,"F"!==a&&(e._i[a]=i)),e},getEntry:mo,setStrong:function(e,t,r){Et(e,t,(function(e,r){this._t=lo(e,t),this._k=r,this._l=void 0}),(function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?St(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,St(1))}),r?"entries":"values",!r,!0),br(t)}},vo=V("species"),yo=function(e,t){return new(function(e){var t;return ge(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ge(t.prototype)||(t=void 0),m(t)&&null===(t=t[vo])&&(t=void 0)),void 0===t?Array:t}(e))(t)},_o=P.f,bo=function(e,t){var r=1==e,n=2==e,a=3==e,i=4==e,o=6==e,s=5==e||o,c=t||yo;return function(t,u,f){for(var d,h,p=st(t),m=l(p),g=D(u,f,3),v=ie(m.length),y=0,_=r?c(t,v):n?c(t,0):void 0;v>y;y++)if((s||y in m)&&(h=g(d=m[y],y,p),e))if(r)_[y]=h;else if(h)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:_.push(d)}else if(i)return!1;return o?-1:a||i?i:_}}(0);!function(e,t,r,n,a,i){var o=A[e],s=o,c=a?"set":"add",u=s&&s.prototype,l={};b&&"function"==typeof s&&(i||u.forEach&&!_((function(){(new s).entries().next()})))?(s=t((function(t,r){It(t,s,e,"_c"),t._c=new o,null!=r&&$t(r,a,t[c],t)})),bo("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),(function(e){var t="add"==e||"set"==e;!(e in u)||i&&"clear"==e||j(s.prototype,e,(function(r,n){if(It(this,s,e),!t&&i&&!m(r))return"get"==e&&void 0;var a=this._c[e](0===r?0:r,n);return t?this:a}))})),i||_o(s.prototype,"size",{get:function(){return this._c.size}})):(s=n.getConstructor(t,e,a,c),yr(s.prototype,r),U.NEED=!0),Z(s,e),l[e]=s,z(z.G+z.W+z.F,l),i||n.setStrong(s,e,a)}("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return go.def(lo(this,"Set"),e=0===e?0:e,e)}},go);z(z.P+z.R,"Set",{toJSON:function(e){return function(){if(Wt(this)!=e)throw TypeError(e+"#toJSON isn't generic");return function(e,t){var r=[];return $t(e,!1,r.push,r,t),r}(this)}}("Set")});var Ao;Ao="Set",z(z.S,Ao,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}});!function(e){z(z.S,e,{from:function(e){var t,r,n,a,i=arguments[1];return C(this),(t=void 0!==i)&&C(i),null==e?new this:(r=[],t?(n=0,a=D(i,arguments[2],2),$t(e,!1,(function(e){r.push(a(e,n++))}))):$t(e,!1,r.push,r),new this(r))}})}("Set");var wo=T.Set;function xo(e,t,r){return["href","src"].forEach((function(e){return function(e,t,r){var n=e("base").attr("href");e("[".concat(r,"]")).each((function(e,a){var i=jo(a)[r];if(i){var o=Sn.resolve(n||t,i);Ro(a,r,o)}}))}(t,r,e)})),function(e,t,r){e("[srcset]",r).each((function(e,r){var n=jo(r).srcset;if(n){var a=n.match(/(?:\s*)(\S+(?:\s*[\d.]+[wx])?)(?:\s*,\s*)?/g);if(!a)return;var i=a.map((function(e){var r=e.trim().replace(/,$/,"").split(/\s+/);return r[0]=Sn.resolve(t,r[0]),r.join(" ")}));Ro(r,"srcset",ji(new wo(i)).join(", "))}}))}(t,r,e),e}function ko(e){return e.trim().replace(/\s+/g," ").length}function Eo(e){var t=ko(e.text()),r=ko(e.find("a").text());return t>0?r/t:0===t&&r>0?1:0}var Mo=X.f("iterator");ee("asyncIterator"),ee("observable");var So=T.Symbol,To=t((function(e){function t(e){return(t="function"==typeof So&&"symbol"==typeof Mo?function(e){return typeof e}:function(e){return e&&"function"==typeof So&&e.constructor===So&&e!==So.prototype?"symbol":typeof e})(e)}function r(n){return"function"==typeof So&&"symbol"===t(Mo)?e.exports=r=function(e){return t(e)}:e.exports=r=function(e){return e&&"function"==typeof So&&e.constructor===So&&e!==So.prototype?"symbol":t(e)},r(n)}e.exports=r}));function Co(e,t,r){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=t.filter((function(e){return-1!==r.indexOf(e)})),i=!0,o=!1,s=void 0;try{for(var c,u=function(){var t=c.value,r=e("meta[".concat("name",'="').concat(t,'"]')).map((function(t,r){return e(r).attr("value")})).toArray().filter((function(e){return""!==e}));if(1===r.length){var a;if(n)a=No(r[0],e);else a=ja(r,1)[0];return{v:a}}},l=Oa(a);!(i=(c=l.next()).done);i=!0){var f=u();if("object"===To(f))return f.v}}catch(e){o=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(o)throw s}}return null}function Do(e,t){return!(e.children().length>t)&&!function(e){return void 0!==e.parents().toArray().find((function(e){var t=jo(e),r=t.class,n=t.id;return"".concat(r," ").concat(n).includes("comment")}))}(e)}function Oo(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!0,i=!1,o=void 0;try{for(var s,c=Oa(t);!(a=(s=c.next()).done);a=!0){var u=s.value,l=e(u);if(1===l.length){var f=e(l[0]);if(Do(f,r)){var d=void 0;if(d=n?f.text():f.html())return d}}}}catch(e){i=!0,o=e}finally{try{a||null==c.return||c.return()}finally{if(i)throw o}}return null}function No(e,t){var r=t("<span>".concat(e,"</span>")).text();return""===r?e:r}function Po(e){return e.text().trim().length>=100}function jo(e){var t=e.attribs,r=e.attributes;return!t&&r?oi(r).reduce((function(e,t){var n=r[t];return n.name&&n.value?(e[n.name]=n.value,e):e}),{}):t}function Ro(e,t,r){return e.attribs?e.attribs[t]=r:e.attributes&&e.setAttribute(t,r),e}var zo=new RegExp("https?://","i"),Lo=new RegExp("".concat(".(png|gif|jpe?g)"),"i"),Yo=new RegExp("".concat(".(png|gif|jpe?g)","(\\?\\S+)?(\\s*[\\d.]+[wx])"),"i"),Wo=["script","style","form"].join(",");function Io(e){return e("img").each((function(t,r){var n=jo(r);oi(n).forEach((function(t){var a=n[t];if("srcset"!==t&&zo.test(a)&&Yo.test(a))e(r).attr("srcset",a);else if("src"!==t&&"srcset"!==t&&zo.test(a)&&Lo.test(a)){var i=function(e){try{var t=JSON.parse(e).src;if("string"==typeof t)return t}catch(e){return!1}return!1}(a);i?e(r).attr("src",i):e(r).attr("src",a)}}))})),e}function Bo(e,t){return"comment"===t.type}function qo(e){return e(Wo).remove(),e=function(e){return e.root().find("*").contents().filter(Bo).remove(),e}(e)}var Ho,Fo={create:(Ho=Vr(s.mark((function e(t,r,n){var a,i,o=arguments;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=o.length>3&&void 0!==o[3]?o[3]:{},!r){e.next=6;break}i={body:r,response:{statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}},alreadyDecoded:!0},e.next=9;break;case 6:return e.next=8,ti(t,n,a);case 8:i=e.sent;case 9:if(!i.error){e.next=12;break}return i.failed=!0,e.abrupt("return",i);case 12:return e.abrupt("return",this.generateDoc(i));case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return Ho.apply(this,arguments)}),generateDoc:function(e){var t=e.body,r=e.response,n=e.alreadyDecoded,a=void 0!==n&&n,i=r.headers["content-type"],o=void 0===i?"":i;if(!o.includes("html")&&!o.includes("text"))throw new Error("Content does not appear to be text.");var s=this.encodeDoc({content:t,contentType:o,alreadyDecoded:a});if(0===s.root().children().length)throw new Error("No children, likely a bad parse.");return s=qo(s=Io(s=function(e){return e=ni(e,"content","value"),e=ni(e,"property","name")}(s)))},encodeDoc:function(e){var t=e.content,r=e.contentType,n=e.alreadyDecoded;if(void 0!==n&&n)return Cn.load(t);var a=Ya(r),i=ca(t,a),o=Cn.load(i),s=o(Cn.browser?"meta[http-equiv=content-type]":"meta[http-equiv=content-type i]").attr("content")||o("meta[charset]").attr("charset"),c=Ya(s);return s&&c!==a&&(i=ca(t,c),o=Cn.load(i)),o}},Go=s.mark(Uo);function Uo(){var e,t,r=arguments;return s.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:e=r.length>0&&void 0!==r[0]?r[0]:1,t=r.length>1&&void 0!==r[1]?r[1]:1;case 2:if(!(e<=t)){n.next=7;break}return n.next=5,e+=1;case 5:n.next=2;break;case 7:case"end":return n.stop()}}),Go,this)}function $o(e){return!!e.hostname}var Vo=Object.assign,Ko=!Vo||_((function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach((function(e){t[e]=e})),7!=Vo({},e)[r]||Object.keys(Vo({},t)).join("")!=n}))?function(e,t){for(var r=st(e),n=arguments.length,a=1,i=me.f,o=h.f;n>a;)for(var s,c=l(arguments[a++]),u=i?pe(c).concat(i(c)):pe(c),f=u.length,d=0;f>d;)o.call(c,s=u[d++])&&(r[s]=c[s]);return r}:Vo;z(z.S+z.F,"Object",{assign:Ko});var Jo=T.Object.assign,Zo=function(e,t){return t.reduce((function(t,r){return t[r]=e,t}),{})};function Xo(e){return e.supportedDomains?Zo(e,[e.domain].concat(ji(e.supportedDomains))):Zo(e,[e.domain])}var Qo={};function es(e){return e&&e.domain?(Jo(Qo,Xo(e)),Qo):{error:!0,message:"Unable to add custom extractor. Invalid parameters."}}var ts={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},rs={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var r=t.browser?t(e.text()):e.children();return 1===r.length&&void 0!==r.get(0)&&"img"===r.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},ns={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var r=JSON.parse(e.attr("data-props")).sources[0].src,n=t("<img />").attr("src",r);e.replaceWith(n)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},as={domain:"medium.com",title:{selectors:["h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:["article"],transforms:{"section span:first-of-type":function(e){var t=e.html();1===t.length&&/^[a-zA-Z()]+$/.test(t)&&e.replaceWith(t)},iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,r=decodeURIComponent(e.attr("data-thumbnail")),n=e.parents("figure");if(t.test(r)){var a=r.match(t),i=ja(a,2),o=(i[0],i[1]);e.attr("src","https://www.youtube.com/embed/".concat(o));var s=n.find("figcaption");n.empty().append([e,s])}else n.remove()},figure:function(e){if(!(e.find("iframe").length>0)){var t=e.find("img").slice(-1)[0],r=e.find("figcaption");e.empty().append([t,r])}},img:function(e){wa(e.attr("width"),10)<100&&e.remove()}},clean:["span a","svg"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:{selectors:[]},excerpt:{selectors:[]}},is={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".byline-name",".author"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"],['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",".pane-node-body"],transforms:{".pane-node-body":function(e,t){var r=ja(is.lead_image_url.selectors[0],2),n=r[0],a=r[1],i=t(n).attr(a);i&&e.prepend('<img src="'.concat(i,'" />'))}},clean:[]}},os={domain:"genius.com",title:{selectors:["h1"]},author:{selectors:["h2 a"]},date_published:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.release_date}]]},dek:{selectors:[]},lead_image_url:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.album.cover_art_url}]]},content:{selectors:[".lyrics"],transforms:{},clean:[]}},ss={domain:"wired.jp",title:{selectors:['h1[data-testid="ContentHeaderHed"]',"h1.post-title"]},author:{selectors:[['meta[name="article:author"]',"value"],'p[itemprop="author"]']},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time","datetime"]]},dek:{selectors:['div[class^="ContentHeaderDek"]',".post-intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[data-attribute-verso-pattern="article-body"]',"article.article-detail"],transforms:{"img[data-original]":function(e){var t=e.attr("data-original"),r=e.attr("src"),n=Sn.resolve(r,t);e.attr("src",n)}},clean:[".post-category","time","h1.post-title",".social-area-syncer"]}},cs={domain:"www.abendblatt.de",title:{selectors:["h2.article__header__headline"]},author:{selectors:["span.author-info__name-text"]},date_published:{selectors:[["time.teaser-stream-time","datetime"],["time.article__header__date","datetime"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__body"],transforms:{p:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",r=0,n=e.text();r<n.length;r+=1){var a=n.charCodeAt(r);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":a>33&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null},div:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",r=0,n=e.text();r<n.length;r+=1){var a=n.charCodeAt(r);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":a>33&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null}},clean:[]}},us=Object.freeze({BloggerExtractor:ts,NYMagExtractor:rs,WikipediaExtractor:{domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},TwitterExtractor:{domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var r=e.find(".tweet"),n=t('<div id="TWEETS_GO_HERE"></div>');n.append(r),e.replaceWith(n)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},NYTimesExtractor:{domain:"www.nytimes.com",title:{selectors:['h1[data-testid="headline"]',"h1.g-headline",'h1[itemprop="headline"]',"h1.headline","h1 .balancedHeadline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline",['meta[name="byl"]',"value"]]},content:{selectors:["div.g-blocks",'section[name="articleBody"]',"article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src");t=t.replace("{{size}}",640),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},TheAtlanticExtractor:{domain:"www.theatlantic.com",title:{selectors:["h1",".c-article-header__hed"]},author:{selectors:[['meta[name="author"]',"value"],".c-byline__author"]},content:{selectors:["article",".article-body"],transforms:[],clean:[".partner-box",".callout",".c-article-writer__image",".c-article-writer__content",".c-letters-cta__text",".c-footer__logo",".c-recirculation-link",".twitter-tweet"]},dek:{selectors:[['meta[name="description"]',"value"]]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},NewYorkerExtractor:{domain:"www.newyorker.com",title:{selectors:['h1[class^="content-header"]','h1[class^="ArticleHeader__hed"]','h1[class*="ContentHeaderHed"]',['meta[name="og:title"]',"value"]]},author:{selectors:['article header div[class^="BylinesWrapper"]',['meta[name="article:author"]',"value"],'div[class^="ArticleContributors"] a[rel="author"]','article header div[class*="Byline__multipleContributors"]']},content:{selectors:[".article__body","article.article.main-content",'main[class^="Layout__content"]'],transforms:{".caption__text":"figcaption",".caption__credit":"figcaption"},clean:['footer[class^="ArticleFooter__footer"]',"aside"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],"time.content-header__publish-date",['meta[name="pubdate"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:['div[class^="ContentHeaderDek"]',"div.content-header__dek",'h2[class^="ArticleHeader__dek"]']},next_page_url:null,excerpt:null},WiredExtractor:{domain:"www.wired.com",title:{selectors:['h1[data-testId="ContentHeaderHed"]']},author:{selectors:[['meta[name="article:author"]',"value"],'a[rel="author"]']},content:{selectors:["article.article.main-content","article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo",".alert-message"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},MSNExtractor:{domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},YahooExtractor:{domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},BuzzfeedExtractor:{domain:"www.buzzfeed.com",supportedDomains:["www.buzzfeednews.com"],title:{selectors:["h1.embed-headline-title"]},author:{selectors:['a[data-action="user/username"]',"byline__author",['meta[name="author"]',"value"]]},content:{selectors:[['div[class^="featureimage_featureImageWrapper"]',".js-subbuzz-wrapper"],[".js-subbuzz-wrapper"]],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print",".js-inline-share-bar",".js-ad-placement"]},date_published:{selectors:[["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[".embed-headline-description"]},next_page_url:null,excerpt:null},WikiaExtractor:{domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},LittleThingsExtractor:{domain:"www.littlethings.com",title:{selectors:['h1[class*="PostHeader"]',"h1.post-title"]},author:{selectors:['div[class^="PostHeader__ScAuthorNameSection"]',['meta[name="author"]',"value"]]},content:{selectors:['section[class*="PostMainArticle"]',".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},PoliticoExtractor:{domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[['div[itemprop="author"] meta[itemprop="name"]',"value"],".story-meta__authors .vcard",".story-main-content .byline .vcard"]},content:{selectors:[[".story-text"],".story-main-content",".story-core"],transforms:[],clean:["figcaption",".story-meta",".ad"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"],[".story-meta__details time[datetime]","datetime"],[".story-main-content .timestamp time[datetime]","datetime"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]}},DeadspinExtractor:{domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com","avclub.com","clickhole.com","splinternews.com","theonion.com","theroot.com","thetakeout.com","theinventory.com"],title:{selectors:["header h1","h1.headline"]},author:{selectors:['a[data-ga*="Author"]',".author"]},content:{selectors:[".js_post-content",".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/".concat(t))}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},BroadwayWorldExtractor:{domain:"www.broadwayworld.com",title:{selectors:["h1[itemprop=headline]","h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},ApartmentTherapyExtractor:ns,MediumExtractor:as,WwwTmzComExtractor:{domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article__published-at",".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__blocks",".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},WwwWashingtonpostComExtractor:{domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-author-name"]},date_published:{selectors:[['.author-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return e.has("img,iframe,video").length>0?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},WwwHuffingtonpostComExtractor:{domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},NewrepublicComExtractor:{domain:"newrepublic.com",title:{selectors:["h1.article-headline"]},author:{selectors:["span.AuthorList"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["div.article-body"]],transforms:{},clean:["aside"]}},MoneyCnnComExtractor:{domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[['meta[name="author"]',"value"],".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},WwwThevergeComExtractor:{domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},WwwCnnComExtractor:{domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){return e.html()?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},WwwAolComExtractor:{domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},WwwYoutubeComExtractor:{domain:"www.youtube.com",title:{selectors:[['meta[name="title"]',"value"],".watch-title","h1.watch-title-container"]},author:{selectors:[['link[itemprop="name"]',"content"],".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["#player-container-outer","ytd-expandable-video-description-body-renderer #description",["#player-api","#description"]],transforms:{"#player-api":function(e,t){var r=t('meta[itemProp="videoId"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'.concat(r,'" frameborder="0" allowfullscreen></iframe>'))},"#player-container-outer":function(e,t){var r=t('meta[itemProp="videoId"]').attr("value"),n=t('meta[itemProp="description"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'.concat(r,'" frameborder="0" allowfullscreen></iframe>\n <div><span>').concat(n,"</span></div>"))}},clean:[]}},WwwTheguardianComExtractor:{domain:"www.theguardian.com",title:{selectors:["h1",".content__headline"]},author:{selectors:['address[data-link-name="byline"]',"p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:['div[data-gu-name="standfirst"]',".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincontent",".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},WwwSbnationComExtractor:{domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["p.c-entry-summary.p-dek","h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},WwwBloombergComExtractor:{domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title",'h1[class^="headline"]',"h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author",'p[class*="author"]']},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"],['meta[name="parsely-pub-date"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="og:image"]',"content"]]},content:{selectors:[".article-body__content",".body-content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},WwwBustleComExtractor:{domain:"www.bustle.com",title:{selectors:["h1","h1.post-page__title"]},author:{selectors:['a[href*="profile"]',"div.content-meta__author"]},date_published:{selectors:[["time","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article",".post-page__body"],transforms:{},clean:[]}},WwwNprOrgExtractor:{domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},WwwRecodeNetExtractor:{domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},QzComExtractor:{domain:"qz.com",title:{selectors:["article header h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[name="twitter:image"]',"content"]]},content:{selectors:["#article-content"],transforms:{},clean:[]}},WwwDmagazineComExtractor:{domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago",format:"MMMM D, YYYY h:mm a"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},WwwReutersComExtractor:{domain:"www.reuters.com",title:{selectors:['h1[class*="ArticleHeader-headline-"]',"h1.article-headline"]},author:{selectors:[['meta[name="og:article:author"]',"value"],".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ArticleBodyWrapper","#article-text"],transforms:{".article-subtitle":"h4"},clean:['div[class^="ArticleBody-byline-container-"]',"#article-byline .author"]}},MashableComExtractor:{domain:"mashable.com",title:{selectors:["header h1","h1.title"]},author:{selectors:[['meta[name="article:author"]',"value"],"span.author_name a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article","section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},WwwChicagotribuneComExtractor:{domain:"www.chicagotribune.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["div.article_byline span:first-of-type"]},date_published:{selectors:["time"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article"],transforms:{},clean:[]}},WwwVoxComExtractor:{domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},NewsNationalgeographicComExtractor:{domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var r=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");r&&e.prepend(t('<img class="__image-lead__" src="'.concat(r,'"/>')))}},clean:[".pull-quote.pull-quote--large"]}},WwwNationalgeographicComExtractor:{domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".Article__Headline__Desc",".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.Article__Content",[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var r=e.children().first();if(r.hasClass("imageGroup")){var n=r.find(".media--medium__container").children().first(),a=n.data("platform-image1-path"),i=n.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n <img src="'.concat(a,'"/>\n <img src="').concat(i,'"/>\n </div>')))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'.concat(o,'"/>')))}}},clean:[".pull-quote.pull-quote--small"]}},WwwLatimesComExtractor:{domain:"www.latimes.com",title:{selectors:["h1.headline",".trb_ar_hl"]},author:{selectors:['a[data-click="standardBylineAuthorName"]',['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".page-article-body",".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},PagesixComExtractor:{domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},ThefederalistpapersOrgExtractor:{domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:[".author-meta-title","main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content"],transforms:{},clean:["header",".article-sharing",".after-article",".type-commenting",".more-posts",["p[style]"]]}},WwwCbssportsComExtractor:{domain:"www.cbssports.com",title:{selectors:[".Article-headline",".article-headline"]},author:{selectors:[".ArticleAuthor-nameText",".author-name"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]],timezone:"UTC"},dek:{selectors:[".Article-subline",".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwMsnbcComExtractor:is,WwwThepoliticalinsiderComExtractor:{domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},WwwMentalflossComExtractor:{domain:"www.mentalfloss.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.title",".title-group",".inner"]},author:{selectors:['a[data-vars-label*="authors"]',".field-name-field-enhanced-authors"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article main","div.field.field-name-body"],transforms:{},clean:["small"]}},AbcnewsGoComExtractor:{domain:"abcnews.go.com",title:{selectors:['div[class*="Article_main__body"] h1',".article-header h1"]},author:{selectors:[".ShareByline span:nth-child(2)",".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".ShareByline",".timestamp"],format:"MMMM D, YYYY h:mm a",timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article",".article-copy"],transforms:{},clean:[]}},WwwNydailynewsComExtractor:{domain:"www.nydailynews.com",title:{selectors:["h1.headline","h1#ra-headline"]},author:{selectors:[".article_byline span",['meta[name="parsely-author"]',"value"]]},date_published:{selectors:["time",['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article","article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},WwwCnbcComExtractor:{domain:"www.cnbc.com",title:{selectors:["h1.title","h1.ArticleHeader-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story","div.ArticleBody-articleBody"],transforms:{},clean:[]}},WwwPopsugarComExtractor:{domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ObserverComExtractor:{domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},PeopleComExtractor:{domain:"people.com",title:{selectors:[".article-header h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"],"a.author.url.fn"]},date_published:{selectors:[".mntl-attribution__item-date",['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[".article-header h2"]},content:{selectors:['div[class^="loc article-content"]',"div.article-body__inner"],transforms:{},clean:[]}},WwwUsmagazineComExtractor:{domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.author","a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-content"],transforms:{},clean:[".module-related"]}},WwwRollingstoneComExtractor:{domain:"www.rollingstone.com",title:{selectors:["h1.l-article-header__row--title","h1.content-title"]},author:{selectors:["a.c-byline__link","a.content-author.tracked-offpage"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],"time.content-published-date"],timezone:"America/New_York"},dek:{selectors:["h2.l-article-header__row--lead",".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".l-article-content",[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".c-related-links-wrapper",".module-related"]}},twofortysevensportsComExtractor:{domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".article-cnt__author",".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body","section.body.article"],transforms:{},clean:[]}},UproxxComExtractor:{domain:"uproxx.com",title:{selectors:["div.entry-header h1"]},author:{selectors:[['meta[name="qc:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},WwwEonlineComExtractor:{domain:"www.eonline.com",title:{selectors:["h1.article-detail__title","h1.article__title"]},author:{selectors:[".article-detail__meta__author",".entry-meta__author a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-detail__main-content section"],[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},WwwMiamiheraldComExtractor:{domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},WwwRefinery29ComExtractor:{domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},WwwMacrumorsComExtractor:{domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:['article a[rel="author"]',".author-url"]},date_published:{selectors:[["time","datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article",".article"],transforms:{},clean:[]}},WwwAndroidcentralComExtractor:{domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-body"],transforms:{},clean:[".intro","blockquote"]}},WwwSiComExtractor:{domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="published"]',"value"]],timezone:"America/New_York"},dek:{selectors:[".m-detail-header--dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".m-detail--body",["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},WwwRawstoryComExtractor:{domain:"www.rawstory.com",title:{selectors:[['meta[name="og:title"]',"value"],".blog-title"]},author:{selectors:["div.main-post-head .social-author__name",".blog-author a:first-of-type"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body",".blog-content"],transforms:{},clean:[]}},WwwCnetComExtractor:{domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["span.author","a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".c-head_dek",".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},WwwTodayComExtractor:{domain:"www.today.com",title:{selectors:["h1.article-hero-headline__htag","h1.entry-headline"]},author:{selectors:["span.byline-name",['meta[name="author"]',"value"]]},date_published:{selectors:["time[datetime]",['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__content",".entry-container"],transforms:{},clean:[".label-comment"]}},WwwAlComExtractor:{domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwThepennyhoarderComExtractor:{domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text",".single-post-content-inner"],transforms:{},clean:[]}},WwwWesternjournalismComExtractor:{domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},WwwAmericanowComExtractor:{domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},ScienceflyComExtractor:{domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},HellogigglesComExtractor:{domain:"hellogiggles.com",title:{selectors:[['meta[name="og:title"]',"value"],".title"]},author:{selectors:[".byline-wrapper span.author_name",".author-link"]},date_published:{selectors:[['meta[property="article:published_time"]',"content"],['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".main-content",".entry-content"],transforms:{},clean:[]}},ThoughtcatalogComExtractor:{domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["cite a","div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark","figcaption"]}},WwwInquisitrComExtractor:{domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},WwwNbcnewsComExtractor:{domain:"www.nbcnews.com",title:{selectors:["div.article-hero-headline h1","div.article-hed h1"]},author:{selectors:["div.article-inline-byline span.byline-name","span.byline_author"]},date_published:{selectors:[['meta[name="article:published"]',"value"],[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__content","div.article-body"],transforms:{},clean:[]}},FortuneComExtractor:{domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},WwwLinkedinComExtractor:{domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[".main-author-card h3",['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[".base-main-card__metadata",['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content__body",["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},ObamawhitehouseArchivesGovExtractor:{domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},WwwOpposingviewsComExtractor:{domain:"www.opposingviews.com",title:{selectors:["h1.m-detail-header--title","h1.title"]},author:{selectors:[['meta[name="author"]',"value"],"div.date span span a"]},date_published:{selectors:[['meta[name="published"]',"value"],['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".m-detail--body",".article-content"],transforms:{},clean:[".show-for-small-only"]}},WwwProspectmagazineCoUkExtractor:{domain:"www.prospectmagazine.co.uk",title:{selectors:[".blog-header__title",".page-title"]},author:{selectors:[".blog-header__author-link",".aside_author .title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],".post-info"],timezone:"Europe/London"},dek:{selectors:[".blog-header__description",".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog__container","article .post_content"],transforms:{},clean:[]}},ForwardComExtractor:{domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".post-author a",".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content-container article",[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".post-author",".donate-box",".message",".subtitle"]}},WwwQdailyComExtractor:{domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},GothamistComExtractor:{domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".article-metadata:nth-child(3) .byline-author",".author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],"abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body",".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},WwwFoolComExtractor:{domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"],".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"],"header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".tailwind-article-body",".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'.concat(t,'"/></figure>'))},".caption":"figcaption"},clean:["#pitch"]}},WwwSlateComExtractor:{domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},IciRadioCanadaCaExtractor:{domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],format:"YYYY-MM-DD|HH[h]mm",timezone:"America/New_York"},dek:{selectors:["div.lead-container",".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.document-content-style",[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},WwwFortinetComExtractor:{domain:"www.fortinet.com",title:{selectors:["h1"]},author:{selectors:[".b15-blog-meta__author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}}}},WwwFastcompanyComExtractor:{domain:"www.fastcompany.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".post__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post__article"]}},BlisterreviewComExtractor:{domain:"blisterreview.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:["span.author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.entry-date","datetime"],['meta[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[itemprop="image"]',"content"],['meta[name="twitter:image"]',"content"],["img.attachment-large","src"]]},content:{selectors:[[".elementor-section-wrap",".elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text"]],transforms:{figcaption:"p"},clean:[".comments-area"]}},NewsMynaviJpExtractor:{domain:"news.mynavi.jp",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.articleHeader_name","main div.article-author a.article-author__name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body","main article div"],transforms:{img:function(e){var t=e.attr("data-original");""!==t&&e.attr("src",t)}},clean:[]}},ClinicaltrialsGovExtractor:{domain:"clinicaltrials.gov",title:{selectors:["h1.tr-solo_record"]},author:{selectors:["div#sponsor.tr-info-text"]},date_published:{selectors:['div:has(> span.term[data-term="Last Update Posted"])']},content:{selectors:["div#tab-body"],transforms:{},clean:[".usa-alert> img"]}},GithubComExtractor:{domain:"github.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[]},date_published:{selectors:[["relative-time[datetime]","datetime"],['span[itemprop="dateModified"] relative-time',"datetime"]]},dek:{selectors:[['meta[name="description"]',"value"],'span[itemprop="about"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#readme article"]],transforms:{},clean:[]}},WwwRedditComExtractor:{domain:"www.reddit.com",title:{selectors:['div[data-test-id="post-content"] h1','div[data-test-id="post-content"] h2']},author:{selectors:['div[data-test-id="post-content"] a[href*="user/"]']},date_published:{selectors:['div[data-test-id="post-content"] span[data-click-id="timestamp"]','div[data-test-id="post-content"] a[data-click-id="timestamp"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[['div[data-test-id="post-content"] p'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])','div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] a'],'div[data-test-id="post-content"]'],transforms:{'div[role="img"]':function(e){var t=e.find("img"),r=e.css("background-image");return 1===t.length&&r?(t.attr("src",r.match(/\((.*?)\)/)[1].replace(/('|")/g,"")),t):e}},clean:[".icon",'span[id^="PostAwardBadges"]','div a[data-test-id="comments-page-link-num-comments"]']}},OtrsComExtractor:{domain:"otrs.com",title:{selectors:["#main article h1"]},author:{selectors:["div.dateplusauthor a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main article"],defaultCleaner:!1,transforms:{},clean:["div.dateplusauthor","div.gr-12.push-6.footershare","#atftbx","div.category-modul"]}},WwwOssnewsJpExtractor:{domain:"www.ossnews.jp",title:{selectors:["#alpha-block h1.hxnewstitle"]},author:null,date_published:{selectors:["p.fs12"],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#alpha-block .section:has(h1.hxnewstitle)"],defaultCleaner:!1,transforms:{},clean:[]}},BuzzapJpExtractor:{domain:"buzzap.jp",title:{selectors:["h1.entry-title"]},author:null,date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ctiframe"],defaultCleaner:!1,transforms:{},clean:[]}},WwwAsahiComExtractor:{domain:"www.asahi.com",title:{selectors:["main h1",".ArticleTitle h1"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main"],defaultCleaner:!1,transforms:{},clean:["div.AdMod","div.LoginSelectArea","time","div.notPrint"]}},WwwSanwaCoJpExtractor:{domain:"www.sanwa.co.jp",title:{selectors:["#newsContent h1"]},author:null,date_published:{selectors:["dl.date"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#newsContent"],defaultCleaner:!1,transforms:{},clean:["#smartphone","div.sns_box","div.contentFoot"]}},WwwElecomCoJpExtractor:{domain:"www.elecom.co.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["p.section-last"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["td.TableMain2"],defaultCleaner:!1,transforms:{table:function(e){e.attr("width","auto")}},clean:[]}},ScanNetsecurityNeJpExtractor:{domain:"scan.netsecurity.ne.jp",title:{selectors:["header.arti-header h1.head"]},author:null,date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["header.arti-header p.arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.arti-content.arti-content--thumbnail"],defaultCleaner:!1,transforms:{},clean:["aside.arti-giga"]}},JvndbJvnJpExtractor:{domain:"jvndb.jvn.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["div.modifytxt:nth-child(2)"],format:"YYYY/MM/DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#news-list"],defaultCleaner:!1,transforms:{},clean:[]}},GeniusComExtractor:os,WwwJnsaOrgExtractor:{domain:"www.jnsa.org",title:{selectors:["#wgtitle h2"]},author:null,date_published:null,dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main_area"],transforms:{},clean:["#pankuzu","#side"]}},PhpspotOrgExtractor:{domain:"phpspot.org",title:{selectors:["h3.hl"]},author:null,date_published:{selectors:["h4.hl"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["div.entrybody"],defaultCleaner:!1,transforms:{},clean:[]}},WwwInfoqComExtractor:{domain:"www.infoq.com",title:{selectors:["h1.heading"]},author:{selectors:["div.widget.article__authors"]},date_published:{selectors:[".article__readTime.date"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__data"],defaultCleaner:!1,transforms:{},clean:[]}},WwwMoongiftJpExtractor:{domain:"www.moongift.jp",title:{selectors:["h1.title a"]},author:null,date_published:{selectors:["ul.meta li:not(.social):first-of-type"],timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main"],transforms:{},clean:["ul.mg_service.cf"]}},WwwItmediaCoJpExtractor:{domain:"www.itmedia.co.jp",supportedDomains:["www.atmarkit.co.jp","techtarget.itmedia.co.jp","nlab.itmedia.co.jp"],title:{selectors:["#cmsTitle h1"]},author:{selectors:["#byline"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["#cmsAbstract h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#cmsBody"],defaultCleaner:!1,transforms:{},clean:["#snsSharebox"]}},WwwPublickey1JpExtractor:{domain:"www.publickey1.jp",title:{selectors:["h1"]},author:{selectors:[".bloggerinchief p:first-of-type","#subcol p:has(img)"]},date_published:{selectors:["div.pubdate"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincol"],defaultCleaner:!1,transforms:{},clean:["#breadcrumbs","div.sbm","div.ad_footer"]}},TakagihiromitsuJpExtractor:{domain:"takagi-hiromitsu.jp",title:{selectors:["h3"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[http-equiv="Last-Modified"]',"value"]]},dek:null,lead_image_url:null,content:{selectors:["div.body"],defaultCleaner:!1,transforms:{},clean:[]}},BookwalkerJpExtractor:{domain:"bookwalker.jp",title:{selectors:["h1.p-main__title","h1.main-heading"]},author:{selectors:["div.p-author__list","div.authors"]},date_published:{selectors:["dl.p-information__data dd:nth-of-type(7)",".work-info .work-detail:first-of-type .work-detail-contents:last-of-type"],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main__information",["div.main-info","div.main-cover-inner"]],defaultCleaner:!1,transforms:{},clean:["span.label.label--trial","dt.info-head.info-head--coin","dd.info-contents.info-contents--coin","div.info-notice.fn-toggleClass"]}},WwwYomiuriCoJpExtractor:{domain:"www.yomiuri.co.jp",title:{selectors:["h1.title-article.c-article-title"]},author:null,date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main-contents"],transforms:{},clean:[]}},JapanCnetComExtractor:{domain:"japan.cnet.com",title:{selectors:[".leaf-headline-ttl"]},author:{selectors:[".writer"]},date_published:{selectors:[".date"],format:"YYYY年MM月DD日 HH時mm分",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},DeadlineComExtractor:{domain:"deadline.com",title:{selectors:["h1"]},author:{selectors:["section.author h2"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item"],transforms:{".embed-twitter":function(e){var t=e.html();e.replaceWith(t)}},clean:["figcaption"]}},WwwGizmodoJpExtractor:{domain:"www.gizmodo.jp",title:{selectors:["h1.p-post-title"]},author:{selectors:["li.p-post-AssistAuthor"]},date_published:{selectors:[["li.p-post-AssistTime time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.p-post"],transforms:{"img.p-post-thumbnailImage":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["h1.p-post-title","ul.p-post-Assist"]}},GetnewsJpExtractor:{domain:"getnews.jp",title:{selectors:["article h1"]},author:{selectors:[['meta[name="article:author"]',"value"],"span.prof"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["ul.cattag-top time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.post-bodycopy"],transforms:{},clean:[]}},WwwLifehackerJpExtractor:{domain:"www.lifehacker.jp",title:{selectors:['h1[class^="article_pArticle_Title"]',"h1.lh-summary-title"]},author:{selectors:[['meta[name="author"]',"value"],"p.lh-entryDetailInner--credit"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["div.lh-entryDetail-header time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[class^="article_pArticle_Body__"]',"div.lh-entryDetail-body"],transforms:{"img.lazyload":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["p.lh-entryDetailInner--credit"]}},SectIijAdJpExtractor:{domain:"sect.iij.ad.jp",title:{selectors:["div.title-box-inner h1","h3"]},author:{selectors:["p.post-author a","dl.entrydate dd"]},date_published:{selectors:["time"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-inner","#article"],transforms:{},clean:["dl.entrydate"]}},WwwOreillyCoJpExtractor:{domain:"www.oreilly.co.jp",title:{selectors:[['meta[name="og:title"]',"value"],"h3"]},author:{selectors:['span[itemprop="author"]','li[itemprop="author"]']},date_published:{selectors:[['dd[itemprop="datePublished"]',"content"],['meta[itemprop="datePublished"]',"value"]],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image:secure_url"]',"value"],['meta[name="og:image"]',"value"]]},content:{selectors:["section.detail","#content"],defaultCleaner:!1,transforms:{},clean:[".social-tools"]}},WwwIpaGoJpExtractor:{domain:"www.ipa.go.jp",title:{selectors:["h1"]},author:null,date_published:{selectors:["p.ipar_text_right"],format:"YYYY年M月D日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#ipar_main"],defaultCleaner:!1,transforms:{},clean:["p.ipar_text_right"]}},WeeklyAsciiJpExtractor:{domain:"weekly.ascii.jp",title:{selectors:["article h1",'h1[itemprop="headline"]']},author:{selectors:["p.author"]},date_published:{selectors:["p.date",['meta[name="odate"]',"value"]],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#contents_detail","div.article"],transforms:{},clean:[]}},TechlogIijAdJpExtractor:{domain:"techlog.iij.ad.jp",title:{selectors:["h1.entry-title"]},author:{selectors:['a[rel="author"]']},date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],defaultCleaner:!1,transforms:{},clean:[".wp_social_bookmarking_light"]}},WiredJpExtractor:ss,JapanZdnetComExtractor:{domain:"japan.zdnet.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="cXenseParse:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},WwwRbbtodayComExtractor:{domain:"www.rbbtoday.com",title:{selectors:["h1"]},author:{selectors:[".writer.writer-name"]},date_published:{selectors:[["header time","datetime"]]},dek:{selectors:[['meta[name="description"]',"value"],".arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".arti-content"],transforms:{},clean:[".arti-giga"]}},WwwLemondeFrExtractor:{domain:"www.lemonde.fr",title:{selectors:["h1.article__title"]},author:{selectors:[".author__name"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},dek:{selectors:[".article__desc"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__content"],transforms:{},clean:["figcaption"]}},WwwPhoronixComExtractor:{domain:"www.phoronix.com",title:{selectors:["article h1","article header"]},author:{selectors:[".author a:first-child"]},date_published:{selectors:[".author"],format:"D MMMM YYYY at hh:mm",timezone:"America/New_York"},dek:null,lead_image_url:null,content:{selectors:[".content"],transforms:{},clean:[]}},PitchforkComExtractor:{domain:"pitchfork.com",title:{selectors:[['meta[name="og:title"]',"value"],"title"]},author:{selectors:[['meta[name="article:author"]',"value"],".authors-detail__display-name"]},date_published:{selectors:['div[class^="InfoSliceWrapper-"]',[".pub-date","datetime"]]},dek:{selectors:[['meta[name="og:description"]',"value"],".review-detail__abstract"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],[".single-album-tombstone__art img","src"]]},content:{selectors:["div.body__inner-container",".review-detail__text"]},extend:{score:{selectors:['p[class*="Rating"]',".score"]}}},BiorxivOrgExtractor:{domain:"biorxiv.org",title:{selectors:["h1#page-title"]},author:{selectors:["div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors"]},content:{selectors:["div#abstract-1"],transforms:{},clean:[]}},EpaperZeitDeExtractor:{domain:"epaper.zeit.de",title:{selectors:["p.title"]},author:{selectors:[".article__author"]},date_published:null,excerpt:{selectors:["subtitle"]},lead_image_url:null,content:{selectors:[".article"],transforms:{"p.title":"h1",".article__author":"p",byline:"p",linkbox:"p"},clean:["image-credits","box[type=citation]"]}},WwwLadbibleComExtractor:{domain:"www.ladbible.com",title:{selectors:["h1"]},author:{selectors:["[class*=Byline]"]},date_published:{selectors:["time"],timezone:"Europe/London"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["[class*=ArticleContainer]"],clean:["time","source",'a[href^="https://www.ladbible.com/"]',"picture","[class*=StyledCardBlock]"]}},TimesofindiaIndiatimesComExtractor:{domain:"timesofindia.indiatimes.com",title:{selectors:["h1"]},extend:{reporter:{selectors:["div.byline"],transforms:{}}},date_published:{selectors:[".byline"],format:"MMM D, YYYY, HH:mm z",timezone:"Asia/Kolkata"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.contentwrapper:has(section)"],defaultCleaner:!1,clean:["section","h1",".byline",".img_cptn",".icon_share_wrap",'ul[itemtype="https://schema.org/BreadcrumbList"]']}},MaTtiasBeExtractor:{domain:"ma.ttias.be",title:{selectors:[['meta[name="twitter:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},content:{selectors:[[".content"]],transforms:{h2:function(e){return e.attr("id",null),"h3"},h1:function(e){e.attr("id",null),e.after("<p></p>")},ul:function(e){e.attr("class","entry-content-asset")}}}},PastebinComExtractor:{domain:"pastebin.com",title:{selectors:["h1"]},author:{selectors:[".username",".paste_box_line2 .t_us + a"]},date_published:{selectors:[".date",".paste_box_line2 .t_da + span"],timezone:"America/New_York",format:"MMMM D, YYYY"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".source","#selectable .text"],transforms:{ol:"div",li:"p"},clean:[]}},WwwAbendblattDeExtractor:cs,WwwGrueneDeExtractor:{domain:"www.gruene.de",title:{selectors:["header h1"]},author:null,date_published:null,dek:null,lead_image_url:{selectors:[['meta[property="og:image"]',"content"]]},content:{selectors:[["section header","section h2","section p","section ol"]],transforms:{},clean:["figcaption","p[class]"]}},WwwEngadgetComExtractor:{domain:"www.engadget.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:['a.th-meta[data-ylk*="subsec:author"]']},date_published:{selectors:[]},dek:{selectors:['div[class*="o-title_mark"] div']},lead_image_url:{selectors:[]},content:{selectors:[["#page_body figure:not(div.article-text figure)","div.article-text"]],transforms:{},clean:[]}},ArstechnicaComExtractor:{domain:"arstechnica.com",title:{selectors:["title"]},author:{selectors:['*[rel="author"] *[itemprop="name"]']},date_published:{selectors:[[".byline time","datetime"]]},dek:{selectors:['h2[itemprop="description"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{h2:function(e){e.before("<p></p>")}},clean:["figcaption .enlarge-link","figcaption .sep","figure.video",".gallery","aside",".sidebar"]}},WwwNdtvComExtractor:{domain:"www.ndtv.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:['span[itemprop="author"] span[itemprop="name"]']},date_published:{selectors:[['span[itemprop="dateModified"]',"content"]]},dek:{selectors:["h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{".place_cont":function(e){if(!e.parents("p").length){var t=e.next("p");t&&(e.remove(),t.prepend(e))}}},clean:[".highlghts_Wdgt",".ins_instory_dv_caption","input","._world-wrapper .mt20"]}},SpektrumExtractor:{domain:"www.spektrum.de",title:{selectors:[".content__title"]},author:{selectors:[".content__author__info__name"]},date_published:{selectors:[".content__meta__date"],timezone:"Europe/Berlin"},dek:{selectors:[".content__intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],".image__article__top img"]},content:{selectors:["article.content"],clean:[".breadcrumbs",".hide-for-print","aside","header h2",".image__article__top",".content__author",".copyright",".callout-box"]}},PostlightComExtractor:{domain:"postlight.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.single-hero__abstract"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main.post"],transforms:{},clean:["section.pl-post-link","aside","section.insights_featured_case_studies"]}},WwwInvestmentexecutiveComExtractor:{domain:"www.investmentexecutive.com",title:{selectors:["h1"]},author:{selectors:['div[itemprop="author"]']},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-body"],clean:[".hidden"]}},WwwCbcCaExtractor:{domain:"www.cbc.ca",title:{selectors:["h1"]},author:{selectors:[".authorText",".bylineDetails"]},date_published:{selectors:[[".timeStamp[datetime]","datetime"]]},dek:{selectors:[".deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".story"],transforms:{},clean:[]}}}),ls=ct(us).reduce((function(e,t){var r=us[t];return dt({},e,Xo(r))}),{}),fs=t((function(e,t){(function(){var e={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};function r(e){if(void 0===e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return"";if(e.indexOf("‎")>-1&&e.indexOf("‏")>-1)return"bidi";if(e.indexOf("‎")>-1)return"ltr";if(e.indexOf("‏")>-1)return"rtl";var t=n(e,"rtl"),r=n(e,"ltr");return t&&r?"bidi":r?"ltr":t?"rtl":""}function n(t,r){var n,i,o,s,c,u=!1,l=!1;for(c=t.search(/[0-9]/)>-1,t=t.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),n=0;n<t.length;n++){for(o in i=t.charAt(n),s=!1,e)e.hasOwnProperty(o)&&a(i,e[o][0],e[o][1])&&(u=!0,s=!0);!1===s&&(l=!0)}return"rtl"===r?u:"ltr"===r?l||!u&&c:void 0}function a(e,t,r){var n=e.charCodeAt(0),a=parseInt(t,16),i=parseInt(r,16);return n>a&&n<i}t.getDirection=r,t.patch=function(){String.prototype.getDirection=function(){return r(this.valueOf())}}}).call(this)})),ds=(fs.getDirection,fs.patch,/^\s*(posted |written )?by\s*:?\s*(.*)/i),hs=new RegExp("http(s)?://","i"),ps=/^\d{13}$/i,ms=/^\d{10}$/i,gs=/^\s*published\s*:?\s*(.*)/i,vs=/(.*\d)(am|pm)(.*)/i,ys=/\.m\./i,_s=/^\s*(just|right)?\s*now\s*/i,bs=["seconds?","minutes?","hours?","days?","weeks?","months?","years?"].join("|"),As=new RegExp("(\\d+)\\s+(".concat(bs,")\\s+ago"),"i"),ws=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].join("|"),xs=new RegExp("(".concat("[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",")|(").concat("[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",")|(").concat("-[0-9]{3,4}$",")|([0-9]{1,4})|(").concat(ws,")"),"ig"),ks=/-\d{3,4}$/,Es=/(: | - | \| )/g,Ms=new RegExp(".com$|.net$|.org$|.co.uk$","g");function Ss(e){return la(e.replace(ds,"$2").trim())}var Ts=t((function(e){!function(e){e.exports.is_uri=r,e.exports.is_http_uri=n,e.exports.is_https_uri=a,e.exports.is_web_uri=i,e.exports.isUri=r,e.exports.isHttpUri=n,e.exports.isHttpsUri=a,e.exports.isWebUri=i;var t=function(e){return e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/)};function r(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var r,n,a,i,o,s="",c="";if(s=(r=t(e))[1],n=r[2],a=r[3],i=r[4],o=r[5],s&&s.length&&a.length>=0){if(n&&n.length){if(0!==a.length&&!/^\//.test(a))return}else if(/^\/\//.test(a))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(s.toLowerCase()))return c+=s+":",n&&n.length&&(c+="//"+n),c+=a,i&&i.length&&(c+="?"+i),o&&o.length&&(c+="#"+o),c}}}function n(e,n){if(r(e)){var a,i,o,s,c="",u="",l="",f="";if(c=(a=t(e))[1],u=a[2],i=a[3],o=a[4],s=a[5],c){if(n){if("https"!=c.toLowerCase())return}else if("http"!=c.toLowerCase())return;if(u)return/:(\d+)$/.test(u)&&(l=u.match(/:(\d+)$/)[0],u=u.replace(/:\d+$/,"")),f+=c+":",f+="//"+u,l&&(f+=l),f+=i,o&&o.length&&(f+="?"+o),s&&s.length&&(f+="#"+s),f}}}function a(e){return n(e,!0)}function i(e){return n(e)||a(e)}}(e)}));function Cs(e){return e=e.trim(),Ts.isWebUri(e)?e:null}var Ds=t((function(t,r){t.exports=function(){var r,n;function a(){return r.apply(null,arguments)}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function o(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function s(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function c(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(s(e,t))return!1;return!0}function u(e){return void 0===e}function l(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function f(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){var r,n=[],a=e.length;for(r=0;r<a;++r)n.push(t(e[r],r));return n}function h(e,t){for(var r in t)s(t,r)&&(e[r]=t[r]);return s(t,"toString")&&(e.toString=t.toString),s(t,"valueOf")&&(e.valueOf=t.valueOf),e}function p(e,t,r,n){return Et(e,t,r,n,!0).utc()}function m(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function g(e){if(null==e._isValid){var t=m(e),r=n.call(t.parsedDateParts,(function(e){return null!=e})),a=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r);if(e._strict&&(a=a&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return a;e._isValid=a}return e._isValid}function v(e){var t=p(NaN);return null!=e?h(m(t),e):m(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){var t,r=Object(this),n=r.length>>>0;for(t=0;t<n;t++)if(t in r&&e.call(this,r[t],t,r))return!0;return!1};var y=a.momentProperties=[],_=!1;function b(e,t){var r,n,a,i=y.length;if(u(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),u(t._i)||(e._i=t._i),u(t._f)||(e._f=t._f),u(t._l)||(e._l=t._l),u(t._strict)||(e._strict=t._strict),u(t._tzm)||(e._tzm=t._tzm),u(t._isUTC)||(e._isUTC=t._isUTC),u(t._offset)||(e._offset=t._offset),u(t._pf)||(e._pf=m(t)),u(t._locale)||(e._locale=t._locale),i>0)for(r=0;r<i;r++)u(a=t[n=y[r]])||(e[n]=a);return e}function A(e){b(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===_&&(_=!0,a.updateOffset(this),_=!1)}function w(e){return e instanceof A||null!=e&&null!=e._isAMomentObject}function x(e){!1===a.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function k(e,t){var r=!0;return h((function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,e),r){var n,i,o,c=[],u=arguments.length;for(i=0;i<u;i++){if(n="","object"==typeof arguments[i]){for(o in n+="\n["+i+"] ",arguments[0])s(arguments[0],o)&&(n+=o+": "+arguments[0][o]+", ");n=n.slice(0,-2)}else n=arguments[i];c.push(n)}x(e+"\nArguments: "+Array.prototype.slice.call(c).join("")+"\n"+(new Error).stack),r=!1}return t.apply(this,arguments)}),t)}var E,M={};function S(e,t){null!=a.deprecationHandler&&a.deprecationHandler(e,t),M[e]||(x(t),M[e]=!0)}function T(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function C(e,t){var r,n=h({},e);for(r in t)s(t,r)&&(o(e[r])&&o(t[r])?(n[r]={},h(n[r],e[r]),h(n[r],t[r])):null!=t[r]?n[r]=t[r]:delete n[r]);for(r in e)s(e,r)&&!s(t,r)&&o(e[r])&&(n[r]=h({},n[r]));return n}function D(e){null!=e&&this.set(e)}function O(e,t,r){var n=""+Math.abs(e),a=t-n.length;return(e>=0?r?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+n}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,E=Object.keys?Object.keys:function(e){var t,r=[];for(t in e)s(e,t)&&r.push(t);return r};var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,P=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,j={},R={};function z(e,t,r,n){var a=n;"string"==typeof n&&(a=function(){return this[n]()}),e&&(R[e]=a),t&&(R[t[0]]=function(){return O(a.apply(this,arguments),t[1],t[2])}),r&&(R[r]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function L(e,t){return e.isValid()?(t=Y(t,e.localeData()),j[t]=j[t]||function(e){var t,r,n,a=e.match(N);for(t=0,r=a.length;t<r;t++)R[a[t]]?a[t]=R[a[t]]:a[t]=(n=a[t]).match(/\[[\s\S]/)?n.replace(/^\[|\]$/g,""):n.replace(/\\/g,"");return function(t){var n,i="";for(n=0;n<r;n++)i+=T(a[n])?a[n].call(t,e):a[n];return i}}(t),j[t](e)):e.localeData().invalidDate()}function Y(e,t){var r=5;function n(e){return t.longDateFormat(e)||e}for(P.lastIndex=0;r>=0&&P.test(e);)e=e.replace(P,n),P.lastIndex=0,r-=1;return e}var W={};function I(e,t){var r=e.toLowerCase();W[r]=W[r+"s"]=W[t]=e}function B(e){return"string"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function q(e){var t,r,n={};for(r in e)s(e,r)&&(t=B(r))&&(n[t]=e[r]);return n}var H={};function F(e,t){H[e]=t}function G(e){return e%4==0&&e%100!=0||e%400==0}function U(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function $(e){var t=+e,r=0;return 0!==t&&isFinite(t)&&(r=U(t)),r}function V(e,t){return function(r){return null!=r?(J(this,e,r),a.updateOffset(this,t),this):K(this,e)}}function K(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function J(e,t,r){e.isValid()&&!isNaN(r)&&("FullYear"===t&&G(e.year())&&1===e.month()&&29===e.date()?(r=$(r),e._d["set"+(e._isUTC?"UTC":"")+t](r,e.month(),we(r,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](r))}var Z,X=/\d/,Q=/\d\d/,ee=/\d{3}/,te=/\d{4}/,re=/[+-]?\d{6}/,ne=/\d\d?/,ae=/\d\d\d\d?/,ie=/\d\d\d\d\d\d?/,oe=/\d{1,3}/,se=/\d{1,4}/,ce=/[+-]?\d{1,6}/,ue=/\d+/,le=/[+-]?\d+/,fe=/Z|[+-]\d\d:?\d\d/gi,de=/Z|[+-]\d\d(?::?\d\d)?/gi,he=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function pe(e,t,r){Z[e]=T(t)?t:function(e,n){return e&&r?r:t}}function me(e,t){return s(Z,e)?Z[e](t._strict,t._locale):new RegExp(ge(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,r,n,a){return t||r||n||a}))))}function ge(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}Z={};var ve,ye={};function _e(e,t){var r,n,a=t;for("string"==typeof e&&(e=[e]),l(t)&&(a=function(e,r){r[t]=$(e)}),n=e.length,r=0;r<n;r++)ye[e[r]]=a}function be(e,t){_e(e,(function(e,r,n,a){n._w=n._w||{},t(e,n._w,n,a)}))}function Ae(e,t,r){null!=t&&s(ye,e)&&ye[e](t,r._a,r,e)}function we(e,t){if(isNaN(e)||isNaN(t))return NaN;var r,n=(t%(r=12)+r)%r;return e+=(t-n)/12,1===n?G(e)?29:28:31-n%7%2}ve=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},z("M",["MM",2],"Mo",(function(){return this.month()+1})),z("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),z("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),I("month","M"),F("month",8),pe("M",ne),pe("MM",ne,Q),pe("MMM",(function(e,t){return t.monthsShortRegex(e)})),pe("MMMM",(function(e,t){return t.monthsRegex(e)})),_e(["M","MM"],(function(e,t){t[1]=$(e)-1})),_e(["MMM","MMMM"],(function(e,t,r,n){var a=r._locale.monthsParse(e,n,r._strict);null!=a?t[1]=a:m(r).invalidMonth=e}));var xe="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ke="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ee=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Me=he,Se=he;function Te(e,t,r){var n,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)i=p([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(i,"").toLocaleLowerCase();return r?"MMM"===t?-1!==(a=ve.call(this._shortMonthsParse,o))?a:null:-1!==(a=ve.call(this._longMonthsParse,o))?a:null:"MMM"===t?-1!==(a=ve.call(this._shortMonthsParse,o))||-1!==(a=ve.call(this._longMonthsParse,o))?a:null:-1!==(a=ve.call(this._longMonthsParse,o))||-1!==(a=ve.call(this._shortMonthsParse,o))?a:null}function Ce(e,t){var r;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=$(t);else if(!l(t=e.localeData().monthsParse(t)))return e;return r=Math.min(e.date(),we(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,r),e}function De(e){return null!=e?(Ce(this,e),a.updateOffset(this,!0),this):K(this,"Month")}function Oe(){function e(e,t){return t.length-e.length}var t,r,n=[],a=[],i=[];for(t=0;t<12;t++)r=p([2e3,t]),n.push(this.monthsShort(r,"")),a.push(this.months(r,"")),i.push(this.months(r,"")),i.push(this.monthsShort(r,""));for(n.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)n[t]=ge(n[t]),a[t]=ge(a[t]);for(t=0;t<24;t++)i[t]=ge(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Ne(e){return G(e)?366:365}z("Y",0,0,(function(){var e=this.year();return e<=9999?O(e,4):"+"+e})),z(0,["YY",2],0,(function(){return this.year()%100})),z(0,["YYYY",4],0,"year"),z(0,["YYYYY",5],0,"year"),z(0,["YYYYYY",6,!0],0,"year"),I("year","y"),F("year",1),pe("Y",le),pe("YY",ne,Q),pe("YYYY",se,te),pe("YYYYY",ce,re),pe("YYYYYY",ce,re),_e(["YYYYY","YYYYYY"],0),_e("YYYY",(function(e,t){t[0]=2===e.length?a.parseTwoDigitYear(e):$(e)})),_e("YY",(function(e,t){t[0]=a.parseTwoDigitYear(e)})),_e("Y",(function(e,t){t[0]=parseInt(e,10)})),a.parseTwoDigitYear=function(e){return $(e)+($(e)>68?1900:2e3)};var Pe=V("FullYear",!0);function je(e,t,r,n,a,i,o){var s;return e<100&&e>=0?(s=new Date(e+400,t,r,n,a,i,o),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,r,n,a,i,o),s}function Re(e){var t,r;return e<100&&e>=0?((r=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function ze(e,t,r){var n=7+t-r;return-(7+Re(e,0,n).getUTCDay()-t)%7+n-1}function Le(e,t,r,n,a){var i,o,s=1+7*(t-1)+(7+r-n)%7+ze(e,n,a);return s<=0?o=Ne(i=e-1)+s:s>Ne(e)?(i=e+1,o=s-Ne(e)):(i=e,o=s),{year:i,dayOfYear:o}}function Ye(e,t,r){var n,a,i=ze(e.year(),t,r),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?n=o+We(a=e.year()-1,t,r):o>We(e.year(),t,r)?(n=o-We(e.year(),t,r),a=e.year()+1):(a=e.year(),n=o),{week:n,year:a}}function We(e,t,r){var n=ze(e,t,r),a=ze(e+1,t,r);return(Ne(e)-n+a)/7}function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}z("w",["ww",2],"wo","week"),z("W",["WW",2],"Wo","isoWeek"),I("week","w"),I("isoWeek","W"),F("week",5),F("isoWeek",5),pe("w",ne),pe("ww",ne,Q),pe("W",ne),pe("WW",ne,Q),be(["w","ww","W","WW"],(function(e,t,r,n){t[n.substr(0,1)]=$(e)})),z("d",0,"do","day"),z("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),z("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),z("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),z("e",0,0,"weekday"),z("E",0,0,"isoWeekday"),I("day","d"),I("weekday","e"),I("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),pe("d",ne),pe("e",ne),pe("E",ne),pe("dd",(function(e,t){return t.weekdaysMinRegex(e)})),pe("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),pe("dddd",(function(e,t){return t.weekdaysRegex(e)})),be(["dd","ddd","dddd"],(function(e,t,r,n){var a=r._locale.weekdaysParse(e,n,r._strict);null!=a?t.d=a:m(r).invalidWeekday=e})),be(["d","e","E"],(function(e,t,r,n){t[n]=$(e)}));var Be="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),qe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),He="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Fe=he,Ge=he,Ue=he;function $e(e,t,r){var n,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)i=p([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(i,"").toLocaleLowerCase();return r?"dddd"===t?-1!==(a=ve.call(this._weekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ve.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=ve.call(this._minWeekdaysParse,o))?a:null:"dddd"===t?-1!==(a=ve.call(this._weekdaysParse,o))||-1!==(a=ve.call(this._shortWeekdaysParse,o))||-1!==(a=ve.call(this._minWeekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ve.call(this._shortWeekdaysParse,o))||-1!==(a=ve.call(this._weekdaysParse,o))||-1!==(a=ve.call(this._minWeekdaysParse,o))?a:null:-1!==(a=ve.call(this._minWeekdaysParse,o))||-1!==(a=ve.call(this._weekdaysParse,o))||-1!==(a=ve.call(this._shortWeekdaysParse,o))?a:null}function Ve(){function e(e,t){return t.length-e.length}var t,r,n,a,i,o=[],s=[],c=[],u=[];for(t=0;t<7;t++)r=p([2e3,1]).day(t),n=ge(this.weekdaysMin(r,"")),a=ge(this.weekdaysShort(r,"")),i=ge(this.weekdays(r,"")),o.push(n),s.push(a),c.push(i),u.push(n),u.push(a),u.push(i);o.sort(e),s.sort(e),c.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Ke(){return this.hours()%12||12}function Je(e,t){z(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function Ze(e,t){return t._meridiemParse}z("H",["HH",2],0,"hour"),z("h",["hh",2],0,Ke),z("k",["kk",2],0,(function(){return this.hours()||24})),z("hmm",0,0,(function(){return""+Ke.apply(this)+O(this.minutes(),2)})),z("hmmss",0,0,(function(){return""+Ke.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)})),z("Hmm",0,0,(function(){return""+this.hours()+O(this.minutes(),2)})),z("Hmmss",0,0,(function(){return""+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)})),Je("a",!0),Je("A",!1),I("hour","h"),F("hour",13),pe("a",Ze),pe("A",Ze),pe("H",ne),pe("h",ne),pe("k",ne),pe("HH",ne,Q),pe("hh",ne,Q),pe("kk",ne,Q),pe("hmm",ae),pe("hmmss",ie),pe("Hmm",ae),pe("Hmmss",ie),_e(["H","HH"],3),_e(["k","kk"],(function(e,t,r){var n=$(e);t[3]=24===n?0:n})),_e(["a","A"],(function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e})),_e(["h","hh"],(function(e,t,r){t[3]=$(e),m(r).bigHour=!0})),_e("hmm",(function(e,t,r){var n=e.length-2;t[3]=$(e.substr(0,n)),t[4]=$(e.substr(n)),m(r).bigHour=!0})),_e("hmmss",(function(e,t,r){var n=e.length-4,a=e.length-2;t[3]=$(e.substr(0,n)),t[4]=$(e.substr(n,2)),t[5]=$(e.substr(a)),m(r).bigHour=!0})),_e("Hmm",(function(e,t,r){var n=e.length-2;t[3]=$(e.substr(0,n)),t[4]=$(e.substr(n))})),_e("Hmmss",(function(e,t,r){var n=e.length-4,a=e.length-2;t[3]=$(e.substr(0,n)),t[4]=$(e.substr(n,2)),t[5]=$(e.substr(a))}));var Xe,Qe=V("Hours",!0),et={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:xe,monthsShort:ke,week:{dow:0,doy:6},weekdays:Be,weekdaysMin:He,weekdaysShort:qe,meridiemParse:/[ap]\.?m?\.?/i},tt={},rt={};function nt(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r<n;r+=1)if(e[r]!==t[r])return r;return n}function at(e){return e?e.toLowerCase().replace("_","-"):e}function it(r){var n=null;if(void 0===tt[r]&&t&&t.exports&&function(e){return null!=e.match("^[^/\\\\]*$")}(r))try{n=Xe._abbr,e(),ot(n)}catch(e){tt[r]=null}return tt[r]}function ot(e,t){var r;return e&&((r=u(t)?ct(e):st(e,t))?Xe=r:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),Xe._abbr}function st(e,t){if(null!==t){var r,n=et;if(t.abbr=e,null!=tt[e])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=tt[e]._config;else if(null!=t.parentLocale)if(null!=tt[t.parentLocale])n=tt[t.parentLocale]._config;else{if(null==(r=it(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;n=r._config}return tt[e]=new D(C(n,t)),rt[e]&&rt[e].forEach((function(e){st(e.name,e.config)})),ot(e),tt[e]}return delete tt[e],null}function ct(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Xe;if(!i(e)){if(t=it(e))return t;e=[e]}return function(e){for(var t,r,n,a,i=0;i<e.length;){for(t=(a=at(e[i]).split("-")).length,r=(r=at(e[i+1]))?r.split("-"):null;t>0;){if(n=it(a.slice(0,t).join("-")))return n;if(r&&r.length>=t&&nt(a,r)>=t-1)break;t--}i++}return Xe}(e)}function ut(e){var t,r=e._a;return r&&-2===m(e).overflow&&(t=r[1]<0||r[1]>11?1:r[2]<1||r[2]>we(r[0],r[1])?2:r[3]<0||r[3]>24||24===r[3]&&(0!==r[4]||0!==r[5]||0!==r[6])?3:r[4]<0||r[4]>59?4:r[5]<0||r[5]>59?5:r[6]<0||r[6]>999?6:-1,m(e)._overflowDayOfYear&&(t<0||t>2)&&(t=2),m(e)._overflowWeeks&&-1===t&&(t=7),m(e)._overflowWeekday&&-1===t&&(t=8),m(e).overflow=t),e}var lt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ft=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,dt=/Z|[+-]\d\d(?::?\d\d)?/,ht=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],pt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],mt=/^\/?Date\((-?\d+)/i,gt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,vt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function yt(e){var t,r,n,a,i,o,s=e._i,c=lt.exec(s)||ft.exec(s),u=ht.length,l=pt.length;if(c){for(m(e).iso=!0,t=0,r=u;t<r;t++)if(ht[t][1].exec(c[1])){a=ht[t][0],n=!1!==ht[t][2];break}if(null==a)return void(e._isValid=!1);if(c[3]){for(t=0,r=l;t<r;t++)if(pt[t][1].exec(c[3])){i=(c[2]||" ")+pt[t][0];break}if(null==i)return void(e._isValid=!1)}if(!n&&null!=i)return void(e._isValid=!1);if(c[4]){if(!dt.exec(c[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),xt(e)}else e._isValid=!1}function _t(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function bt(e){var t,r=gt.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(t=function(e,t,r,n,a,i){var o=[_t(e),ke.indexOf(t),parseInt(r,10),parseInt(n,10),parseInt(a,10)];return i&&o.push(parseInt(i,10)),o}(r[4],r[3],r[2],r[5],r[6],r[7]),!function(e,t,r){return!e||qe.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(m(r).weekdayMismatch=!0,r._isValid=!1,!1)}(r[1],t,e))return;e._a=t,e._tzm=function(e,t,r){if(e)return vt[e];if(t)return 0;var n=parseInt(r,10),a=n%100;return(n-a)/100*60+a}(r[8],r[9],r[10]),e._d=Re.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),m(e).rfc2822=!0}else e._isValid=!1}function At(e,t,r){return null!=e?e:null!=t?t:r}function wt(e){var t,r,n,i,o,s=[];if(!e._d){for(n=function(e){var t=new Date(a.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}(e),e._w&&null==e._a[2]&&null==e._a[1]&&function(e){var t,r,n,a,i,o,s,c,u;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,o=4,r=At(t.GG,e._a[0],Ye(Mt(),1,4).year),n=At(t.W,1),((a=At(t.E,1))<1||a>7)&&(c=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,u=Ye(Mt(),i,o),r=At(t.gg,e._a[0],u.year),n=At(t.w,u.week),null!=t.d?((a=t.d)<0||a>6)&&(c=!0):null!=t.e?(a=t.e+i,(t.e<0||t.e>6)&&(c=!0)):a=i),n<1||n>We(r,i,o)?m(e)._overflowWeeks=!0:null!=c?m(e)._overflowWeekday=!0:(s=Le(r,n,a,i,o),e._a[0]=s.year,e._dayOfYear=s.dayOfYear)}(e),null!=e._dayOfYear&&(o=At(e._a[0],n[0]),(e._dayOfYear>Ne(o)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),r=Re(o,0,e._dayOfYear),e._a[1]=r.getUTCMonth(),e._a[2]=r.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=n[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[3]&&0===e._a[4]&&0===e._a[5]&&0===e._a[6]&&(e._nextDay=!0,e._a[3]=0),e._d=(e._useUTC?Re:je).apply(null,s),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[3]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(m(e).weekdayMismatch=!0)}}function xt(e){if(e._f!==a.ISO_8601)if(e._f!==a.RFC_2822){e._a=[],m(e).empty=!0;var t,r,n,i,o,s,c,u=""+e._i,l=u.length,f=0;for(c=(n=Y(e._f,e._locale).match(N)||[]).length,t=0;t<c;t++)i=n[t],(r=(u.match(me(i,e))||[])[0])&&((o=u.substr(0,u.indexOf(r))).length>0&&m(e).unusedInput.push(o),u=u.slice(u.indexOf(r)+r.length),f+=r.length),R[i]?(r?m(e).empty=!1:m(e).unusedTokens.push(i),Ae(i,r,e)):e._strict&&!r&&m(e).unusedTokens.push(i);m(e).charsLeftOver=l-f,u.length>0&&m(e).unusedInput.push(u),e._a[3]<=12&&!0===m(e).bigHour&&e._a[3]>0&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[3]=function(e,t,r){var n;return null==r?t:null!=e.meridiemHour?e.meridiemHour(t,r):null!=e.isPM?((n=e.isPM(r))&&t<12&&(t+=12),n||12!==t||(t=0),t):t}(e._locale,e._a[3],e._meridiem),null!==(s=m(e).era)&&(e._a[0]=e._locale.erasConvertYear(s,e._a[0])),wt(e),ut(e)}else bt(e);else yt(e)}function kt(e){var t=e._i,r=e._f;return e._locale=e._locale||ct(e._l),null===t||void 0===r&&""===t?v({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),w(t)?new A(ut(t)):(f(t)?e._d=t:i(r)?function(e){var t,r,n,a,i,o,s=!1,c=e._f.length;if(0===c)return m(e).invalidFormat=!0,void(e._d=new Date(NaN));for(a=0;a<c;a++)i=0,o=!1,t=b({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],xt(t),g(t)&&(o=!0),i+=m(t).charsLeftOver,i+=10*m(t).unusedTokens.length,m(t).score=i,s?i<n&&(n=i,r=t):(null==n||i<n||o)&&(n=i,r=t,o&&(s=!0));h(e,r||t)}(e):r?xt(e):function(e){var t=e._i;u(t)?e._d=new Date(a.now()):f(t)?e._d=new Date(t.valueOf()):"string"==typeof t?function(e){var t=mt.exec(e._i);null===t?(yt(e),!1===e._isValid&&(delete e._isValid,bt(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:a.createFromInputFallback(e)))):e._d=new Date(+t[1])}(e):i(t)?(e._a=d(t.slice(0),(function(e){return parseInt(e,10)})),wt(e)):o(t)?function(e){if(!e._d){var t=q(e._i),r=void 0===t.day?t.date:t.day;e._a=d([t.year,t.month,r,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),wt(e)}}(e):l(t)?e._d=new Date(t):a.createFromInputFallback(e)}(e),g(e)||(e._d=null),e))}function Et(e,t,r,n,a){var s,u={};return!0!==t&&!1!==t||(n=t,t=void 0),!0!==r&&!1!==r||(n=r,r=void 0),(o(e)&&c(e)||i(e)&&0===e.length)&&(e=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=a,u._l=r,u._i=e,u._f=t,u._strict=n,(s=new A(ut(kt(u))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function Mt(e,t,r,n){return Et(e,t,r,n,!1)}a.createFromInputFallback=k("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),a.ISO_8601=function(){},a.RFC_2822=function(){};var St=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Mt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()})),Tt=k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Mt.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:v()}));function Ct(e,t){var r,n;if(1===t.length&&i(t[0])&&(t=t[0]),!t.length)return Mt();for(r=t[0],n=1;n<t.length;++n)t[n].isValid()&&!t[n][e](r)||(r=t[n]);return r}var Dt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ot(e){var t=q(e),r=t.year||0,n=t.quarter||0,a=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,c=t.hour||0,u=t.minute||0,l=t.second||0,f=t.millisecond||0;this._isValid=function(e){var t,r,n=!1,a=Dt.length;for(t in e)if(s(e,t)&&(-1===ve.call(Dt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(r=0;r<a;++r)if(e[Dt[r]]){if(n)return!1;parseFloat(e[Dt[r]])!==$(e[Dt[r]])&&(n=!0)}return!0}(t),this._milliseconds=+f+1e3*l+6e4*u+1e3*c*60*60,this._days=+o+7*i,this._months=+a+3*n+12*r,this._data={},this._locale=ct(),this._bubble()}function Nt(e){return e instanceof Ot}function Pt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function jt(e,t){z(e,0,0,(function(){var e=this.utcOffset(),r="+";return e<0&&(e=-e,r="-"),r+O(~~(e/60),2)+t+O(~~e%60,2)}))}jt("Z",":"),jt("ZZ",""),pe("Z",de),pe("ZZ",de),_e(["Z","ZZ"],(function(e,t,r){r._useUTC=!0,r._tzm=zt(de,e)}));var Rt=/([\+\-]|\d\d)/gi;function zt(e,t){var r,n,a=(t||"").match(e);return null===a?null:0===(n=60*(r=((a[a.length-1]||[])+"").match(Rt)||["-",0,0])[1]+$(r[2]))?0:"+"===r[0]?n:-n}function Lt(e,t){var r,n;return t._isUTC?(r=t.clone(),n=(w(e)||f(e)?e.valueOf():Mt(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+n),a.updateOffset(r,!1),r):Mt(e).local()}function Yt(e){return-Math.round(e._d.getTimezoneOffset())}function Wt(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var It=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Bt=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function qt(e,t){var r,n,a,i,o,c,u=e,f=null;return Nt(e)?u={ms:e._milliseconds,d:e._days,M:e._months}:l(e)||!isNaN(+e)?(u={},t?u[t]=+e:u.milliseconds=+e):(f=It.exec(e))?(r="-"===f[1]?-1:1,u={y:0,d:$(f[2])*r,h:$(f[3])*r,m:$(f[4])*r,s:$(f[5])*r,ms:$(Pt(1e3*f[6]))*r}):(f=Bt.exec(e))?(r="-"===f[1]?-1:1,u={y:Ht(f[2],r),M:Ht(f[3],r),w:Ht(f[4],r),d:Ht(f[5],r),h:Ht(f[6],r),m:Ht(f[7],r),s:Ht(f[8],r)}):null==u?u={}:"object"==typeof u&&("from"in u||"to"in u)&&(i=Mt(u.from),o=Mt(u.to),a=i.isValid()&&o.isValid()?(o=Lt(o,i),i.isBefore(o)?c=Ft(i,o):((c=Ft(o,i)).milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0},(u={}).ms=a.milliseconds,u.M=a.months),n=new Ot(u),Nt(e)&&s(e,"_locale")&&(n._locale=e._locale),Nt(e)&&s(e,"_isValid")&&(n._isValid=e._isValid),n}function Ht(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function Ft(e,t){var r={};return r.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function Gt(e,t){return function(r,n){var a;return null===n||isNaN(+n)||(S(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=r,r=n,n=a),Ut(this,qt(r,n),e),this}}function Ut(e,t,r,n){var i=t._milliseconds,o=Pt(t._days),s=Pt(t._months);e.isValid()&&(n=null==n||n,s&&Ce(e,K(e,"Month")+s*r),o&&J(e,"Date",K(e,"Date")+o*r),i&&e._d.setTime(e._d.valueOf()+i*r),n&&a.updateOffset(e,o||s))}qt.fn=Ot.prototype,qt.invalid=function(){return qt(NaN)};var $t=Gt(1,"add"),Vt=Gt(-1,"subtract");function Kt(e){return"string"==typeof e||e instanceof String}function Jt(e){return w(e)||f(e)||Kt(e)||l(e)||function(e){var t=i(e),r=!1;return t&&(r=0===e.filter((function(t){return!l(t)&&Kt(e)})).length),t&&r}(e)||function(e){var t,r,n=o(e)&&!c(e),a=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],u=i.length;for(t=0;t<u;t+=1)r=i[t],a=a||s(e,r);return n&&a}(e)||null==e}function Zt(e){var t,r=o(e)&&!c(e),n=!1,a=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<a.length;t+=1)n=n||s(e,a[t]);return r&&n}function Xt(e,t){if(e.date()<t.date())return-Xt(t,e);var r=12*(t.year()-e.year())+(t.month()-e.month()),n=e.clone().add(r,"months");return-(r+(t-n<0?(t-n)/(n-e.clone().add(r-1,"months")):(t-n)/(e.clone().add(r+1,"months")-n)))||0}function Qt(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ct(e))&&(this._locale=t),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var er=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function tr(){return this._locale}function rr(e,t){return(e%t+t)%t}function nr(e,t,r){return e<100&&e>=0?new Date(e+400,t,r)-126227808e5:new Date(e,t,r).valueOf()}function ar(e,t,r){return e<100&&e>=0?Date.UTC(e+400,t,r)-126227808e5:Date.UTC(e,t,r)}function ir(e,t){return t.erasAbbrRegex(e)}function or(){var e,t,r=[],n=[],a=[],i=[],o=this.eras();for(e=0,t=o.length;e<t;++e)n.push(ge(o[e].name)),r.push(ge(o[e].abbr)),a.push(ge(o[e].narrow)),i.push(ge(o[e].name)),i.push(ge(o[e].abbr)),i.push(ge(o[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+n.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+r.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function sr(e,t){z(0,[e,e.length],0,t)}function cr(e,t,r,n,a){var i;return null==e?Ye(this,n,a).year:(t>(i=We(e,n,a))&&(t=i),ur.call(this,e,t,r,n,a))}function ur(e,t,r,n,a){var i=Le(e,t,r,n,a),o=Re(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}z("N",0,0,"eraAbbr"),z("NN",0,0,"eraAbbr"),z("NNN",0,0,"eraAbbr"),z("NNNN",0,0,"eraName"),z("NNNNN",0,0,"eraNarrow"),z("y",["y",1],"yo","eraYear"),z("y",["yy",2],0,"eraYear"),z("y",["yyy",3],0,"eraYear"),z("y",["yyyy",4],0,"eraYear"),pe("N",ir),pe("NN",ir),pe("NNN",ir),pe("NNNN",(function(e,t){return t.erasNameRegex(e)})),pe("NNNNN",(function(e,t){return t.erasNarrowRegex(e)})),_e(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,r,n){var a=r._locale.erasParse(e,n,r._strict);a?m(r).era=a:m(r).invalidEra=e})),pe("y",ue),pe("yy",ue),pe("yyy",ue),pe("yyyy",ue),pe("yo",(function(e,t){return t._eraYearOrdinalRegex||ue})),_e(["y","yy","yyy","yyyy"],0),_e(["yo"],(function(e,t,r,n){var a;r._locale._eraYearOrdinalRegex&&(a=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[0]=r._locale.eraYearOrdinalParse(e,a):t[0]=parseInt(e,10)})),z(0,["gg",2],0,(function(){return this.weekYear()%100})),z(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),sr("gggg","weekYear"),sr("ggggg","weekYear"),sr("GGGG","isoWeekYear"),sr("GGGGG","isoWeekYear"),I("weekYear","gg"),I("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),pe("G",le),pe("g",le),pe("GG",ne,Q),pe("gg",ne,Q),pe("GGGG",se,te),pe("gggg",se,te),pe("GGGGG",ce,re),pe("ggggg",ce,re),be(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,r,n){t[n.substr(0,2)]=$(e)})),be(["gg","GG"],(function(e,t,r,n){t[n]=a.parseTwoDigitYear(e)})),z("Q",0,"Qo","quarter"),I("quarter","Q"),F("quarter",7),pe("Q",X),_e("Q",(function(e,t){t[1]=3*($(e)-1)})),z("D",["DD",2],"Do","date"),I("date","D"),F("date",9),pe("D",ne),pe("DD",ne,Q),pe("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),_e(["D","DD"],2),_e("Do",(function(e,t){t[2]=$(e.match(ne)[0])}));var lr=V("Date",!0);z("DDD",["DDDD",3],"DDDo","dayOfYear"),I("dayOfYear","DDD"),F("dayOfYear",4),pe("DDD",oe),pe("DDDD",ee),_e(["DDD","DDDD"],(function(e,t,r){r._dayOfYear=$(e)})),z("m",["mm",2],0,"minute"),I("minute","m"),F("minute",14),pe("m",ne),pe("mm",ne,Q),_e(["m","mm"],4);var fr=V("Minutes",!1);z("s",["ss",2],0,"second"),I("second","s"),F("second",15),pe("s",ne),pe("ss",ne,Q),_e(["s","ss"],5);var dr,hr,pr=V("Seconds",!1);for(z("S",0,0,(function(){return~~(this.millisecond()/100)})),z(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),z(0,["SSS",3],0,"millisecond"),z(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),z(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),z(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),z(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),z(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),z(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),I("millisecond","ms"),F("millisecond",16),pe("S",oe,X),pe("SS",oe,Q),pe("SSS",oe,ee),dr="SSSS";dr.length<=9;dr+="S")pe(dr,ue);function mr(e,t){t[6]=$(1e3*("0."+e))}for(dr="S";dr.length<=9;dr+="S")_e(dr,mr);hr=V("Milliseconds",!1),z("z",0,0,"zoneAbbr"),z("zz",0,0,"zoneName");var gr=A.prototype;function vr(e){return e}gr.add=$t,gr.calendar=function(e,t){1===arguments.length&&(arguments[0]?Jt(arguments[0])?(e=arguments[0],t=void 0):Zt(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var r=e||Mt(),n=Lt(r,this).startOf("day"),i=a.calendarFormat(this,n)||"sameElse",o=t&&(T(t[i])?t[i].call(this,r):t[i]);return this.format(o||this.localeData().calendar(i,this,Mt(r)))},gr.clone=function(){return new A(this)},gr.diff=function(e,t,r){var n,a,i;if(!this.isValid())return NaN;if(!(n=Lt(e,this)).isValid())return NaN;switch(a=6e4*(n.utcOffset()-this.utcOffset()),t=B(t)){case"year":i=Xt(this,n)/12;break;case"month":i=Xt(this,n);break;case"quarter":i=Xt(this,n)/3;break;case"second":i=(this-n)/1e3;break;case"minute":i=(this-n)/6e4;break;case"hour":i=(this-n)/36e5;break;case"day":i=(this-n-a)/864e5;break;case"week":i=(this-n-a)/6048e5;break;default:i=this-n}return r?i:U(i)},gr.endOf=function(e){var t,r;if(void 0===(e=B(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ar:nr,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-rr(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-rr(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-rr(t,1e3)-1}return this._d.setTime(t),a.updateOffset(this,!0),this},gr.format=function(e){e||(e=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var t=L(this,e);return this.localeData().postformat(t)},gr.from=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Mt(e).isValid())?qt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},gr.fromNow=function(e){return this.from(Mt(),e)},gr.to=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Mt(e).isValid())?qt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},gr.toNow=function(e){return this.to(Mt(),e)},gr.get=function(e){return T(this[e=B(e)])?this[e]():this},gr.invalidAt=function(){return m(this).overflow},gr.isAfter=function(e,t){var r=w(e)?e:Mt(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=B(t)||"millisecond")?this.valueOf()>r.valueOf():r.valueOf()<this.clone().startOf(t).valueOf())},gr.isBefore=function(e,t){var r=w(e)?e:Mt(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=B(t)||"millisecond")?this.valueOf()<r.valueOf():this.clone().endOf(t).valueOf()<r.valueOf())},gr.isBetween=function(e,t,r,n){var a=w(e)?e:Mt(e),i=w(t)?t:Mt(t);return!!(this.isValid()&&a.isValid()&&i.isValid())&&(("("===(n=n||"()")[0]?this.isAfter(a,r):!this.isBefore(a,r))&&(")"===n[1]?this.isBefore(i,r):!this.isAfter(i,r)))},gr.isSame=function(e,t){var r,n=w(e)?e:Mt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=B(t)||"millisecond")?this.valueOf()===n.valueOf():(r=n.valueOf(),this.clone().startOf(t).valueOf()<=r&&r<=this.clone().endOf(t).valueOf()))},gr.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},gr.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},gr.isValid=function(){return g(this)},gr.lang=er,gr.locale=Qt,gr.localeData=tr,gr.max=Tt,gr.min=St,gr.parsingFlags=function(){return h({},m(this))},gr.set=function(e,t){if("object"==typeof e){var r,n=function(e){var t,r=[];for(t in e)s(e,t)&&r.push({unit:t,priority:H[t]});return r.sort((function(e,t){return e.priority-t.priority})),r}(e=q(e)),a=n.length;for(r=0;r<a;r++)this[n[r].unit](e[n[r].unit])}else if(T(this[e=B(e)]))return this[e](t);return this},gr.startOf=function(e){var t,r;if(void 0===(e=B(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ar:nr,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=rr(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=rr(t,6e4);break;case"second":t=this._d.valueOf(),t-=rr(t,1e3)}return this._d.setTime(t),a.updateOffset(this,!0),this},gr.subtract=Vt,gr.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},gr.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},gr.toDate=function(){return new Date(this.valueOf())},gr.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,r=t?this.clone().utc():this;return r.year()<0||r.year()>9999?L(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",L(r,"Z")):L(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},gr.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,r,n="moment",a="";return this.isLocal()||(n=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),e="["+n+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r=a+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+r)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(gr[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),gr.toJSON=function(){return this.isValid()?this.toISOString():null},gr.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},gr.unix=function(){return Math.floor(this.valueOf()/1e3)},gr.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},gr.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},gr.eraName=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].name;if(n[e].until<=r&&r<=n[e].since)return n[e].name}return""},gr.eraNarrow=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].narrow;if(n[e].until<=r&&r<=n[e].since)return n[e].narrow}return""},gr.eraAbbr=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].abbr;if(n[e].until<=r&&r<=n[e].since)return n[e].abbr}return""},gr.eraYear=function(){var e,t,r,n,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(r=i[e].since<=i[e].until?1:-1,n=this.clone().startOf("day").valueOf(),i[e].since<=n&&n<=i[e].until||i[e].until<=n&&n<=i[e].since)return(this.year()-a(i[e].since).year())*r+i[e].offset;return this.year()},gr.year=Pe,gr.isLeapYear=function(){return G(this.year())},gr.weekYear=function(e){return cr.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},gr.isoWeekYear=function(e){return cr.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},gr.quarter=gr.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},gr.month=De,gr.daysInMonth=function(){return we(this.year(),this.month())},gr.week=gr.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},gr.isoWeek=gr.isoWeeks=function(e){var t=Ye(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},gr.weeksInYear=function(){var e=this.localeData()._week;return We(this.year(),e.dow,e.doy)},gr.weeksInWeekYear=function(){var e=this.localeData()._week;return We(this.weekYear(),e.dow,e.doy)},gr.isoWeeksInYear=function(){return We(this.year(),1,4)},gr.isoWeeksInISOWeekYear=function(){return We(this.isoWeekYear(),1,4)},gr.date=lr,gr.day=gr.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},gr.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},gr.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},gr.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},gr.hour=gr.hours=Qe,gr.minute=gr.minutes=fr,gr.second=gr.seconds=pr,gr.millisecond=gr.milliseconds=hr,gr.utcOffset=function(e,t,r){var n,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=zt(de,e)))return this}else Math.abs(e)<16&&!r&&(e*=60);return!this._isUTC&&t&&(n=Yt(this)),this._offset=e,this._isUTC=!0,null!=n&&this.add(n,"m"),i!==e&&(!t||this._changeInProgress?Ut(this,qt(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Yt(this)},gr.utc=function(e){return this.utcOffset(0,e)},gr.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Yt(this),"m")),this},gr.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=zt(fe,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},gr.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Mt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},gr.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},gr.isLocal=function(){return!!this.isValid()&&!this._isUTC},gr.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},gr.isUtc=Wt,gr.isUTC=Wt,gr.zoneAbbr=function(){return this._isUTC?"UTC":""},gr.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},gr.dates=k("dates accessor is deprecated. Use date instead.",lr),gr.months=k("months accessor is deprecated. Use month instead",De),gr.years=k("years accessor is deprecated. Use year instead",Pe),gr.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),gr.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return b(t,this),(t=kt(t))._a?(e=t._isUTC?p(t._a):Mt(t._a),this._isDSTShifted=this.isValid()&&function(e,t,r){var n,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(n=0;n<a;n++)(r&&e[n]!==t[n]||!r&&$(e[n])!==$(t[n]))&&o++;return o+i}(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}));var yr=D.prototype;function _r(e,t,r,n){var a=ct(),i=p().set(n,t);return a[r](i,e)}function br(e,t,r){if(l(e)&&(t=e,e=void 0),e=e||"",null!=t)return _r(e,t,r,"month");var n,a=[];for(n=0;n<12;n++)a[n]=_r(e,n,r,"month");return a}function Ar(e,t,r,n){"boolean"==typeof e?(l(t)&&(r=t,t=void 0),t=t||""):(r=t=e,e=!1,l(t)&&(r=t,t=void 0),t=t||"");var a,i=ct(),o=e?i._week.dow:0,s=[];if(null!=r)return _r(t,(r+o)%7,n,"day");for(a=0;a<7;a++)s[a]=_r(t,(a+o)%7,n,"day");return s}yr.calendar=function(e,t,r){var n=this._calendar[e]||this._calendar.sameElse;return T(n)?n.call(t,r):n},yr.longDateFormat=function(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return t||!r?t:(this._longDateFormat[e]=r.match(N).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])},yr.invalidDate=function(){return this._invalidDate},yr.ordinal=function(e){return this._ordinal.replace("%d",e)},yr.preparse=vr,yr.postformat=vr,yr.relativeTime=function(e,t,r,n){var a=this._relativeTime[r];return T(a)?a(e,t,r,n):a.replace(/%d/i,e)},yr.pastFuture=function(e,t){var r=this._relativeTime[e>0?"future":"past"];return T(r)?r(t):r.replace(/%s/i,t)},yr.set=function(e){var t,r;for(r in e)s(e,r)&&(T(t=e[r])?this[r]=t:this["_"+r]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},yr.eras=function(e,t){var r,n,i,o=this._eras||ct("en")._eras;for(r=0,n=o.length;r<n;++r){switch(typeof o[r].since){case"string":i=a(o[r].since).startOf("day"),o[r].since=i.valueOf()}switch(typeof o[r].until){case"undefined":o[r].until=1/0;break;case"string":i=a(o[r].until).startOf("day").valueOf(),o[r].until=i.valueOf()}}return o},yr.erasParse=function(e,t,r){var n,a,i,o,s,c=this.eras();for(e=e.toUpperCase(),n=0,a=c.length;n<a;++n)if(i=c[n].name.toUpperCase(),o=c[n].abbr.toUpperCase(),s=c[n].narrow.toUpperCase(),r)switch(t){case"N":case"NN":case"NNN":if(o===e)return c[n];break;case"NNNN":if(i===e)return c[n];break;case"NNNNN":if(s===e)return c[n]}else if([i,o,s].indexOf(e)>=0)return c[n]},yr.erasConvertYear=function(e,t){var r=e.since<=e.until?1:-1;return void 0===t?a(e.since).year():a(e.since).year()+(t-e.offset)*r},yr.erasAbbrRegex=function(e){return s(this,"_erasAbbrRegex")||or.call(this),e?this._erasAbbrRegex:this._erasRegex},yr.erasNameRegex=function(e){return s(this,"_erasNameRegex")||or.call(this),e?this._erasNameRegex:this._erasRegex},yr.erasNarrowRegex=function(e){return s(this,"_erasNarrowRegex")||or.call(this),e?this._erasNarrowRegex:this._erasRegex},yr.months=function(e,t){return e?i(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Ee).test(t)?"format":"standalone"][e.month()]:i(this._months)?this._months:this._months.standalone},yr.monthsShort=function(e,t){return e?i(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Ee.test(t)?"format":"standalone"][e.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},yr.monthsParse=function(e,t,r){var n,a,i;if(this._monthsParseExact)return Te.call(this,e,t,r);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(a=p([2e3,n]),r&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),r||this._monthsParse[n]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[n]=new RegExp(i.replace(".",""),"i")),r&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(r&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!r&&this._monthsParse[n].test(e))return n}},yr.monthsRegex=function(e){return this._monthsParseExact?(s(this,"_monthsRegex")||Oe.call(this),e?this._monthsStrictRegex:this._monthsRegex):(s(this,"_monthsRegex")||(this._monthsRegex=Se),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},yr.monthsShortRegex=function(e){return this._monthsParseExact?(s(this,"_monthsRegex")||Oe.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,"_monthsShortRegex")||(this._monthsShortRegex=Me),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},yr.week=function(e){return Ye(e,this._week.dow,this._week.doy).week},yr.firstDayOfYear=function(){return this._week.doy},yr.firstDayOfWeek=function(){return this._week.dow},yr.weekdays=function(e,t){var r=i(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ie(r,this._week.dow):e?r[e.day()]:r},yr.weekdaysMin=function(e){return!0===e?Ie(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},yr.weekdaysShort=function(e){return!0===e?Ie(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},yr.weekdaysParse=function(e,t,r){var n,a,i;if(this._weekdaysParseExact)return $e.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(a=p([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[n]=new RegExp(i.replace(".",""),"i")),r&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(r&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(r&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}},yr.weekdaysRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ve.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,"_weekdaysRegex")||(this._weekdaysRegex=Fe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},yr.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ve.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ge),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},yr.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ve.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ue),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},yr.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},yr.meridiem=function(e,t,r){return e>11?r?"pm":"PM":r?"am":"AM"},ot("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===$(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),a.lang=k("moment.lang is deprecated. Use moment.locale instead.",ot),a.langData=k("moment.langData is deprecated. Use moment.localeData instead.",ct);var wr=Math.abs;function xr(e,t,r,n){var a=qt(t,r);return e._milliseconds+=n*a._milliseconds,e._days+=n*a._days,e._months+=n*a._months,e._bubble()}function kr(e){return e<0?Math.floor(e):Math.ceil(e)}function Er(e){return 4800*e/146097}function Mr(e){return 146097*e/4800}function Sr(e){return function(){return this.as(e)}}var Tr=Sr("ms"),Cr=Sr("s"),Dr=Sr("m"),Or=Sr("h"),Nr=Sr("d"),Pr=Sr("w"),jr=Sr("M"),Rr=Sr("Q"),zr=Sr("y");function Lr(e){return function(){return this.isValid()?this._data[e]:NaN}}var Yr=Lr("milliseconds"),Wr=Lr("seconds"),Ir=Lr("minutes"),Br=Lr("hours"),qr=Lr("days"),Hr=Lr("months"),Fr=Lr("years"),Gr=Math.round,Ur={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function $r(e,t,r,n,a){return a.relativeTime(t||1,!!r,e,n)}var Vr=Math.abs;function Kr(e){return(e>0)-(e<0)||+e}function Jr(){if(!this.isValid())return this.localeData().invalidDate();var e,t,r,n,a,i,o,s,c=Vr(this._milliseconds)/1e3,u=Vr(this._days),l=Vr(this._months),f=this.asSeconds();return f?(e=U(c/60),t=U(e/60),c%=60,e%=60,r=U(l/12),l%=12,n=c?c.toFixed(3).replace(/\.?0+$/,""):"",a=f<0?"-":"",i=Kr(this._months)!==Kr(f)?"-":"",o=Kr(this._days)!==Kr(f)?"-":"",s=Kr(this._milliseconds)!==Kr(f)?"-":"",a+"P"+(r?i+r+"Y":"")+(l?i+l+"M":"")+(u?o+u+"D":"")+(t||e||c?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(c?s+n+"S":"")):"P0D"}var Zr=Ot.prototype;return Zr.isValid=function(){return this._isValid},Zr.abs=function(){var e=this._data;return this._milliseconds=wr(this._milliseconds),this._days=wr(this._days),this._months=wr(this._months),e.milliseconds=wr(e.milliseconds),e.seconds=wr(e.seconds),e.minutes=wr(e.minutes),e.hours=wr(e.hours),e.months=wr(e.months),e.years=wr(e.years),this},Zr.add=function(e,t){return xr(this,e,t,1)},Zr.subtract=function(e,t){return xr(this,e,t,-1)},Zr.as=function(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if("month"===(e=B(e))||"quarter"===e||"year"===e)switch(t=this._days+n/864e5,r=this._months+Er(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round(Mr(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}},Zr.asMilliseconds=Tr,Zr.asSeconds=Cr,Zr.asMinutes=Dr,Zr.asHours=Or,Zr.asDays=Nr,Zr.asWeeks=Pr,Zr.asMonths=jr,Zr.asQuarters=Rr,Zr.asYears=zr,Zr.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*$(this._months/12):NaN},Zr._bubble=function(){var e,t,r,n,a,i=this._milliseconds,o=this._days,s=this._months,c=this._data;return i>=0&&o>=0&&s>=0||i<=0&&o<=0&&s<=0||(i+=864e5*kr(Mr(s)+o),o=0,s=0),c.milliseconds=i%1e3,e=U(i/1e3),c.seconds=e%60,t=U(e/60),c.minutes=t%60,r=U(t/60),c.hours=r%24,o+=U(r/24),a=U(Er(o)),s+=a,o-=kr(Mr(a)),n=U(s/12),s%=12,c.days=o,c.months=s,c.years=n,this},Zr.clone=function(){return qt(this)},Zr.get=function(e){return e=B(e),this.isValid()?this[e+"s"]():NaN},Zr.milliseconds=Yr,Zr.seconds=Wr,Zr.minutes=Ir,Zr.hours=Br,Zr.days=qr,Zr.weeks=function(){return U(this.days()/7)},Zr.months=Hr,Zr.years=Fr,Zr.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var r,n,a=!1,i=Ur;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(a=e),"object"==typeof t&&(i=Object.assign({},Ur,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),r=this.localeData(),n=function(e,t,r,n){var a=qt(e).abs(),i=Gr(a.as("s")),o=Gr(a.as("m")),s=Gr(a.as("h")),c=Gr(a.as("d")),u=Gr(a.as("M")),l=Gr(a.as("w")),f=Gr(a.as("y")),d=i<=r.ss&&["s",i]||i<r.s&&["ss",i]||o<=1&&["m"]||o<r.m&&["mm",o]||s<=1&&["h"]||s<r.h&&["hh",s]||c<=1&&["d"]||c<r.d&&["dd",c];return null!=r.w&&(d=d||l<=1&&["w"]||l<r.w&&["ww",l]),(d=d||u<=1&&["M"]||u<r.M&&["MM",u]||f<=1&&["y"]||["yy",f])[2]=t,d[3]=+e>0,d[4]=n,$r.apply(null,d)}(this,!a,i,r),a&&(n=r.pastFuture(+this,n)),r.postformat(n)},Zr.toISOString=Jr,Zr.toString=Jr,Zr.toJSON=Jr,Zr.locale=Qt,Zr.localeData=tr,Zr.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Jr),Zr.lang=er,z("X",0,0,"unix"),z("x",0,0,"valueOf"),pe("x",le),pe("X",/[+-]?\d+(\.\d{1,3})?/),_e("X",(function(e,t,r){r._d=new Date(1e3*parseFloat(e))})),_e("x",(function(e,t,r){r._d=new Date($(e))})),//! moment.js +a.version="2.29.4",r=Mt,a.fn=gr,a.min=function(){var e=[].slice.call(arguments,0);return Ct("isBefore",e)},a.max=function(){var e=[].slice.call(arguments,0);return Ct("isAfter",e)},a.now=function(){return Date.now?Date.now():+new Date},a.utc=p,a.unix=function(e){return Mt(1e3*e)},a.months=function(e,t){return br(e,t,"months")},a.isDate=f,a.locale=ot,a.invalid=v,a.duration=qt,a.isMoment=w,a.weekdays=function(e,t,r){return Ar(e,t,r,"weekdays")},a.parseZone=function(){return Mt.apply(null,arguments).parseZone()},a.localeData=ct,a.isDuration=Nt,a.monthsShort=function(e,t){return br(e,t,"monthsShort")},a.weekdaysMin=function(e,t,r){return Ar(e,t,r,"weekdaysMin")},a.defineLocale=st,a.updateLocale=function(e,t){if(null!=t){var r,n,a=et;null!=tt[e]&&null!=tt[e].parentLocale?tt[e].set(C(tt[e]._config,t)):(null!=(n=it(e))&&(a=n._config),t=C(a,t),null==n&&(t.abbr=e),(r=new D(t)).parentLocale=tt[e],tt[e]=r),ot(e)}else null!=tt[e]&&(null!=tt[e].parentLocale?(tt[e]=tt[e].parentLocale,e===ot()&&ot(e)):null!=tt[e]&&delete tt[e]);return tt[e]},a.locales=function(){return E(tt)},a.weekdaysShort=function(e,t,r){return Ar(e,t,r,"weekdaysShort")},a.normalizeUnits=B,a.relativeTimeRounding=function(e){return void 0===e?Gr:"function"==typeof e&&(Gr=e,!0)},a.relativeTimeThreshold=function(e,t){return void 0!==Ur[e]&&(void 0===t?Ur[e]:(Ur[e]=t,"s"===e&&(Ur.ss=t-1),!0))},a.calendarFormat=function(e,t){var r=e.diff(t,"days",!0);return r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse"},a.prototype=gr,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()})),Os=t((function(e){!function(t,r){e.exports?e.exports=r(Ds):r(t.moment)}(this,(function(e){void 0===e.version&&e.default&&(e=e.default);var t,r={},n={},a={},i={},o={};e&&"string"==typeof e.version||T("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var s=e.version.split("."),c=+s[0],u=+s[1];function l(e){return 96<e?e-87:64<e?e-29:e-48}function f(e){var t=0,r=e.split("."),n=r[0],a=r[1]||"",i=1,o=0,s=1;for(45===e.charCodeAt(0)&&(s=-(t=1));t<n.length;t++)o=60*o+l(n.charCodeAt(t));for(t=0;t<a.length;t++)i/=60,o+=l(a.charCodeAt(t))*i;return o*s}function d(e){for(var t=0;t<e.length;t++)e[t]=f(e[t])}function h(e,t){var r,n=[];for(r=0;r<t.length;r++)n[r]=e[t[r]];return n}function p(e){var t=e.split("|"),r=t[2].split(" "),n=t[3].split(""),a=t[4].split(" ");return d(r),d(n),d(a),function(e,t){for(var r=0;r<t;r++)e[r]=Math.round((e[r-1]||0)+6e4*e[r]);e[t-1]=1/0}(a,n.length),{name:t[0],abbrs:h(t[1].split(" "),n),offsets:h(r,n),untils:a,population:0|t[5]}}function m(e){e&&this._set(p(e))}function g(e,t){this.name=e,this.zones=t}function v(e){var t=e.toTimeString(),r=t.match(/\([a-z ]+\)/i);"GMT"===(r=r&&r[0]?(r=r[0].match(/[A-Z]/g))?r.join(""):void 0:(r=t.match(/[A-Z]{3,5}/g))?r[0]:void 0)&&(r=void 0),this.at=+e,this.abbr=r,this.offset=e.getTimezoneOffset()}function y(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function _(e,t){for(var r,n;n=6e4*((t.at-e.at)/12e4|0);)(r=new v(new Date(e.at+n))).offset===e.offset?e=r:t=r;return e}function b(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:e.zone.population!==t.zone.population?t.zone.population-e.zone.population:t.zone.name.localeCompare(e.zone.name)}function A(e,t){var r,n;for(d(t),r=0;r<t.length;r++)n=t[r],o[n]=o[n]||{},o[n][e]=!0}function w(e){return(e||"").toLowerCase().replace(/\//g,"_")}function x(e){var t,n,a,o;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)o=w(n=(a=e[t].split("|"))[0]),r[o]=e[t],i[o]=n,A(o,a[2].split(" "))}function k(e,t){e=w(e);var a,o=r[e];return o instanceof m?o:"string"==typeof o?(o=new m(o),r[e]=o):n[e]&&t!==k&&(a=k(n[e],k))?((o=r[e]=new m)._set(a),o.name=i[e],o):null}function E(e){var t,r,a,o;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)a=w((r=e[t].split("|"))[0]),o=w(r[1]),n[a]=o,i[a]=r[0],n[o]=a,i[o]=r[1]}function M(e){x(e.zones),E(e.links),function(e){var t,r,n,i;if(e&&e.length)for(t=0;t<e.length;t++)r=(i=e[t].split("|"))[0].toUpperCase(),n=i[1].split(" "),a[r]=new g(r,n)}(e.countries),C.dataVersion=e.version}function S(e){var t="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||t)}function T(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function C(t){var r=Array.prototype.slice.call(arguments,0,-1),n=arguments[arguments.length-1],a=k(n),i=e.utc.apply(null,r);return a&&!e.isMoment(t)&&S(i)&&i.add(a.parse(i),"minutes"),i.tz(n),i}(c<2||2==c&&u<6)&&T("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+e.version+". See momentjs.com"),m.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,r=+e,n=this.untils;for(t=0;t<n.length;t++)if(r<n[t])return t},countries:function(){var e=this.name;return Object.keys(a).filter((function(t){return-1!==a[t].zones.indexOf(e)}))},parse:function(e){var t,r,n,a,i=+e,o=this.offsets,s=this.untils,c=s.length-1;for(a=0;a<c;a++)if(t=o[a],r=o[a+1],n=o[a?a-1:a],t<r&&C.moveAmbiguousForward?t=r:n<t&&C.moveInvalidForward&&(t=n),i<s[a]-6e4*t)return o[a];return o[c]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return T("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},y.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},C.version="0.5.36",C.dataVersion="",C._zones=r,C._links=n,C._names=i,C._countries=a,C.add=x,C.link=E,C.load=M,C.zone=k,C.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,T("moment.tz.zoneExists('"+t+"') has been deprecated in favor of !moment.tz.zone('"+t+"')")),!!k(t)},C.guess=function(e){return t&&!e||(t=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&3<e.length){var t=i[w(e)];if(t)return t;T("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var r,n,a,s=function(){var e,t,r,n=(new Date).getFullYear()-2,a=new v(new Date(n,0,1)),i=[a];for(r=1;r<48;r++)(t=new v(new Date(n,r,1))).offset!==a.offset&&(e=_(a,t),i.push(e),i.push(new v(new Date(e.at+6e4)))),a=t;for(r=0;r<4;r++)i.push(new v(new Date(n+r,0,1))),i.push(new v(new Date(n+r,6,1)));return i}(),c=s.length,u=function(e){var t,r,n,a=e.length,s={},c=[];for(t=0;t<a;t++)for(r in n=o[e[t].offset]||{})n.hasOwnProperty(r)&&(s[r]=!0);for(t in s)s.hasOwnProperty(t)&&c.push(i[t]);return c}(s),l=[];for(n=0;n<u.length;n++){for(r=new y(k(u[n]),c),a=0;a<c;a++)r.scoreOffsetAt(s[a]);l.push(r)}return l.sort(b),0<l.length?l[0].zone.name:void 0}()),t},C.names=function(){var e,t=[];for(e in i)i.hasOwnProperty(e)&&(r[e]||r[n[e]])&&i[e]&&t.push(i[e]);return t.sort()},C.Zone=m,C.unpack=p,C.unpackBase60=f,C.needsOffset=S,C.moveInvalidForward=!0,C.moveAmbiguousForward=!1,C.countries=function(){return Object.keys(a)},C.zonesForCountry=function(e,t){if(!(e=function(e){return e=e.toUpperCase(),a[e]||null}(e)))return null;var r=e.zones.sort();return t?r.map((function(e){return{name:e,offset:k(e).utcOffset(new Date)}})):r};var D,O=e.fn;function N(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function P(e){return function(){return this._z=null,e.apply(this,arguments)}}e.tz=C,e.defaultZone=null,e.updateOffset=function(t,r){var n,a=e.defaultZone;if(void 0===t._z&&(a&&S(t)&&!t._isUTC&&(t._d=e.utc(t._a)._d,t.utc().add(a.parse(t),"minutes")),t._z=a),t._z)if(n=t._z.utcOffset(t),Math.abs(n)<16&&(n/=60),void 0!==t.utcOffset){var i=t._z;t.utcOffset(-n,r),t._z=i}else t.zone(n,r)},O.tz=function(t,r){if(t){if("string"!=typeof t)throw new Error("Time zone name must be a string, got "+t+" ["+typeof t+"]");return this._z=k(t),this._z?e.updateOffset(this,r):T("Moment Timezone has no data for "+t+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},O.zoneName=N(O.zoneName),O.zoneAbbr=N(O.zoneAbbr),O.utc=P(O.utc),O.local=P(O.local),O.utcOffset=(D=O.utcOffset,function(){return 0<arguments.length&&(this._z=null),D.apply(this,arguments)}),e.tz.setDefault=function(t){return(c<2||2==c&&u<9)&&T("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+e.version+"."),e.defaultZone=t?k(t):null,e};var j=e.momentProperties;return"[object Array]"===Object.prototype.toString.call(j)?(j.push("_z"),j.push("_a")):j&&(j._z=null),M({version:"2022c",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Juba|EAT CAT|-30 -20|01|24nx0|","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5","America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Kuala_Lumpur|+08|-80|0||71e5","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1q00|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PST|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5","Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0||","Pacific/Guadalcanal|+11|-b0|0||11e4","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0||","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0||","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0||","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UTC|UTC|0|0||","Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Volgograd|+04 +03|-40 -30|0101|1N7y0 9Jd0 5gn0|10e5","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 4q00|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Godthab|America/Nuuk","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Whitehorse|America/Dawson","America/Whitehorse|Canada/Yukon","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qostanay","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Brunei","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Etc/GMT-8","Asia/Kuala_Lumpur|Singapore","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Antarctica/Macquarie","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Kyiv","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Ulyanovsk|Europe/Astrakhan","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Fakaofo|Pacific/Kanton","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"],countries:["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv Europe/Uzhgorod Europe/Zaporozhye","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Honolulu Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}),e}))})),Ns=function(e,t){var r=e.toString();function n(e){return function(t,r,n){return e+r+(n[0].toUpperCase()===n[0]?"A":"a")}}if((t=t||{}).preferredOrder=t.preferredOrder||yc,(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=r.replace(gc,"x")).replace(vc,"X")).replace(mc,"[$1]")).replace(Ps,"dddd")).replace(js,"ddd")).replace(Rs,"dd")).replace(Ys,"Do")).replace(zs,"MMMM")).replace(Ls,"MMM")).replace(Ws,_c.bind(null,t))).replace(Is,"Z")).replace(Vs,"HH:mm:ss.SSS")).replace(Ks,"HH:mm:ss.SS")).replace(Js,"HH:mm:ss.S")).replace(qs,n("hh:mm:ss"))).replace(Gs,n("h:mm:ss"))).replace(Hs,n("hh:mm"))).replace(Us,n("h:mm"))).replace(Fs,n("hh"))).replace($s,n("h"))).replace(Zs,"HH:mm:ss")).replace(ec,"H:mm:ss.SSS")).replace(tc,"H:mm:ss.SS")).replace(rc,"H:mm:ss.S")).replace(Qs,"H:mm:ss")).replace(Xs,"HH:mm")).replace(nc,"H:mm")).replace(ac,"YYYY")).replace(cc,"D/M")).replace(uc,"D/MM")).replace(lc,"DD/M")).replace(fc,"DD/MM")).replace(dc,"M/YY")).replace(hc,"MM/YY")).match(pc)){r=(r=r.replace(/0\d.\d{2}|\d{2}.\d{2}/,"H.mm")).replace(/\d{1}.\d{2}/,"h.mm")}(r=(r=(r=r.replace(ic,"DD")).replace(oc,"D")).replace(sc,"YY")).length<1&&(r=void 0);return r},Ps=new RegExp(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].join("|"),"i"),js=new RegExp(["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].join("|"),"i"),Rs=new RegExp("\\b("+["Su","Mo","Tu","We","Th","Fr","Sa"].join("|")+")\\b","i"),zs=new RegExp(["January","February","March","April","May","June","July","August","September","October","November","December"].join("|"),"i"),Ls=new RegExp(["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].join("|"),"i"),Ys=/(\d+)(st|nd|rd|th)\b/i,Ws=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,Is=/((\+|-)\d\d:?\d\d)$/,Bs="("+["AM?","PM?"].join("|")+")",qs=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+Bs,"i"),Hs=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+Bs,"i"),Fs=new RegExp("0\\d(\\s*)"+Bs,"i"),Gs=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+Bs,"i"),Us=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+Bs,"i"),$s=new RegExp("\\d{1,2}(\\s*)"+Bs,"i"),Vs=/\d{2}:\d{2}:\d{2}\.\d{3}/,Ks=/\d{2}:\d{2}:\d{2}\.\d{2}/,Js=/\d{2}:\d{2}:\d{2}\.\d{1}/,Zs=/0\d:\d{2}:\d{2}/,Xs=/0\d:\d{2}/,Qs=/\d{1,2}:\d{2}:\d{2}/,ec=/\d{1,2}:\d{2}:\d{2}\.\d{3}/,tc=/\d{1,2}:\d{2}:\d{2}\.\d{2}/,rc=/\d{1,2}:\d{2}:\d{2}\.\d{1}/,nc=/\d{1,2}:\d{2}/,ac=/\d{4}/,ic=/0\d/,oc=/\d{1,2}/,sc=/\d{2}/,cc=/^([1-9])\/([1-9]|0[1-9])$/,uc=/^([1-9])\/(1[012])$/,lc=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,fc=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,dc=/^([1-9])\/([1-9][0-9])$/,hc=/^(0[1-9]|1[012])\/([1-9][0-9])$/,pc=/([/][M]|[M][/]|[MM]|[MMMM])/,mc=/\b(at)\b/i,gc=/\d{13}/,vc=/\d{10}/,yc={"/":"MDY",".":"DMY","-":"YMD"};function _c(e,t,r,n,a,i){var o,s=1===Math.min(r.length,a.length,i.length),c=4===Math.max(r.length,a.length,i.length),u="string"==typeof e.preferredOrder?e.preferredOrder:e.preferredOrder[n];return o=[r=parseInt(r,10),a=parseInt(a,10),i=parseInt(i,10)],u=u.toUpperCase(),r>31?(o[0]=c?"YYYY":"YY",o[1]=s?"M":"MM",o[2]=s?"D":"DD",o.join(n)):a>12?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o[2]=c?"YYYY":"YY",o.join(n)):i>31?(o[2]=c?"YYYY":"YY","M"===u[0]&&r<13?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o.join(n)):(o[0]=s?"D":"DD",o[1]=s?"M":"MM",o.join(n))):(o[u.indexOf("D")]=s?"D":"DD",o[u.indexOf("M")]=s?"M":"MM",o[u.indexOf("Y")]=c?"YYYY":"YY",o.join(n))}var bc=Ns;function Ac(e){return(e.match(xs)||[]).join(" ").replace(ys,"m").replace(vs,"$1 $2 $3").replace(gs,"$1").trim()}function wc(e,t,r){if(ks.test(e))return Os(new Date(e));if(As.test(e)){var n=As.exec(e);return Os().subtract(n[1],n[2])}return _s.test(e)?Os():t?Os.tz(e,r||bc(e),t):Os(e,r||bc(e))}function xc(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.timezone,n=t.format;if(ps.test(e))return new Date(wa(e,10)).toISOString();if(ms.test(e))return new Date(1e3*wa(e,10)).toISOString();var a=wc(e,r,n);return a.isValid()||(a=wc(e=Ac(e),r,n)),a.isValid()?a.toISOString():null}function kc(e,t){var r=t.$,n=(t.cleanConditionally,t.title),a=void 0===n?"":n,i=t.url,o=void 0===i?"":i,s=t.defaultCleaner,c=void 0===s||s;return function(e,t){t=Ei(t("html"),t,"div"),t=Ei(t("body"),t,"div")}(0,r),c&&Mi(e,r),xo(e,r,o),Ri(e,r,o),function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];0===r.length&&(r=li),t(r.join(","),e).not(".".concat(ci)).remove()}(e,r),function(e,t){var r=t("h1",e);r.length<3?r.each((function(e,r){return t(r).remove()})):r.each((function(e,r){Ei(t(r),t,"h2")}))}(e,r),function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";t(hi,e).each((function(n,a){var i=t(a);return 0===t(i,e).prevAll("p").length||la(t(a).text())===r||Ui(t(a))<0?i.remove():i}))}(e,r,a),c&&uo(e,r),function(e,t){e.find("p").each((function(e,r){var n=t(r);0===n.find("iframe, img").length&&""===n.text().trim()&&n.remove()}))}(e,r),function(e,t){zi(e.parent().length?e.parent():e,t)}(e,r),e}function Ec(e,t){var r=t.url,n=t.$;if(Es.test(e)&&(e=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=e.split(Es);if(1===r.length)return e;var n=Cc(r,e);return n||((n=Dc(r,t))||e)}(e,r)),e.length>150){var a=n("h1");1===a.length&&(e=a.text())}return la(No(e,n).trim())}"undefined"!=typeof window&&window.moment&&(window.moment.parseFormat=Ns);var Mc=t((function(e,t){(function(){var r="Expected a function",n="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],i="[object Arguments]",o="[object Array]",s="[object Boolean]",c="[object Date]",u="[object Error]",l="[object Function]",f="[object GeneratorFunction]",d="[object Map]",h="[object Number]",p="[object Object]",m="[object RegExp]",g="[object Set]",v="[object String]",y="[object Symbol]",_="[object WeakMap]",b="[object ArrayBuffer]",A="[object DataView]",w="[object Float32Array]",x="[object Float64Array]",k="[object Int8Array]",E="[object Int16Array]",M="[object Int32Array]",S="[object Uint8Array]",T="[object Uint16Array]",C="[object Uint32Array]",D=/\b__p \+= '';/g,O=/\b(__p \+=) '' \+/g,N=/(__e\(.*?\)|\b__t\)) \+\n'';/g,P=/&(?:amp|lt|gt|quot|#39);/g,j=/[&<>"']/g,R=RegExp(P.source),z=RegExp(j.source),L=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,W=/<%=([\s\S]+?)%>/g,I=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,B=/^\w*$/,q=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,F=RegExp(H.source),G=/^\s+/,U=/\s/,$=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,V=/\{\n\/\* \[wrapped with (.+)\] \*/,K=/,? & /,J=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Z=/[()=,{}\[\]\/\s]/,X=/\\(\\)?/g,Q=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ee=/\w*$/,te=/^[-+]0x[0-9a-f]+$/i,re=/^0b[01]+$/i,ne=/^\[object .+?Constructor\]$/,ae=/^0o[0-7]+$/i,ie=/^(?:0|[1-9]\d*)$/,oe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,se=/($^)/,ce=/['\n\r\u2028\u2029\\]/g,ue="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",le="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",fe="[\\ud800-\\udfff]",de="["+le+"]",he="["+ue+"]",pe="\\d+",me="[\\u2700-\\u27bf]",ge="[a-z\\xdf-\\xf6\\xf8-\\xff]",ve="[^\\ud800-\\udfff"+le+pe+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",ye="\\ud83c[\\udffb-\\udfff]",_e="[^\\ud800-\\udfff]",be="(?:\\ud83c[\\udde6-\\uddff]){2}",Ae="[\\ud800-\\udbff][\\udc00-\\udfff]",we="[A-Z\\xc0-\\xd6\\xd8-\\xde]",xe="(?:"+ge+"|"+ve+")",ke="(?:"+we+"|"+ve+")",Ee="(?:"+he+"|"+ye+")"+"?",Me="[\\ufe0e\\ufe0f]?"+Ee+("(?:\\u200d(?:"+[_e,be,Ae].join("|")+")[\\ufe0e\\ufe0f]?"+Ee+")*"),Se="(?:"+[me,be,Ae].join("|")+")"+Me,Te="(?:"+[_e+he+"?",he,be,Ae,fe].join("|")+")",Ce=RegExp("['’]","g"),De=RegExp(he,"g"),Oe=RegExp(ye+"(?="+ye+")|"+Te+Me,"g"),Ne=RegExp([we+"?"+ge+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[de,we,"$"].join("|")+")",ke+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[de,we+xe,"$"].join("|")+")",we+"?"+xe+"+(?:['’](?:d|ll|m|re|s|t|ve))?",we+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",pe,Se].join("|"),"g"),Pe=RegExp("[\\u200d\\ud800-\\udfff"+ue+"\\ufe0e\\ufe0f]"),je=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Re=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ze=-1,Le={};Le[w]=Le[x]=Le[k]=Le[E]=Le[M]=Le[S]=Le["[object Uint8ClampedArray]"]=Le[T]=Le[C]=!0,Le[i]=Le[o]=Le[b]=Le[s]=Le[A]=Le[c]=Le[u]=Le[l]=Le[d]=Le[h]=Le[p]=Le[m]=Le[g]=Le[v]=Le[_]=!1;var Ye={};Ye[i]=Ye[o]=Ye[b]=Ye[A]=Ye[s]=Ye[c]=Ye[w]=Ye[x]=Ye[k]=Ye[E]=Ye[M]=Ye[d]=Ye[h]=Ye[p]=Ye[m]=Ye[g]=Ye[v]=Ye[y]=Ye[S]=Ye["[object Uint8ClampedArray]"]=Ye[T]=Ye[C]=!0,Ye[u]=Ye[l]=Ye[_]=!1;var We={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ie=parseFloat,Be=parseInt,qe="object"==typeof Kr&&Kr&&Kr.Object===Object&&Kr,He="object"==typeof self&&self&&self.Object===Object&&self,Fe=qe||He||Function("return this")(),Ge=t&&!t.nodeType&&t,Ue=Ge&&e&&!e.nodeType&&e,$e=Ue&&Ue.exports===Ge,Ve=$e&&qe.process,Ke=function(){try{var e=Ue&&Ue.require&&Ue.require("util").types;return e||Ve&&Ve.binding&&Ve.binding("util")}catch(e){}}(),Je=Ke&&Ke.isArrayBuffer,Ze=Ke&&Ke.isDate,Xe=Ke&&Ke.isMap,Qe=Ke&&Ke.isRegExp,et=Ke&&Ke.isSet,tt=Ke&&Ke.isTypedArray;function rt(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function nt(e,t,r,n){for(var a=-1,i=null==e?0:e.length;++a<i;){var o=e[a];t(n,o,r(o),e)}return n}function at(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e}function it(e,t){for(var r=null==e?0:e.length;r--&&!1!==t(e[r],r,e););return e}function ot(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(!t(e[r],r,e))return!1;return!0}function st(e,t){for(var r=-1,n=null==e?0:e.length,a=0,i=[];++r<n;){var o=e[r];t(o,r,e)&&(i[a++]=o)}return i}function ct(e,t){return!!(null==e?0:e.length)&&yt(e,t,0)>-1}function ut(e,t,r){for(var n=-1,a=null==e?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}function lt(e,t){for(var r=-1,n=null==e?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}function ft(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}function dt(e,t,r,n){var a=-1,i=null==e?0:e.length;for(n&&i&&(r=e[++a]);++a<i;)r=t(r,e[a],a,e);return r}function ht(e,t,r,n){var a=null==e?0:e.length;for(n&&a&&(r=e[--a]);a--;)r=t(r,e[a],a,e);return r}function pt(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var mt=wt("length");function gt(e,t,r){var n;return r(e,(function(e,r,a){if(t(e,r,a))return n=r,!1})),n}function vt(e,t,r,n){for(var a=e.length,i=r+(n?1:-1);n?i--:++i<a;)if(t(e[i],i,e))return i;return-1}function yt(e,t,r){return t==t?function(e,t,r){var n=r-1,a=e.length;for(;++n<a;)if(e[n]===t)return n;return-1}(e,t,r):vt(e,bt,r)}function _t(e,t,r,n){for(var a=r-1,i=e.length;++a<i;)if(n(e[a],t))return a;return-1}function bt(e){return e!=e}function At(e,t){var r=null==e?0:e.length;return r?Et(e,t)/r:NaN}function wt(e){return function(t){return null==t?void 0:t[e]}}function xt(e){return function(t){return null==e?void 0:e[t]}}function kt(e,t,r,n,a){return a(e,(function(e,a,i){r=n?(n=!1,e):t(r,e,a,i)})),r}function Et(e,t){for(var r,n=-1,a=e.length;++n<a;){var i=t(e[n]);void 0!==i&&(r=void 0===r?i:r+i)}return r}function Mt(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}function St(e){return e?e.slice(0,Gt(e)+1).replace(G,""):e}function Tt(e){return function(t){return e(t)}}function Ct(e,t){return lt(t,(function(t){return e[t]}))}function Dt(e,t){return e.has(t)}function Ot(e,t){for(var r=-1,n=e.length;++r<n&&yt(t,e[r],0)>-1;);return r}function Nt(e,t){for(var r=e.length;r--&&yt(t,e[r],0)>-1;);return r}function Pt(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}var jt=xt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n",ſ:"s"}),Rt=xt({"&":"&","<":"<",">":">",'"':""","'":"'"});function zt(e){return"\\"+We[e]}function Lt(e){return Pe.test(e)}function Yt(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function Wt(e,t){return function(r){return e(t(r))}}function It(e,t){for(var r=-1,a=e.length,i=0,o=[];++r<a;){var s=e[r];s!==t&&s!==n||(e[r]=n,o[i++]=r)}return o}function Bt(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}function qt(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=[e,e]})),r}function Ht(e){return Lt(e)?function(e){var t=Oe.lastIndex=0;for(;Oe.test(e);)++t;return t}(e):mt(e)}function Ft(e){return Lt(e)?function(e){return e.match(Oe)||[]}(e):function(e){return e.split("")}(e)}function Gt(e){for(var t=e.length;t--&&U.test(e.charAt(t)););return t}var Ut=xt({"&":"&","<":"<",">":">",""":'"',"'":"'"});var $t=function e(t){var U,ue=(t=null==t?Fe:$t.defaults(Fe.Object(),t,$t.pick(Fe,Re))).Array,le=t.Date,fe=t.Error,de=t.Function,he=t.Math,pe=t.Object,me=t.RegExp,ge=t.String,ve=t.TypeError,ye=ue.prototype,_e=de.prototype,be=pe.prototype,Ae=t["__core-js_shared__"],we=_e.toString,xe=be.hasOwnProperty,ke=0,Ee=(U=/[^.]+$/.exec(Ae&&Ae.keys&&Ae.keys.IE_PROTO||""))?"Symbol(src)_1."+U:"",Me=be.toString,Se=we.call(pe),Te=Fe._,Oe=me("^"+we.call(xe).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Pe=$e?t.Buffer:void 0,We=t.Symbol,qe=t.Uint8Array,He=Pe?Pe.allocUnsafe:void 0,Ge=Wt(pe.getPrototypeOf,pe),Ue=pe.create,Ve=be.propertyIsEnumerable,Ke=ye.splice,mt=We?We.isConcatSpreadable:void 0,xt=We?We.iterator:void 0,Vt=We?We.toStringTag:void 0,Kt=function(){try{var e=ei(pe,"defineProperty");return e({},"",{}),e}catch(e){}}(),Jt=t.clearTimeout!==Fe.clearTimeout&&t.clearTimeout,Zt=le&&le.now!==Fe.Date.now&&le.now,Xt=t.setTimeout!==Fe.setTimeout&&t.setTimeout,Qt=he.ceil,er=he.floor,tr=pe.getOwnPropertySymbols,rr=Pe?Pe.isBuffer:void 0,nr=t.isFinite,ar=ye.join,ir=Wt(pe.keys,pe),or=he.max,sr=he.min,cr=le.now,ur=t.parseInt,lr=he.random,fr=ye.reverse,dr=ei(t,"DataView"),hr=ei(t,"Map"),pr=ei(t,"Promise"),mr=ei(t,"Set"),gr=ei(t,"WeakMap"),vr=ei(pe,"create"),yr=gr&&new gr,_r={},br=Si(dr),Ar=Si(hr),wr=Si(pr),xr=Si(mr),kr=Si(gr),Er=We?We.prototype:void 0,Mr=Er?Er.valueOf:void 0,Sr=Er?Er.toString:void 0;function Tr(e){if(Go(e)&&!jo(e)&&!(e instanceof Nr)){if(e instanceof Or)return e;if(xe.call(e,"__wrapped__"))return Ti(e)}return new Or(e)}var Cr=function(){function e(){}return function(t){if(!Fo(t))return{};if(Ue)return Ue(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();function Dr(){}function Or(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Nr(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Pr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function jr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function Rr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function zr(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Rr;++t<r;)this.add(e[t])}function Lr(e){var t=this.__data__=new jr(e);this.size=t.size}function Yr(e,t){var r=jo(e),n=!r&&Po(e),a=!r&&!n&&Yo(e),i=!r&&!n&&!a&&Qo(e),o=r||n||a||i,s=o?Mt(e.length,ge):[],c=s.length;for(var u in e)!t&&!xe.call(e,u)||o&&("length"==u||a&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||si(u,c))||s.push(u);return s}function Wr(e){var t=e.length;return t?e[Ln(0,t-1)]:void 0}function Ir(e,t){return ki(ya(e),Kr(t,0,e.length))}function Br(e){return ki(ya(e))}function qr(e,t,r){(void 0!==r&&!Do(e[t],r)||void 0===r&&!(t in e))&&$r(e,t,r)}function Hr(e,t,r){var n=e[t];xe.call(e,t)&&Do(n,r)&&(void 0!==r||t in e)||$r(e,t,r)}function Fr(e,t){for(var r=e.length;r--;)if(Do(e[r][0],t))return r;return-1}function Gr(e,t,r,n){return en(e,(function(e,a,i){t(n,e,r(e),i)})),n}function Ur(e,t){return e&&_a(t,As(t),e)}function $r(e,t,r){"__proto__"==t&&Kt?Kt(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}function Vr(e,t){for(var r=-1,n=t.length,a=ue(n),i=null==e;++r<n;)a[r]=i?void 0:gs(e,t[r]);return a}function Kr(e,t,r){return e==e&&(void 0!==r&&(e=e<=r?e:r),void 0!==t&&(e=e>=t?e:t)),e}function Jr(e,t,r,n,a,o){var u,_=1&t,D=2&t,O=4&t;if(r&&(u=a?r(e,n,a,o):r(e)),void 0!==u)return u;if(!Fo(e))return e;var N=jo(e);if(N){if(u=function(e){var t=e.length,r=new e.constructor(t);t&&"string"==typeof e[0]&&xe.call(e,"index")&&(r.index=e.index,r.input=e.input);return r}(e),!_)return ya(e,u)}else{var P=ni(e),j=P==l||P==f;if(Yo(e))return da(e,_);if(P==p||P==i||j&&!a){if(u=D||j?{}:ii(e),!_)return D?function(e,t){return _a(e,ri(e),t)}(e,function(e,t){return e&&_a(t,ws(t),e)}(u,e)):function(e,t){return _a(e,ti(e),t)}(e,Ur(u,e))}else{if(!Ye[P])return a?e:{};u=function(e,t,r){var n=e.constructor;switch(t){case b:return ha(e);case s:case c:return new n(+e);case A:return function(e,t){var r=t?ha(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case w:case x:case k:case E:case M:case S:case"[object Uint8ClampedArray]":case T:case C:return pa(e,r);case d:return new n;case h:case v:return new n(e);case m:return function(e){var t=new e.constructor(e.source,ee.exec(e));return t.lastIndex=e.lastIndex,t}(e);case g:return new n;case y:return function(e){return Mr?pe(Mr.call(e)):{}}(e)}}(e,P,_)}}o||(o=new Lr);var R=o.get(e);if(R)return R;o.set(e,u),Jo(e)?e.forEach((function(n){u.add(Jr(n,t,r,n,e,o))})):Uo(e)&&e.forEach((function(n,a){u.set(a,Jr(n,t,r,a,e,o))}));var z=N?void 0:(O?D?$a:Ua:D?ws:As)(e);return at(z||e,(function(n,a){z&&(n=e[a=n]),Hr(u,a,Jr(n,t,r,a,e,o))})),u}function Zr(e,t,r){var n=r.length;if(null==e)return!n;for(e=pe(e);n--;){var a=r[n],i=t[a],o=e[a];if(void 0===o&&!(a in e)||!i(o))return!1}return!0}function Xr(e,t,n){if("function"!=typeof e)throw new ve(r);return bi((function(){e.apply(void 0,n)}),t)}function Qr(e,t,r,n){var a=-1,i=ct,o=!0,s=e.length,c=[],u=t.length;if(!s)return c;r&&(t=lt(t,Tt(r))),n?(i=ut,o=!1):t.length>=200&&(i=Dt,o=!1,t=new zr(t));e:for(;++a<s;){var l=e[a],f=null==r?l:r(l);if(l=n||0!==l?l:0,o&&f==f){for(var d=u;d--;)if(t[d]===f)continue e;c.push(l)}else i(t,f,n)||c.push(l)}return c}Tr.templateSettings={escape:L,evaluate:Y,interpolate:W,variable:"",imports:{_:Tr}},Tr.prototype=Dr.prototype,Tr.prototype.constructor=Tr,Or.prototype=Cr(Dr.prototype),Or.prototype.constructor=Or,Nr.prototype=Cr(Dr.prototype),Nr.prototype.constructor=Nr,Pr.prototype.clear=function(){this.__data__=vr?vr(null):{},this.size=0},Pr.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Pr.prototype.get=function(e){var t=this.__data__;if(vr){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return xe.call(t,e)?t[e]:void 0},Pr.prototype.has=function(e){var t=this.__data__;return vr?void 0!==t[e]:xe.call(t,e)},Pr.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=vr&&void 0===t?"__lodash_hash_undefined__":t,this},jr.prototype.clear=function(){this.__data__=[],this.size=0},jr.prototype.delete=function(e){var t=this.__data__,r=Fr(t,e);return!(r<0)&&(r==t.length-1?t.pop():Ke.call(t,r,1),--this.size,!0)},jr.prototype.get=function(e){var t=this.__data__,r=Fr(t,e);return r<0?void 0:t[r][1]},jr.prototype.has=function(e){return Fr(this.__data__,e)>-1},jr.prototype.set=function(e,t){var r=this.__data__,n=Fr(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},Rr.prototype.clear=function(){this.size=0,this.__data__={hash:new Pr,map:new(hr||jr),string:new Pr}},Rr.prototype.delete=function(e){var t=Xa(this,e).delete(e);return this.size-=t?1:0,t},Rr.prototype.get=function(e){return Xa(this,e).get(e)},Rr.prototype.has=function(e){return Xa(this,e).has(e)},Rr.prototype.set=function(e,t){var r=Xa(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},zr.prototype.add=zr.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},zr.prototype.has=function(e){return this.__data__.has(e)},Lr.prototype.clear=function(){this.__data__=new jr,this.size=0},Lr.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Lr.prototype.get=function(e){return this.__data__.get(e)},Lr.prototype.has=function(e){return this.__data__.has(e)},Lr.prototype.set=function(e,t){var r=this.__data__;if(r instanceof jr){var n=r.__data__;if(!hr||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Rr(n)}return r.set(e,t),this.size=r.size,this};var en=wa(un),tn=wa(ln,!0);function rn(e,t){var r=!0;return en(e,(function(e,n,a){return r=!!t(e,n,a)})),r}function nn(e,t,r){for(var n=-1,a=e.length;++n<a;){var i=e[n],o=t(i);if(null!=o&&(void 0===s?o==o&&!Xo(o):r(o,s)))var s=o,c=i}return c}function an(e,t){var r=[];return en(e,(function(e,n,a){t(e,n,a)&&r.push(e)})),r}function on(e,t,r,n,a){var i=-1,o=e.length;for(r||(r=oi),a||(a=[]);++i<o;){var s=e[i];t>0&&r(s)?t>1?on(s,t-1,r,n,a):ft(a,s):n||(a[a.length]=s)}return a}var sn=xa(),cn=xa(!0);function un(e,t){return e&&sn(e,t,As)}function ln(e,t){return e&&cn(e,t,As)}function fn(e,t){return st(t,(function(t){return Bo(e[t])}))}function dn(e,t){for(var r=0,n=(t=ca(t,e)).length;null!=e&&r<n;)e=e[Mi(t[r++])];return r&&r==n?e:void 0}function hn(e,t,r){var n=t(e);return jo(e)?n:ft(n,r(e))}function pn(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Vt&&Vt in pe(e)?function(e){var t=xe.call(e,Vt),r=e[Vt];try{e[Vt]=void 0;var n=!0}catch(e){}var a=Me.call(e);n&&(t?e[Vt]=r:delete e[Vt]);return a}(e):function(e){return Me.call(e)}(e)}function mn(e,t){return e>t}function gn(e,t){return null!=e&&xe.call(e,t)}function vn(e,t){return null!=e&&t in pe(e)}function yn(e,t,r){for(var n=r?ut:ct,a=e[0].length,i=e.length,o=i,s=ue(i),c=1/0,u=[];o--;){var l=e[o];o&&t&&(l=lt(l,Tt(t))),c=sr(l.length,c),s[o]=!r&&(t||a>=120&&l.length>=120)?new zr(o&&l):void 0}l=e[0];var f=-1,d=s[0];e:for(;++f<a&&u.length<c;){var h=l[f],p=t?t(h):h;if(h=r||0!==h?h:0,!(d?Dt(d,p):n(u,p,r))){for(o=i;--o;){var m=s[o];if(!(m?Dt(m,p):n(e[o],p,r)))continue e}d&&d.push(p),u.push(h)}}return u}function _n(e,t,r){var n=null==(e=gi(e,t=ca(t,e)))?e:e[Mi(Wi(t))];return null==n?void 0:rt(n,e,r)}function bn(e){return Go(e)&&pn(e)==i}function An(e,t,r,n,a){return e===t||(null==e||null==t||!Go(e)&&!Go(t)?e!=e&&t!=t:function(e,t,r,n,a,l){var f=jo(e),_=jo(t),w=f?o:ni(e),x=_?o:ni(t),k=(w=w==i?p:w)==p,E=(x=x==i?p:x)==p,M=w==x;if(M&&Yo(e)){if(!Yo(t))return!1;f=!0,k=!1}if(M&&!k)return l||(l=new Lr),f||Qo(e)?Fa(e,t,r,n,a,l):function(e,t,r,n,a,i,o){switch(r){case A:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case b:return!(e.byteLength!=t.byteLength||!i(new qe(e),new qe(t)));case s:case c:case h:return Do(+e,+t);case u:return e.name==t.name&&e.message==t.message;case m:case v:return e==t+"";case d:var l=Yt;case g:var f=1&n;if(l||(l=Bt),e.size!=t.size&&!f)return!1;var p=o.get(e);if(p)return p==t;n|=2,o.set(e,t);var _=Fa(l(e),l(t),n,a,i,o);return o.delete(e),_;case y:if(Mr)return Mr.call(e)==Mr.call(t)}return!1}(e,t,w,r,n,a,l);if(!(1&r)){var S=k&&xe.call(e,"__wrapped__"),T=E&&xe.call(t,"__wrapped__");if(S||T){var C=S?e.value():e,D=T?t.value():t;return l||(l=new Lr),a(C,D,r,n,l)}}if(!M)return!1;return l||(l=new Lr),function(e,t,r,n,a,i){var o=1&r,s=Ua(e),c=s.length,u=Ua(t).length;if(c!=u&&!o)return!1;var l=c;for(;l--;){var f=s[l];if(!(o?f in t:xe.call(t,f)))return!1}var d=i.get(e),h=i.get(t);if(d&&h)return d==t&&h==e;var p=!0;i.set(e,t),i.set(t,e);var m=o;for(;++l<c;){f=s[l];var g=e[f],v=t[f];if(n)var y=o?n(v,g,f,t,e,i):n(g,v,f,e,t,i);if(!(void 0===y?g===v||a(g,v,r,n,i):y)){p=!1;break}m||(m="constructor"==f)}if(p&&!m){var _=e.constructor,b=t.constructor;_==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof _&&_ instanceof _&&"function"==typeof b&&b instanceof b||(p=!1)}return i.delete(e),i.delete(t),p}(e,t,r,n,a,l)}(e,t,r,n,An,a))}function wn(e,t,r,n){var a=r.length,i=a,o=!n;if(null==e)return!i;for(e=pe(e);a--;){var s=r[a];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<i;){var c=(s=r[a])[0],u=e[c],l=s[1];if(o&&s[2]){if(void 0===u&&!(c in e))return!1}else{var f=new Lr;if(n)var d=n(u,l,c,e,t,f);if(!(void 0===d?An(l,u,3,n,f):d))return!1}}return!0}function xn(e){return!(!Fo(e)||(t=e,Ee&&Ee in t))&&(Bo(e)?Oe:ne).test(Si(e));var t}function kn(e){return"function"==typeof e?e:null==e?$s:"object"==typeof e?jo(e)?Dn(e[0],e[1]):Cn(e):rc(e)}function En(e){if(!di(e))return ir(e);var t=[];for(var r in pe(e))xe.call(e,r)&&"constructor"!=r&&t.push(r);return t}function Mn(e){if(!Fo(e))return function(e){var t=[];if(null!=e)for(var r in pe(e))t.push(r);return t}(e);var t=di(e),r=[];for(var n in e)("constructor"!=n||!t&&xe.call(e,n))&&r.push(n);return r}function Sn(e,t){return e<t}function Tn(e,t){var r=-1,n=zo(e)?ue(e.length):[];return en(e,(function(e,a,i){n[++r]=t(e,a,i)})),n}function Cn(e){var t=Qa(e);return 1==t.length&&t[0][2]?pi(t[0][0],t[0][1]):function(r){return r===e||wn(r,e,t)}}function Dn(e,t){return ui(e)&&hi(t)?pi(Mi(e),t):function(r){var n=gs(r,e);return void 0===n&&n===t?vs(r,e):An(t,n,3)}}function On(e,t,r,n,a){e!==t&&sn(t,(function(i,o){if(a||(a=new Lr),Fo(i))!function(e,t,r,n,a,i,o){var s=yi(e,r),c=yi(t,r),u=o.get(c);if(u)return void qr(e,r,u);var l=i?i(s,c,r+"",e,t,o):void 0,f=void 0===l;if(f){var d=jo(c),h=!d&&Yo(c),p=!d&&!h&&Qo(c);l=c,d||h||p?jo(s)?l=s:Lo(s)?l=ya(s):h?(f=!1,l=da(c,!0)):p?(f=!1,l=pa(c,!0)):l=[]:Vo(c)||Po(c)?(l=s,Po(s)?l=ss(s):Fo(s)&&!Bo(s)||(l=ii(c))):f=!1}f&&(o.set(c,l),a(l,c,n,i,o),o.delete(c));qr(e,r,l)}(e,t,o,r,On,n,a);else{var s=n?n(yi(e,o),i,o+"",e,t,a):void 0;void 0===s&&(s=i),qr(e,o,s)}}),ws)}function Nn(e,t){var r=e.length;if(r)return si(t+=t<0?r:0,r)?e[t]:void 0}function Pn(e,t,r){t=t.length?lt(t,(function(e){return jo(e)?function(t){return dn(t,1===e.length?e[0]:e)}:e})):[$s];var n=-1;return t=lt(t,Tt(Za())),function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}(Tn(e,(function(e,r,a){return{criteria:lt(t,(function(t){return t(e)})),index:++n,value:e}})),(function(e,t){return function(e,t,r){var n=-1,a=e.criteria,i=t.criteria,o=a.length,s=r.length;for(;++n<o;){var c=ma(a[n],i[n]);if(c){if(n>=s)return c;var u=r[n];return c*("desc"==u?-1:1)}}return e.index-t.index}(e,t,r)}))}function jn(e,t,r){for(var n=-1,a=t.length,i={};++n<a;){var o=t[n],s=dn(e,o);r(s,o)&&qn(i,ca(o,e),s)}return i}function Rn(e,t,r,n){var a=n?_t:yt,i=-1,o=t.length,s=e;for(e===t&&(t=ya(t)),r&&(s=lt(e,Tt(r)));++i<o;)for(var c=0,u=t[i],l=r?r(u):u;(c=a(s,l,c,n))>-1;)s!==e&&Ke.call(s,c,1),Ke.call(e,c,1);return e}function zn(e,t){for(var r=e?t.length:0,n=r-1;r--;){var a=t[r];if(r==n||a!==i){var i=a;si(a)?Ke.call(e,a,1):ea(e,a)}}return e}function Ln(e,t){return e+er(lr()*(t-e+1))}function Yn(e,t){var r="";if(!e||t<1||t>9007199254740991)return r;do{t%2&&(r+=e),(t=er(t/2))&&(e+=e)}while(t);return r}function Wn(e,t){return Ai(mi(e,t,$s),e+"")}function In(e){return Wr(Ds(e))}function Bn(e,t){var r=Ds(e);return ki(r,Kr(t,0,r.length))}function qn(e,t,r,n){if(!Fo(e))return e;for(var a=-1,i=(t=ca(t,e)).length,o=i-1,s=e;null!=s&&++a<i;){var c=Mi(t[a]),u=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(a!=o){var l=s[c];void 0===(u=n?n(l,c,s):void 0)&&(u=Fo(l)?l:si(t[a+1])?[]:{})}Hr(s,c,u),s=s[c]}return e}var Hn=yr?function(e,t){return yr.set(e,t),e}:$s,Fn=Kt?function(e,t){return Kt(e,"toString",{configurable:!0,enumerable:!1,value:Fs(t),writable:!0})}:$s;function Gn(e){return ki(Ds(e))}function Un(e,t,r){var n=-1,a=e.length;t<0&&(t=-t>a?0:a+t),(r=r>a?a:r)<0&&(r+=a),a=t>r?0:r-t>>>0,t>>>=0;for(var i=ue(a);++n<a;)i[n]=e[n+t];return i}function $n(e,t){var r;return en(e,(function(e,n,a){return!(r=t(e,n,a))})),!!r}function Vn(e,t,r){var n=0,a=null==e?n:e.length;if("number"==typeof t&&t==t&&a<=2147483647){for(;n<a;){var i=n+a>>>1,o=e[i];null!==o&&!Xo(o)&&(r?o<=t:o<t)?n=i+1:a=i}return a}return Kn(e,t,$s,r)}function Kn(e,t,r,n){var a=0,i=null==e?0:e.length;if(0===i)return 0;for(var o=(t=r(t))!=t,s=null===t,c=Xo(t),u=void 0===t;a<i;){var l=er((a+i)/2),f=r(e[l]),d=void 0!==f,h=null===f,p=f==f,m=Xo(f);if(o)var g=n||p;else g=u?p&&(n||d):s?p&&d&&(n||!h):c?p&&d&&!h&&(n||!m):!h&&!m&&(n?f<=t:f<t);g?a=l+1:i=l}return sr(i,4294967294)}function Jn(e,t){for(var r=-1,n=e.length,a=0,i=[];++r<n;){var o=e[r],s=t?t(o):o;if(!r||!Do(s,c)){var c=s;i[a++]=0===o?0:o}}return i}function Zn(e){return"number"==typeof e?e:Xo(e)?NaN:+e}function Xn(e){if("string"==typeof e)return e;if(jo(e))return lt(e,Xn)+"";if(Xo(e))return Sr?Sr.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Qn(e,t,r){var n=-1,a=ct,i=e.length,o=!0,s=[],c=s;if(r)o=!1,a=ut;else if(i>=200){var u=t?null:Ya(e);if(u)return Bt(u);o=!1,a=Dt,c=new zr}else c=t?[]:s;e:for(;++n<i;){var l=e[n],f=t?t(l):l;if(l=r||0!==l?l:0,o&&f==f){for(var d=c.length;d--;)if(c[d]===f)continue e;t&&c.push(f),s.push(l)}else a(c,f,r)||(c!==s&&c.push(f),s.push(l))}return s}function ea(e,t){return null==(e=gi(e,t=ca(t,e)))||delete e[Mi(Wi(t))]}function ta(e,t,r,n){return qn(e,t,r(dn(e,t)),n)}function ra(e,t,r,n){for(var a=e.length,i=n?a:-1;(n?i--:++i<a)&&t(e[i],i,e););return r?Un(e,n?0:i,n?i+1:a):Un(e,n?i+1:0,n?a:i)}function na(e,t){var r=e;return r instanceof Nr&&(r=r.value()),dt(t,(function(e,t){return t.func.apply(t.thisArg,ft([e],t.args))}),r)}function aa(e,t,r){var n=e.length;if(n<2)return n?Qn(e[0]):[];for(var a=-1,i=ue(n);++a<n;)for(var o=e[a],s=-1;++s<n;)s!=a&&(i[a]=Qr(i[a]||o,e[s],t,r));return Qn(on(i,1),t,r)}function ia(e,t,r){for(var n=-1,a=e.length,i=t.length,o={};++n<a;){var s=n<i?t[n]:void 0;r(o,e[n],s)}return o}function oa(e){return Lo(e)?e:[]}function sa(e){return"function"==typeof e?e:$s}function ca(e,t){return jo(e)?e:ui(e,t)?[e]:Ei(cs(e))}var ua=Wn;function la(e,t,r){var n=e.length;return r=void 0===r?n:r,!t&&r>=n?e:Un(e,t,r)}var fa=Jt||function(e){return Fe.clearTimeout(e)};function da(e,t){if(t)return e.slice();var r=e.length,n=He?He(r):new e.constructor(r);return e.copy(n),n}function ha(e){var t=new e.constructor(e.byteLength);return new qe(t).set(new qe(e)),t}function pa(e,t){var r=t?ha(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function ma(e,t){if(e!==t){var r=void 0!==e,n=null===e,a=e==e,i=Xo(e),o=void 0!==t,s=null===t,c=t==t,u=Xo(t);if(!s&&!u&&!i&&e>t||i&&o&&c&&!s&&!u||n&&o&&c||!r&&c||!a)return 1;if(!n&&!i&&!u&&e<t||u&&r&&a&&!n&&!i||s&&r&&a||!o&&a||!c)return-1}return 0}function ga(e,t,r,n){for(var a=-1,i=e.length,o=r.length,s=-1,c=t.length,u=or(i-o,0),l=ue(c+u),f=!n;++s<c;)l[s]=t[s];for(;++a<o;)(f||a<i)&&(l[r[a]]=e[a]);for(;u--;)l[s++]=e[a++];return l}function va(e,t,r,n){for(var a=-1,i=e.length,o=-1,s=r.length,c=-1,u=t.length,l=or(i-s,0),f=ue(l+u),d=!n;++a<l;)f[a]=e[a];for(var h=a;++c<u;)f[h+c]=t[c];for(;++o<s;)(d||a<i)&&(f[h+r[o]]=e[a++]);return f}function ya(e,t){var r=-1,n=e.length;for(t||(t=ue(n));++r<n;)t[r]=e[r];return t}function _a(e,t,r,n){var a=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var s=t[i],c=n?n(r[s],e[s],s,r,e):void 0;void 0===c&&(c=e[s]),a?$r(r,s,c):Hr(r,s,c)}return r}function ba(e,t){return function(r,n){var a=jo(r)?nt:Gr,i=t?t():{};return a(r,e,Za(n,2),i)}}function Aa(e){return Wn((function(t,r){var n=-1,a=r.length,i=a>1?r[a-1]:void 0,o=a>2?r[2]:void 0;for(i=e.length>3&&"function"==typeof i?(a--,i):void 0,o&&ci(r[0],r[1],o)&&(i=a<3?void 0:i,a=1),t=pe(t);++n<a;){var s=r[n];s&&e(t,s,n,i)}return t}))}function wa(e,t){return function(r,n){if(null==r)return r;if(!zo(r))return e(r,n);for(var a=r.length,i=t?a:-1,o=pe(r);(t?i--:++i<a)&&!1!==n(o[i],i,o););return r}}function xa(e){return function(t,r,n){for(var a=-1,i=pe(t),o=n(t),s=o.length;s--;){var c=o[e?s:++a];if(!1===r(i[c],c,i))break}return t}}function ka(e){return function(t){var r=Lt(t=cs(t))?Ft(t):void 0,n=r?r[0]:t.charAt(0),a=r?la(r,1).join(""):t.slice(1);return n[e]()+a}}function Ea(e){return function(t){return dt(Bs(Ps(t).replace(Ce,"")),e,"")}}function Ma(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Cr(e.prototype),n=e.apply(r,t);return Fo(n)?n:r}}function Sa(e){return function(t,r,n){var a=pe(t);if(!zo(t)){var i=Za(r,3);t=As(t),r=function(e){return i(a[e],e,a)}}var o=e(t,r,n);return o>-1?a[i?t[o]:o]:void 0}}function Ta(e){return Ga((function(t){var n=t.length,a=n,i=Or.prototype.thru;for(e&&t.reverse();a--;){var o=t[a];if("function"!=typeof o)throw new ve(r);if(i&&!s&&"wrapper"==Ka(o))var s=new Or([],!0)}for(a=s?a:n;++a<n;){var c=Ka(o=t[a]),u="wrapper"==c?Va(o):void 0;s=u&&li(u[0])&&424==u[1]&&!u[4].length&&1==u[9]?s[Ka(u[0])].apply(s,u[3]):1==o.length&&li(o)?s[c]():s.thru(o)}return function(){var e=arguments,r=e[0];if(s&&1==e.length&&jo(r))return s.plant(r).value();for(var a=0,i=n?t[a].apply(this,e):r;++a<n;)i=t[a].call(this,i);return i}}))}function Ca(e,t,r,n,a,i,o,s,c,u){var l=128&t,f=1&t,d=2&t,h=24&t,p=512&t,m=d?void 0:Ma(e);return function g(){for(var v=arguments.length,y=ue(v),_=v;_--;)y[_]=arguments[_];if(h)var b=Ja(g),A=Pt(y,b);if(n&&(y=ga(y,n,a,h)),i&&(y=va(y,i,o,h)),v-=A,h&&v<u){var w=It(y,b);return za(e,t,Ca,g.placeholder,r,y,w,s,c,u-v)}var x=f?r:this,k=d?x[e]:e;return v=y.length,s?y=vi(y,s):p&&v>1&&y.reverse(),l&&c<v&&(y.length=c),this&&this!==Fe&&this instanceof g&&(k=m||Ma(k)),k.apply(x,y)}}function Da(e,t){return function(r,n){return function(e,t,r,n){return un(e,(function(e,a,i){t(n,r(e),a,i)})),n}(r,e,t(n),{})}}function Oa(e,t){return function(r,n){var a;if(void 0===r&&void 0===n)return t;if(void 0!==r&&(a=r),void 0!==n){if(void 0===a)return n;"string"==typeof r||"string"==typeof n?(r=Xn(r),n=Xn(n)):(r=Zn(r),n=Zn(n)),a=e(r,n)}return a}}function Na(e){return Ga((function(t){return t=lt(t,Tt(Za())),Wn((function(r){var n=this;return e(t,(function(e){return rt(e,n,r)}))}))}))}function Pa(e,t){var r=(t=void 0===t?" ":Xn(t)).length;if(r<2)return r?Yn(t,e):t;var n=Yn(t,Qt(e/Ht(t)));return Lt(t)?la(Ft(n),0,e).join(""):n.slice(0,e)}function ja(e){return function(t,r,n){return n&&"number"!=typeof n&&ci(t,r,n)&&(r=n=void 0),t=ns(t),void 0===r?(r=t,t=0):r=ns(r),function(e,t,r,n){for(var a=-1,i=or(Qt((t-e)/(r||1)),0),o=ue(i);i--;)o[n?i:++a]=e,e+=r;return o}(t,r,n=void 0===n?t<r?1:-1:ns(n),e)}}function Ra(e){return function(t,r){return"string"==typeof t&&"string"==typeof r||(t=os(t),r=os(r)),e(t,r)}}function za(e,t,r,n,a,i,o,s,c,u){var l=8&t;t|=l?32:64,4&(t&=~(l?64:32))||(t&=-4);var f=[e,t,a,l?i:void 0,l?o:void 0,l?void 0:i,l?void 0:o,s,c,u],d=r.apply(void 0,f);return li(e)&&_i(d,f),d.placeholder=n,wi(d,e,t)}function La(e){var t=he[e];return function(e,r){if(e=os(e),(r=null==r?0:sr(as(r),292))&&nr(e)){var n=(cs(e)+"e").split("e");return+((n=(cs(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}var Ya=mr&&1/Bt(new mr([,-0]))[1]==1/0?function(e){return new mr(e)}:Xs;function Wa(e){return function(t){var r=ni(t);return r==d?Yt(t):r==g?qt(t):function(e,t){return lt(t,(function(t){return[t,e[t]]}))}(t,e(t))}}function Ia(e,t,a,i,o,s,c,u){var l=2&t;if(!l&&"function"!=typeof e)throw new ve(r);var f=i?i.length:0;if(f||(t&=-97,i=o=void 0),c=void 0===c?c:or(as(c),0),u=void 0===u?u:as(u),f-=o?o.length:0,64&t){var d=i,h=o;i=o=void 0}var p=l?void 0:Va(e),m=[e,t,a,i,o,d,h,s,c,u];if(p&&function(e,t){var r=e[1],a=t[1],i=r|a,o=i<131,s=128==a&&8==r||128==a&&256==r&&e[7].length<=t[8]||384==a&&t[7].length<=t[8]&&8==r;if(!o&&!s)return e;1&a&&(e[2]=t[2],i|=1&r?0:4);var c=t[3];if(c){var u=e[3];e[3]=u?ga(u,c,t[4]):c,e[4]=u?It(e[3],n):t[4]}(c=t[5])&&(u=e[5],e[5]=u?va(u,c,t[6]):c,e[6]=u?It(e[5],n):t[6]);(c=t[7])&&(e[7]=c);128&a&&(e[8]=null==e[8]?t[8]:sr(e[8],t[8]));null==e[9]&&(e[9]=t[9]);e[0]=t[0],e[1]=i}(m,p),e=m[0],t=m[1],a=m[2],i=m[3],o=m[4],!(u=m[9]=void 0===m[9]?l?0:e.length:or(m[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)g=8==t||16==t?function(e,t,r){var n=Ma(e);return function a(){for(var i=arguments.length,o=ue(i),s=i,c=Ja(a);s--;)o[s]=arguments[s];var u=i<3&&o[0]!==c&&o[i-1]!==c?[]:It(o,c);if((i-=u.length)<r)return za(e,t,Ca,a.placeholder,void 0,o,u,void 0,void 0,r-i);var l=this&&this!==Fe&&this instanceof a?n:e;return rt(l,this,o)}}(e,t,u):32!=t&&33!=t||o.length?Ca.apply(void 0,m):function(e,t,r,n){var a=1&t,i=Ma(e);return function t(){for(var o=-1,s=arguments.length,c=-1,u=n.length,l=ue(u+s),f=this&&this!==Fe&&this instanceof t?i:e;++c<u;)l[c]=n[c];for(;s--;)l[c++]=arguments[++o];return rt(f,a?r:this,l)}}(e,t,a,i);else var g=function(e,t,r){var n=1&t,a=Ma(e);return function t(){var i=this&&this!==Fe&&this instanceof t?a:e;return i.apply(n?r:this,arguments)}}(e,t,a);return wi((p?Hn:_i)(g,m),e,t)}function Ba(e,t,r,n){return void 0===e||Do(e,be[r])&&!xe.call(n,r)?t:e}function qa(e,t,r,n,a,i){return Fo(e)&&Fo(t)&&(i.set(t,e),On(e,t,void 0,qa,i),i.delete(t)),e}function Ha(e){return Vo(e)?void 0:e}function Fa(e,t,r,n,a,i){var o=1&r,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var u=i.get(e),l=i.get(t);if(u&&l)return u==t&&l==e;var f=-1,d=!0,h=2&r?new zr:void 0;for(i.set(e,t),i.set(t,e);++f<s;){var p=e[f],m=t[f];if(n)var g=o?n(m,p,f,t,e,i):n(p,m,f,e,t,i);if(void 0!==g){if(g)continue;d=!1;break}if(h){if(!pt(t,(function(e,t){if(!Dt(h,t)&&(p===e||a(p,e,r,n,i)))return h.push(t)}))){d=!1;break}}else if(p!==m&&!a(p,m,r,n,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function Ga(e){return Ai(mi(e,void 0,ji),e+"")}function Ua(e){return hn(e,As,ti)}function $a(e){return hn(e,ws,ri)}var Va=yr?function(e){return yr.get(e)}:Xs;function Ka(e){for(var t=e.name+"",r=_r[t],n=xe.call(_r,t)?r.length:0;n--;){var a=r[n],i=a.func;if(null==i||i==e)return a.name}return t}function Ja(e){return(xe.call(Tr,"placeholder")?Tr:e).placeholder}function Za(){var e=Tr.iteratee||Vs;return e=e===Vs?kn:e,arguments.length?e(arguments[0],arguments[1]):e}function Xa(e,t){var r,n,a=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?a["string"==typeof t?"string":"hash"]:a.map}function Qa(e){for(var t=As(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,hi(a)]}return t}function ei(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return xn(r)?r:void 0}var ti=tr?function(e){return null==e?[]:(e=pe(e),st(tr(e),(function(t){return Ve.call(e,t)})))}:ic,ri=tr?function(e){for(var t=[];e;)ft(t,ti(e)),e=Ge(e);return t}:ic,ni=pn;function ai(e,t,r){for(var n=-1,a=(t=ca(t,e)).length,i=!1;++n<a;){var o=Mi(t[n]);if(!(i=null!=e&&r(e,o)))break;e=e[o]}return i||++n!=a?i:!!(a=null==e?0:e.length)&&Ho(a)&&si(o,a)&&(jo(e)||Po(e))}function ii(e){return"function"!=typeof e.constructor||di(e)?{}:Cr(Ge(e))}function oi(e){return jo(e)||Po(e)||!!(mt&&e&&e[mt])}function si(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&ie.test(e))&&e>-1&&e%1==0&&e<t}function ci(e,t,r){if(!Fo(r))return!1;var n=typeof t;return!!("number"==n?zo(r)&&si(t,r.length):"string"==n&&t in r)&&Do(r[t],e)}function ui(e,t){if(jo(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!Xo(e))||(B.test(e)||!I.test(e)||null!=t&&e in pe(t))}function li(e){var t=Ka(e),r=Tr[t];if("function"!=typeof r||!(t in Nr.prototype))return!1;if(e===r)return!0;var n=Va(r);return!!n&&e===n[0]}(dr&&ni(new dr(new ArrayBuffer(1)))!=A||hr&&ni(new hr)!=d||pr&&"[object Promise]"!=ni(pr.resolve())||mr&&ni(new mr)!=g||gr&&ni(new gr)!=_)&&(ni=function(e){var t=pn(e),r=t==p?e.constructor:void 0,n=r?Si(r):"";if(n)switch(n){case br:return A;case Ar:return d;case wr:return"[object Promise]";case xr:return g;case kr:return _}return t});var fi=Ae?Bo:oc;function di(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||be)}function hi(e){return e==e&&!Fo(e)}function pi(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in pe(r)))}}function mi(e,t,r){return t=or(void 0===t?e.length-1:t,0),function(){for(var n=arguments,a=-1,i=or(n.length-t,0),o=ue(i);++a<i;)o[a]=n[t+a];a=-1;for(var s=ue(t+1);++a<t;)s[a]=n[a];return s[t]=r(o),rt(e,this,s)}}function gi(e,t){return t.length<2?e:dn(e,Un(t,0,-1))}function vi(e,t){for(var r=e.length,n=sr(t.length,r),a=ya(e);n--;){var i=t[n];e[n]=si(i,r)?a[i]:void 0}return e}function yi(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var _i=xi(Hn),bi=Xt||function(e,t){return Fe.setTimeout(e,t)},Ai=xi(Fn);function wi(e,t,r){var n=t+"";return Ai(e,function(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(r>1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace($,"{\n/* [wrapped with "+t+"] */\n")}(n,function(e,t){return at(a,(function(r){var n="_."+r[0];t&r[1]&&!ct(e,n)&&e.push(n)})),e.sort()}(function(e){var t=e.match(V);return t?t[1].split(K):[]}(n),r)))}function xi(e){var t=0,r=0;return function(){var n=cr(),a=16-(n-r);if(r=n,a>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function ki(e,t){var r=-1,n=e.length,a=n-1;for(t=void 0===t?n:t;++r<t;){var i=Ln(r,a),o=e[i];e[i]=e[r],e[r]=o}return e.length=t,e}var Ei=function(e){var t=ko(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(q,(function(e,r,n,a){t.push(n?a.replace(X,"$1"):r||e)})),t}));function Mi(e){if("string"==typeof e||Xo(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Si(e){if(null!=e){try{return we.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Ti(e){if(e instanceof Nr)return e.clone();var t=new Or(e.__wrapped__,e.__chain__);return t.__actions__=ya(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Ci=Wn((function(e,t){return Lo(e)?Qr(e,on(t,1,Lo,!0)):[]})),Di=Wn((function(e,t){var r=Wi(t);return Lo(r)&&(r=void 0),Lo(e)?Qr(e,on(t,1,Lo,!0),Za(r,2)):[]})),Oi=Wn((function(e,t){var r=Wi(t);return Lo(r)&&(r=void 0),Lo(e)?Qr(e,on(t,1,Lo,!0),void 0,r):[]}));function Ni(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:as(r);return a<0&&(a=or(n+a,0)),vt(e,Za(t,3),a)}function Pi(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=n-1;return void 0!==r&&(a=as(r),a=r<0?or(n+a,0):sr(a,n-1)),vt(e,Za(t,3),a,!0)}function ji(e){return(null==e?0:e.length)?on(e,1):[]}function Ri(e){return e&&e.length?e[0]:void 0}var zi=Wn((function(e){var t=lt(e,oa);return t.length&&t[0]===e[0]?yn(t):[]})),Li=Wn((function(e){var t=Wi(e),r=lt(e,oa);return t===Wi(r)?t=void 0:r.pop(),r.length&&r[0]===e[0]?yn(r,Za(t,2)):[]})),Yi=Wn((function(e){var t=Wi(e),r=lt(e,oa);return(t="function"==typeof t?t:void 0)&&r.pop(),r.length&&r[0]===e[0]?yn(r,void 0,t):[]}));function Wi(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}var Ii=Wn(Bi);function Bi(e,t){return e&&e.length&&t&&t.length?Rn(e,t):e}var qi=Ga((function(e,t){var r=null==e?0:e.length,n=Vr(e,t);return zn(e,lt(t,(function(e){return si(e,r)?+e:e})).sort(ma)),n}));function Hi(e){return null==e?e:fr.call(e)}var Fi=Wn((function(e){return Qn(on(e,1,Lo,!0))})),Gi=Wn((function(e){var t=Wi(e);return Lo(t)&&(t=void 0),Qn(on(e,1,Lo,!0),Za(t,2))})),Ui=Wn((function(e){var t=Wi(e);return t="function"==typeof t?t:void 0,Qn(on(e,1,Lo,!0),void 0,t)}));function $i(e){if(!e||!e.length)return[];var t=0;return e=st(e,(function(e){if(Lo(e))return t=or(e.length,t),!0})),Mt(t,(function(t){return lt(e,wt(t))}))}function Vi(e,t){if(!e||!e.length)return[];var r=$i(e);return null==t?r:lt(r,(function(e){return rt(t,void 0,e)}))}var Ki=Wn((function(e,t){return Lo(e)?Qr(e,t):[]})),Ji=Wn((function(e){return aa(st(e,Lo))})),Zi=Wn((function(e){var t=Wi(e);return Lo(t)&&(t=void 0),aa(st(e,Lo),Za(t,2))})),Xi=Wn((function(e){var t=Wi(e);return t="function"==typeof t?t:void 0,aa(st(e,Lo),void 0,t)})),Qi=Wn($i);var eo=Wn((function(e){var t=e.length,r=t>1?e[t-1]:void 0;return r="function"==typeof r?(e.pop(),r):void 0,Vi(e,r)}));function to(e){var t=Tr(e);return t.__chain__=!0,t}function ro(e,t){return t(e)}var no=Ga((function(e){var t=e.length,r=t?e[0]:0,n=this.__wrapped__,a=function(t){return Vr(t,e)};return!(t>1||this.__actions__.length)&&n instanceof Nr&&si(r)?((n=n.slice(r,+r+(t?1:0))).__actions__.push({func:ro,args:[a],thisArg:void 0}),new Or(n,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(a)}));var ao=ba((function(e,t,r){xe.call(e,r)?++e[r]:$r(e,r,1)}));var io=Sa(Ni),oo=Sa(Pi);function so(e,t){return(jo(e)?at:en)(e,Za(t,3))}function co(e,t){return(jo(e)?it:tn)(e,Za(t,3))}var uo=ba((function(e,t,r){xe.call(e,r)?e[r].push(t):$r(e,r,[t])}));var lo=Wn((function(e,t,r){var n=-1,a="function"==typeof t,i=zo(e)?ue(e.length):[];return en(e,(function(e){i[++n]=a?rt(t,e,r):_n(e,t,r)})),i})),fo=ba((function(e,t,r){$r(e,r,t)}));function ho(e,t){return(jo(e)?lt:Tn)(e,Za(t,3))}var po=ba((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]}));var mo=Wn((function(e,t){if(null==e)return[];var r=t.length;return r>1&&ci(e,t[0],t[1])?t=[]:r>2&&ci(t[0],t[1],t[2])&&(t=[t[0]]),Pn(e,on(t,1),[])})),go=Zt||function(){return Fe.Date.now()};function vo(e,t,r){return t=r?void 0:t,Ia(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function yo(e,t){var n;if("function"!=typeof t)throw new ve(r);return e=as(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var _o=Wn((function(e,t,r){var n=1;if(r.length){var a=It(r,Ja(_o));n|=32}return Ia(e,n,t,r,a)})),bo=Wn((function(e,t,r){var n=3;if(r.length){var a=It(r,Ja(bo));n|=32}return Ia(t,n,e,r,a)}));function Ao(e,t,n){var a,i,o,s,c,u,l=0,f=!1,d=!1,h=!0;if("function"!=typeof e)throw new ve(r);function p(t){var r=a,n=i;return a=i=void 0,l=t,s=e.apply(n,r)}function m(e){return l=e,c=bi(v,t),f?p(e):s}function g(e){var r=e-u;return void 0===u||r>=t||r<0||d&&e-l>=o}function v(){var e=go();if(g(e))return y(e);c=bi(v,function(e){var r=t-(e-u);return d?sr(r,o-(e-l)):r}(e))}function y(e){return c=void 0,h&&a?p(e):(a=i=void 0,s)}function _(){var e=go(),r=g(e);if(a=arguments,i=this,u=e,r){if(void 0===c)return m(u);if(d)return fa(c),c=bi(v,t),p(u)}return void 0===c&&(c=bi(v,t)),s}return t=os(t)||0,Fo(n)&&(f=!!n.leading,o=(d="maxWait"in n)?or(os(n.maxWait)||0,t):o,h="trailing"in n?!!n.trailing:h),_.cancel=function(){void 0!==c&&fa(c),l=0,a=u=i=c=void 0},_.flush=function(){return void 0===c?s:y(go())},_}var wo=Wn((function(e,t){return Xr(e,1,t)})),xo=Wn((function(e,t,r){return Xr(e,os(t)||0,r)}));function ko(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ve(r);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],i=n.cache;if(i.has(a))return i.get(a);var o=e.apply(this,r);return n.cache=i.set(a,o)||i,o};return n.cache=new(ko.Cache||Rr),n}function Eo(e){if("function"!=typeof e)throw new ve(r);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}ko.Cache=Rr;var Mo=ua((function(e,t){var r=(t=1==t.length&&jo(t[0])?lt(t[0],Tt(Za())):lt(on(t,1),Tt(Za()))).length;return Wn((function(n){for(var a=-1,i=sr(n.length,r);++a<i;)n[a]=t[a].call(this,n[a]);return rt(e,this,n)}))})),So=Wn((function(e,t){return Ia(e,32,void 0,t,It(t,Ja(So)))})),To=Wn((function(e,t){return Ia(e,64,void 0,t,It(t,Ja(To)))})),Co=Ga((function(e,t){return Ia(e,256,void 0,void 0,void 0,t)}));function Do(e,t){return e===t||e!=e&&t!=t}var Oo=Ra(mn),No=Ra((function(e,t){return e>=t})),Po=bn(function(){return arguments}())?bn:function(e){return Go(e)&&xe.call(e,"callee")&&!Ve.call(e,"callee")},jo=ue.isArray,Ro=Je?Tt(Je):function(e){return Go(e)&&pn(e)==b};function zo(e){return null!=e&&Ho(e.length)&&!Bo(e)}function Lo(e){return Go(e)&&zo(e)}var Yo=rr||oc,Wo=Ze?Tt(Ze):function(e){return Go(e)&&pn(e)==c};function Io(e){if(!Go(e))return!1;var t=pn(e);return t==u||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Vo(e)}function Bo(e){if(!Fo(e))return!1;var t=pn(e);return t==l||t==f||"[object AsyncFunction]"==t||"[object Proxy]"==t}function qo(e){return"number"==typeof e&&e==as(e)}function Ho(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Fo(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Go(e){return null!=e&&"object"==typeof e}var Uo=Xe?Tt(Xe):function(e){return Go(e)&&ni(e)==d};function $o(e){return"number"==typeof e||Go(e)&&pn(e)==h}function Vo(e){if(!Go(e)||pn(e)!=p)return!1;var t=Ge(e);if(null===t)return!0;var r=xe.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&we.call(r)==Se}var Ko=Qe?Tt(Qe):function(e){return Go(e)&&pn(e)==m};var Jo=et?Tt(et):function(e){return Go(e)&&ni(e)==g};function Zo(e){return"string"==typeof e||!jo(e)&&Go(e)&&pn(e)==v}function Xo(e){return"symbol"==typeof e||Go(e)&&pn(e)==y}var Qo=tt?Tt(tt):function(e){return Go(e)&&Ho(e.length)&&!!Le[pn(e)]};var es=Ra(Sn),ts=Ra((function(e,t){return e<=t}));function rs(e){if(!e)return[];if(zo(e))return Zo(e)?Ft(e):ya(e);if(xt&&e[xt])return function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}(e[xt]());var t=ni(e);return(t==d?Yt:t==g?Bt:Ds)(e)}function ns(e){return e?(e=os(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function as(e){var t=ns(e),r=t%1;return t==t?r?t-r:t:0}function is(e){return e?Kr(as(e),0,4294967295):0}function os(e){if("number"==typeof e)return e;if(Xo(e))return NaN;if(Fo(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Fo(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=St(e);var r=re.test(e);return r||ae.test(e)?Be(e.slice(2),r?2:8):te.test(e)?NaN:+e}function ss(e){return _a(e,ws(e))}function cs(e){return null==e?"":Xn(e)}var us=Aa((function(e,t){if(di(t)||zo(t))_a(t,As(t),e);else for(var r in t)xe.call(t,r)&&Hr(e,r,t[r])})),ls=Aa((function(e,t){_a(t,ws(t),e)})),fs=Aa((function(e,t,r,n){_a(t,ws(t),e,n)})),ds=Aa((function(e,t,r,n){_a(t,As(t),e,n)})),hs=Ga(Vr);var ps=Wn((function(e,t){e=pe(e);var r=-1,n=t.length,a=n>2?t[2]:void 0;for(a&&ci(t[0],t[1],a)&&(n=1);++r<n;)for(var i=t[r],o=ws(i),s=-1,c=o.length;++s<c;){var u=o[s],l=e[u];(void 0===l||Do(l,be[u])&&!xe.call(e,u))&&(e[u]=i[u])}return e})),ms=Wn((function(e){return e.push(void 0,qa),rt(ks,void 0,e)}));function gs(e,t,r){var n=null==e?void 0:dn(e,t);return void 0===n?r:n}function vs(e,t){return null!=e&&ai(e,t,vn)}var ys=Da((function(e,t,r){null!=t&&"function"!=typeof t.toString&&(t=Me.call(t)),e[t]=r}),Fs($s)),_s=Da((function(e,t,r){null!=t&&"function"!=typeof t.toString&&(t=Me.call(t)),xe.call(e,t)?e[t].push(r):e[t]=[r]}),Za),bs=Wn(_n);function As(e){return zo(e)?Yr(e):En(e)}function ws(e){return zo(e)?Yr(e,!0):Mn(e)}var xs=Aa((function(e,t,r){On(e,t,r)})),ks=Aa((function(e,t,r,n){On(e,t,r,n)})),Es=Ga((function(e,t){var r={};if(null==e)return r;var n=!1;t=lt(t,(function(t){return t=ca(t,e),n||(n=t.length>1),t})),_a(e,$a(e),r),n&&(r=Jr(r,7,Ha));for(var a=t.length;a--;)ea(r,t[a]);return r}));var Ms=Ga((function(e,t){return null==e?{}:function(e,t){return jn(e,t,(function(t,r){return vs(e,r)}))}(e,t)}));function Ss(e,t){if(null==e)return{};var r=lt($a(e),(function(e){return[e]}));return t=Za(t),jn(e,r,(function(e,r){return t(e,r[0])}))}var Ts=Wa(As),Cs=Wa(ws);function Ds(e){return null==e?[]:Ct(e,As(e))}var Os=Ea((function(e,t,r){return t=t.toLowerCase(),e+(r?Ns(t):t)}));function Ns(e){return Is(cs(e).toLowerCase())}function Ps(e){return(e=cs(e))&&e.replace(oe,jt).replace(De,"")}var js=Ea((function(e,t,r){return e+(r?"-":"")+t.toLowerCase()})),Rs=Ea((function(e,t,r){return e+(r?" ":"")+t.toLowerCase()})),zs=ka("toLowerCase");var Ls=Ea((function(e,t,r){return e+(r?"_":"")+t.toLowerCase()}));var Ys=Ea((function(e,t,r){return e+(r?" ":"")+Is(t)}));var Ws=Ea((function(e,t,r){return e+(r?" ":"")+t.toUpperCase()})),Is=ka("toUpperCase");function Bs(e,t,r){return e=cs(e),void 0===(t=r?void 0:t)?function(e){return je.test(e)}(e)?function(e){return e.match(Ne)||[]}(e):function(e){return e.match(J)||[]}(e):e.match(t)||[]}var qs=Wn((function(e,t){try{return rt(e,void 0,t)}catch(e){return Io(e)?e:new fe(e)}})),Hs=Ga((function(e,t){return at(t,(function(t){t=Mi(t),$r(e,t,_o(e[t],e))})),e}));function Fs(e){return function(){return e}}var Gs=Ta(),Us=Ta(!0);function $s(e){return e}function Vs(e){return kn("function"==typeof e?e:Jr(e,1))}var Ks=Wn((function(e,t){return function(r){return _n(r,e,t)}})),Js=Wn((function(e,t){return function(r){return _n(e,r,t)}}));function Zs(e,t,r){var n=As(t),a=fn(t,n);null!=r||Fo(t)&&(a.length||!n.length)||(r=t,t=e,e=this,a=fn(t,As(t)));var i=!(Fo(r)&&"chain"in r&&!r.chain),o=Bo(e);return at(a,(function(r){var n=t[r];e[r]=n,o&&(e.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=e(this.__wrapped__),a=r.__actions__=ya(this.__actions__);return a.push({func:n,args:arguments,thisArg:e}),r.__chain__=t,r}return n.apply(e,ft([this.value()],arguments))})})),e}function Xs(){}var Qs=Na(lt),ec=Na(ot),tc=Na(pt);function rc(e){return ui(e)?wt(Mi(e)):function(e){return function(t){return dn(t,e)}}(e)}var nc=ja(),ac=ja(!0);function ic(){return[]}function oc(){return!1}var sc=Oa((function(e,t){return e+t}),0),cc=La("ceil"),uc=Oa((function(e,t){return e/t}),1),lc=La("floor");var fc,dc=Oa((function(e,t){return e*t}),1),hc=La("round"),pc=Oa((function(e,t){return e-t}),0);return Tr.after=function(e,t){if("function"!=typeof t)throw new ve(r);return e=as(e),function(){if(--e<1)return t.apply(this,arguments)}},Tr.ary=vo,Tr.assign=us,Tr.assignIn=ls,Tr.assignInWith=fs,Tr.assignWith=ds,Tr.at=hs,Tr.before=yo,Tr.bind=_o,Tr.bindAll=Hs,Tr.bindKey=bo,Tr.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return jo(e)?e:[e]},Tr.chain=to,Tr.chunk=function(e,t,r){t=(r?ci(e,t,r):void 0===t)?1:or(as(t),0);var n=null==e?0:e.length;if(!n||t<1)return[];for(var a=0,i=0,o=ue(Qt(n/t));a<n;)o[i++]=Un(e,a,a+=t);return o},Tr.compact=function(e){for(var t=-1,r=null==e?0:e.length,n=0,a=[];++t<r;){var i=e[t];i&&(a[n++]=i)}return a},Tr.concat=function(){var e=arguments.length;if(!e)return[];for(var t=ue(e-1),r=arguments[0],n=e;n--;)t[n-1]=arguments[n];return ft(jo(r)?ya(r):[r],on(t,1))},Tr.cond=function(e){var t=null==e?0:e.length,n=Za();return e=t?lt(e,(function(e){if("function"!=typeof e[1])throw new ve(r);return[n(e[0]),e[1]]})):[],Wn((function(r){for(var n=-1;++n<t;){var a=e[n];if(rt(a[0],this,r))return rt(a[1],this,r)}}))},Tr.conforms=function(e){return function(e){var t=As(e);return function(r){return Zr(r,e,t)}}(Jr(e,1))},Tr.constant=Fs,Tr.countBy=ao,Tr.create=function(e,t){var r=Cr(e);return null==t?r:Ur(r,t)},Tr.curry=function e(t,r,n){var a=Ia(t,8,void 0,void 0,void 0,void 0,void 0,r=n?void 0:r);return a.placeholder=e.placeholder,a},Tr.curryRight=function e(t,r,n){var a=Ia(t,16,void 0,void 0,void 0,void 0,void 0,r=n?void 0:r);return a.placeholder=e.placeholder,a},Tr.debounce=Ao,Tr.defaults=ps,Tr.defaultsDeep=ms,Tr.defer=wo,Tr.delay=xo,Tr.difference=Ci,Tr.differenceBy=Di,Tr.differenceWith=Oi,Tr.drop=function(e,t,r){var n=null==e?0:e.length;return n?Un(e,(t=r||void 0===t?1:as(t))<0?0:t,n):[]},Tr.dropRight=function(e,t,r){var n=null==e?0:e.length;return n?Un(e,0,(t=n-(t=r||void 0===t?1:as(t)))<0?0:t):[]},Tr.dropRightWhile=function(e,t){return e&&e.length?ra(e,Za(t,3),!0,!0):[]},Tr.dropWhile=function(e,t){return e&&e.length?ra(e,Za(t,3),!0):[]},Tr.fill=function(e,t,r,n){var a=null==e?0:e.length;return a?(r&&"number"!=typeof r&&ci(e,t,r)&&(r=0,n=a),function(e,t,r,n){var a=e.length;for((r=as(r))<0&&(r=-r>a?0:a+r),(n=void 0===n||n>a?a:as(n))<0&&(n+=a),n=r>n?0:is(n);r<n;)e[r++]=t;return e}(e,t,r,n)):[]},Tr.filter=function(e,t){return(jo(e)?st:an)(e,Za(t,3))},Tr.flatMap=function(e,t){return on(ho(e,t),1)},Tr.flatMapDeep=function(e,t){return on(ho(e,t),1/0)},Tr.flatMapDepth=function(e,t,r){return r=void 0===r?1:as(r),on(ho(e,t),r)},Tr.flatten=ji,Tr.flattenDeep=function(e){return(null==e?0:e.length)?on(e,1/0):[]},Tr.flattenDepth=function(e,t){return(null==e?0:e.length)?on(e,t=void 0===t?1:as(t)):[]},Tr.flip=function(e){return Ia(e,512)},Tr.flow=Gs,Tr.flowRight=Us,Tr.fromPairs=function(e){for(var t=-1,r=null==e?0:e.length,n={};++t<r;){var a=e[t];n[a[0]]=a[1]}return n},Tr.functions=function(e){return null==e?[]:fn(e,As(e))},Tr.functionsIn=function(e){return null==e?[]:fn(e,ws(e))},Tr.groupBy=uo,Tr.initial=function(e){return(null==e?0:e.length)?Un(e,0,-1):[]},Tr.intersection=zi,Tr.intersectionBy=Li,Tr.intersectionWith=Yi,Tr.invert=ys,Tr.invertBy=_s,Tr.invokeMap=lo,Tr.iteratee=Vs,Tr.keyBy=fo,Tr.keys=As,Tr.keysIn=ws,Tr.map=ho,Tr.mapKeys=function(e,t){var r={};return t=Za(t,3),un(e,(function(e,n,a){$r(r,t(e,n,a),e)})),r},Tr.mapValues=function(e,t){var r={};return t=Za(t,3),un(e,(function(e,n,a){$r(r,n,t(e,n,a))})),r},Tr.matches=function(e){return Cn(Jr(e,1))},Tr.matchesProperty=function(e,t){return Dn(e,Jr(t,1))},Tr.memoize=ko,Tr.merge=xs,Tr.mergeWith=ks,Tr.method=Ks,Tr.methodOf=Js,Tr.mixin=Zs,Tr.negate=Eo,Tr.nthArg=function(e){return e=as(e),Wn((function(t){return Nn(t,e)}))},Tr.omit=Es,Tr.omitBy=function(e,t){return Ss(e,Eo(Za(t)))},Tr.once=function(e){return yo(2,e)},Tr.orderBy=function(e,t,r,n){return null==e?[]:(jo(t)||(t=null==t?[]:[t]),jo(r=n?void 0:r)||(r=null==r?[]:[r]),Pn(e,t,r))},Tr.over=Qs,Tr.overArgs=Mo,Tr.overEvery=ec,Tr.overSome=tc,Tr.partial=So,Tr.partialRight=To,Tr.partition=po,Tr.pick=Ms,Tr.pickBy=Ss,Tr.property=rc,Tr.propertyOf=function(e){return function(t){return null==e?void 0:dn(e,t)}},Tr.pull=Ii,Tr.pullAll=Bi,Tr.pullAllBy=function(e,t,r){return e&&e.length&&t&&t.length?Rn(e,t,Za(r,2)):e},Tr.pullAllWith=function(e,t,r){return e&&e.length&&t&&t.length?Rn(e,t,void 0,r):e},Tr.pullAt=qi,Tr.range=nc,Tr.rangeRight=ac,Tr.rearg=Co,Tr.reject=function(e,t){return(jo(e)?st:an)(e,Eo(Za(t,3)))},Tr.remove=function(e,t){var r=[];if(!e||!e.length)return r;var n=-1,a=[],i=e.length;for(t=Za(t,3);++n<i;){var o=e[n];t(o,n,e)&&(r.push(o),a.push(n))}return zn(e,a),r},Tr.rest=function(e,t){if("function"!=typeof e)throw new ve(r);return Wn(e,t=void 0===t?t:as(t))},Tr.reverse=Hi,Tr.sampleSize=function(e,t,r){return t=(r?ci(e,t,r):void 0===t)?1:as(t),(jo(e)?Ir:Bn)(e,t)},Tr.set=function(e,t,r){return null==e?e:qn(e,t,r)},Tr.setWith=function(e,t,r,n){return n="function"==typeof n?n:void 0,null==e?e:qn(e,t,r,n)},Tr.shuffle=function(e){return(jo(e)?Br:Gn)(e)},Tr.slice=function(e,t,r){var n=null==e?0:e.length;return n?(r&&"number"!=typeof r&&ci(e,t,r)?(t=0,r=n):(t=null==t?0:as(t),r=void 0===r?n:as(r)),Un(e,t,r)):[]},Tr.sortBy=mo,Tr.sortedUniq=function(e){return e&&e.length?Jn(e):[]},Tr.sortedUniqBy=function(e,t){return e&&e.length?Jn(e,Za(t,2)):[]},Tr.split=function(e,t,r){return r&&"number"!=typeof r&&ci(e,t,r)&&(t=r=void 0),(r=void 0===r?4294967295:r>>>0)?(e=cs(e))&&("string"==typeof t||null!=t&&!Ko(t))&&!(t=Xn(t))&&Lt(e)?la(Ft(e),0,r):e.split(t,r):[]},Tr.spread=function(e,t){if("function"!=typeof e)throw new ve(r);return t=null==t?0:or(as(t),0),Wn((function(r){var n=r[t],a=la(r,0,t);return n&&ft(a,n),rt(e,this,a)}))},Tr.tail=function(e){var t=null==e?0:e.length;return t?Un(e,1,t):[]},Tr.take=function(e,t,r){return e&&e.length?Un(e,0,(t=r||void 0===t?1:as(t))<0?0:t):[]},Tr.takeRight=function(e,t,r){var n=null==e?0:e.length;return n?Un(e,(t=n-(t=r||void 0===t?1:as(t)))<0?0:t,n):[]},Tr.takeRightWhile=function(e,t){return e&&e.length?ra(e,Za(t,3),!1,!0):[]},Tr.takeWhile=function(e,t){return e&&e.length?ra(e,Za(t,3)):[]},Tr.tap=function(e,t){return t(e),e},Tr.throttle=function(e,t,n){var a=!0,i=!0;if("function"!=typeof e)throw new ve(r);return Fo(n)&&(a="leading"in n?!!n.leading:a,i="trailing"in n?!!n.trailing:i),Ao(e,t,{leading:a,maxWait:t,trailing:i})},Tr.thru=ro,Tr.toArray=rs,Tr.toPairs=Ts,Tr.toPairsIn=Cs,Tr.toPath=function(e){return jo(e)?lt(e,Mi):Xo(e)?[e]:ya(Ei(cs(e)))},Tr.toPlainObject=ss,Tr.transform=function(e,t,r){var n=jo(e),a=n||Yo(e)||Qo(e);if(t=Za(t,4),null==r){var i=e&&e.constructor;r=a?n?new i:[]:Fo(e)&&Bo(i)?Cr(Ge(e)):{}}return(a?at:un)(e,(function(e,n,a){return t(r,e,n,a)})),r},Tr.unary=function(e){return vo(e,1)},Tr.union=Fi,Tr.unionBy=Gi,Tr.unionWith=Ui,Tr.uniq=function(e){return e&&e.length?Qn(e):[]},Tr.uniqBy=function(e,t){return e&&e.length?Qn(e,Za(t,2)):[]},Tr.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Qn(e,void 0,t):[]},Tr.unset=function(e,t){return null==e||ea(e,t)},Tr.unzip=$i,Tr.unzipWith=Vi,Tr.update=function(e,t,r){return null==e?e:ta(e,t,sa(r))},Tr.updateWith=function(e,t,r,n){return n="function"==typeof n?n:void 0,null==e?e:ta(e,t,sa(r),n)},Tr.values=Ds,Tr.valuesIn=function(e){return null==e?[]:Ct(e,ws(e))},Tr.without=Ki,Tr.words=Bs,Tr.wrap=function(e,t){return So(sa(t),e)},Tr.xor=Ji,Tr.xorBy=Zi,Tr.xorWith=Xi,Tr.zip=Qi,Tr.zipObject=function(e,t){return ia(e||[],t||[],Hr)},Tr.zipObjectDeep=function(e,t){return ia(e||[],t||[],qn)},Tr.zipWith=eo,Tr.entries=Ts,Tr.entriesIn=Cs,Tr.extend=ls,Tr.extendWith=fs,Zs(Tr,Tr),Tr.add=sc,Tr.attempt=qs,Tr.camelCase=Os,Tr.capitalize=Ns,Tr.ceil=cc,Tr.clamp=function(e,t,r){return void 0===r&&(r=t,t=void 0),void 0!==r&&(r=(r=os(r))==r?r:0),void 0!==t&&(t=(t=os(t))==t?t:0),Kr(os(e),t,r)},Tr.clone=function(e){return Jr(e,4)},Tr.cloneDeep=function(e){return Jr(e,5)},Tr.cloneDeepWith=function(e,t){return Jr(e,5,t="function"==typeof t?t:void 0)},Tr.cloneWith=function(e,t){return Jr(e,4,t="function"==typeof t?t:void 0)},Tr.conformsTo=function(e,t){return null==t||Zr(e,t,As(t))},Tr.deburr=Ps,Tr.defaultTo=function(e,t){return null==e||e!=e?t:e},Tr.divide=uc,Tr.endsWith=function(e,t,r){e=cs(e),t=Xn(t);var n=e.length,a=r=void 0===r?n:Kr(as(r),0,n);return(r-=t.length)>=0&&e.slice(r,a)==t},Tr.eq=Do,Tr.escape=function(e){return(e=cs(e))&&z.test(e)?e.replace(j,Rt):e},Tr.escapeRegExp=function(e){return(e=cs(e))&&F.test(e)?e.replace(H,"\\$&"):e},Tr.every=function(e,t,r){var n=jo(e)?ot:rn;return r&&ci(e,t,r)&&(t=void 0),n(e,Za(t,3))},Tr.find=io,Tr.findIndex=Ni,Tr.findKey=function(e,t){return gt(e,Za(t,3),un)},Tr.findLast=oo,Tr.findLastIndex=Pi,Tr.findLastKey=function(e,t){return gt(e,Za(t,3),ln)},Tr.floor=lc,Tr.forEach=so,Tr.forEachRight=co,Tr.forIn=function(e,t){return null==e?e:sn(e,Za(t,3),ws)},Tr.forInRight=function(e,t){return null==e?e:cn(e,Za(t,3),ws)},Tr.forOwn=function(e,t){return e&&un(e,Za(t,3))},Tr.forOwnRight=function(e,t){return e&&ln(e,Za(t,3))},Tr.get=gs,Tr.gt=Oo,Tr.gte=No,Tr.has=function(e,t){return null!=e&&ai(e,t,gn)},Tr.hasIn=vs,Tr.head=Ri,Tr.identity=$s,Tr.includes=function(e,t,r,n){e=zo(e)?e:Ds(e),r=r&&!n?as(r):0;var a=e.length;return r<0&&(r=or(a+r,0)),Zo(e)?r<=a&&e.indexOf(t,r)>-1:!!a&&yt(e,t,r)>-1},Tr.indexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:as(r);return a<0&&(a=or(n+a,0)),yt(e,t,a)},Tr.inRange=function(e,t,r){return t=ns(t),void 0===r?(r=t,t=0):r=ns(r),function(e,t,r){return e>=sr(t,r)&&e<or(t,r)}(e=os(e),t,r)},Tr.invoke=bs,Tr.isArguments=Po,Tr.isArray=jo,Tr.isArrayBuffer=Ro,Tr.isArrayLike=zo,Tr.isArrayLikeObject=Lo,Tr.isBoolean=function(e){return!0===e||!1===e||Go(e)&&pn(e)==s},Tr.isBuffer=Yo,Tr.isDate=Wo,Tr.isElement=function(e){return Go(e)&&1===e.nodeType&&!Vo(e)},Tr.isEmpty=function(e){if(null==e)return!0;if(zo(e)&&(jo(e)||"string"==typeof e||"function"==typeof e.splice||Yo(e)||Qo(e)||Po(e)))return!e.length;var t=ni(e);if(t==d||t==g)return!e.size;if(di(e))return!En(e).length;for(var r in e)if(xe.call(e,r))return!1;return!0},Tr.isEqual=function(e,t){return An(e,t)},Tr.isEqualWith=function(e,t,r){var n=(r="function"==typeof r?r:void 0)?r(e,t):void 0;return void 0===n?An(e,t,void 0,r):!!n},Tr.isError=Io,Tr.isFinite=function(e){return"number"==typeof e&&nr(e)},Tr.isFunction=Bo,Tr.isInteger=qo,Tr.isLength=Ho,Tr.isMap=Uo,Tr.isMatch=function(e,t){return e===t||wn(e,t,Qa(t))},Tr.isMatchWith=function(e,t,r){return r="function"==typeof r?r:void 0,wn(e,t,Qa(t),r)},Tr.isNaN=function(e){return $o(e)&&e!=+e},Tr.isNative=function(e){if(fi(e))throw new fe("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return xn(e)},Tr.isNil=function(e){return null==e},Tr.isNull=function(e){return null===e},Tr.isNumber=$o,Tr.isObject=Fo,Tr.isObjectLike=Go,Tr.isPlainObject=Vo,Tr.isRegExp=Ko,Tr.isSafeInteger=function(e){return qo(e)&&e>=-9007199254740991&&e<=9007199254740991},Tr.isSet=Jo,Tr.isString=Zo,Tr.isSymbol=Xo,Tr.isTypedArray=Qo,Tr.isUndefined=function(e){return void 0===e},Tr.isWeakMap=function(e){return Go(e)&&ni(e)==_},Tr.isWeakSet=function(e){return Go(e)&&"[object WeakSet]"==pn(e)},Tr.join=function(e,t){return null==e?"":ar.call(e,t)},Tr.kebabCase=js,Tr.last=Wi,Tr.lastIndexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=n;return void 0!==r&&(a=(a=as(r))<0?or(n+a,0):sr(a,n-1)),t==t?function(e,t,r){for(var n=r+1;n--;)if(e[n]===t)return n;return n}(e,t,a):vt(e,bt,a,!0)},Tr.lowerCase=Rs,Tr.lowerFirst=zs,Tr.lt=es,Tr.lte=ts,Tr.max=function(e){return e&&e.length?nn(e,$s,mn):void 0},Tr.maxBy=function(e,t){return e&&e.length?nn(e,Za(t,2),mn):void 0},Tr.mean=function(e){return At(e,$s)},Tr.meanBy=function(e,t){return At(e,Za(t,2))},Tr.min=function(e){return e&&e.length?nn(e,$s,Sn):void 0},Tr.minBy=function(e,t){return e&&e.length?nn(e,Za(t,2),Sn):void 0},Tr.stubArray=ic,Tr.stubFalse=oc,Tr.stubObject=function(){return{}},Tr.stubString=function(){return""},Tr.stubTrue=function(){return!0},Tr.multiply=dc,Tr.nth=function(e,t){return e&&e.length?Nn(e,as(t)):void 0},Tr.noConflict=function(){return Fe._===this&&(Fe._=Te),this},Tr.noop=Xs,Tr.now=go,Tr.pad=function(e,t,r){e=cs(e);var n=(t=as(t))?Ht(e):0;if(!t||n>=t)return e;var a=(t-n)/2;return Pa(er(a),r)+e+Pa(Qt(a),r)},Tr.padEnd=function(e,t,r){e=cs(e);var n=(t=as(t))?Ht(e):0;return t&&n<t?e+Pa(t-n,r):e},Tr.padStart=function(e,t,r){e=cs(e);var n=(t=as(t))?Ht(e):0;return t&&n<t?Pa(t-n,r)+e:e},Tr.parseInt=function(e,t,r){return r||null==t?t=0:t&&(t=+t),ur(cs(e).replace(G,""),t||0)},Tr.random=function(e,t,r){if(r&&"boolean"!=typeof r&&ci(e,t,r)&&(t=r=void 0),void 0===r&&("boolean"==typeof t?(r=t,t=void 0):"boolean"==typeof e&&(r=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=ns(e),void 0===t?(t=e,e=0):t=ns(t)),e>t){var n=e;e=t,t=n}if(r||e%1||t%1){var a=lr();return sr(e+a*(t-e+Ie("1e-"+((a+"").length-1))),t)}return Ln(e,t)},Tr.reduce=function(e,t,r){var n=jo(e)?dt:kt,a=arguments.length<3;return n(e,Za(t,4),r,a,en)},Tr.reduceRight=function(e,t,r){var n=jo(e)?ht:kt,a=arguments.length<3;return n(e,Za(t,4),r,a,tn)},Tr.repeat=function(e,t,r){return t=(r?ci(e,t,r):void 0===t)?1:as(t),Yn(cs(e),t)},Tr.replace=function(){var e=arguments,t=cs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Tr.result=function(e,t,r){var n=-1,a=(t=ca(t,e)).length;for(a||(a=1,e=void 0);++n<a;){var i=null==e?void 0:e[Mi(t[n])];void 0===i&&(n=a,i=r),e=Bo(i)?i.call(e):i}return e},Tr.round=hc,Tr.runInContext=e,Tr.sample=function(e){return(jo(e)?Wr:In)(e)},Tr.size=function(e){if(null==e)return 0;if(zo(e))return Zo(e)?Ht(e):e.length;var t=ni(e);return t==d||t==g?e.size:En(e).length},Tr.snakeCase=Ls,Tr.some=function(e,t,r){var n=jo(e)?pt:$n;return r&&ci(e,t,r)&&(t=void 0),n(e,Za(t,3))},Tr.sortedIndex=function(e,t){return Vn(e,t)},Tr.sortedIndexBy=function(e,t,r){return Kn(e,t,Za(r,2))},Tr.sortedIndexOf=function(e,t){var r=null==e?0:e.length;if(r){var n=Vn(e,t);if(n<r&&Do(e[n],t))return n}return-1},Tr.sortedLastIndex=function(e,t){return Vn(e,t,!0)},Tr.sortedLastIndexBy=function(e,t,r){return Kn(e,t,Za(r,2),!0)},Tr.sortedLastIndexOf=function(e,t){if(null==e?0:e.length){var r=Vn(e,t,!0)-1;if(Do(e[r],t))return r}return-1},Tr.startCase=Ys,Tr.startsWith=function(e,t,r){return e=cs(e),r=null==r?0:Kr(as(r),0,e.length),t=Xn(t),e.slice(r,r+t.length)==t},Tr.subtract=pc,Tr.sum=function(e){return e&&e.length?Et(e,$s):0},Tr.sumBy=function(e,t){return e&&e.length?Et(e,Za(t,2)):0},Tr.template=function(e,t,r){var n=Tr.templateSettings;r&&ci(e,t,r)&&(t=void 0),e=cs(e),t=fs({},t,n,Ba);var a,i,o=fs({},t.imports,n.imports,Ba),s=As(o),c=Ct(o,s),u=0,l=t.interpolate||se,f="__p += '",d=me((t.escape||se).source+"|"+l.source+"|"+(l===W?Q:se).source+"|"+(t.evaluate||se).source+"|$","g"),h="//# sourceURL="+(xe.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++ze+"]")+"\n";e.replace(d,(function(t,r,n,o,s,c){return n||(n=o),f+=e.slice(u,c).replace(ce,zt),r&&(a=!0,f+="' +\n__e("+r+") +\n'"),s&&(i=!0,f+="';\n"+s+";\n__p += '"),n&&(f+="' +\n((__t = ("+n+")) == null ? '' : __t) +\n'"),u=c+t.length,t})),f+="';\n";var p=xe.call(t,"variable")&&t.variable;if(p){if(Z.test(p))throw new fe("Invalid `variable` option passed into `_.template`")}else f="with (obj) {\n"+f+"\n}\n";f=(i?f.replace(D,""):f).replace(O,"$1").replace(N,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=qs((function(){return de(s,h+"return "+f).apply(void 0,c)}));if(m.source=f,Io(m))throw m;return m},Tr.times=function(e,t){if((e=as(e))<1||e>9007199254740991)return[];var r=4294967295,n=sr(e,4294967295);e-=4294967295;for(var a=Mt(n,t=Za(t));++r<e;)t(r);return a},Tr.toFinite=ns,Tr.toInteger=as,Tr.toLength=is,Tr.toLower=function(e){return cs(e).toLowerCase()},Tr.toNumber=os,Tr.toSafeInteger=function(e){return e?Kr(as(e),-9007199254740991,9007199254740991):0===e?e:0},Tr.toString=cs,Tr.toUpper=function(e){return cs(e).toUpperCase()},Tr.trim=function(e,t,r){if((e=cs(e))&&(r||void 0===t))return St(e);if(!e||!(t=Xn(t)))return e;var n=Ft(e),a=Ft(t);return la(n,Ot(n,a),Nt(n,a)+1).join("")},Tr.trimEnd=function(e,t,r){if((e=cs(e))&&(r||void 0===t))return e.slice(0,Gt(e)+1);if(!e||!(t=Xn(t)))return e;var n=Ft(e);return la(n,0,Nt(n,Ft(t))+1).join("")},Tr.trimStart=function(e,t,r){if((e=cs(e))&&(r||void 0===t))return e.replace(G,"");if(!e||!(t=Xn(t)))return e;var n=Ft(e);return la(n,Ot(n,Ft(t))).join("")},Tr.truncate=function(e,t){var r=30,n="...";if(Fo(t)){var a="separator"in t?t.separator:a;r="length"in t?as(t.length):r,n="omission"in t?Xn(t.omission):n}var i=(e=cs(e)).length;if(Lt(e)){var o=Ft(e);i=o.length}if(r>=i)return e;var s=r-Ht(n);if(s<1)return n;var c=o?la(o,0,s).join(""):e.slice(0,s);if(void 0===a)return c+n;if(o&&(s+=c.length-s),Ko(a)){if(e.slice(s).search(a)){var u,l=c;for(a.global||(a=me(a.source,cs(ee.exec(a))+"g")),a.lastIndex=0;u=a.exec(l);)var f=u.index;c=c.slice(0,void 0===f?s:f)}}else if(e.indexOf(Xn(a),s)!=s){var d=c.lastIndexOf(a);d>-1&&(c=c.slice(0,d))}return c+n},Tr.unescape=function(e){return(e=cs(e))&&R.test(e)?e.replace(P,Ut):e},Tr.uniqueId=function(e){var t=++ke;return cs(e)+t},Tr.upperCase=Ws,Tr.upperFirst=Is,Tr.each=so,Tr.eachRight=co,Tr.first=Ri,Zs(Tr,(fc={},un(Tr,(function(e,t){xe.call(Tr.prototype,t)||(fc[t]=e)})),fc),{chain:!1}),Tr.VERSION="4.17.21",at(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Tr[e].placeholder=Tr})),at(["drop","take"],(function(e,t){Nr.prototype[e]=function(r){r=void 0===r?1:or(as(r),0);var n=this.__filtered__&&!t?new Nr(this):this.clone();return n.__filtered__?n.__takeCount__=sr(r,n.__takeCount__):n.__views__.push({size:sr(r,4294967295),type:e+(n.__dir__<0?"Right":"")}),n},Nr.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),at(["filter","map","takeWhile"],(function(e,t){var r=t+1,n=1==r||3==r;Nr.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Za(e,3),type:r}),t.__filtered__=t.__filtered__||n,t}})),at(["head","last"],(function(e,t){var r="take"+(t?"Right":"");Nr.prototype[e]=function(){return this[r](1).value()[0]}})),at(["initial","tail"],(function(e,t){var r="drop"+(t?"":"Right");Nr.prototype[e]=function(){return this.__filtered__?new Nr(this):this[r](1)}})),Nr.prototype.compact=function(){return this.filter($s)},Nr.prototype.find=function(e){return this.filter(e).head()},Nr.prototype.findLast=function(e){return this.reverse().find(e)},Nr.prototype.invokeMap=Wn((function(e,t){return"function"==typeof e?new Nr(this):this.map((function(r){return _n(r,e,t)}))})),Nr.prototype.reject=function(e){return this.filter(Eo(Za(e)))},Nr.prototype.slice=function(e,t){e=as(e);var r=this;return r.__filtered__&&(e>0||t<0)?new Nr(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),void 0!==t&&(r=(t=as(t))<0?r.dropRight(-t):r.take(t-e)),r)},Nr.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Nr.prototype.toArray=function(){return this.take(4294967295)},un(Nr.prototype,(function(e,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),n=/^(?:head|last)$/.test(t),a=Tr[n?"take"+("last"==t?"Right":""):t],i=n||/^find/.test(t);a&&(Tr.prototype[t]=function(){var t=this.__wrapped__,o=n?[1]:arguments,s=t instanceof Nr,c=o[0],u=s||jo(t),l=function(e){var t=a.apply(Tr,ft([e],o));return n&&f?t[0]:t};u&&r&&"function"==typeof c&&1!=c.length&&(s=u=!1);var f=this.__chain__,d=!!this.__actions__.length,h=i&&!f,p=s&&!d;if(!i&&u){t=p?t:new Nr(this);var m=e.apply(t,o);return m.__actions__.push({func:ro,args:[l],thisArg:void 0}),new Or(m,f)}return h&&p?e.apply(this,o):(m=this.thru(l),h?n?m.value()[0]:m.value():m)})})),at(["pop","push","shift","sort","splice","unshift"],(function(e){var t=ye[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);Tr.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var a=this.value();return t.apply(jo(a)?a:[],e)}return this[r]((function(r){return t.apply(jo(r)?r:[],e)}))}})),un(Nr.prototype,(function(e,t){var r=Tr[t];if(r){var n=r.name+"";xe.call(_r,n)||(_r[n]=[]),_r[n].push({name:t,func:r})}})),_r[Ca(void 0,2).name]=[{name:"wrapper",func:void 0}],Nr.prototype.clone=function(){var e=new Nr(this.__wrapped__);return e.__actions__=ya(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=ya(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=ya(this.__views__),e},Nr.prototype.reverse=function(){if(this.__filtered__){var e=new Nr(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Nr.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,r=jo(e),n=t<0,a=r?e.length:0,i=function(e,t,r){var n=-1,a=r.length;for(;++n<a;){var i=r[n],o=i.size;switch(i.type){case"drop":e+=o;break;case"dropRight":t-=o;break;case"take":t=sr(t,e+o);break;case"takeRight":e=or(e,t-o)}}return{start:e,end:t}}(0,a,this.__views__),o=i.start,s=i.end,c=s-o,u=n?s:o-1,l=this.__iteratees__,f=l.length,d=0,h=sr(c,this.__takeCount__);if(!r||!n&&a==c&&h==c)return na(e,this.__actions__);var p=[];e:for(;c--&&d<h;){for(var m=-1,g=e[u+=t];++m<f;){var v=l[m],y=v.iteratee,_=v.type,b=y(g);if(2==_)g=b;else if(!b){if(1==_)continue e;break e}}p[d++]=g}return p},Tr.prototype.at=no,Tr.prototype.chain=function(){return to(this)},Tr.prototype.commit=function(){return new Or(this.value(),this.__chain__)},Tr.prototype.next=function(){void 0===this.__values__&&(this.__values__=rs(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},Tr.prototype.plant=function(e){for(var t,r=this;r instanceof Dr;){var n=Ti(r);n.__index__=0,n.__values__=void 0,t?a.__wrapped__=n:t=n;var a=n;r=r.__wrapped__}return a.__wrapped__=e,t},Tr.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Nr){var t=e;return this.__actions__.length&&(t=new Nr(this)),(t=t.reverse()).__actions__.push({func:ro,args:[Hi],thisArg:void 0}),new Or(t,this.__chain__)}return this.thru(Hi)},Tr.prototype.toJSON=Tr.prototype.valueOf=Tr.prototype.value=function(){return na(this.__wrapped__,this.__actions__)},Tr.prototype.first=Tr.prototype.head,xt&&(Tr.prototype[xt]=function(){return this}),Tr}();Ue?((Ue.exports=$t)._=$t,Ge._=$t):Fe._=$t}).call(this)}));function Sc(e){if(Mc.isArray(e))return e;if("string"==typeof e)return e.split("");throw Error("Parameter must be a string or array.")}var Tc=function(e,t,r){if(e=Sc(e),t=Sc(t),0===e.length)return t.length;if(0===t.length)return e.length;var n,a,i,o,s=r||{d:1,i:1,s:1},c=[],u=[],l=t.length+1;for(n=0;n<l;n++)c[n]=n;for(n=0;n<e.length;n++){for(u[0]=n+1,a=0;a<t.length;a++)i=e[n]===t[a]?0:s.s,u[a+1]=Math.min(u[a]+s.d,c[a+1]+s.i,c[a]+i);for(a=0;a<l;a++)c[a]=u[a]}return((o=Math.max(e.length,t.length))-u[t.length])/o};function Cc(e,t){if(e.length>=6){var r=e.reduce((function(e,t){return e[t]=e[t]?e[t]+1:1,e}),{}),n=oi(r).reduce((function(e,t){return e[1]<r[t]?[t,r[t]]:e}),[0,0]),a=ja(n,2),i=a[0];a[1]>=2&&i.length<=4&&(e=t.split(i));var o=[e[0],e.slice(-1)].reduce((function(e,t){return e.length>t.length?e:t}),"");return o.length>10?o:t}return null}function Dc(e,t){var r=Sn.parse(t).host.replace(Ms,""),n=e[0].toLowerCase().replace(" ","");if(Tc(n,r)>.4&&n.length>5)return e.slice(2).join("");var a=e.slice(-1)[0].toLowerCase().replace(" ","");return Tc(a,r)>.4&&a.length>=5?e.slice(0,-2).join(""):null}var Oc={author:Ss,lead_image_url:Cs,dek:function(e,t){var r=t.$,n=t.excerpt;if(e.length>1e3||e.length<5)return null;if(n&&La(n,10)===La(e,10))return null;var a=No(e,r);return hs.test(a)?null:la(a.trim())},date_published:xc,content:kc,title:Ec};function Nc(e,t){return t.stripUnlikelyCandidates&&(e=function(e){return e("*").not("a").each((function(t,r){var n=e(r),a=n.attr("class"),i=n.attr("id");if(i||a){var o="".concat(a||""," ").concat(i||"");wi.test(o)||bi.test(o)&&n.remove()}})),e}(e)),function(e){var t,r=0;return e("[score]").each((function(n,a){if(!Li.test(a.tagName)){var i=e(a),o=Zi(i);o>r&&(r=o,t=i)}})),t?t=co(t,r,e):e("body")||e("*").first()}(e=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Yi.forEach((function(t){var r=ja(t,2),n=r[0],a=r[1];e("".concat(n," ").concat(a)).each((function(t,r){ro(e(r).parent(n),e,80)}))})),so(e,t),so(e,t),e}(e=ki(e),t.weightNodes))}var Pc={defaultOpts:{stripUnlikelyCandidates:!0,weightNodes:!0,cleanConditionally:!0},extract:function(e,t){var r=e.$,n=e.html,a=e.title,i=e.url;t=dt({},this.defaultOpts,t),r=r||Cn.load(n);var o=this.getContentNode(r,a,i,t);if(Po(o))return this.cleanAndReturnNode(o,r);var s=!0,c=!1,u=void 0;try{for(var l,f=Oa(oi(t).filter((function(e){return!0===t[e]})));!(s=(l=f.next()).done);s=!0){var d=l.value;if(t[d]=!1,r=Cn.load(n),Po(o=this.getContentNode(r,a,i,t)))break}}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}return this.cleanAndReturnNode(o,r)},getContentNode:function(e,t,r,n){return kc(Nc(e,n),{$:e,cleanConditionally:n.cleanConditionally,title:t,url:r})},cleanAndReturnNode:function(e,t){return e?la(t.html(e)):null}},jc=["tweetmeme-title","dc.title","rbtitle","headline","title"],Rc=["og:title"],zc=[".hentry .entry-title","h1#articleHeader","h1.articleHeader","h1.article",".instapaper_title","#meebo-title"],Lc=["article h1","#entry-title",".entry-title","#entryTitle","#entrytitle",".entryTitle",".entrytitle","#articleTitle",".articleTitle","post post-title","h1.title","h2.article","h1","html head title","title"],Yc={extract:function(e){var t,r=e.$,n=e.url,a=e.metaCache;return(t=Co(r,jc,a))||(t=Oo(r,zc))||(t=Co(r,Rc,a))||(t=Oo(r,Lc))?Ec(t,{url:n,$:r}):""}},Wc=["byl","clmst","dc.author","dcsext.author","dc.creator","rbauthors","authors"],Ic=[".entry .entry-author",".author.vcard .fn",".author .vcard .fn",".byline.vcard .fn",".byline .vcard .fn",".byline .by .author",".byline .by",".byline .author",".post-author.vcard",".post-author .vcard","a[rel=author]","#by_author",".by_author","#entryAuthor",".entryAuthor",".byline a[href*=author]","#author .authorname",".author .authorname","#author",".author",".articleauthor",".ArticleAuthor",".byline"],Bc=/^[\n\s]*By/i,qc=[["#byline",Bc],[".byline",Bc]],Hc={extract:function(e){var t,r=e.$,n=e.metaCache;if((t=Co(r,Wc,n))&&t.length<300)return Ss(t);if((t=Oo(r,Ic,2))&&t.length<300)return Ss(t);var a=!0,i=!1,o=void 0;try{for(var s,c=Oa(qc);!(a=(s=c.next()).done);a=!0){var u=ja(s.value,2),l=u[0],f=u[1],d=r(l);if(1===d.length){var h=d.text();if(f.test(h))return Ss(h)}}}catch(e){i=!0,o=e}finally{try{a||null==c.return||c.return()}finally{if(i)throw o}}return null}},Fc=["article:published_time","displaydate","dc.date","dc.date.issued","rbpubdate","publish_date","pub_date","pagedate","pubdate","revision_date","doc_date","date_created","content_create_date","lastmodified","created","date"],Gc=[".hentry .dtstamp.published",".hentry .published",".hentry .dtstamp.updated",".hentry .updated",".single .published",".meta .published",".meta .postDate",".entry-date",".byline .date",".postmetadata .date",".article_datetime",".date-header",".story-date",".dateStamp","#story .datetime",".dateline",".pubdate"],Uc=[new RegExp("/(20\\d{2}/\\d{2}/\\d{2})/","i"),new RegExp("(20\\d{2}-[01]\\d-[0-3]\\d)","i"),new RegExp("/(20\\d{2}/".concat("(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)","/[0-3]\\d)/"),"i")],$c={extract:function(e){var t,r=e.$,n=e.url,a=e.metaCache;return(t=Co(r,Fc,a,!1))||(t=Oo(r,Gc))||(t=function(e,t){var r=t.find((function(t){return t.test(e)}));return r?r.exec(e)[1]:null}(n,Uc))?xc(t):null}},Vc=["og:image","twitter:image","image_src"],Kc=["link[rel=image_src]"],Jc=new RegExp(["upload","wp-content","large","photo","wp-image"].join("|"),"i"),Zc=new RegExp(["spacer","sprite","blank","throbber","gradient","tile","bg","background","icon","social","header","hdr","advert","spinner","loader","loading","default","rating","share","facebook","twitter","theme","promo","ads","wp-includes"].join("|"),"i"),Xc=/\.gif(\?.*)?$/i,Qc=/\.jpe?g(\?.*)?$/i;function eu(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}var tu={extract:function(e){var t,r=e.$,n=e.content,a=e.metaCache,i=e.html;r.browser||0!==r("head").length||r("*").first().prepend(i);var o=Co(r,Vc,a,!1);if(o&&(t=Cs(o)))return t;var s=r(n),c=r("img",s).toArray(),u={};c.forEach((function(e,t){var n=r(e),a=n.attr("src");if(a){var i=function(e){e=e.trim();var t=0;return Jc.test(e)&&(t+=20),Zc.test(e)&&(t-=20),Xc.test(e)&&(t-=10),Qc.test(e)&&(t+=10),t}(a);i+=function(e){return e.attr("alt")?5:0}(n),i+=function(e){var t=0;1===e.parents("figure").first().length&&(t+=25);var r,n=e.parent();return 1===n.length&&(r=n.parent()),[n,r].forEach((function(e){Wi.test(eu(e))&&(t+=15)})),t}(n),i+=function(e){var t=0,r=e.next(),n=r.get(0);return n&&"figcaption"===n.tagName.toLowerCase()&&(t+=25),Wi.test(eu(r))&&(t+=15),t}(n),i+=function(e){var t=0,r=Ji(e.attr("width")),n=Ji(e.attr("height")),a=e.attr("src");if(r&&r<=50&&(t-=50),n&&n<=50&&(t-=50),r&&n&&!a.includes("sprite")){var i=r*n;i<5e3?t-=100:t+=Math.round(i/1e3)}return t}(n),i+=function(e,t){return e.length/2-t}(c,t),u[a]=i}}));var l=oi(u).reduce((function(e,t){return u[t]>e[1]?[t,u[t]]:e}),[null,0]),f=ja(l,2),d=f[0];if(f[1]>0&&(t=Cs(d)))return t;var h=!0,p=!1,m=void 0;try{for(var g,v=Oa(Kc);!(h=(g=v.next()).done);h=!0){var y=g.value,_=r(y).first(),b=_.attr("src");if(b&&(t=Cs(b)))return t;var A=_.attr("href");if(A&&(t=Cs(A)))return t;var w=_.attr("value");if(w&&(t=Cs(w)))return t}}catch(e){p=!0,m=e}finally{try{h||null==v.return||v.return()}finally{if(p)throw m}}return null}},ru=t((function(e,t){(function(){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m;n=Math.floor,l=Math.min,r=function(e,t){return e<t?-1:e>t?1:0},u=function(e,t,a,i,o){var s;if(null==a&&(a=0),null==o&&(o=r),a<0)throw new Error("lo must be non-negative");for(null==i&&(i=e.length);a<i;)o(t,e[s=n((a+i)/2)])<0?i=s:a=s+1;return[].splice.apply(e,[a,a-a].concat(t)),t},o=function(e,t,n){return null==n&&(n=r),e.push(t),p(e,0,e.length-1,n)},i=function(e,t){var n,a;return null==t&&(t=r),n=e.pop(),e.length?(a=e[0],e[0]=n,m(e,0,t)):a=n,a},c=function(e,t,n){var a;return null==n&&(n=r),a=e[0],e[0]=t,m(e,0,n),a},s=function(e,t,n){var a;return null==n&&(n=r),e.length&&n(e[0],t)<0&&(t=(a=[e[0],t])[0],e[0]=a[1],m(e,0,n)),t},a=function(e,t){var a,i,o,s,c,u;for(null==t&&(t=r),c=[],i=0,o=(s=function(){u=[];for(var t=0,r=n(e.length/2);0<=r?t<r:t>r;0<=r?t++:t--)u.push(t);return u}.apply(this).reverse()).length;i<o;i++)a=s[i],c.push(m(e,a,t));return c},h=function(e,t,n){var a;if(null==n&&(n=r),-1!==(a=e.indexOf(t)))return p(e,0,a,n),m(e,a,n)},f=function(e,t,n){var i,o,c,u,l;if(null==n&&(n=r),!(o=e.slice(0,t)).length)return o;for(a(o,n),c=0,u=(l=e.slice(t)).length;c<u;c++)i=l[c],s(o,i,n);return o.sort(n).reverse()},d=function(e,t,n){var o,s,c,f,d,h,p,m,g;if(null==n&&(n=r),10*t<=e.length){if(!(c=e.slice(0,t).sort(n)).length)return c;for(s=c[c.length-1],f=0,h=(p=e.slice(t)).length;f<h;f++)n(o=p[f],s)<0&&(u(c,o,0,null,n),c.pop(),s=c[c.length-1]);return c}for(a(e,n),g=[],d=0,m=l(t,e.length);0<=m?d<m:d>m;0<=m?++d:--d)g.push(i(e,n));return g},p=function(e,t,n,a){var i,o,s;for(null==a&&(a=r),i=e[n];n>t&&a(i,o=e[s=n-1>>1])<0;)e[n]=o,n=s;return e[n]=i},m=function(e,t,n){var a,i,o,s,c;for(null==n&&(n=r),i=e.length,c=t,o=e[t],a=2*t+1;a<i;)(s=a+1)<i&&!(n(e[a],e[s])<0)&&(a=s),e[t]=e[a],a=2*(t=a)+1;return e[t]=o,p(e,c,t,n)},t=function(){function e(e){this.cmp=null!=e?e:r,this.nodes=[]}return e.push=o,e.pop=i,e.replace=c,e.pushpop=s,e.heapify=a,e.updateItem=h,e.nlargest=f,e.nsmallest=d,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return i(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return c(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return s(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return a(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return h(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),e.exports=t}).call(this)})),nu=t((function(e,t){(function(){var e,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A=[].indexOf||function(e){for(var t=0,r=this.length;t<r;t++)if(t in this&&this[t]===e)return t;return-1};s=Math.floor,u=Math.max,l=Math.min,r=ru,g=function(e,t){return t?2*e/t:1},m=function(e,t){var r,n,a,i,o,s;for(o=[e.length,t.length],r=i=0,s=l(n=o[0],a=o[1]);0<=s?i<s:i>s;r=0<=s?++i:--i){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return n-a},b=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},p=function(e){var t,r;for(t=0,r=e.length;t<r;t++)if(e[t])return!0;return!1},i=function(){function e(e,t,r,n){this.isjunk=e,null==t&&(t=""),null==r&&(r=""),this.autojunk=null==n||n,this.a=this.b=null,this.setSeqs(t,r)}return e.prototype.setSeqs=function(e,t){return this.setSeq1(e),this.setSeq2(t)},e.prototype.setSeq1=function(e){if(e!==this.a)return this.a=e,this.matchingBlocks=this.opcodes=null},e.prototype.setSeq2=function(e){if(e!==this.b)return this.b=e,this.matchingBlocks=this.opcodes=null,this.fullbcount=null,this._chainB()},e.prototype._chainB=function(){var e,t,r,n,a,i,o,c,u,l,f,d,h,p;for(e=this.b,this.b2j=t={},n=l=0,d=e.length;l<d;n=++l)r=e[n],(b(t,r)?t[r]:t[r]=[]).push(n);if(i={},a=this.isjunk)for(f=0,h=(p=Object.keys(t)).length;f<h;f++)a(r=p[f])&&(i[r]=!0,delete t[r]);if(u={},o=e.length,this.autojunk&&o>=200)for(r in c=s(o/100)+1,t)t[r].length>c&&(u[r]=!0,delete t[r]);return this.isbjunk=function(e){return b(i,e)},this.isbpopular=function(e){return b(u,e)}},e.prototype.findLongestMatch=function(e,t,r,n){var a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,A,w,x,k,E;for(a=(_=[this.a,this.b,this.b2j,this.isbjunk])[0],i=_[1],o=_[2],f=_[3],s=(A=[e,r,0])[0],c=A[1],u=A[2],h={},l=g=e;e<=t?g<t:g>t;l=e<=t?++g:--g){for(m={},v=0,y=(w=b(o,a[l])?o[a[l]]:[]).length;v<y;v++)if(!((d=w[v])<r)){if(d>=n)break;(p=m[d]=(h[d-1]||0)+1)>u&&(s=(x=[l-p+1,d-p+1,p])[0],c=x[1],u=x[2])}h=m}for(;s>e&&c>r&&!f(i[c-1])&&a[s-1]===i[c-1];)s=(k=[s-1,c-1,u+1])[0],c=k[1],u=k[2];for(;s+u<t&&c+u<n&&!f(i[c+u])&&a[s+u]===i[c+u];)u++;for(;s>e&&c>r&&f(i[c-1])&&a[s-1]===i[c-1];)s=(E=[s-1,c-1,u+1])[0],c=E[1],u=E[2];for(;s+u<t&&c+u<n&&f(i[c+u])&&a[s+u]===i[c+u];)u++;return[s,c,u]},e.prototype.getMatchingBlocks=function(){var e,t,r,n,a,i,o,s,c,u,l,f,d,h,p,g,v,y,_,b,A,w,x,k,E,M;if(this.matchingBlocks)return this.matchingBlocks;for(y=[[0,h=(w=[this.a.length,this.b.length])[0],0,p=w[1]]],g=[];y.length;)t=(x=y.pop())[0],e=x[1],n=x[2],r=x[3],a=(k=_=this.findLongestMatch(t,e,n,r))[0],s=k[1],(l=k[2])&&(g.push(_),t<a&&n<s&&y.push([t,a,n,s]),a+l<e&&s+l<r&&y.push([a+l,e,s+l,r]));for(g.sort(m),i=c=f=0,v=[],b=0,A=g.length;b<A;b++)o=(E=g[b])[0],u=E[1],d=E[2],i+f===o&&c+f===u?f+=d:(f&&v.push([i,c,f]),i=(M=[o,u,d])[0],c=M[1],f=M[2]);return f&&v.push([i,c,f]),v.push([h,p,0]),this.matchingBlocks=v},e.prototype.getOpcodes=function(){var e,t,r,n,a,i,o,s,c,u,l,f;if(this.opcodes)return this.opcodes;for(n=a=0,this.opcodes=t=[],s=0,c=(u=this.getMatchingBlocks()).length;s<c;s++)e=(l=u[s])[0],r=l[1],i=l[2],o="",n<e&&a<r?o="replace":n<e?o="delete":a<r&&(o="insert"),o&&t.push([o,n,e,a,r]),n=(f=[e+i,r+i])[0],a=f[1],i&&t.push(["equal",e,n,r,a]);return t},e.prototype.getGroupedOpcodes=function(e){var t,r,n,a,i,o,s,c,f,d,h,p,m,g,v;for(null==e&&(e=3),(t=this.getOpcodes()).length||(t=[["equal",0,1,0,1]]),"equal"===t[0][0]&&(f=(p=t[0])[0],a=p[1],i=p[2],o=p[3],s=p[4],t[0]=[f,u(a,i-e),i,u(o,s-e),s]),"equal"===t[t.length-1][0]&&(f=(m=t[t.length-1])[0],a=m[1],i=m[2],o=m[3],s=m[4],t[t.length-1]=[f,a,l(i,a+e),o,l(s,o+e)]),c=e+e,n=[],r=[],d=0,h=t.length;d<h;d++)f=(g=t[d])[0],a=g[1],i=g[2],o=g[3],s=g[4],"equal"===f&&i-a>c&&(r.push([f,a,l(i,a+e),o,l(s,o+e)]),n.push(r),r=[],a=(v=[u(a,i-e),u(o,s-e)])[0],o=v[1]),r.push([f,a,i,o,s]);return!r.length||1===r.length&&"equal"===r[0][0]||n.push(r),n},e.prototype.ratio=function(){var e,t,r,n;for(e=0,t=0,r=(n=this.getMatchingBlocks()).length;t<r;t++)e+=n[t][2];return g(e,this.a.length+this.b.length)},e.prototype.quickRatio=function(){var e,t,r,n,a,i,o,s,c,u,l;if(!this.fullbcount)for(this.fullbcount=r={},i=0,s=(u=this.b).length;i<s;i++)r[t=u[i]]=(r[t]||0)+1;for(r=this.fullbcount,e={},n=0,o=0,c=(l=this.a).length;o<c;o++)t=l[o],a=b(e,t)?e[t]:r[t]||0,e[t]=a-1,a>0&&n++;return g(n,this.a.length+this.b.length)},e.prototype.realQuickRatio=function(){var e,t,r;return r=[this.a.length,this.b.length],g(l(e=r[0],t=r[1]),e+t)},e}(),c=function(e,t,n,a){var o,s,c,u,l,f,d,h,p;if(null==n&&(n=3),null==a&&(a=.6),!(n>0))throw new Error("n must be > 0: ("+n+")");if(!(0<=a&&a<=1))throw new Error("cutoff must be in [0.0, 1.0]: ("+a+")");for(o=[],(s=new i).setSeq2(e),u=0,f=t.length;u<f;u++)c=t[u],s.setSeq1(c),s.realQuickRatio()>=a&&s.quickRatio()>=a&&s.ratio()>=a&&o.push([s.ratio(),c]);for(p=[],l=0,d=(o=r.nlargest(o,n,m)).length;l<d;l++)(h=o[l])[0],c=h[1],p.push(c);return p},v=function(e,t){var r,n,a;for(r=(a=[0,e.length])[0],n=a[1];r<n&&e[r]===t;)r++;return r},e=function(){function e(e,t){this.linejunk=e,this.charjunk=t}return e.prototype.compare=function(e,t){var r,n,a,o,s,c,u,l,f,d,h,p,m,g;for(u=[],f=0,h=(m=new i(this.linejunk,e,t).getOpcodes()).length;f<h;f++){switch(l=(g=m[f])[0],n=g[1],r=g[2],o=g[3],a=g[4],l){case"replace":s=this._fancyReplace(e,n,r,t,o,a);break;case"delete":s=this._dump("-",e,n,r);break;case"insert":s=this._dump("+",t,o,a);break;case"equal":s=this._dump(" ",e,n,r);break;default:throw new Error("unknow tag ("+l+")")}for(d=0,p=s.length;d<p;d++)c=s[d],u.push(c)}return u},e.prototype._dump=function(e,t,r,n){var a,i,o;for(o=[],a=i=r;r<=n?i<n:i>n;a=r<=n?++i:--i)o.push(e+" "+t[a]);return o},e.prototype._plainReplace=function(e,t,r,n,a,i){var o,s,c,u,l,f,d,h,p,m;for(i-a<r-t?(o=this._dump("+",n,a,i),l=this._dump("-",e,t,r)):(o=this._dump("-",e,t,r),l=this._dump("+",n,a,i)),u=[],f=0,h=(m=[o,l]).length;f<h;f++)for(d=0,p=(s=m[f]).length;d<p;d++)c=s[d],u.push(c);return u},e.prototype._fancyReplace=function(e,t,r,n,a,o){var s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,R,z,L,Y,W,I,B,q,H,F,G,U,$,V,K,J,Z,X,Q,ee;for(h=(q=[.74,.75])[0],b=q[1],_=new i(this.charjunk),A=(H=[null,null])[0],w=H[1],T=[],k=D=a;a<=o?D<o:D>o;k=a<=o?++D:--D)for(g=n[k],_.setSeq2(g),x=O=t;t<=r?O<r:O>r;x=t<=r?++O:--O)(c=e[x])!==g?(_.setSeq1(c),_.realQuickRatio()>h&&_.quickRatio()>h&&_.ratio()>h&&(h=(V=[_.ratio(),x,k])[0],p=V[1],m=V[2])):null===A&&(A=($=[x,k])[0],w=$[1]);if(h<b){if(null===A){for(N=0,j=(K=this._plainReplace(e,t,r,n,a,o)).length;N<j;N++)S=K[N],T.push(S);return T}p=(J=[A,w,1])[0],m=J[1],h=J[2]}else A=null;for(P=0,R=(Z=this._fancyHelper(e,t,p,n,a,m)).length;P<R;P++)S=Z[P],T.push(S);if(s=(X=[e[p],n[m]])[0],d=X[1],null===A){for(f=y="",_.setSeqs(s,d),W=0,z=(Q=_.getOpcodes()).length;W<z;W++)switch(C=(ee=Q[W])[0],u=ee[1],l=ee[2],v=ee[3],E=(F=[l-u,ee[4]-v])[0],M=F[1],C){case"replace":f+=Array(E+1).join("^"),y+=Array(M+1).join("^");break;case"delete":f+=Array(E+1).join("-");break;case"insert":y+=Array(M+1).join("+");break;case"equal":f+=Array(E+1).join(" "),y+=Array(M+1).join(" ");break;default:throw new Error("unknow tag ("+C+")")}for(I=0,L=(G=this._qformat(s,d,f,y)).length;I<L;I++)S=G[I],T.push(S)}else T.push(" "+s);for(B=0,Y=(U=this._fancyHelper(e,p+1,r,n,m+1,o)).length;B<Y;B++)S=U[B],T.push(S);return T},e.prototype._fancyHelper=function(e,t,r,n,a,i){var o;return o=[],t<r?o=a<i?this._fancyReplace(e,t,r,n,a,i):this._dump("-",e,t,r):a<i&&(o=this._dump("+",n,a,i)),o},e.prototype._qformat=function(e,t,r,n){var a,i;return i=[],a=l(v(e,"\t"),v(t,"\t")),a=l(a,v(r.slice(0,a)," ")),a=l(a,v(n.slice(0,a)," ")),r=r.slice(a).replace(/\s+$/,""),n=n.slice(a).replace(/\s+$/,""),i.push("- "+e),r.length&&i.push("? "+Array(a+1).join("\t")+r+"\n"),i.push("+ "+t),n.length&&i.push("? "+Array(a+1).join("\t")+n+"\n"),i},e}(),a=function(e,t){return null==t&&(t=/^\s*#?\s*$/),t.test(e)},n=function(e,t){return null==t&&(t=" \t"),A.call(t,e)>=0},_=function(e,t){var r,n;return r=e+1,1===(n=t-e)?""+r:(n||r--,r+","+n)},h=function(e,t,r){var n,a,o,s,c,u,l,f,d,h,p,m,g,v,y,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,R,z,L,Y,W,I,B;for(null==(c=(R=null!=r?r:{}).fromfile)&&(c=""),null==(x=R.tofile)&&(x=""),null==(u=R.fromfiledate)&&(u=""),null==(k=R.tofiledate)&&(k=""),null==R.n&&3,null==(y=R.lineterm)&&(y="\n"),v=[],b=!1,E=0,C=(z=new i(null,e,t).getGroupedOpcodes()).length;E<C;E++)for(l=z[E],b||(b=!0,s=u?"\t"+u:"",w=k?"\t"+k:"",v.push("--- "+c+s+y),v.push("+++ "+x+w+y)),m=(L=[l[0],l[l.length-1]])[1],n=_((o=L[0])[1],m[2]),a=_(o[3],m[4]),v.push("@@ -"+n+" +"+a+" @@"+y),M=0,D=l.length;M<D;M++)if(A=(Y=l[M])[0],f=Y[1],d=Y[2],h=Y[3],p=Y[4],"equal"!==A){if("replace"===A||"delete"===A)for(T=0,N=(I=e.slice(f,d)).length;T<N;T++)g=I[T],v.push("-"+g);if("replace"===A||"insert"===A)for(j=0,P=(B=t.slice(h,p)).length;j<P;j++)g=B[j],v.push("+"+g)}else for(S=0,O=(W=e.slice(f,d)).length;S<O;S++)g=W[S],v.push(" "+g);return v},y=function(e,t){var r,n;return r=e+1,(n=t-e)||r--,n<=1?""+r:r+","+(r+n-1)},o=function(e,t,r){var n,a,o,s,c,u,l,f,d,h,m,g,v,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,R,z,L,Y,W,I,B,q,H;for(null==(c=(L=null!=r?r:{}).fromfile)&&(c=""),null==(E=L.tofile)&&(E=""),null==(u=L.fromfiledate)&&(u=""),null==(M=L.tofiledate)&&(M=""),null==L.n&&3,null==(b=L.lineterm)&&(b="\n"),A={insert:"+ ",delete:"- ",replace:"! ",equal:" "},w=!1,_=[],S=0,O=(Y=new i(null,e,t).getGroupedOpcodes()).length;S<O;S++)if(l=Y[S],!w){if(w=!0,s=u?"\t"+u:"",k=M?"\t"+M:"",_.push("*** "+c+s+b),_.push("--- "+E+k+b),o=(W=[l[0],l[l.length-1]])[0],g=W[1],_.push("***************"+b),n=y(o[1],g[2]),_.push("*** "+n+" ****"+b),p(function(){var e,t,r,n;for(n=[],e=0,t=l.length;e<t;e++)r=l[e],x=r[0],r[1],r[2],r[3],r[4],n.push("replace"===x||"delete"===x);return n}()))for(T=0,N=l.length;T<N;T++)if(I=l[T],x=I[0],f=I[1],d=I[2],I[3],I[4],"insert"!==x)for(C=0,P=(B=e.slice(f,d)).length;C<P;C++)v=B[C],_.push(A[x]+v);if(a=y(o[3],g[4]),_.push("--- "+a+" ----"+b),p(function(){var e,t,r,n;for(n=[],e=0,t=l.length;e<t;e++)r=l[e],x=r[0],r[1],r[2],r[3],r[4],n.push("replace"===x||"insert"===x);return n}()))for(D=0,j=l.length;D<j;D++)if(q=l[D],x=q[0],q[1],q[2],h=q[3],m=q[4],"delete"!==x)for(z=0,R=(H=t.slice(h,m)).length;z<R;z++)v=H[z],_.push(A[x]+v)}return _},f=function(t,r,a,i){return null==i&&(i=n),new e(a,i).compare(t,r)},d=function(e,t){var r,n,a,i,o,s,c;if(!(i={1:"- ",2:"+ "}[t]))throw new Error("unknow delta choice (must be 1 or 2): "+t);for(a=[" ",i],n=[],o=0,s=e.length;o<s;o++)c=(r=e[o]).slice(0,2),A.call(a,c)>=0&&n.push(r.slice(2));return n},t._arrayCmp=m,t.SequenceMatcher=i,t.getCloseMatches=c,t._countLeading=v,t.Differ=e,t.IS_LINE_JUNK=a,t.IS_CHARACTER_JUNK=n,t._formatRangeUnified=_,t.unifiedDiff=h,t._formatRangeContext=y,t.contextDiff=o,t.ndiff=f,t.restore=d}).call(this)})),au=(nu._arrayCmp,nu.SequenceMatcher,nu.getCloseMatches,nu._countLeading,nu.Differ,nu.IS_LINE_JUNK,nu.IS_CHARACTER_JUNK,nu._formatRangeUnified,nu.unifiedDiff,nu._formatRangeContext,nu.contextDiff,nu.ndiff,nu.restore,nu);var iu=/\d/,ou=new RegExp(["print","archive","comment","discuss","e-mail","email","share","reply","all","login","sign","single","adx","entry-unrelated"].join("|"),"i"),su=new RegExp("(next|weiter|continue|>([^|]|$)|»([^|]|$))","i"),cu=new RegExp("(first|last|end)","i"),uu=new RegExp("(prev|earl|old|new|<|«)","i");function lu(e){var t=e.links,r=e.articleUrl,n=e.baseUrl,a=e.parsedUrl,i=e.$,o=e.previousUrls,s=void 0===o?[]:o;a=a||Sn.parse(r);var c=function(e){return new RegExp("^".concat(e),"i")}(n),u=function(e){return e("meta[name=generator][value^=WordPress]").length>0}(i),l=t.reduce((function(e,t){var o=jo(t);if(!o.href)return e;var l=Ta(o.href),f=i(t),d=f.text();if(!function(e,t,r,n,a,i){if(void 0!==i.find((function(t){return e===t})))return!1;if(!e||e===t||e===r)return!1;var o=n.hostname;if(Sn.parse(e).hostname!==o)return!1;var s=e.replace(r,"");return!!iu.test(s)&&(!ou.test(a)&&!(a.length>25))}(l,r,n,a,d,s))return e;e[l]?e[l].linkText="".concat(e[l].linkText,"|").concat(d):e[l]={score:0,linkText:d,href:l};var h=e[l],p=function(e,t){return"".concat(t||e.text()," ").concat(e.attr("class")||""," ").concat(e.attr("id")||"")}(f,d),m=function(e){var t=e.match(xa);if(!t)return null;var r=wa(t[6],10);return r<100?r:null}(l),g=function(e,t){return t.test(e)?0:-25}(l,c);return g+=function(e){return su.test(e)?50:0}(p),g+=function(e){return cu.test(e)&&su.test(e)?-65:0}(p),g+=function(e){return uu.test(e)?-200:0}(p),g+=function(e){var t=e.parent(),r=!1,n=!1,a=0;return Ci(Uo(0,4)).forEach((function(){if(0!==t.length){var e=function(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}(t);!r&&vi.test(e)&&(r=!0,a+=25),!n&&gi.test(e)&&ou.test(e)&&(mi.test(e)||(n=!0,a-=25)),t=t.parent()}})),a}(f),g+=function(e){return ou.test(e)?-25:0}(l),g+=function(e,t){return e&&!t?50:0}(m,u),g+=function(e,t){var r=0;if(Ma.test(e.trim())){var n=wa(e,10);r=n<2?-30:Math.max(0,10-n),t&&t>=n&&(r-=50)}return r}(d,m),g+=function(e,t,r){return e>0?e+-250*(1-new au.SequenceMatcher(null,t,r).ratio()-.2):0}(g,r,l),h.score=g,e}),{});return 0===oi(l).length?null:l}var fu={extract:function(e){var t=e.$,r=e.url,n=e.parsedUrl,a=e.previousUrls,i=void 0===a?[]:a;n=n||Sn.parse(r);var o=Ta(r),s=Ra(r,n),c=lu({links:t("a[href]").toArray(),articleUrl:o,baseUrl:s,parsedUrl:n,$:t,previousUrls:i});if(!c)return null;var u=oi(c).reduce((function(e,t){var r=c[t];return r.score>e.score?r:e}),{score:-100});return u.score>=50?u.href:null}},du=["og:url"];function hu(e){return Sn.parse(e).hostname}function pu(e){return{url:e,domain:hu(e)}}var mu={extract:function(e){var t=e.$,r=e.url,n=e.metaCache,a=t("link[rel=canonical]");if(0!==a.length){var i=a.attr("href");if(i)return pu(i)}var o=Co(t,du,n);return pu(o||r)}},gu={ellipse:"…",chars:[" ","-"],max:140,truncate:!0};var vu=function(e,t,r){if("string"!=typeof e||0===e.length)return"";if(0===t)return"";for(var n in r=r||{},gu)null!==r[n]&&void 0!==r[n]||(r[n]=gu[n]);return r.max=t||r.max,function(e,t,r,n,a){if(e.length<t)return e;for(var i=0,o="",s=Math.floor(t/2),c="middle"===a?s:t,u=0,l=e.length;u<l;u++)if(o=e.charAt(u),-1!==n.indexOf(o)&&"middle"!==a&&(i=u),!(u<c))return 0===i?a?e.substring(0,c-1)+r+("middle"===a?e.substring(e.length-s,e.length):""):"":e.substring(0,i)+r;return e}(e,r.max,r.ellipse,r.chars,r.truncate)},yu=["og:description","twitter:description"];function _u(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200;return e=e.replace(/[\s\n]+/g," ").trim(),vu(e,r,{ellipse:"…"})}var bu={extract:function(e){var t=e.$,r=e.content,n=e.metaCache,a=Co(t,yu,n);if(a)return _u(No(a,t));return _u(t(r.slice(0,1e3)).text(),t,200)}},Au={extract:function(e){var t=e.content,r=function(e){return la(Cn.load(e)("div").first().text()).split(/\s/).length}(t);return 1===r&&(r=function(e){return(e=(e=(e=e.replace(/<[^>]*>/g," ")).replace(/\s+/g," ")).trim()).split(" ").length}(t)),r}},wu={domain:"*",title:Yc.extract,date_published:$c.extract,author:Hc.extract,content:Pc.extract.bind(Pc),lead_image_url:tu.extract,dek:function(){return null},next_page_url:fu.extract,url_and_domain:mu.extract,excerpt:bu.extract,word_count:Au.extract,direction:function(e){var t=e.title;return fs.getDirection(t)},extract:function(e){var t=e.html,r=e.$;if(t&&!r){var n=Cn.load(t);e.$=n}var a=this.title(e),i=this.date_published(e),o=this.author(e),s=this.content(dt({},e,{title:a})),c=this.lead_image_url(dt({},e,{content:s})),u=this.dek(dt({},e,{content:s})),l=this.next_page_url(e),f=this.excerpt(dt({},e,{content:s})),d=this.word_count(dt({},e,{content:s})),h=this.direction({title:a}),p=this.url_and_domain(e);return{title:a,author:o,date_published:i||null,dek:u,lead_image_url:c,content:s,next_page_url:l,url:p.url,domain:p.domain,excerpt:f,word_count:d,direction:h}}},xu={'meta[name="al:ios:app_name"][value="Medium"]':as,'meta[name="generator"][value="blogger"]':ts};function ku(e,t,r){var n=(t=t||Sn.parse(e)).hostname,a=n.split(".").slice(-2).join(".");return Qo[n]||Qo[a]||ls[n]||ls[a]||function(e){var t=oi(xu).find((function(t){return e(t).length>0}));return xu[t]}(r)||wu}function Eu(e){var t=e.$,r=e.type,n=e.extractionOpts,a=e.extractHtml,i=void 0!==a&&a;if(!n)return null;if("string"==typeof n)return n;var o,s=n.selectors,c=n.defaultCleaner,u=void 0===c||c,l=n.allowMultiple,f=function(e,t,r,n){return t.find((function(t){if(Ca(t)){if(r)return t.reduce((function(t,r){return t&&e(r).length>0}),!0);var a=ja(t,2),i=a[0],o=a[1];return(n||!n&&1===e(i).length)&&e(i).attr(o)&&""!==e(i).attr(o).trim()}return(n||!n&&1===e(t).length)&&""!==e(t).text().trim()}))}(t,s,i,"lead_image_url"===r||l);if(!f)return null;function d(r){return xo(r,t,e.url||""),function(e,t,r){var n=r.clean;n&&t(n.join(","),e).remove()}(r,t,n),function(e,t,r){var n=r.transforms;n&&oi(n).forEach((function(r){var a=t(r,e),i=n[r];"string"==typeof i?a.each((function(e,a){Ei(t(a),t,n[r])})):"function"==typeof i&&a.each((function(e,r){var n=i(t(r),t);"string"==typeof n&&Ei(t(r),t,n)}))}))}(r,t,n),r}if(i)return function(){var n;if(Ca(f)){n=t(f.join(","));var a=t("<div></div>");n.each((function(e,t){a.append(t)})),n=a}else n=t(f);return n.wrap(t("<div></div>")),n=d(n=n.parent()),Oc[r]&&Oc[r](n,dt({},e,{defaultCleaner:u})),l?n.children().toArray().map((function(e){return t.html(t(e))})):t.html(n)}();if(Ca(f)){var h=ja(f,3),p=h[0],m=h[1],g=h[2];o=d(t(p)).map((function(e,r){var n=t(r).attr(m).trim();return g?g(n):n}))}else o=d(t(f)).map((function(e,r){return t(r).text().trim()}));return o=Ca(o.toArray())&&l?o.toArray():o[0],u&&Oc[r]?Oc[r](o,dt({},e,n)):o}function Mu(e,t){var r={};return oi(e).forEach((function(n){r[n]||(r[n]=Eu(dt({},t,{type:n,extractionOpts:e[n]})))})),r}function Su(e){var t=e.type,r=e.extractor,n=e.fallback,a=void 0===n||n,i=Eu(dt({},e,{extractionOpts:r[t]}));return i||(a?wu[t](e):null)}var Tu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:wu,t=arguments.length>1?arguments[1]:void 0,r=t,n=r.contentOnly,a=r.extractedTitle;if("*"===e.domain)return e.extract(t);if(t=dt({},t,{extractor:e}),n){var i=Su(dt({},t,{type:"content",extractHtml:!0,title:a}));return{content:i}}var o=Su(dt({},t,{type:"title"})),s=Su(dt({},t,{type:"date_published"})),c=Su(dt({},t,{type:"author"})),u=Su(dt({},t,{type:"next_page_url"})),l=Su(dt({},t,{type:"content",extractHtml:!0,title:o})),f=Su(dt({},t,{type:"lead_image_url",content:l})),d=Su(dt({},t,{type:"excerpt",content:l})),h=Su(dt({},t,{type:"dek",content:l,excerpt:d})),p=Su(dt({},t,{type:"word_count",content:l})),m=Su(dt({},t,{type:"direction",title:o})),g=Su(dt({},t,{type:"url_and_domain"}))||{url:null,domain:null},v=g.url,y=g.domain,_={};return e.extend&&(_=Mu(e.extend,t)),dt({title:o,content:l,author:c,date_published:s,lead_image_url:f,dek:h,next_page_url:u,url:v,domain:y,excerpt:d,word_count:p,direction:m},_)};function Cu(e){return Du.apply(this,arguments)}function Du(){return(Du=Vr(s.mark((function e(t){var r,n,a,i,o,c,u,l,f,d,h,p;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.next_page_url,n=t.html,a=t.$,i=t.metaCache,o=t.result,c=t.Extractor,u=t.title,l=t.url,f=1,d=[Ta(l)];case 3:if(!(r&&f<26)){e.next=16;break}return f+=1,e.next=7,Fo.create(r);case 7:a=e.sent,n=a.html(),h=Tu(c,{url:r,html:n,$:a,metaCache:i,extractedTitle:u,previousUrls:d}),d.push(r),o=dt({},o,{content:"".concat(o.content,"<hr><h4>Page ").concat(f,"</h4>").concat(h.content)}),r=h.next_page_url,e.next=3;break;case 16:return p=wu.word_count({content:"<div>".concat(o.content,"</div>")}),e.abrupt("return",dt({},o,{total_pages:f,rendered_pages:f,word_count:p}));case 18:case"end":return e.stop()}}),e,this)})))).apply(this,arguments)}var Ou,Nu={parse:(Ou=Vr(s.mark((function e(t){var r,n,a,i,o,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M=arguments;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=M.length>1&&void 0!==M[1]?M[1]:{},n=r.html,a=pt(r,["html"]),i=a.fetchAllPages,o=void 0===i||i,c=a.fallback,u=void 0===c||c,l=a.contentType,f=void 0===l?"html":l,d=a.headers,h=void 0===d?{}:d,p=a.extend,m=a.customExtractor,!t&&Cn.browser&&(t=window.location.href,n=n||Cn.html()),$o(g=Sn.parse(t))){e.next=6;break}return e.abrupt("return",{error:!0,message:"The url parameter passed does not look like a valid URL. Please check your URL and try again."});case 6:return e.next=8,Fo.create(t,n,g,h);case 8:if(!(v=e.sent).failed){e.next=11;break}return e.abrupt("return",v);case 11:if(m&&es(m),y=ku(t,g,v),n||(n=v.html()),_=v("meta").map((function(e,t){return v(t).attr("name")})).toArray(),b={},p&&(b=Mu(p,{$:v,url:t,html:n})),A=Tu(y,{url:t,html:n,$:v,metaCache:_,parsedUrl:g,fallback:u,contentType:f}),x=(w=A).title,k=w.next_page_url,!o||!k){e.next=25;break}return e.next=22,Cu({Extractor:y,next_page_url:k,html:n,$:v,metaCache:_,result:A,title:x,url:t});case 22:A=e.sent,e.next=26;break;case 25:A=dt({},A,{total_pages:1,rendered_pages:1});case 26:return"markdown"===f?(E=new ra,A.content=E.turndown(A.content)):"text"===f&&(A.content=v.text(v(A.content))),e.abrupt("return",dt({},A,b));case 28:case"end":return e.stop()}}),e,this)}))),function(e){return Ou.apply(this,arguments)}),browser:!!Cn.browser,fetchResource:function(e){return Fo.create(e)},addExtractor:function(e){return es(e)}};export default Nu; +//# sourceMappingURL=mercury.esm.js.map diff --git a/dist/mercury.esm.js.map b/dist/mercury.esm.js.map new file mode 100644 index 000000000..e1121e866 --- /dev/null +++ b/dist/mercury.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mercury.esm.js","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/regenerator-runtime/runtime-module.js","../node_modules/@babel/runtime-corejs2/regenerator/index.js","../node_modules/core-js/library/modules/_cof.js","../node_modules/core-js/library/modules/_iobject.js","../node_modules/core-js/library/modules/_defined.js","../node_modules/core-js/library/modules/_to-iobject.js","../node_modules/core-js/library/modules/_object-pie.js","../node_modules/core-js/library/modules/_property-desc.js","../node_modules/core-js/library/modules/_is-object.js","../node_modules/core-js/library/modules/_to-primitive.js","../node_modules/core-js/library/modules/_has.js","../node_modules/core-js/library/modules/_fails.js","../node_modules/core-js/library/modules/_descriptors.js","../node_modules/core-js/library/modules/_global.js","../node_modules/core-js/library/modules/_dom-create.js","../node_modules/core-js/library/modules/_ie8-dom-define.js","../node_modules/core-js/library/modules/_object-gopd.js","../node_modules/core-js/library/modules/_core.js","../node_modules/core-js/library/modules/_a-function.js","../node_modules/core-js/library/modules/_ctx.js","../node_modules/core-js/library/modules/_an-object.js","../node_modules/core-js/library/modules/_object-dp.js","../node_modules/core-js/library/modules/_hide.js","../node_modules/core-js/library/modules/_export.js","../node_modules/core-js/library/modules/_object-sap.js","../node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js","../node_modules/core-js/library/fn/object/get-own-property-descriptor.js","../node_modules/core-js/library/modules/_array-includes.js","../node_modules/core-js/library/modules/_redefine.js","../node_modules/core-js/library/modules/_uid.js","../node_modules/core-js/library/modules/_meta.js","../node_modules/core-js/library/modules/_shared.js","../node_modules/core-js/library/modules/_wks.js","../node_modules/core-js/library/modules/_set-to-string-tag.js","../node_modules/core-js/library/modules/_wks-ext.js","../node_modules/core-js/library/modules/_wks-define.js","../node_modules/core-js/library/modules/_to-integer.js","../node_modules/core-js/library/modules/_to-length.js","../node_modules/core-js/library/modules/_to-absolute-index.js","../node_modules/core-js/library/modules/_shared-key.js","../node_modules/core-js/library/modules/_object-keys-internal.js","../node_modules/core-js/library/modules/_enum-bug-keys.js","../node_modules/core-js/library/modules/_object-keys.js","../node_modules/core-js/library/modules/_object-gops.js","../node_modules/core-js/library/modules/_is-array.js","../node_modules/core-js/library/modules/_object-dps.js","../node_modules/core-js/library/modules/_html.js","../node_modules/core-js/library/modules/_object-create.js","../node_modules/core-js/library/modules/_object-gopn.js","../node_modules/core-js/library/modules/_object-gopn-ext.js","../node_modules/core-js/library/modules/es6.symbol.js","../node_modules/core-js/library/modules/_enum-keys.js","../node_modules/core-js/library/fn/object/get-own-property-symbols.js","../node_modules/core-js/library/modules/_to-object.js","../node_modules/core-js/library/modules/es6.object.keys.js","../node_modules/core-js/library/fn/object/keys.js","../node_modules/core-js/library/modules/es6.object.define-property.js","../node_modules/core-js/library/fn/object/define-property.js","../node_modules/@babel/runtime-corejs2/helpers/defineProperty.js","../node_modules/@babel/runtime-corejs2/helpers/objectSpread.js","../node_modules/@babel/runtime-corejs2/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime-corejs2/helpers/objectWithoutProperties.js","../node_modules/core-js/library/modules/_iterators.js","../node_modules/core-js/library/modules/_iter-create.js","../node_modules/core-js/library/modules/_string-at.js","../node_modules/core-js/library/modules/_object-gpo.js","../node_modules/core-js/library/modules/_iter-define.js","../node_modules/core-js/library/modules/es6.string.iterator.js","../node_modules/core-js/library/modules/_iter-step.js","../node_modules/core-js/library/modules/es6.array.iterator.js","../node_modules/core-js/library/modules/web.dom.iterable.js","../node_modules/core-js/library/modules/_classof.js","../node_modules/core-js/library/modules/_task.js","../node_modules/core-js/library/modules/_an-instance.js","../node_modules/core-js/library/modules/_iter-call.js","../node_modules/core-js/library/modules/_is-array-iter.js","../node_modules/core-js/library/modules/core.get-iterator-method.js","../node_modules/core-js/library/modules/_for-of.js","../node_modules/core-js/library/modules/_species-constructor.js","../node_modules/core-js/library/modules/_invoke.js","../node_modules/core-js/library/modules/_microtask.js","../node_modules/core-js/library/modules/_new-promise-capability.js","../node_modules/core-js/library/modules/_perform.js","../node_modules/core-js/library/modules/_user-agent.js","../node_modules/core-js/library/modules/_promise-resolve.js","../node_modules/core-js/library/modules/_redefine-all.js","../node_modules/core-js/library/modules/_set-species.js","../node_modules/core-js/library/modules/_iter-detect.js","../node_modules/core-js/library/modules/es6.promise.js","../node_modules/core-js/library/modules/_library.js","../node_modules/core-js/library/modules/es7.promise.finally.js","../node_modules/core-js/library/modules/es7.promise.try.js","../node_modules/core-js/library/fn/promise.js","../node_modules/@babel/runtime-corejs2/helpers/asyncToGenerator.js","../node_modules/rollup-plugin-node-globals/src/global.js","../node_modules/url/node_modules/punycode/punycode.js","../node_modules/url/util.js","../node_modules/querystring/decode.js","../node_modules/querystring/encode.js","../node_modules/querystring/index.js","../node_modules/url/url.js","../src/shims/cheerio-query.js","../node_modules/jquery/dist/jquery.min.js","../node_modules/turndown/lib/turndown.browser.es.js","../src/shims/iconv-lite.js","../src/utils/text/normalize-spaces.js","../node_modules/core-js/library/modules/_string-ws.js","../node_modules/core-js/library/modules/_string-trim.js","../node_modules/core-js/library/modules/_parse-int.js","../node_modules/core-js/library/modules/es6.parse-int.js","../node_modules/core-js/library/fn/parse-int.js","../src/utils/text/constants.js","../src/utils/text/remove-anchor.js","../node_modules/core-js/library/modules/es6.array.is-array.js","../node_modules/core-js/library/fn/array/is-array.js","../node_modules/@babel/runtime-corejs2/helpers/arrayWithHoles.js","../node_modules/core-js/library/modules/core.get-iterator.js","../node_modules/@babel/runtime-corejs2/helpers/iterableToArrayLimit.js","../node_modules/@babel/runtime-corejs2/helpers/nonIterableRest.js","../node_modules/@babel/runtime-corejs2/helpers/slicedToArray.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../node_modules/next-line/index.js","../node_modules/http-headers/index.js","../node_modules/browser-request/index.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../node_modules/core-js/library/modules/_own-keys.js","../node_modules/core-js/library/modules/es6.reflect.own-keys.js","../node_modules/core-js/library/fn/reflect/own-keys.js","../src/utils/dom/constants.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../node_modules/@babel/runtime-corejs2/helpers/arrayWithoutHoles.js","../node_modules/core-js/library/modules/_create-property.js","../node_modules/core-js/library/modules/es6.array.from.js","../node_modules/core-js/library/fn/array/from.js","../node_modules/core-js/library/modules/core.is-iterable.js","../node_modules/@babel/runtime-corejs2/helpers/iterableToArray.js","../node_modules/@babel/runtime-corejs2/helpers/nonIterableSpread.js","../node_modules/@babel/runtime-corejs2/helpers/toConsumableArray.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/set-attrs.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../node_modules/core-js/library/modules/_parse-float.js","../node_modules/core-js/library/modules/es6.parse-float.js","../node_modules/core-js/library/fn/parse-float.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/utils/dom/clean-tags.js","../node_modules/core-js/library/modules/_validate-collection.js","../node_modules/core-js/library/modules/_collection-strong.js","../node_modules/core-js/library/modules/_array-species-constructor.js","../node_modules/core-js/library/modules/_array-species-create.js","../node_modules/core-js/library/modules/_collection.js","../node_modules/core-js/library/modules/_array-methods.js","../node_modules/core-js/library/modules/es6.set.js","../node_modules/core-js/library/modules/es7.set.to-json.js","../node_modules/core-js/library/modules/_collection-to-json.js","../node_modules/core-js/library/modules/_array-from-iterable.js","../node_modules/core-js/library/modules/_set-collection-of.js","../node_modules/core-js/library/modules/es7.set.of.js","../node_modules/core-js/library/modules/_set-collection-from.js","../node_modules/core-js/library/modules/es7.set.from.js","../node_modules/core-js/library/fn/set.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../node_modules/core-js/library/fn/symbol/iterator.js","../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","../node_modules/core-js/library/modules/es7.symbol.observable.js","../node_modules/core-js/library/fn/symbol/index.js","../node_modules/@babel/runtime-corejs2/helpers/typeof.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/within-comment.js","../src/utils/dom/strip-tags.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/range.js","../src/utils/validate-url.js","../node_modules/core-js/library/modules/_object-assign.js","../node_modules/core-js/library/modules/es6.object.assign.js","../node_modules/core-js/library/fn/object/assign.js","../src/utils/merge-supported-domains.js","../src/extractors/add-extractor.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/genius.com/index.js","../src/extractors/custom/wired.jp/index.js","../src/extractors/custom/www.abendblatt.de/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/custom/www.fortinet.com/index.js","../src/extractors/custom/www.fastcompany.com/index.js","../src/extractors/custom/blisterreview.com/index.js","../src/extractors/custom/news.mynavi.jp/index.js","../src/extractors/custom/clinicaltrials.gov/index.js","../src/extractors/custom/github.com/index.js","../src/extractors/custom/www.reddit.com/index.js","../src/extractors/custom/otrs.com/index.js","../src/extractors/custom/www.ossnews.jp/index.js","../src/extractors/custom/buzzap.jp/index.js","../src/extractors/custom/www.asahi.com/index.js","../src/extractors/custom/www.sanwa.co.jp/index.js","../src/extractors/custom/www.elecom.co.jp/index.js","../src/extractors/custom/scan.netsecurity.ne.jp/index.js","../src/extractors/custom/jvndb.jvn.jp/index.js","../src/extractors/custom/www.jnsa.org/index.js","../src/extractors/custom/phpspot.org/index.js","../src/extractors/custom/www.infoq.com/index.js","../src/extractors/custom/www.moongift.jp/index.js","../src/extractors/custom/www.itmedia.co.jp/index.js","../src/extractors/custom/www.publickey1.jp/index.js","../src/extractors/custom/takagi-hiromitsu.jp/index.js","../src/extractors/custom/bookwalker.jp/index.js","../src/extractors/custom/www.yomiuri.co.jp/index.js","../src/extractors/custom/japan.cnet.com/index.js","../src/extractors/custom/deadline.com/index.js","../src/extractors/custom/www.gizmodo.jp/index.js","../src/extractors/custom/getnews.jp/index.js","../src/extractors/custom/www.lifehacker.jp/index.js","../src/extractors/custom/sect.iij.ad.jp/index.js","../src/extractors/custom/www.oreilly.co.jp/index.js","../src/extractors/custom/www.ipa.go.jp/index.js","../src/extractors/custom/weekly.ascii.jp/index.js","../src/extractors/custom/techlog.iij.ad.jp/index.js","../src/extractors/custom/japan.zdnet.com/index.js","../src/extractors/custom/www.rbbtoday.com/index.js","../src/extractors/custom/www.lemonde.fr/index.js","../src/extractors/custom/www.phoronix.com/index.js","../src/extractors/custom/pitchfork.com/index.js","../src/extractors/custom/biorxiv.org/index.js","../src/extractors/custom/epaper.zeit.de/index.js","../src/extractors/custom/www.ladbible.com/index.js","../src/extractors/custom/timesofindia.indiatimes.com/index.js","../src/extractors/custom/ma.ttias.be/index.js","../src/extractors/custom/pastebin.com/index.js","../src/extractors/custom/www.gruene.de/index.js","../src/extractors/custom/www.engadget.com/index.js","../src/extractors/custom/arstechnica.com/index.js","../src/extractors/custom/www.ndtv.com/index.js","../src/extractors/custom/www.spektrum.de/index.js","../src/extractors/custom/postlight.com/index.js","../src/extractors/custom/www.investmentexecutive.com/index.js","../src/extractors/custom/www.cbc.ca/index.js","../src/extractors/all.js","../node_modules/string-direction/index.js","../src/cleaners/constants.js","../src/cleaners/author.js","../node_modules/valid-url/index.js","../src/cleaners/lead-image-url.js","../node_modules/moment/moment.js","../node_modules/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js","../node_modules/moment-parseformat/lib/parseformat.js","../node_modules/moment-parseformat/index.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-headers.js","../src/utils/dom/remove-empty.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../node_modules/lodash/lodash.js","../node_modules/wuzzy/index.js","../src/cleaners/index.js","../src/cleaners/dek.js","../src/extractors/generic/content/extract-best-node.js","../src/utils/dom/strip-unlikely-candidates.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/utils/text/extract-from-url.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../node_modules/heap/lib/heap.js","../node_modules/difflib/lib/difflib.js","../node_modules/difflib/index.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/utils/dom/is-wordpress.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/utils/text/page-num-from-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../node_modules/ellipsize/index.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/generic/dek/extractor.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() {\n return this || (typeof self === \"object\" && self);\n})() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = require(\"./runtime\");\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n","module.exports = require(\"regenerator-runtime\");\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","var core = module.exports = { version: '2.6.2' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","require('../../modules/es6.object.get-own-property-descriptor');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key) {\n return $Object.getOwnPropertyDescriptor(it, key);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","module.exports = require('./_hide');\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","require('../../modules/es6.symbol');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertySymbols;\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n","var _Object$defineProperty = require(\"../core-js/object/define-property\");\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","var _Object$getOwnPropertyDescriptor = require(\"../core-js/object/get-own-property-descriptor\");\n\nvar _Object$getOwnPropertySymbols = require(\"../core-js/object/get-own-property-symbols\");\n\nvar _Object$keys = require(\"../core-js/object/keys\");\n\nvar defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n var ownKeys = _Object$keys(source);\n\n if (typeof _Object$getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(_Object$getOwnPropertySymbols(source).filter(function (sym) {\n return _Object$getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread;","var _Object$keys = require(\"../core-js/object/keys\");\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n\n var sourceKeys = _Object$keys(source);\n\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","var _Object$getOwnPropertySymbols = require(\"../core-js/object/get-own-property-symbols\");\n\nvar objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (_Object$getOwnPropertySymbols) {\n var sourceSymbolKeys = _Object$getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = true;\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","var _Promise = require(\"../core-js/promise\");\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n _Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new _Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","// This module attempts to square cheerio with jquery\n// so that node-specific quirks/features of cheerio\n// will also work in the browser. This mostly involves\n// shimming a few functions and rewriting the jquery\n// constructor so it sandboxes most of its operations\n// and doesn't mutate existing dom elements in the page.\n\nimport jQuery from 'jquery';\n\nconst PARSER_CLASS = 'mercury-parsing-container';\nlet PARSING_NODE;\n\njQuery.noConflict();\nconst $ = (selector, context, rootjQuery, contextOverride = true) => {\n if (contextOverride) {\n if (context && typeof context === 'string') {\n context = PARSING_NODE.find(context);\n } else if (!context) {\n context = PARSING_NODE;\n }\n }\n\n return new jQuery.fn.init(selector, context, rootjQuery); // eslint-disable-line new-cap\n};\n\n// eslint-disable-next-line no-multi-assign\n$.fn = $.prototype = jQuery.fn;\njQuery.extend($, jQuery); // copy's trim, extend etc to $\n\nconst removeUnusedTags = $node => {\n // remove scripts and stylesheets\n $node.find('script, style, link[rel=\"stylesheet\"]').remove();\n\n return $node;\n};\n\n$.cloneHtml = () => {\n const html = removeUnusedTags($('html', null, null, false).clone());\n\n return html\n .children()\n .wrap('<div />')\n .wrap('<div />');\n};\n\n$.root = () => $('*').first();\n\n$.browser = true;\n\nconst isContainer = $node => {\n const el = $node.get(0);\n if (el && el.tagName) {\n return el.tagName.toLowerCase() === 'container';\n }\n\n return false;\n};\n\n$.html = $node => {\n if ($node) {\n // we never want to return a parsing container, only its children\n if (isContainer($node) || isContainer($node.children('container'))) {\n return $node.children('container').html() || $node.html();\n }\n\n return $('<div>')\n .append($node.eq(0).clone())\n .html();\n }\n\n const $body = removeUnusedTags($('body', null, null, false).clone());\n const $head = removeUnusedTags($('head', null, null, false).clone());\n\n if (PARSING_NODE && PARSING_NODE.length > 0) {\n return PARSING_NODE.children().html();\n }\n\n const html = $('<container />')\n .append($(`<container>${$head.html()}</container>`))\n .append($(`<container>${$body.html()}</container>`))\n .wrap('<container />')\n .parent()\n .html();\n\n return html;\n};\n\n// eslint-disable-next-line no-unused-vars\n$.load = (html, opts = {}, returnHtml = false) => {\n if (!html) {\n html = $.cloneHtml();\n } else {\n html = $('<container />').html(html);\n }\n\n PARSING_NODE =\n PARSING_NODE || $(`<div class=\"${PARSER_CLASS}\" style=\"display:none;\" />`);\n\n // Strip scripts\n html = removeUnusedTags(html);\n\n // Remove comments\n html\n .find('*')\n .contents()\n .each(function() {\n // eslint-disable-next-line no-undef\n if (this.nodeType === Node.COMMENT_NODE) {\n $(this).remove();\n }\n });\n PARSING_NODE.html(html);\n\n if (returnHtml) return { $, html: html.html() };\n\n return $;\n};\n\nexport default $;\n","/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(C,e){\"use strict\";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType&&\"function\"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement(\"script\");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[o.call(e)]||\"object\":typeof e}var f=\"3.6.0\",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&\"length\"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),\"function\"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S=\"sizzle\"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+M+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",F=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",B=new RegExp(M+\"+\",\"g\"),$=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),U=new RegExp(M+\"|>\"),X=new RegExp(F),V=new RegExp(\"^\"+I+\"$\"),G={ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+F),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+M+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),ne=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+\" \"]&&(!v||!v.test(t))&&(1!==p||\"object\"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute(\"id\"))?s=s.replace(re,ie):e.setAttribute(\"id\",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?\"#\"+s:\":scope\")+\" \"+xe(l[o]);c=l.join(\",\")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute(\"id\")}}}return g(t.replace($,\"$1\"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split(\"|\"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return(\"input\"===t||\"button\"===t)&&e.type===n}}function ge(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||\"HTML\")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",oe,!1):n.attachEvent&&n.attachEvent(\"onunload\",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement(\"div\")),\"undefined\"!=typeof e.querySelectorAll&&!e.querySelectorAll(\":scope fieldset div\").length}),d.attributes=ce(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML=\"<a id='\"+S+\"'></a><select id='\"+S+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+M+\"*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~=\"+S+\"-]\").length||v.push(\"~=\"),(t=C.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||v.push(\"\\\\[\"+M+\"*name\"+M+\"*=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+S+\"+*\").length||v.push(\".#.+[+~]\"),e.querySelectorAll(\"\\\\\\f\"),v.push(\"[\\\\r\\\\n\\\\f]\")}),ce(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=C.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,\"*\"),c.call(e,\"[s!='']:x\"),s.push(\"!=\",F)}),v=v.length&&new RegExp(v.join(\"|\")),s=s.length&&new RegExp(s.join(\"|\")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+\" \"]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&m(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(B,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[S]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,\"$1\"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace($,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split(\"\").sort(j).join(\"\")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[\":\"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,\"parentNode\")},parentsUntil:function(e,t,n){return h(e,\"parentNode\",n)},next:function(e){return O(e,\"nextSibling\")},prev:function(e){return O(e,\"previousSibling\")},nextAll:function(e){return h(e,\"nextSibling\")},prevAll:function(e){return h(e,\"previousSibling\")},nextUntil:function(e,t,n){return h(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return h(e,\"previousSibling\",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,\"template\")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",S.Callbacks(\"memory\"),S.Callbacks(\"memory\"),2],[\"resolve\",\"done\",S.Callbacks(\"once memory\"),S.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",S.Callbacks(\"once memory\"),S.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),S.ready()}S.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,\"ms-\").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(K,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks(\"once memory\").add(function(){Y.remove(e,[t+\"queue\",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Y.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,te=new RegExp(\"^(?:([+-])=|)(\"+ee+\")([a-z%]*)$\",\"i\"),ne=[\"Top\",\"Right\",\"Bottom\",\"Left\"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&ie(e)&&\"none\"===S.css(e,\"display\")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,\"\")},u=s(),l=n&&n[3]||(S.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(S.cssNumber[t]||\"px\"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Y.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ue[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Y.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(fe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),fe.setAttribute(\"checked\",\"checked\"),fe.setAttribute(\"name\",\"t\"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML=\"<textarea>x</textarea>\",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML=\"<option></option>\",y.option=!!ce.lastChild;var ge={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ve(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],\"globalEval\",!t||Y.get(t[n],\"globalEval\"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}var be=/^([^.]*)(?:\\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==(\"focus\"===t)}function Ee(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(P)||[\"\"]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(P)||[\"\"]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,\"events\")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Se(t,\"click\",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Se(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Y.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ne=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function je(e,t){return A(e,\"table\")&&A(11!==t.nodeType?t:t.firstChild,\"tr\")&&S(e).children(\"tbody\")[0]||e}function De(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function qe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,\"handle events\"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,\"script\"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Y.access(u,\"globalEval\")&&S.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")},l):b(u.textContent.replace(Ne,\"\"),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp(\"^(\"+ee+\")(?!px)[a-z%]+$\",\"i\"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join(\"|\"),\"i\");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",l.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n=\"1%\"!==e.top,s=12===t(e.marginLeft),l.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),l.style.position=\"absolute\",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement(\"div\"),l=E.createElement(\"div\");l.style&&(l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement(\"table\"),t=E.createElement(\"tr\"),n=E.createElement(\"div\"),e.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",t.style.cssText=\"border:1px solid\",t.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=[\"Webkit\",\"Moz\",\"ms\"],$e=E.createElement(\"div\").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ge={letterSpacing:\"0\",fontWeight:\"400\"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Qe(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?(\"content\"===n&&(u-=S.css(e,\"padding\"+ne[a],!0,i)),\"margin\"!==n&&(u-=S.css(e,\"border\"+ne[a]+\"Width\",!0,i))):(u+=S.css(e,\"padding\"+ne[a],!0,i),\"padding\"!==n?u+=S.css(e,\"border\"+ne[a]+\"Width\",!0,i):s+=S.css(e,\"border\"+ne[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===S.css(e,\"boxSizing\",!1,r),o=i,a=We(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,\"tr\")||\"auto\"===a||!parseFloat(a)&&\"inline\"===S.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===S.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),\"normal\"===i&&t in Ge&&(i=Ge[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each([\"height\",\"width\"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===S.css(e,\"boxSizing\",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,\"border\",!1,i)-.5)),s&&(r=te.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,\"marginLeft\"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),S.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?\"\":\"px\")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=ne[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,\"fxshow\");for(r in n.queue||(null==(a=S._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,\"display\")),\"none\"===(c=S.css(e,\"display\"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,\"display\"),le([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===S.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Y.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,\"fxshow\"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&\"object\"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Y.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st(\"show\"),slideUp:st(\"hide\"),slideToggle:st(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement(\"input\"),nt=E.createElement(\"select\").appendChild(E.createElement(\"option\")),tt.type=\"checkbox\",y.checkOn=\"\"!==tt.value,y.optSelected=nt.selected,(tt=E.createElement(\"input\")).value=\"t\",tt.type=\"radio\",y.radioValue=\"t\"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(\" \")}function gt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function vt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,\"tabindex\");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&\" \"+ht(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=ht(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&\" \"+ht(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=ht(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=gt(this))&&Y.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Y.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+ht(gt(n))+\" \").indexOf(t))return!0;return!1}});var yt=/\\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?\"\":e+\"\"})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(yt,\"\"):null==e?\"\":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,\"value\");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each([\"radio\",\"checkbox\"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[S.expando]?e:new S.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,\"events\")||Object.create(null))[e.type]&&Y.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\\?/;S.parseXML=function(e){var t,n;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){}return n=t&&t.getElementsByTagName(\"parsererror\")[0],t&&!n||S.error(\"Invalid XML: \"+(n?S.map(n.childNodes,function(e){return e.textContent}).join(\"\\n\"):e)),t};var Ct=/\\[\\]$/,Et=/\\r?\\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)At(n+\"[\"+t+\"]\",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join(\"&\")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,\"elements\");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(\":disabled\")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,\"\\r\\n\")}}):{name:t.name,value:n.replace(Et,\"\\r\\n\")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\\/\\//,Ot={},Pt={},Rt=\"*/\".concat(\"*\"),Mt=E.createElement(\"a\");function It(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Rt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+\"\").replace(Ht,bt.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(P)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+\"//\"+Mt.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Nt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(Tt.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,\"$1\"),o=(Tt.test(f)?\"&\":\"?\")+\"_=\"+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",S.lastModified[f]),S.etag[f]&&T.setRequestHeader(\"If-None-Match\",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+Rt+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray(\"script\",v.dataTypes)&&S.inArray(\"json\",v.dataTypes)<0&&(v.converters[\"text script\"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(S.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(S.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--S.active||S.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,\"json\")},getScript:function(e,t){return S.get(e,void 0,t,\"script\")}}),S.each([\"get\",\"post\"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&\"withCredentials\"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),S.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\\?(?=&|$)|\\?\\?/;S.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=zt.pop()||S.expando+\"_\"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ut.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,\"$1\"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||S.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),\"script\"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&S.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?S(\"<div>\").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,\"position\"),c=S(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=S.css(e,\"top\"),u=S.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===S.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===S.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,\"borderTopWidth\",!0),i.left+=S.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-S.css(r,\"marginTop\",!0),left:t.left-i.left-S.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===S.css(e,\"position\"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each([\"top\",\"left\"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+\"px\":t})}),S.each({Height:\"height\",Width:\"width\"},function(a,s){S.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?\"\":(e+\"\").replace(Xt,\"\")},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},\"undefined\"==typeof e&&(C.jQuery=C.$=S),S});\n","function extend (destination) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (source.hasOwnProperty(key)) destination[key] = source[key];\n }\n }\n return destination\n}\n\nfunction repeat (character, count) {\n return Array(count + 1).join(character)\n}\n\nfunction trimLeadingNewlines (string) {\n return string.replace(/^\\n*/, '')\n}\n\nfunction trimTrailingNewlines (string) {\n // avoid match-at-end regexp bottleneck, see #370\n var indexEnd = string.length;\n while (indexEnd > 0 && string[indexEnd - 1] === '\\n') indexEnd--;\n return string.substring(0, indexEnd)\n}\n\nvar blockElements = [\n 'ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS',\n 'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE',\n 'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER',\n 'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES',\n 'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD',\n 'TFOOT', 'TH', 'THEAD', 'TR', 'UL'\n];\n\nfunction isBlock (node) {\n return is(node, blockElements)\n}\n\nvar voidElements = [\n 'AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT',\n 'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'\n];\n\nfunction isVoid (node) {\n return is(node, voidElements)\n}\n\nfunction hasVoid (node) {\n return has(node, voidElements)\n}\n\nvar meaningfulWhenBlankElements = [\n 'A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT',\n 'AUDIO', 'VIDEO'\n];\n\nfunction isMeaningfulWhenBlank (node) {\n return is(node, meaningfulWhenBlankElements)\n}\n\nfunction hasMeaningfulWhenBlank (node) {\n return has(node, meaningfulWhenBlankElements)\n}\n\nfunction is (node, tagNames) {\n return tagNames.indexOf(node.nodeName) >= 0\n}\n\nfunction has (node, tagNames) {\n return (\n node.getElementsByTagName &&\n tagNames.some(function (tagName) {\n return node.getElementsByTagName(tagName).length\n })\n )\n}\n\nvar rules = {};\n\nrules.paragraph = {\n filter: 'p',\n\n replacement: function (content) {\n return '\\n\\n' + content + '\\n\\n'\n }\n};\n\nrules.lineBreak = {\n filter: 'br',\n\n replacement: function (content, node, options) {\n return options.br + '\\n'\n }\n};\n\nrules.heading = {\n filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n replacement: function (content, node, options) {\n var hLevel = Number(node.nodeName.charAt(1));\n\n if (options.headingStyle === 'setext' && hLevel < 3) {\n var underline = repeat((hLevel === 1 ? '=' : '-'), content.length);\n return (\n '\\n\\n' + content + '\\n' + underline + '\\n\\n'\n )\n } else {\n return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n'\n }\n }\n};\n\nrules.blockquote = {\n filter: 'blockquote',\n\n replacement: function (content) {\n content = content.replace(/^\\n+|\\n+$/g, '');\n content = content.replace(/^/gm, '> ');\n return '\\n\\n' + content + '\\n\\n'\n }\n};\n\nrules.list = {\n filter: ['ul', 'ol'],\n\n replacement: function (content, node) {\n var parent = node.parentNode;\n if (parent.nodeName === 'LI' && parent.lastElementChild === node) {\n return '\\n' + content\n } else {\n return '\\n\\n' + content + '\\n\\n'\n }\n }\n};\n\nrules.listItem = {\n filter: 'li',\n\n replacement: function (content, node, options) {\n content = content\n .replace(/^\\n+/, '') // remove leading newlines\n .replace(/\\n+$/, '\\n') // replace trailing newlines with just a single one\n .replace(/\\n/gm, '\\n '); // indent\n var prefix = options.bulletListMarker + ' ';\n var parent = node.parentNode;\n if (parent.nodeName === 'OL') {\n var start = parent.getAttribute('start');\n var index = Array.prototype.indexOf.call(parent.children, node);\n prefix = (start ? Number(start) + index : index + 1) + '. ';\n }\n return (\n prefix + content + (node.nextSibling && !/\\n$/.test(content) ? '\\n' : '')\n )\n }\n};\n\nrules.indentedCodeBlock = {\n filter: function (node, options) {\n return (\n options.codeBlockStyle === 'indented' &&\n node.nodeName === 'PRE' &&\n node.firstChild &&\n node.firstChild.nodeName === 'CODE'\n )\n },\n\n replacement: function (content, node, options) {\n return (\n '\\n\\n ' +\n node.firstChild.textContent.replace(/\\n/g, '\\n ') +\n '\\n\\n'\n )\n }\n};\n\nrules.fencedCodeBlock = {\n filter: function (node, options) {\n return (\n options.codeBlockStyle === 'fenced' &&\n node.nodeName === 'PRE' &&\n node.firstChild &&\n node.firstChild.nodeName === 'CODE'\n )\n },\n\n replacement: function (content, node, options) {\n var className = node.firstChild.getAttribute('class') || '';\n var language = (className.match(/language-(\\S+)/) || [null, ''])[1];\n var code = node.firstChild.textContent;\n\n var fenceChar = options.fence.charAt(0);\n var fenceSize = 3;\n var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n\n var match;\n while ((match = fenceInCodeRegex.exec(code))) {\n if (match[0].length >= fenceSize) {\n fenceSize = match[0].length + 1;\n }\n }\n\n var fence = repeat(fenceChar, fenceSize);\n\n return (\n '\\n\\n' + fence + language + '\\n' +\n code.replace(/\\n$/, '') +\n '\\n' + fence + '\\n\\n'\n )\n }\n};\n\nrules.horizontalRule = {\n filter: 'hr',\n\n replacement: function (content, node, options) {\n return '\\n\\n' + options.hr + '\\n\\n'\n }\n};\n\nrules.inlineLink = {\n filter: function (node, options) {\n return (\n options.linkStyle === 'inlined' &&\n node.nodeName === 'A' &&\n node.getAttribute('href')\n )\n },\n\n replacement: function (content, node) {\n var href = node.getAttribute('href');\n var title = cleanAttribute(node.getAttribute('title'));\n if (title) title = ' \"' + title + '\"';\n return '[' + content + '](' + href + title + ')'\n }\n};\n\nrules.referenceLink = {\n filter: function (node, options) {\n return (\n options.linkStyle === 'referenced' &&\n node.nodeName === 'A' &&\n node.getAttribute('href')\n )\n },\n\n replacement: function (content, node, options) {\n var href = node.getAttribute('href');\n var title = cleanAttribute(node.getAttribute('title'));\n if (title) title = ' \"' + title + '\"';\n var replacement;\n var reference;\n\n switch (options.linkReferenceStyle) {\n case 'collapsed':\n replacement = '[' + content + '][]';\n reference = '[' + content + ']: ' + href + title;\n break\n case 'shortcut':\n replacement = '[' + content + ']';\n reference = '[' + content + ']: ' + href + title;\n break\n default:\n var id = this.references.length + 1;\n replacement = '[' + content + '][' + id + ']';\n reference = '[' + id + ']: ' + href + title;\n }\n\n this.references.push(reference);\n return replacement\n },\n\n references: [],\n\n append: function (options) {\n var references = '';\n if (this.references.length) {\n references = '\\n\\n' + this.references.join('\\n') + '\\n\\n';\n this.references = []; // Reset references\n }\n return references\n }\n};\n\nrules.emphasis = {\n filter: ['em', 'i'],\n\n replacement: function (content, node, options) {\n if (!content.trim()) return ''\n return options.emDelimiter + content + options.emDelimiter\n }\n};\n\nrules.strong = {\n filter: ['strong', 'b'],\n\n replacement: function (content, node, options) {\n if (!content.trim()) return ''\n return options.strongDelimiter + content + options.strongDelimiter\n }\n};\n\nrules.code = {\n filter: function (node) {\n var hasSiblings = node.previousSibling || node.nextSibling;\n var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n\n return node.nodeName === 'CODE' && !isCodeBlock\n },\n\n replacement: function (content) {\n if (!content) return ''\n content = content.replace(/\\r?\\n|\\r/g, ' ');\n\n var extraSpace = /^`|^ .*?[^ ].* $|`$/.test(content) ? ' ' : '';\n var delimiter = '`';\n var matches = content.match(/`+/gm) || [];\n while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n\n return delimiter + extraSpace + content + extraSpace + delimiter\n }\n};\n\nrules.image = {\n filter: 'img',\n\n replacement: function (content, node) {\n var alt = cleanAttribute(node.getAttribute('alt'));\n var src = node.getAttribute('src') || '';\n var title = cleanAttribute(node.getAttribute('title'));\n var titlePart = title ? ' \"' + title + '\"' : '';\n return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''\n }\n};\n\nfunction cleanAttribute (attribute) {\n return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : ''\n}\n\n/**\n * Manages a collection of rules used to convert HTML to Markdown\n */\n\nfunction Rules (options) {\n this.options = options;\n this._keep = [];\n this._remove = [];\n\n this.blankRule = {\n replacement: options.blankReplacement\n };\n\n this.keepReplacement = options.keepReplacement;\n\n this.defaultRule = {\n replacement: options.defaultReplacement\n };\n\n this.array = [];\n for (var key in options.rules) this.array.push(options.rules[key]);\n}\n\nRules.prototype = {\n add: function (key, rule) {\n this.array.unshift(rule);\n },\n\n keep: function (filter) {\n this._keep.unshift({\n filter: filter,\n replacement: this.keepReplacement\n });\n },\n\n remove: function (filter) {\n this._remove.unshift({\n filter: filter,\n replacement: function () {\n return ''\n }\n });\n },\n\n forNode: function (node) {\n if (node.isBlank) return this.blankRule\n var rule;\n\n if ((rule = findRule(this.array, node, this.options))) return rule\n if ((rule = findRule(this._keep, node, this.options))) return rule\n if ((rule = findRule(this._remove, node, this.options))) return rule\n\n return this.defaultRule\n },\n\n forEach: function (fn) {\n for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\n }\n};\n\nfunction findRule (rules, node, options) {\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (filterValue(rule, node, options)) return rule\n }\n return void 0\n}\n\nfunction filterValue (rule, node, options) {\n var filter = rule.filter;\n if (typeof filter === 'string') {\n if (filter === node.nodeName.toLowerCase()) return true\n } else if (Array.isArray(filter)) {\n if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true\n } else if (typeof filter === 'function') {\n if (filter.call(rule, node, options)) return true\n } else {\n throw new TypeError('`filter` needs to be a string, array, or function')\n }\n}\n\n/**\n * The collapseWhitespace function is adapted from collapse-whitespace\n * by Luc Thevenard.\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014 Luc Thevenard <lucthevenard@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * collapseWhitespace(options) removes extraneous whitespace from an the given element.\n *\n * @param {Object} options\n */\nfunction collapseWhitespace (options) {\n var element = options.element;\n var isBlock = options.isBlock;\n var isVoid = options.isVoid;\n var isPre = options.isPre || function (node) {\n return node.nodeName === 'PRE'\n };\n\n if (!element.firstChild || isPre(element)) return\n\n var prevText = null;\n var keepLeadingWs = false;\n\n var prev = null;\n var node = next(prev, element, isPre);\n\n while (node !== element) {\n if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n\n if ((!prevText || / $/.test(prevText.data)) &&\n !keepLeadingWs && text[0] === ' ') {\n text = text.substr(1);\n }\n\n // `text` might be empty at this point.\n if (!text) {\n node = remove(node);\n continue\n }\n\n node.data = text;\n\n prevText = node;\n } else if (node.nodeType === 1) { // Node.ELEMENT_NODE\n if (isBlock(node) || node.nodeName === 'BR') {\n if (prevText) {\n prevText.data = prevText.data.replace(/ $/, '');\n }\n\n prevText = null;\n keepLeadingWs = false;\n } else if (isVoid(node) || isPre(node)) {\n // Avoid trimming space around non-block, non-BR void elements and inline PRE.\n prevText = null;\n keepLeadingWs = true;\n } else if (prevText) {\n // Drop protection if set previously.\n keepLeadingWs = false;\n }\n } else {\n node = remove(node);\n continue\n }\n\n var nextNode = next(prev, node, isPre);\n prev = node;\n node = nextNode;\n }\n\n if (prevText) {\n prevText.data = prevText.data.replace(/ $/, '');\n if (!prevText.data) {\n remove(prevText);\n }\n }\n}\n\n/**\n * remove(node) removes the given node from the DOM and returns the\n * next node in the sequence.\n *\n * @param {Node} node\n * @return {Node} node\n */\nfunction remove (node) {\n var next = node.nextSibling || node.parentNode;\n\n node.parentNode.removeChild(node);\n\n return next\n}\n\n/**\n * next(prev, current, isPre) returns the next node in the sequence, given the\n * current and previous nodes.\n *\n * @param {Node} prev\n * @param {Node} current\n * @param {Function} isPre\n * @return {Node}\n */\nfunction next (prev, current, isPre) {\n if ((prev && prev.parentNode === current) || isPre(current)) {\n return current.nextSibling || current.parentNode\n }\n\n return current.firstChild || current.nextSibling || current.parentNode\n}\n\n/*\n * Set up window for Node.js\n */\n\nvar root = (typeof window !== 'undefined' ? window : {});\n\n/*\n * Parsing HTML strings\n */\n\nfunction canParseHTMLNatively () {\n var Parser = root.DOMParser;\n var canParse = false;\n\n // Adapted from https://gist.github.com/1129031\n // Firefox/Opera/IE throw errors on unsupported types\n try {\n // WebKit returns null on unsupported types\n if (new Parser().parseFromString('', 'text/html')) {\n canParse = true;\n }\n } catch (e) {}\n\n return canParse\n}\n\nfunction createHTMLParser () {\n var Parser = function () {};\n\n {\n if (shouldUseActiveX()) {\n Parser.prototype.parseFromString = function (string) {\n var doc = new window.ActiveXObject('htmlfile');\n doc.designMode = 'on'; // disable on-page scripts\n doc.open();\n doc.write(string);\n doc.close();\n return doc\n };\n } else {\n Parser.prototype.parseFromString = function (string) {\n var doc = document.implementation.createHTMLDocument('');\n doc.open();\n doc.write(string);\n doc.close();\n return doc\n };\n }\n }\n return Parser\n}\n\nfunction shouldUseActiveX () {\n var useActiveX = false;\n try {\n document.implementation.createHTMLDocument('').open();\n } catch (e) {\n if (window.ActiveXObject) useActiveX = true;\n }\n return useActiveX\n}\n\nvar HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser();\n\nfunction RootNode (input, options) {\n var root;\n if (typeof input === 'string') {\n var doc = htmlParser().parseFromString(\n // DOM parsers arrange elements in the <head> and <body>.\n // Wrapping in a custom element ensures elements are reliably arranged in\n // a single element.\n '<x-turndown id=\"turndown-root\">' + input + '</x-turndown>',\n 'text/html'\n );\n root = doc.getElementById('turndown-root');\n } else {\n root = input.cloneNode(true);\n }\n collapseWhitespace({\n element: root,\n isBlock: isBlock,\n isVoid: isVoid,\n isPre: options.preformattedCode ? isPreOrCode : null\n });\n\n return root\n}\n\nvar _htmlParser;\nfunction htmlParser () {\n _htmlParser = _htmlParser || new HTMLParser();\n return _htmlParser\n}\n\nfunction isPreOrCode (node) {\n return node.nodeName === 'PRE' || node.nodeName === 'CODE'\n}\n\nfunction Node (node, options) {\n node.isBlock = isBlock(node);\n node.isCode = node.nodeName === 'CODE' || node.parentNode.isCode;\n node.isBlank = isBlank(node);\n node.flankingWhitespace = flankingWhitespace(node, options);\n return node\n}\n\nfunction isBlank (node) {\n return (\n !isVoid(node) &&\n !isMeaningfulWhenBlank(node) &&\n /^\\s*$/i.test(node.textContent) &&\n !hasVoid(node) &&\n !hasMeaningfulWhenBlank(node)\n )\n}\n\nfunction flankingWhitespace (node, options) {\n if (node.isBlock || (options.preformattedCode && node.isCode)) {\n return { leading: '', trailing: '' }\n }\n\n var edges = edgeWhitespace(node.textContent);\n\n // abandon leading ASCII WS if left-flanked by ASCII WS\n if (edges.leadingAscii && isFlankedByWhitespace('left', node, options)) {\n edges.leading = edges.leadingNonAscii;\n }\n\n // abandon trailing ASCII WS if right-flanked by ASCII WS\n if (edges.trailingAscii && isFlankedByWhitespace('right', node, options)) {\n edges.trailing = edges.trailingNonAscii;\n }\n\n return { leading: edges.leading, trailing: edges.trailing }\n}\n\nfunction edgeWhitespace (string) {\n var m = string.match(/^(([ \\t\\r\\n]*)(\\s*))[\\s\\S]*?((\\s*?)([ \\t\\r\\n]*))$/);\n return {\n leading: m[1], // whole string for whitespace-only strings\n leadingAscii: m[2],\n leadingNonAscii: m[3],\n trailing: m[4], // empty for whitespace-only strings\n trailingNonAscii: m[5],\n trailingAscii: m[6]\n }\n}\n\nfunction isFlankedByWhitespace (side, node, options) {\n var sibling;\n var regExp;\n var isFlanked;\n\n if (side === 'left') {\n sibling = node.previousSibling;\n regExp = / $/;\n } else {\n sibling = node.nextSibling;\n regExp = /^ /;\n }\n\n if (sibling) {\n if (sibling.nodeType === 3) {\n isFlanked = regExp.test(sibling.nodeValue);\n } else if (options.preformattedCode && sibling.nodeName === 'CODE') {\n isFlanked = false;\n } else if (sibling.nodeType === 1 && !isBlock(sibling)) {\n isFlanked = regExp.test(sibling.textContent);\n }\n }\n return isFlanked\n}\n\nvar reduce = Array.prototype.reduce;\nvar escapes = [\n [/\\\\/g, '\\\\\\\\'],\n [/\\*/g, '\\\\*'],\n [/^-/g, '\\\\-'],\n [/^\\+ /g, '\\\\+ '],\n [/^(=+)/g, '\\\\$1'],\n [/^(#{1,6}) /g, '\\\\$1 '],\n [/`/g, '\\\\`'],\n [/^~~~/g, '\\\\~~~'],\n [/\\[/g, '\\\\['],\n [/\\]/g, '\\\\]'],\n [/^>/g, '\\\\>'],\n [/_/g, '\\\\_'],\n [/^(\\d+)\\. /g, '$1\\\\. ']\n];\n\nfunction TurndownService (options) {\n if (!(this instanceof TurndownService)) return new TurndownService(options)\n\n var defaults = {\n rules: rules,\n headingStyle: 'setext',\n hr: '* * *',\n bulletListMarker: '*',\n codeBlockStyle: 'indented',\n fence: '```',\n emDelimiter: '_',\n strongDelimiter: '**',\n linkStyle: 'inlined',\n linkReferenceStyle: 'full',\n br: ' ',\n preformattedCode: false,\n blankReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' : ''\n },\n keepReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' + node.outerHTML + '\\n\\n' : node.outerHTML\n },\n defaultReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' + content + '\\n\\n' : content\n }\n };\n this.options = extend({}, defaults, options);\n this.rules = new Rules(this.options);\n}\n\nTurndownService.prototype = {\n /**\n * The entry point for converting a string or DOM node to Markdown\n * @public\n * @param {String|HTMLElement} input The string or DOM node to convert\n * @returns A Markdown representation of the input\n * @type String\n */\n\n turndown: function (input) {\n if (!canConvert(input)) {\n throw new TypeError(\n input + ' is not a string, or an element/document/fragment node.'\n )\n }\n\n if (input === '') return ''\n\n var output = process.call(this, new RootNode(input, this.options));\n return postProcess.call(this, output)\n },\n\n /**\n * Add one or more plugins\n * @public\n * @param {Function|Array} plugin The plugin or array of plugins to add\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n use: function (plugin) {\n if (Array.isArray(plugin)) {\n for (var i = 0; i < plugin.length; i++) this.use(plugin[i]);\n } else if (typeof plugin === 'function') {\n plugin(this);\n } else {\n throw new TypeError('plugin must be a Function or an Array of Functions')\n }\n return this\n },\n\n /**\n * Adds a rule\n * @public\n * @param {String} key The unique key of the rule\n * @param {Object} rule The rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n addRule: function (key, rule) {\n this.rules.add(key, rule);\n return this\n },\n\n /**\n * Keep a node (as HTML) that matches the filter\n * @public\n * @param {String|Array|Function} filter The unique key of the rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n keep: function (filter) {\n this.rules.keep(filter);\n return this\n },\n\n /**\n * Remove a node that matches the filter\n * @public\n * @param {String|Array|Function} filter The unique key of the rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n remove: function (filter) {\n this.rules.remove(filter);\n return this\n },\n\n /**\n * Escapes Markdown syntax\n * @public\n * @param {String} string The string to escape\n * @returns A string with Markdown syntax escaped\n * @type String\n */\n\n escape: function (string) {\n return escapes.reduce(function (accumulator, escape) {\n return accumulator.replace(escape[0], escape[1])\n }, string)\n }\n};\n\n/**\n * Reduces a DOM node down to its Markdown string equivalent\n * @private\n * @param {HTMLElement} parentNode The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction process (parentNode) {\n var self = this;\n return reduce.call(parentNode.childNodes, function (output, node) {\n node = new Node(node, self.options);\n\n var replacement = '';\n if (node.nodeType === 3) {\n replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue);\n } else if (node.nodeType === 1) {\n replacement = replacementForNode.call(self, node);\n }\n\n return join(output, replacement)\n }, '')\n}\n\n/**\n * Appends strings as each rule requires and trims the output\n * @private\n * @param {String} output The conversion output\n * @returns A trimmed version of the ouput\n * @type String\n */\n\nfunction postProcess (output) {\n var self = this;\n this.rules.forEach(function (rule) {\n if (typeof rule.append === 'function') {\n output = join(output, rule.append(self.options));\n }\n });\n\n return output.replace(/^[\\t\\r\\n]+/, '').replace(/[\\t\\r\\n\\s]+$/, '')\n}\n\n/**\n * Converts an element node to its Markdown equivalent\n * @private\n * @param {HTMLElement} node The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction replacementForNode (node) {\n var rule = this.rules.forNode(node);\n var content = process.call(this, node);\n var whitespace = node.flankingWhitespace;\n if (whitespace.leading || whitespace.trailing) content = content.trim();\n return (\n whitespace.leading +\n rule.replacement(content, node, this.options) +\n whitespace.trailing\n )\n}\n\n/**\n * Joins replacement to the current output with appropriate number of new lines\n * @private\n * @param {String} output The current conversion output\n * @param {String} replacement The string to append to the output\n * @returns Joined output\n * @type String\n */\n\nfunction join (output, replacement) {\n var s1 = trimTrailingNewlines(output);\n var s2 = trimLeadingNewlines(replacement);\n var nls = Math.max(output.length - s1.length, replacement.length - s2.length);\n var separator = '\\n\\n'.substring(0, nls);\n\n return s1 + separator + s2\n}\n\n/**\n * Determines whether an input can be converted\n * @private\n * @param {String|HTMLElement} input Describe this parameter\n * @returns Describe what it returns\n * @type String|Object|Array|Boolean|Number\n */\n\nfunction canConvert (input) {\n return (\n input != null && (\n typeof input === 'string' ||\n (input.nodeType && (\n input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11\n ))\n )\n )\n}\n\nexport default TurndownService;\n","// this is a shim for the browser build;\n// iconv-lite doubles build size, and we\n// don't need it for already rendered text\nconst iconv = {\n encodingExists: () => false,\n decode: s => s,\n};\n\nexport default iconv;\n","const NORMALIZE_RE = /\\s{2,}(?![^<>]*<\\/(pre|code|textarea)>)/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","require('../modules/es6.parse-int');\nmodule.exports = require('../modules/_core').parseInt;\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","require('../../modules/es6.array.is-array');\nmodule.exports = require('../../modules/_core').Array.isArray;\n","var _Array$isArray = require(\"../core-js/array/is-array\");\n\nfunction _arrayWithHoles(arr) {\n if (_Array$isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n","var _getIterator = require(\"../core-js/get-iterator\");\n\nfunction _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = _getIterator(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path\n .split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content\n .trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n const matches = ENCODING_RE.exec(str);\n if (matches !== null) {\n [, str] = matches;\n }\n if (iconv.encodingExists(str)) {\n encoding = str;\n }\n return encoding;\n}\n","'use strict'\n\nmodule.exports = function (str) {\n var offset = 0\n str = str.toString()\n\n return iterator\n\n function iterator () {\n var i1 = str.indexOf('\\r\\n', offset)\n var i2 = str.indexOf('\\n', offset)\n var i3 = str.indexOf('\\r', offset)\n\n var indexes = [i1, i2, i3]\n var index = indexes\n .sort(function (a, b) {\n if (a > b) return 1\n if (a < b) return -1\n return 0\n })\n .filter(function (index) {\n return index !== -1\n })[0]\n\n if (index !== undefined) return extract(index, index === i1 ? 2 : 1)\n\n var length = str.length\n if (length === offset) return null\n\n return extract(length, 0)\n }\n\n function extract (index, skip) {\n var line = str.substr(offset, index - offset)\n offset = index + skip\n return line\n }\n}\n","'use strict'\n\nvar nextLine = require('next-line')\n\n// RFC-2068 Start-Line definitions:\n// Request-Line: Method SP Request-URI SP HTTP-Version CRLF\n// Status-Line: HTTP-Version SP Status-Code SP Reason-Phrase CRLF\nvar startLine = /^[A-Z_]+(\\/\\d\\.\\d)? /\nvar requestLine = /^([A-Z_]+) (.+) [A-Z]+\\/(\\d)\\.(\\d)$/\nvar statusLine = /^[A-Z]+\\/(\\d)\\.(\\d) (\\d{3}) (.*)$/\n\nmodule.exports = function (data, onlyHeaders) {\n return parse(normalize(data), onlyHeaders)\n}\n\nfunction parse (str, onlyHeaders) {\n var line = firstLine(str)\n var match\n\n if (onlyHeaders && startLine.test(line)) {\n return parseHeaders(str)\n } else if ((match = line.match(requestLine)) !== null) {\n return {\n method: match[1],\n url: match[2],\n version: { major: parseInt(match[3], 10), minor: parseInt(match[4], 10) },\n headers: parseHeaders(str)\n }\n } else if ((match = line.match(statusLine)) !== null) {\n return {\n version: { major: parseInt(match[1], 10), minor: parseInt(match[2], 10) },\n statusCode: parseInt(match[3], 10),\n statusMessage: match[4],\n headers: parseHeaders(str)\n }\n } else {\n return parseHeaders(str)\n }\n}\n\nfunction parseHeaders (str) {\n var headers = {}\n var next = nextLine(str)\n var line = next()\n var index, name, value\n\n if (startLine.test(line)) line = next()\n\n while (line) {\n // subsequent lines in multi-line headers start with whitespace\n if (line[0] === ' ' || line[0] === '\\t') {\n value += ' ' + line.trim()\n line = next()\n continue\n }\n\n if (name) addHeaderLine(name, value, headers)\n\n index = line.indexOf(':')\n name = line.substr(0, index)\n value = line.substr(index + 1).trim()\n\n line = next()\n }\n\n if (name) addHeaderLine(name, value, headers)\n\n return headers\n}\n\nfunction normalize (str) {\n if (str && str._header) str = str._header // extra headers from http.ServerResponse object\n if (!str || typeof str.toString !== 'function') return ''\n return str.toString().trim()\n}\n\nfunction firstLine (str) {\n var nl = str.indexOf('\\r\\n')\n if (nl === -1) return str\n else return str.slice(0, nl)\n}\n\n// The following function is lifted from:\n// https://github.com/nodejs/node/blob/f1294f5bfd7f02bce8029818be9c92de59749137/lib/_http_incoming.js#L116-L170\n//\n// Add the given (field, value) pair to the message\n//\n// Per RFC2616, section 4.2 it is acceptable to join multiple instances of the\n// same header with a ', ' if the header in question supports specification of\n// multiple values this way. If not, we declare the first instance the winner\n// and drop the second. Extended header fields (those beginning with 'x-') are\n// always joined.\nfunction addHeaderLine (field, value, dest) {\n field = field.toLowerCase()\n switch (field) {\n // Array headers:\n case 'set-cookie':\n if (dest[field] !== undefined) {\n dest[field].push(value)\n } else {\n dest[field] = [value]\n }\n break\n\n // list is taken from:\n // https://mxr.mozilla.org/mozilla/source/netwerk/protocol/http/src/nsHttpHeaderArray.cpp\n case 'content-type':\n case 'content-length':\n case 'user-agent':\n case 'referer':\n case 'host':\n case 'authorization':\n case 'proxy-authorization':\n case 'if-modified-since':\n case 'if-unmodified-since':\n case 'from':\n case 'location':\n case 'max-forwards':\n case 'retry-after':\n case 'etag':\n case 'last-modified':\n case 'server':\n case 'age':\n case 'expires':\n // drop duplicates\n if (dest[field] === undefined) dest[field] = value\n break\n\n default:\n // make comma-separated list\n if (typeof dest[field] === 'string') {\n dest[field] += ', ' + value\n } else {\n dest[field] = value\n }\n }\n}\n","// Browser Request\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nvar httpHeaders = require('http-headers')\nvar XHR = XMLHttpRequest\nif (!XHR) throw new Error('missing XMLHttpRequest')\nrequest.log = {\n 'trace': noop, 'debug': noop, 'info': noop, 'warn': noop, 'error': noop\n}\n\nvar DEFAULT_TIMEOUT = 3 * 60 * 1000 // 3 minutes\n\n//\n// request\n//\n\nfunction request(options, callback) {\n // The entry-point to the API: prep the options object and pass the real work to run_xhr.\n if(typeof callback !== 'function')\n throw new Error('Bad callback given: ' + callback)\n\n if(!options)\n throw new Error('No options given')\n\n var options_onResponse = options.onResponse // Save this for later.\n\n if(typeof options === 'string')\n options = {'uri':options}\n else\n options = JSON.parse(JSON.stringify(options)) // Use a duplicate for mutating.\n\n options.onResponse = options_onResponse // And put it back.\n\n if (options.verbose) request.log = getLogger()\n\n if(options.url) {\n options.uri = options.url\n delete options.url\n }\n\n if(!options.uri && options.uri !== \"\")\n throw new Error(\"options.uri is a required argument\")\n\n if(typeof options.uri != \"string\")\n throw new Error(\"options.uri must be a string\")\n\n var unsupported_options = ['proxy', '_redirectsFollowed', 'maxRedirects', 'followRedirect']\n for (var i = 0; i < unsupported_options.length; i++)\n if(options[ unsupported_options[i] ])\n throw new Error(\"options.\" + unsupported_options[i] + \" is not supported\")\n\n options.callback = callback\n options.method = options.method || 'GET'\n options.headers = options.headers || {}\n options.body = options.body || null\n options.timeout = options.timeout || request.DEFAULT_TIMEOUT\n\n if(options.headers.host)\n throw new Error(\"Options.headers.host is not supported\")\n\n if(options.json) {\n options.headers.accept = options.headers.accept || 'application/json'\n if(options.method !== 'GET')\n options.headers['content-type'] = 'application/json'\n\n if(typeof options.json !== 'boolean')\n options.body = JSON.stringify(options.json)\n else if(typeof options.body !== 'string')\n options.body = JSON.stringify(options.body)\n }\n\n //BEGIN QS Hack\n var serialize = function(obj) {\n var str = []\n for(var p in obj)\n if (obj.hasOwnProperty(p)) {\n str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]))\n }\n return str.join(\"&\")\n }\n\n if(options.qs){\n var qs = (typeof options.qs == 'string')? options.qs : serialize(options.qs)\n if(options.uri.indexOf('?') !== -1){ //no get params\n options.uri = options.uri+'&'+qs\n }else{ //existing get params\n options.uri = options.uri+'?'+qs\n }\n }\n //END QS Hack\n\n //BEGIN FORM Hack\n var multipart = function(obj) {\n //todo: support file type (useful?)\n var result = {}\n result.boundry = '-------------------------------'+Math.floor(Math.random()*1000000000)\n var lines = []\n for(var p in obj){\n if (obj.hasOwnProperty(p)) {\n lines.push(\n '--'+result.boundry+\"\\n\"+\n 'Content-Disposition: form-data; name=\"'+p+'\"'+\"\\n\"+\n \"\\n\"+\n obj[p]+\"\\n\"\n )\n }\n }\n lines.push( '--'+result.boundry+'--' )\n result.body = lines.join('')\n result.length = result.body.length\n result.type = 'multipart/form-data; boundary='+result.boundry\n return result\n }\n\n if(options.form){\n if(typeof options.form == 'string') throw('form name unsupported')\n if(options.method === 'POST'){\n var encoding = (options.encoding || 'application/x-www-form-urlencoded').toLowerCase()\n options.headers['content-type'] = encoding\n switch(encoding){\n case 'application/x-www-form-urlencoded':\n options.body = serialize(options.form).replace(/%20/g, \"+\")\n break\n case 'multipart/form-data':\n var multi = multipart(options.form)\n //options.headers['content-length'] = multi.length;\n options.body = multi.body\n options.headers['content-type'] = multi.type\n break\n default : throw new Error('unsupported encoding:'+encoding)\n }\n }\n }\n //END FORM Hack\n\n // If onResponse is boolean true, call back immediately when the response is known,\n // not when the full request is complete.\n options.onResponse = options.onResponse || noop\n if(options.onResponse === true) {\n options.onResponse = callback\n options.callback = noop\n }\n\n // XXX Browsers do not like this.\n //if(options.body)\n // options.headers['content-length'] = options.body.length;\n\n // HTTP basic authentication\n if(!options.headers.authorization && options.auth)\n options.headers.authorization = 'Basic ' + b64_enc(options.auth.username + ':' + options.auth.password)\n\n return run_xhr(options)\n}\n\nvar req_seq = 0\nfunction run_xhr(options) {\n var xhr = new XHR\n , timed_out = false\n , is_cors = is_crossDomain(options.uri)\n , supports_cors = ('withCredentials' in xhr)\n\n req_seq += 1\n xhr.seq_id = req_seq\n xhr.id = req_seq + ': ' + options.method + ' ' + options.uri\n xhr._id = xhr.id // I know I will type \"_id\" from habit all the time.\n\n if(is_cors && !supports_cors) {\n var cors_err = new Error('Browser does not support cross-origin request: ' + options.uri)\n cors_err.cors = 'unsupported'\n return options.callback(cors_err, xhr)\n }\n\n xhr.timeoutTimer = setTimeout(too_late, options.timeout)\n function too_late() {\n timed_out = true\n var er = new Error('ETIMEDOUT')\n er.code = 'ETIMEDOUT'\n er.duration = options.timeout\n\n request.log.error('Timeout', { 'id':xhr._id, 'milliseconds':options.timeout })\n return options.callback(er, xhr)\n }\n\n // Some states can be skipped over, so remember what is still incomplete.\n var did = {'response':false, 'loading':false, 'end':false}\n\n xhr.onreadystatechange = on_state_change\n xhr.open(options.method, options.uri, true) // asynchronous\n if(is_cors)\n xhr.withCredentials = !! options.withCredentials\n xhr.send(options.body)\n return xhr\n\n function on_state_change(event) {\n if(timed_out)\n return request.log.debug('Ignoring timed out state change', {'state':xhr.readyState, 'id':xhr.id})\n\n request.log.debug('State change', {'state':xhr.readyState, 'id':xhr.id, 'timed_out':timed_out})\n\n if(xhr.readyState === XHR.OPENED) {\n request.log.debug('Request started', {'id':xhr.id})\n for (var key in options.headers)\n xhr.setRequestHeader(key, options.headers[key])\n }\n\n else if(xhr.readyState === XHR.HEADERS_RECEIVED)\n on_response()\n\n else if(xhr.readyState === XHR.LOADING) {\n on_response()\n on_loading()\n }\n\n else if(xhr.readyState === XHR.DONE) {\n on_response()\n on_loading()\n on_end()\n }\n }\n\n function on_response() {\n if(did.response)\n return\n\n did.response = true\n request.log.debug('Got response', {'id':xhr.id, 'status':xhr.status})\n clearTimeout(xhr.timeoutTimer)\n xhr.statusCode = xhr.status // Node request compatibility\n\n // Detect failed CORS requests.\n if(is_cors && xhr.statusCode == 0) {\n var cors_err = new Error('CORS request rejected: ' + options.uri)\n cors_err.cors = 'rejected'\n\n // Do not process this request further.\n did.loading = true\n did.end = true\n\n return options.callback(cors_err, xhr)\n }\n\n options.onResponse(null, xhr)\n }\n\n function on_loading() {\n if(did.loading)\n return\n\n did.loading = true\n request.log.debug('Response body loading', {'id':xhr.id})\n // TODO: Maybe simulate \"data\" events by watching xhr.responseText\n }\n\n function on_end() {\n if(did.end)\n return\n\n did.end = true\n request.log.debug('Request done', {'id':xhr.id})\n\n xhr.body = xhr.responseText\n xhr.headers = httpHeaders(xhr.getAllResponseHeaders())\n if(options.json) {\n try { xhr.body = JSON.parse(xhr.responseText) }\n catch (er) { return options.callback(er, xhr) }\n }\n\n options.callback(null, xhr, xhr.body)\n }\n\n} // request\n\nrequest.withCredentials = false\nrequest.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT\n\n//\n// defaults\n//\n\nrequest.defaults = function(options, requester) {\n var def = function (method) {\n var d = function (params, callback) {\n if(typeof params === 'string')\n params = {'uri': params}\n else {\n params = JSON.parse(JSON.stringify(params))\n }\n for (var i in options) {\n if (params[i] === undefined) params[i] = options[i]\n }\n return method(params, callback)\n }\n return d\n }\n var de = def(request)\n de.get = def(request.get)\n de.post = def(request.post)\n de.put = def(request.put)\n de.head = def(request.head)\n return de\n}\n\n//\n// HTTP method shortcuts\n//\n\nvar shortcuts = [ 'get', 'put', 'post', 'head' ]\nshortcuts.forEach(function(shortcut) {\n var method = shortcut.toUpperCase()\n var func = shortcut.toLowerCase()\n\n request[func] = function(opts) {\n if(typeof opts === 'string')\n opts = {'method':method, 'uri':opts}\n else {\n opts = JSON.parse(JSON.stringify(opts))\n opts.method = method\n }\n\n var args = [opts].concat(Array.prototype.slice.apply(arguments, [1]))\n return request.apply(this, args)\n }\n})\n\n//\n// CouchDB shortcut\n//\n\nrequest.couch = function(options, callback) {\n if(typeof options === 'string')\n options = {'uri':options}\n\n // Just use the request API to do JSON.\n options.json = true\n if(options.body)\n options.json = options.body\n delete options.body\n\n callback = callback || noop\n\n var xhr = request(options, couch_handler)\n return xhr\n\n function couch_handler(er, resp, body) {\n if(er)\n return callback(er, resp, body)\n\n if((resp.statusCode < 200 || resp.statusCode > 299) && body.error) {\n // The body is a Couch JSON object indicating the error.\n er = new Error('CouchDB error: ' + (body.error.reason || body.error.error))\n for (var key in body)\n er[key] = body[key]\n return callback(er, resp, body)\n }\n\n return callback(er, resp, body)\n }\n}\n\n//\n// Utility\n//\n\nfunction noop() {}\n\nfunction getLogger() {\n var logger = {}\n , levels = ['trace', 'debug', 'info', 'warn', 'error']\n , level, i\n\n for(i = 0; i < levels.length; i++) {\n level = levels[i]\n\n logger[level] = noop\n if(typeof console !== 'undefined' && console && console[level])\n logger[level] = formatted(console, level)\n }\n\n return logger\n}\n\nfunction formatted(obj, method) {\n return formatted_logger\n\n function formatted_logger(str, context) {\n if(typeof context === 'object')\n str += ' ' + JSON.stringify(context)\n\n return obj[method].call(obj, str)\n }\n}\n\n// Return whether a URL is a cross-domain request.\nfunction is_crossDomain(url) {\n var rurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/\n\n // jQuery #8138, IE may throw an exception when accessing\n // a field from window.location if document.domain has been set\n var ajaxLocation\n try { ajaxLocation = location.href }\n catch (e) {\n // Use the href attribute of an A element since IE will modify it given document.location\n ajaxLocation = document.createElement( \"a\" )\n ajaxLocation.href = \"\"\n ajaxLocation = ajaxLocation.href\n }\n\n var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []\n , parts = rurl.exec(url.toLowerCase() )\n\n var result = !!(\n parts &&\n ( parts[1] != ajaxLocParts[1]\n || parts[2] != ajaxLocParts[2]\n || (parts[3] || (parts[1] === \"http:\" ? 80 : 443)) != (ajaxLocParts[3] || (ajaxLocParts[1] === \"http:\" ? 80 : 443))\n )\n )\n\n //console.debug('is_crossDomain('+url+') -> ' + result)\n return result\n}\n\n// MIT License from http://phpjs.org/functions/base64_encode:358\nfunction b64_enc (data) {\n // Encodes string using MIME base64 algorithm\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc=\"\", tmp_arr = []\n\n if (!data) {\n return data\n }\n\n // assume utf8 data\n // data = this.utf8_encode(data+'');\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++)\n o2 = data.charCodeAt(i++)\n o3 = data.charCodeAt(i++)\n\n bits = o1<<16 | o2<<8 | o3\n\n h1 = bits>>18 & 0x3f\n h2 = bits>>12 & 0x3f\n h3 = bits>>6 & 0x3f\n h4 = bits & 0x3f\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4)\n } while (i < data.length)\n\n enc = tmp_arr.join('')\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '=='\n break\n case 2:\n enc = enc.slice(0, -1) + '='\n break\n }\n\n return enc\n}\nmodule.exports = request\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser\n ? {}\n : {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n };\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(\n `^(${BAD_CONTENT_TYPES.join('|')})$`,\n 'i'\n);\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = ['nih.gov', 'gutenberg.org'];\n","import URL from 'url';\nimport request from 'postman-request';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 or not.\n// Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon200 = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon200) {\n throw new Error(\n `Resource returned a response status code of ${\n response.statusCode\n } and resource was instructed to reject non-200 status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host\n .split('.')\n .slice(-2)\n .join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl, headers = {}) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS, ...headers },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any non-GET redirects\n followAllRedirects: true,\n ...(typeof window !== 'undefined'\n ? {}\n : {\n // Follow GET redirects; this option is for Node only\n followRedirect: true,\n }),\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return {\n error: true,\n message: e.message,\n };\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","require('../../modules/es6.reflect.own-keys');\nmodule.exports = require('../../modules/_core').Reflect.ownKeys;\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive <br /> tags into\n// <p /> tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a <br />, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('<p></p>');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (\n sibling &&\n !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))\n ) {\n const { nextSibling } = sibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertible = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertible) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertible = $span.parents('p, div, li, figcaption').length === 0;\n if (convertible) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive <br /> tags.\n// * <div /> tags without block level elements inside of them\n// * <span /> tags who are not children of <p /> or <div /> tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html =\n node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(`<${tag} ${attribString}>${html}</${tag}>`);\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","var _Array$isArray = require(\"../core-js/array/is-array\");\n\nfunction _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nmodule.exports = _arrayWithoutHoles;","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || Iterators.hasOwnProperty(classof(O));\n};\n","var _Array$from = require(\"../core-js/array/from\");\n\nvar _isIterable = require(\"../core-js/is-iterable\");\n\nfunction _iterableToArray(iter) {\n if (_isIterable(Object(iter)) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return _Array$from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","import URL from 'url';\n\nimport { KEEP_SELECTORS, KEEP_CLASS } from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import { getAttrs, setAttrs } from 'utils/dom';\n\nimport { WHITELIST_ATTRS_RE, KEEP_CLASS } from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(\n node,\n Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {})\n );\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $\n );\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach(key => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","require('../modules/es6.parse-float');\nmodule.exports = require('../modules/_core').parseFloat;\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import { scoreCommas, scoreLength } from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import { getOrInitScore, setScore } from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import { getScore, scoreNode, getWeight, addToParent } from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n }\n if (tagName.toLowerCase() === 'div') {\n return 5;\n }\n if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n }\n if (BAD_TAGS.test(tagName)) {\n return -3;\n }\n if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport { scoreNode, setScore, getOrInitScore, addScore } from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre')\n .not('[score]')\n .each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import { textLength, linkDensity } from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('<div></div>');\n\n $candidate\n .parent()\n .children()\n .each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n }\n if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n }\n if (\n siblingContentLength <= 80 &&\n density === 0 &&\n hasSentenceEnd(siblingContent)\n ) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (\n wrappingDiv.children().length === 1 &&\n wrappingDiv\n .children()\n .first()\n .get(0) === $candidate.get(0)\n ) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport { CLEAN_CONDITIONALLY_TAGS, KEEP_CLASS } from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > pCount / 3) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (\n previousNode &&\n normalizeSpaces(previousNode.text()).slice(-1) === ':'\n ) {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0)\n return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar meta = require('./_meta');\nvar fails = require('./_fails');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar setToStringTag = require('./_set-to-string-tag');\nvar dP = require('./_object-dp').f;\nvar each = require('./_array-methods')(0);\nvar DESCRIPTORS = require('./_descriptors');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME, '_c');\n target._c = new Base();\n if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);\n });\n each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {\n anInstance(this, C, KEY);\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n IS_WEAK || dP(C.prototype, 'size', {\n get: function () {\n return this._c.size;\n }\n });\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F, O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.set');\nrequire('../modules/es7.set.to-json');\nrequire('../modules/es7.set.of');\nrequire('../modules/es7.set.from');\nmodule.exports = require('../modules/_core').Set;\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim().replace(/\\s+/g, ' ').length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n }\n if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","var _Symbol$iterator = require(\"../core-js/symbol/iterator\");\n\nvar _Symbol = require(\"../core-js/symbol\");\n\nfunction _typeof2(obj) { if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof _Symbol === \"function\" && _typeof2(_Symbol$iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values = nodes\n .map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n [metaValue] = values;\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find(parent => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export const IS_LINK = new RegExp('https?://', 'i');\nconst IMAGE_RE = '.(png|gif|jpe?g)';\nexport const IS_IMAGE = new RegExp(`${IMAGE_RE}`, 'i');\nexport const IS_SRCSET = new RegExp(\n `${IMAGE_RE}(\\\\?\\\\S+)?(\\\\s*[\\\\d.]+[wx])`,\n 'i'\n);\n\nexport const TAGS_TO_REMOVE = ['script', 'style', 'form'].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport { IS_LINK, IS_IMAGE, IS_SRCSET } from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n const extractSrcFromJSON = str => {\n try {\n const { src } = JSON.parse(str);\n if (typeof src === 'string') return src;\n } catch (e) {\n return false;\n }\n\n return false;\n };\n\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach(attr => {\n const value = attrs[attr];\n\n if (attr !== 'srcset' && IS_LINK.test(value) && IS_SRCSET.test(value)) {\n $(img).attr('srcset', value);\n } else if (\n attr !== 'src' &&\n attr !== 'srcset' &&\n IS_LINK.test(value) &&\n IS_IMAGE.test(value)\n ) {\n // Is the value a JSON object? If so, we should attempt to extract the image src from the data.\n const existingSrc = extractSrcFromJSON(value);\n if (existingSrc) {\n $(img).attr('src', existingSrc);\n } else {\n $(img).attr('src', value);\n }\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root()\n .find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport { normalizeMetaTags, convertLazyLoadedImages, clean } from './utils/dom';\n\nconst Resource = {\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n // :param headers: Custom headers to be included in the request\n async create(url, preparedResponse, parsedUrl, headers = {}) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = {\n body: preparedResponse,\n response: validResponse,\n alreadyDecoded: true,\n };\n } else {\n result = await fetchResource(url, parsedUrl, headers);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response, alreadyDecoded = false }) {\n const { 'content-type': contentType = '' } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') && !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType, alreadyDecoded });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType, alreadyDecoded = false }) {\n if (alreadyDecoded) {\n return cheerio.load(content);\n }\n\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n // after first cheerio.load, check to see if encoding matches\n const contentTypeSelector = cheerio.browser\n ? 'meta[http-equiv=content-type]'\n : 'meta[http-equiv=content-type i]';\n const metaContentType =\n $(contentTypeSelector).attr('content') ||\n $('meta[charset]').attr('charset');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (metaContentType && properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield (start += 1);\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","const merge = (extractor, domains) =>\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {});\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains\n ? merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n : merge(extractor, [extractor.domain]);\n}\n","import mergeSupportedDomains from '../utils/merge-supported-domains';\n\nexport const apiExtractors = {};\n\nexport default function addExtractor(extractor) {\n if (!extractor || !extractor.domain) {\n return {\n error: true,\n message: 'Unable to add custom extractor. Invalid parameters.',\n };\n }\n\n Object.assign(apiExtractors, mergeSupportedDomains(extractor));\n\n return apiExtractors;\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: ['.post-content noscript'],\n\n // Selectors to remove from the extracted content\n clean: [],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: ['.post-author-name'],\n },\n\n title: {\n selectors: ['.post h2.title'],\n },\n\n date_published: {\n selectors: ['span.publishdate'],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: ['div.article-content', 'section.body', 'article.article'],\n\n // Selectors to remove from the extracted content\n clean: ['.ad', '.single-related-story'],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if (\n $children.length === 1 &&\n $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img'\n ) {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: ['h1.lede-feature-title', 'h1.headline-primary', 'h1'],\n },\n\n author: {\n selectors: ['.by-authors', '.lede-feature-author'],\n },\n\n dek: {\n selectors: ['.lede-feature-teaser'],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: ['h1.headline'],\n },\n\n author: {\n selectors: ['.PostByline__name'],\n },\n\n content: {\n selectors: ['div.post__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('<img />').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['.PostByline__timestamp[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n title: {\n selectors: ['h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Allow drop cap character.\n 'section span:first-of-type': $node => {\n const $text = $node.html();\n if ($text.length === 1 && /^[a-zA-Z()]+$/.test($text)) {\n $node.replaceWith($text);\n }\n },\n // Re-write lazy-loaded youtube videos\n iframe: $node => {\n const ytRe = /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n const $parent = $node.parents('figure');\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe); // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n return;\n }\n\n // If we can't draw the YouTube preview, remove the figure.\n $parent.remove();\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: $node => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n\n $node.empty().append([$img, $caption]);\n },\n\n // Remove any smaller images that did not get caught by the generic image\n // cleaner (author photo 48px, leading sentence images 79px, etc.).\n img: $node => {\n const width = parseInt($node.attr('width'), 10);\n if (width < 100) $node.remove();\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span a', 'svg'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: ['h1', 'h1.is-title-pane'],\n },\n\n author: {\n selectors: ['.byline-name', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body__content', '.pane-node-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [\n selector,\n attr,\n ] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(`<img src=\"${src}\" />`);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const GeniusComExtractor = {\n domain: 'genius.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['h2 a'],\n },\n\n date_published: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.release_date;\n },\n ],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.album.cover_art_url;\n },\n ],\n ],\n },\n\n content: {\n selectors: ['.lyrics'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import URL from 'url';\n\nexport const WiredJpExtractor = {\n domain: 'wired.jp',\n\n title: {\n selectors: ['h1[data-testid=\"ContentHeaderHed\"]', 'h1.post-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'p[itemprop=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: ['div[class^=\"ContentHeaderDek\"]', '.post-intro'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[data-attribute-verso-pattern=\"article-body\"]',\n 'article.article-detail',\n ],\n\n transforms: {\n 'img[data-original]': $node => {\n const dataOriginal = $node.attr('data-original');\n const src = $node.attr('src');\n const url = URL.resolve(src, dataOriginal);\n $node.attr('src', url);\n },\n },\n\n clean: ['.post-category', 'time', 'h1.post-title', '.social-area-syncer'],\n },\n};\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-unused-expressions */\nexport const WwwAbendblattDeExtractor = {\n domain: 'www.abendblatt.de',\n\n title: {\n selectors: ['h2.article__header__headline'],\n },\n\n author: {\n selectors: ['span.author-info__name-text'],\n },\n\n date_published: {\n selectors: [\n ['time.teaser-stream-time', 'datetime'],\n ['time.article__header__date', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n p: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n div: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: ['#mw-content-text'],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': $node => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: ['h2.title'],\n },\n\n date_published: {\n selectors: ['#footer-info-lastmod'],\n },\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('<div id=\"TWEETS_GO_HERE\"></div>');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: ['.permalink[role=main]'],\n\n defaultCleaner: false,\n\n clean: ['.stream-item-footer', 'button', '.tweet-details-fixer'],\n },\n\n author: {\n selectors: ['.tweet.permalink-tweet .username'],\n },\n\n date_published: {\n selectors: [['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms']],\n },\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1[data-testid=\"headline\"]',\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n 'h1 .balancedHeadline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ['meta[name=\"byl\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['div.g-blocks', 'section[name=\"articleBody\"]', 'article#story'],\n\n transforms: {\n 'img.g-lazy': $node => {\n let src = $node.attr('src');\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: ['h1', '.c-article-header__hed'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.c-byline__author'],\n },\n\n content: {\n selectors: ['article', '.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n '.c-article-writer__image',\n '.c-article-writer__content',\n '.c-letters-cta__text',\n '.c-footer__logo',\n '.c-recirculation-link',\n '.twitter-tweet',\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n date_published: {\n selectors: [['time[itemprop=\"datePublished\"]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1[class^=\"content-header\"]',\n 'h1[class^=\"ArticleHeader__hed\"]',\n 'h1[class*=\"ContentHeaderHed\"]',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'article header div[class^=\"BylinesWrapper\"]',\n ['meta[name=\"article:author\"]', 'value'],\n 'div[class^=\"ArticleContributors\"] a[rel=\"author\"]',\n 'article header div[class*=\"Byline__multipleContributors\"]',\n ],\n },\n\n content: {\n selectors: [\n '.article__body',\n 'article.article.main-content',\n 'main[class^=\"Layout__content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption__text': 'figcaption',\n '.caption__credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['footer[class^=\"ArticleFooter__footer\"]', 'aside'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-header__publish-date',\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n 'div[class^=\"ContentHeaderDek\"]',\n 'div.content-header__dek',\n 'h2[class^=\"ArticleHeader__dek\"]',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1[data-testId=\"ContentHeaderHed\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.article.main-content',\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span.caption'],\n },\n\n date_published: {\n selectors: ['span.time'],\n },\n\n lead_image_url: {\n selectors: [],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.figure-caption'],\n },\n\n date_published: {\n selectors: [['time.date[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n\n supportedDomains: ['www.buzzfeednews.com'],\n\n title: {\n selectors: [\n 'h1.embed-headline-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]',\n 'byline__author',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['div[class^=\"featureimage_featureImageWrapper\"]', '.js-subbuzz-wrapper'],\n ['.js-subbuzz-wrapper'],\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': $node => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n '.js-inline-share-bar',\n '.js-ad-placement',\n ],\n },\n\n date_published: {\n selectors: [['time[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.embed-headline-description'],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard',\n '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1[class*=\"PostHeader\"]',\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'div[class^=\"PostHeader__ScAuthorNameSection\"]',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n 'section[class*=\"PostMainArticle\"]',\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n ['div[itemprop=\"author\"] meta[itemprop=\"name\"]', 'value'],\n '.story-meta__authors .vcard',\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [['.story-text'], '.story-main-content', '.story-core'],\n\n transforms: [],\n\n clean: ['figcaption', '.story-meta', '.ad'],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ['.story-meta__details time[datetime]', 'datetime'],\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n 'avclub.com',\n 'clickhole.com',\n 'splinternews.com',\n 'theonion.com',\n 'theroot.com',\n 'thetakeout.com',\n 'theinventory.com',\n ],\n\n title: {\n selectors: ['header h1', 'h1.headline'],\n },\n\n author: {\n selectors: ['a[data-ga*=\"Author\"]', '.author'],\n },\n\n content: {\n selectors: ['.js_post-content', '.post-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': $node => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.magnifier', '.lightbox'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: ['h1[itemprop=headline]', 'h1.article-title'],\n },\n\n author: {\n selectors: ['span[itemprop=author]'],\n },\n\n content: {\n selectors: ['div[itemprop=articlebody]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[itemprop=datePublished]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: ['.post-title-breadcrumb', 'h1', '.headline'],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: ['.article__published-at', '.article-posted-date'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__blocks', '.article-content', '.all-post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lightbox-link'],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: ['h1', '#topper-headline-wrapper'],\n },\n\n author: {\n selectors: ['.pb-author-name'],\n },\n\n date_published: {\n selectors: [['.author-timestamp[itemprop=\"datePublished\"]', 'content']],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': $node => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.interstitial-link', '.newsletter-inline-unit'],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: ['h1.headline__title'],\n },\n\n author: {\n selectors: ['span.author-card__details__name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: ['h2.headline__subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry__body'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: ['h1.article-headline'],\n },\n\n author: {\n selectors: ['span.AuthorList'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.article-subhead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['div.article-body']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['aside'],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: ['.article-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.byline a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: ['#storytext h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inStoryHeading'],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: ['h1.pg-headline', 'h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': $node => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': $node => {\n if ($node.has('a')) {\n if (\n $node.text().trim() ===\n $node\n .find('a')\n .text()\n .trim()\n ) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: ['h1.p-article__title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.p-article__byline__date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [['link[itemprop=\"name\"]', 'content'], '.yt-user-info'],\n },\n\n date_published: {\n selectors: [['meta[itemProp=\"datePublished\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n '#player-container-outer',\n 'ytd-expandable-video-description-body-renderer #description',\n ['#player-api', '#description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>`);\n },\n '#player-container-outer': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n const description = $('meta[itemProp=\"description\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>\n <div><span>${description}</span></div>`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: ['h1', '.content__headline'],\n },\n\n author: {\n selectors: ['address[data-link-name=\"byline\"]', 'p.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['div[data-gu-name=\"standfirst\"]', '.content__standfirst'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincontent', '.content__article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.hide-on-mobile', '.inline-icon'],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1[class^=\"headline\"]',\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n 'p[class*=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"og:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n '.body-content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inline-newsletter', '.page-ad'],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: ['h1', 'h1.post-page__title'],\n },\n\n author: {\n selectors: ['a[href*=\"profile\"]', 'div.content-meta__author'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.post-page__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: ['h1', '.storytitle'],\n },\n\n author: {\n selectors: ['p.byline__name.byline__name--block'],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['.storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['div.enlarge_measure'],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: ['article header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: ['#article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: ['h1.story__title'],\n },\n\n author: {\n selectors: ['.story__info .story__info__item:first-child'],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n format: 'MMMM D, YYYY h:mm a',\n },\n\n dek: {\n selectors: ['.story__subhead'],\n },\n\n lead_image_url: {\n selectors: [['article figure a:first-child', 'href']],\n },\n\n content: {\n selectors: ['.story__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: ['h1[class*=\"ArticleHeader-headline-\"]', 'h1.article-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"og:article:author\"]', 'value'], '.author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ArticleBodyWrapper', '#article-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div[class^=\"ArticleBody-byline-container-\"]',\n '#article-byline .author',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: ['header h1', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.author_name a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article', 'section.article-content.blueprint'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['div.article_byline span:first-of-type'],\n },\n\n date_published: {\n selectors: ['time'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': $node => {\n const imgHtml = $node.html();\n $node\n .parents('.e-image__image')\n .find('.c-dynamic-image')\n .replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: ['.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--large'],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.Article__Headline__Desc', '.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.Article__Content',\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent\n .find('.media--medium__container')\n .children()\n .first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend(\n $(`<div class=\"__image-lead__\">\n <img src=\"${imgPath1}\"/>\n <img src=\"${imgPath2}\"/>\n </div>`)\n );\n }\n } else {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--small'],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: ['h1.headline', '.trb_ar_hl'],\n },\n\n author: {\n selectors: [\n 'a[data-click=\"standardBylineAuthorName\"]',\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.page-article-body', '.trb_ar_main'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': $node => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.trb_ar_by', '.trb_ar_cr'],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: ['nypost.com'],\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.modal-trigger'],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author-meta-title', 'main span.entry-author-name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'header',\n '.article-sharing',\n '.after-article',\n '.type-commenting',\n '.more-posts',\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: ['.Article-headline', '.article-headline'],\n },\n\n author: {\n selectors: ['.ArticleAuthor-nameText', '.author-name'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: ['.Article-subline', '.article-subline'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [['meta[name=\"sailthru.title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: ['div#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n 'a[data-vars-label*=\"authors\"]',\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article main', 'div.field.field-name-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['small'],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: ['div[class*=\"Article_main__body\"] h1', '.article-header h1'],\n },\n\n author: {\n selectors: ['.ShareByline span:nth-child(2)', '.authors'],\n clean: ['.author-overlay', '.by-text'],\n },\n\n date_published: {\n selectors: ['.ShareByline', '.timestamp'],\n format: 'MMMM D, YYYY h:mm a',\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: ['h1.headline', 'h1#ra-headline'],\n },\n\n author: {\n selectors: [\n '.article_byline span',\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: ['time', ['meta[name=\"sailthru.date\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', 'article#ra-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['dl#ra-tags', '.ra-related', 'a.ra-editor', 'dl#ra-share-bottom'],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: ['h1.title', 'h1.ArticleHeader-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n 'div.ArticleBody-articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: ['h2.post-title', 'title-text'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.share-copy-title', '.post-tags', '.reactions'],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author', '.vcard'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: ['.article-header h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value'], 'a.author.url.fn'],\n },\n\n date_published: {\n selectors: [\n '.mntl-attribution__item-date',\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article-header h2'],\n },\n\n content: {\n selectors: ['div[class^=\"loc article-content\"]', 'div.article-body__inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: {\n selectors: ['a.author', 'a.article-byline.tracked-offpage'],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related'],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: ['h1.l-article-header__row--title', 'h1.content-title'],\n },\n\n author: {\n selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.l-article-header__row--lead', '.content-description'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.l-article-content',\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.c-related-links-wrapper', '.module-related'],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: ['title', 'article header h1'],\n },\n\n author: {\n selectors: ['.article-cnt__author', '.author'],\n },\n\n date_published: {\n selectors: [['time[data-published]', 'data-published']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', 'section.body.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: ['div.entry-header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"qc:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: ['h1.article-detail__title', 'h1.article__title'],\n },\n\n author: {\n selectors: ['.article-detail__meta__author', '.entry-meta__author a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.article-detail__main-content section'],\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n date_published: {\n selectors: ['p.published-date'],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.dateline-storybody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n author: {\n selectors: ['.contributor'],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': $node => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.story-share'],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: ['h1', 'h1.title'],\n },\n\n author: {\n selectors: ['article a[rel=\"author\"]', '.author-url'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.intro', 'blockquote'],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: ['h1', 'h1.headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"published\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.m-detail-header--dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.m-detail--body',\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['.inline-thumb', '.primary-message', '.description', '.instructions'],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.blog-title'],\n },\n\n author: {\n selectors: [\n 'div.main-post-head .social-author__name',\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post-body', '.blog-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['span.author', 'a.author'],\n },\n\n date_published: {\n selectors: ['time'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: ['.c-head_dek', '.article-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': $node => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'],\n },\n\n author: {\n selectors: ['span.byline-name', ['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['time[datetime]', ['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', '.entry-container'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.label-comment'],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [['meta[name=\"dcterms.title\"]', 'value']],\n },\n\n author: {\n selectors: [['link[rel=\"author\"]', 'title']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n '.single-post-content-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: ['title', 'h1.entry-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n dek: {\n selectors: ['.subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-sharing.top + div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.ad-notice-small'],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: ['.title', ['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.article-content', '.image', '.body'], '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-video-wrapper', '.show-for-small-only'],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: ['.entry-title', '.cb-entry-title', '.cb-single-title'],\n },\n\n author: {\n selectors: ['div.cb-author', 'div.cb-author-title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['div.theiaPostSlider_slides img', 'src']],\n },\n\n content: {\n selectors: ['div.theiaPostSlider_slides'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.title'],\n },\n\n author: {\n selectors: ['.byline-wrapper span.author_name', '.author-link'],\n },\n\n date_published: {\n selectors: [\n ['meta[property=\"article:published_time\"]', 'content'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.main-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: ['h1.title', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'cite a',\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.tc_mark', 'figcaption'],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: ['h1.entry-title.story--header--title'],\n },\n\n author: {\n selectors: ['div.story--header--author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"datePublished\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.story', '.entry-content.'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: ['div.article-hero-headline h1', 'div.article-hed h1'],\n },\n\n author: {\n selectors: [\n 'div.article-inline-byline span.byline-name',\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', 'div.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.MblGHNMJ'],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['picture', 'article.row'], 'article.row'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: ['.article-title', 'h1'],\n },\n\n author: {\n selectors: [\n '.main-author-card h3',\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.base-main-card__metadata',\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.article-content__body',\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.entity-image'],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: ['whitehouse.gov'],\n\n title: {\n selectors: ['h1', '.pane-node-title'],\n },\n\n author: {\n selectors: ['.blog-author-link', '.node-person-name-link'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.field-name-field-forall-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: ['div#content-start', '.pane-node-field-forall-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pane-node-title', '.pane-custom.pane-1'],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: ['h1.m-detail-header--title', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], 'div.date span span a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"published\"]', 'value'],\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.m-detail--body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.show-for-small-only'],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: ['.blog-header__title', '.page-title'],\n },\n\n author: {\n selectors: ['.blog-header__author-link', '.aside_author .title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value'], '.post-info'],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: ['.blog-header__description', '.page-subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.blog__container', 'article .post_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n '.post-author a',\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.content-container article',\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.post-author', '.donate-box', '.message', '.subtitle'],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: ['h2', 'h2.title'],\n },\n\n author: {\n selectors: ['.name'],\n },\n\n date_published: {\n selectors: [['.date.smart-date', 'data-origindate']],\n },\n\n dek: {\n selectors: ['.excerpt'],\n },\n\n lead_image_url: {\n selectors: [['.article-detail-hd img', 'src']],\n },\n\n content: {\n selectors: ['.detail'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lazyload', '.lazylad', '.lazylood'],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: ['h1', '.entry-header h1'],\n },\n\n author: {\n // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class\n selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [null],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', '.entry-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value'], 'header h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.tailwind-article-body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': $node => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`<figure><img src=\"${src}\"/></figure>`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#pitch'],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: ['.hed', 'h1'],\n },\n\n author: {\n selectors: ['a[rel=author]'],\n },\n\n date_published: {\n selectors: ['.pub-date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"dc.creator\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"dc.date.created\"]', 'value']],\n format: 'YYYY-MM-DD|HH[h]mm',\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['div.lead-container', '.bunker-component.lead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.document-content-style',\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwFortinetComExtractor = {\n domain: 'www.fortinet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.b15-blog-meta__author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12',\n ],\n\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n return null;\n },\n },\n },\n};\n","export const WwwFastcompanyComExtractor = {\n domain: 'www.fastcompany.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.post__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post__article'],\n },\n};\n","export const BlisterreviewComExtractor = {\n domain: 'blisterreview.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span.author-name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.entry-date', 'datetime'],\n ['meta[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[itemprop=\"image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ['img.attachment-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n [\n '.elementor-section-wrap',\n '.elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n figcaption: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.comments-area'],\n },\n};\n","export const NewsMynaviJpExtractor = {\n domain: 'news.mynavi.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'a.articleHeader_name',\n 'main div.article-author a.article-author__name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body', 'main article div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n img: $node => {\n const src = $node.attr('data-original');\n if (src !== '') {\n $node.attr('src', src);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ClinicaltrialsGovExtractor = {\n domain: 'clinicaltrials.gov',\n\n title: {\n selectors: ['h1.tr-solo_record'],\n },\n\n author: {\n selectors: ['div#sponsor.tr-info-text'],\n },\n\n date_published: {\n // selectors: ['span.term[data-term=\"Last Update Posted\"]'],\n selectors: ['div:has(> span.term[data-term=\"Last Update Posted\"])'],\n },\n\n content: {\n selectors: ['div#tab-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.usa-alert> img'],\n },\n};\n","export const GithubComExtractor = {\n domain: 'github.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n ['relative-time[datetime]', 'datetime'],\n ['span[itemprop=\"dateModified\"] relative-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n 'span[itemprop=\"about\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['#readme article']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRedditComExtractor = {\n domain: 'www.reddit.com',\n\n title: {\n selectors: [\n 'div[data-test-id=\"post-content\"] h1',\n 'div[data-test-id=\"post-content\"] h2',\n ],\n },\n\n author: {\n selectors: ['div[data-test-id=\"post-content\"] a[href*=\"user/\"]'],\n },\n\n date_published: {\n selectors: [\n 'div[data-test-id=\"post-content\"] span[data-click-id=\"timestamp\"]',\n 'div[data-test-id=\"post-content\"] a[data-click-id=\"timestamp\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['div[data-test-id=\"post-content\"] p'], // text post\n [\n 'div[data-test-id=\"post-content\"] a[target=\"_blank\"]:not([data-click-id=\"timestamp\"])', // external link\n 'div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]', // embedded media\n ], // external link with media preview (YouTube, imgur album, etc...)\n ['div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]'], // Embedded media (Reddit video)\n ['div[data-test-id=\"post-content\"] a'], // external link\n 'div[data-test-id=\"post-content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[role=\"img\"]': $node => {\n // External link image preview\n const $img = $node.find('img');\n const bgImg = $node.css('background-image');\n if ($img.length === 1 && bgImg) {\n $img.attr('src', bgImg.match(/\\((.*?)\\)/)[1].replace(/('|\")/g, ''));\n return $img;\n }\n return $node;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.icon',\n 'span[id^=\"PostAwardBadges\"]',\n 'div a[data-test-id=\"comments-page-link-num-comments\"]',\n ],\n },\n};\n","export const OtrsComExtractor = {\n domain: 'otrs.com',\n\n title: {\n selectors: ['#main article h1'],\n },\n\n author: {\n selectors: ['div.dateplusauthor a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main article'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'div.dateplusauthor',\n 'div.gr-12.push-6.footershare',\n '#atftbx',\n 'div.category-modul',\n ],\n },\n};\n","export const WwwOssnewsJpExtractor = {\n domain: 'www.ossnews.jp',\n\n title: {\n selectors: ['#alpha-block h1.hxnewstitle'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.fs12'],\n format: 'YYYY年MM月DD日 HH:mm',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#alpha-block .section:has(h1.hxnewstitle)'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BuzzapJpExtractor = {\n domain: 'buzzap.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ctiframe'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwAsahiComExtractor = {\n domain: 'www.asahi.com',\n\n title: {\n selectors: ['main h1', '.ArticleTitle h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"pubdate\"]', 'value']],\n },\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'],\n },\n};\n","export const WwwSanwaCoJpExtractor = {\n domain: 'www.sanwa.co.jp',\n\n title: {\n selectors: ['#newsContent h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['dl.date'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#newsContent'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#smartphone', 'div.sns_box', 'div.contentFoot'],\n },\n};\n","export const WwwElecomCoJpExtractor = {\n domain: 'www.elecom.co.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.section-last'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['td.TableMain2'],\n\n defaultCleaner: false,\n\n transforms: {\n table: $node => {\n $node.attr('width', 'auto');\n },\n },\n\n clean: [],\n },\n};\n","export const ScanNetsecurityNeJpExtractor = {\n domain: 'scan.netsecurity.ne.jp',\n\n title: {\n selectors: ['header.arti-header h1.head'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['header.arti-header p.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.arti-content.arti-content--thumbnail'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['aside.arti-giga'],\n },\n};\n","export const JvndbJvnJpExtractor = {\n domain: 'jvndb.jvn.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['div.modifytxt:nth-child(2)'],\n format: 'YYYY/MM/DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#news-list'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwJnsaOrgExtractor = {\n domain: 'www.jnsa.org',\n\n title: {\n selectors: ['#wgtitle h2'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main_area'],\n\n transforms: {},\n\n clean: ['#pankuzu', '#side'],\n },\n};\n","export const PhpspotOrgExtractor = {\n domain: 'phpspot.org',\n\n title: {\n selectors: ['h3.hl'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['h4.hl'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.entrybody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwInfoqComExtractor = {\n domain: 'www.infoq.com',\n\n title: {\n selectors: ['h1.heading'],\n },\n\n author: {\n selectors: ['div.widget.article__authors'],\n },\n\n date_published: {\n selectors: ['.article__readTime.date'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__data'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwMoongiftJpExtractor = {\n domain: 'www.moongift.jp',\n\n title: {\n selectors: ['h1.title a'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['ul.meta li:not(.social):first-of-type'],\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main'],\n\n transforms: {},\n\n clean: ['ul.mg_service.cf'],\n },\n};\n","export const WwwItmediaCoJpExtractor = {\n domain: 'www.itmedia.co.jp',\n\n supportedDomains: [\n 'www.atmarkit.co.jp',\n 'techtarget.itmedia.co.jp',\n 'nlab.itmedia.co.jp',\n ],\n\n title: {\n selectors: ['#cmsTitle h1'],\n },\n\n author: {\n selectors: ['#byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['#cmsAbstract h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#cmsBody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#snsSharebox'],\n },\n};\n","export const WwwPublickey1JpExtractor = {\n domain: 'www.publickey1.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'],\n },\n\n date_published: {\n selectors: ['div.pubdate'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincol'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#breadcrumbs', 'div.sbm', 'div.ad_footer'],\n },\n};\n","export const TakagihiromitsuJpExtractor = {\n domain: 'takagi-hiromitsu.jp',\n\n title: {\n selectors: ['h3'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[http-equiv=\"Last-Modified\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.body'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BookwalkerJpExtractor = {\n domain: 'bookwalker.jp',\n\n title: {\n selectors: ['h1.p-main__title', 'h1.main-heading'],\n },\n\n author: {\n selectors: ['div.p-author__list', 'div.authors'],\n },\n\n date_published: {\n selectors: [\n 'dl.p-information__data dd:nth-of-type(7)',\n '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type',\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.p-main__information',\n ['div.main-info', 'div.main-cover-inner'],\n ],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'span.label.label--trial',\n 'dt.info-head.info-head--coin',\n 'dd.info-contents.info-contents--coin',\n 'div.info-notice.fn-toggleClass',\n ],\n },\n};\n","export const WwwYomiuriCoJpExtractor = {\n domain: 'www.yomiuri.co.jp',\n\n title: {\n selectors: ['h1.title-article.c-article-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.p-main-contents'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const JapanCnetComExtractor = {\n domain: 'japan.cnet.com',\n\n title: {\n selectors: ['.leaf-headline-ttl'],\n },\n\n author: {\n selectors: ['.writer'],\n },\n\n date_published: {\n selectors: ['.date'],\n format: 'YYYY年MM月DD日 HH時mm分',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const DeadlineComExtractor = {\n domain: 'deadline.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['section.author h2'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item'],\n\n transforms: {\n '.embed-twitter': $node => {\n const innerHtml = $node.html();\n $node.replaceWith(innerHtml);\n },\n },\n\n clean: ['figcaption'],\n },\n};\n","export const WwwGizmodoJpExtractor = {\n domain: 'www.gizmodo.jp',\n\n title: {\n selectors: ['h1.p-post-title'],\n },\n\n author: {\n selectors: ['li.p-post-AssistAuthor'],\n },\n\n date_published: {\n selectors: [['li.p-post-AssistTime time', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.p-post'],\n\n transforms: {\n 'img.p-post-thumbnailImage': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['h1.p-post-title', 'ul.p-post-Assist'],\n },\n};\n","export const GetnewsJpExtractor = {\n domain: 'getnews.jp',\n\n title: {\n selectors: ['article h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.prof'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['ul.cattag-top time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.post-bodycopy'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwLifehackerJpExtractor = {\n domain: 'www.lifehacker.jp',\n\n title: {\n selectors: ['h1[class^=\"article_pArticle_Title\"]', 'h1.lh-summary-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n 'p.lh-entryDetailInner--credit',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['div.lh-entryDetail-header time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[class^=\"article_pArticle_Body__\"]',\n 'div.lh-entryDetail-body',\n ],\n\n transforms: {\n 'img.lazyload': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['p.lh-entryDetailInner--credit'],\n },\n};\n","export const SectIijAdJpExtractor = {\n domain: 'sect.iij.ad.jp',\n\n title: {\n selectors: ['div.title-box-inner h1', 'h3'],\n },\n\n author: {\n selectors: ['p.post-author a', 'dl.entrydate dd'],\n },\n\n date_published: {\n selectors: ['time'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-inner', '#article'],\n\n transforms: {},\n\n clean: ['dl.entrydate'],\n },\n};\n","export const WwwOreillyCoJpExtractor = {\n domain: 'www.oreilly.co.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h3'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"]', 'li[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [\n ['dd[itemprop=\"datePublished\"]', 'content'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image:secure_url\"]', 'value'],\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['section.detail', '#content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.social-tools'],\n },\n};\n","export const WwwIpaGoJpExtractor = {\n domain: 'www.ipa.go.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.ipar_text_right'],\n format: 'YYYY年M月D日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#ipar_main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['p.ipar_text_right'],\n },\n};\n","export const WeeklyAsciiJpExtractor = {\n domain: 'weekly.ascii.jp',\n\n title: {\n selectors: ['article h1', 'h1[itemprop=\"headline\"]'],\n },\n\n author: {\n selectors: ['p.author'],\n },\n\n date_published: {\n selectors: ['p.date', ['meta[name=\"odate\"]', 'value']],\n\n format: 'YYYY年MM月DD日 HH:mm',\n\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div#contents_detail', 'div.article'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const TechlogIijAdJpExtractor = {\n domain: 'techlog.iij.ad.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['a[rel=\"author\"]'],\n },\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.wp_social_bookmarking_light'],\n },\n};\n","export const JapanZdnetComExtractor = {\n domain: 'japan.zdnet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"cXenseParse:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwRbbtodayComExtractor = {\n domain: 'www.rbbtoday.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.writer.writer-name'],\n },\n\n date_published: {\n selectors: [['header time', 'datetime']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value'], '.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.arti-content'],\n\n transforms: {},\n\n clean: ['.arti-giga'],\n },\n};\n","export const WwwLemondeFrExtractor = {\n domain: 'www.lemonde.fr',\n\n title: {\n selectors: ['h1.article__title'],\n },\n\n author: {\n selectors: ['.author__name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article__desc'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__content'],\n\n transforms: {},\n\n clean: ['figcaption'],\n },\n};\n","export const WwwPhoronixComExtractor = {\n domain: 'www.phoronix.com',\n\n title: {\n selectors: ['article h1', 'article header'],\n },\n\n author: {\n selectors: ['.author a:first-child'],\n },\n\n date_published: {\n selectors: ['.author'],\n // 1 June 2019 at 08:34 PM EDT\n format: 'D MMMM YYYY at hh:mm',\n timezone: 'America/New_York',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PitchforkComExtractor = {\n domain: 'pitchfork.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.authors-detail__display-name',\n ],\n },\n\n date_published: {\n selectors: ['div[class^=\"InfoSliceWrapper-\"]', ['.pub-date', 'datetime']],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n '.review-detail__abstract',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['.single-album-tombstone__art img', 'src'],\n ],\n },\n\n content: {\n selectors: ['div.body__inner-container', '.review-detail__text'],\n },\n\n extend: {\n score: {\n selectors: ['p[class*=\"Rating\"]', '.score'],\n },\n },\n};\n","export const BiorxivOrgExtractor = {\n domain: 'biorxiv.org',\n\n title: {\n selectors: ['h1#page-title'],\n },\n\n author: {\n selectors: [\n 'div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors',\n ],\n },\n\n content: {\n selectors: ['div#abstract-1'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const EpaperZeitDeExtractor = {\n domain: 'epaper.zeit.de',\n\n title: {\n selectors: ['p.title'],\n },\n\n author: {\n selectors: ['.article__author'],\n },\n\n date_published: null,\n\n excerpt: {\n selectors: ['subtitle'],\n },\n\n lead_image_url: null,\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'p.title': 'h1',\n '.article__author': 'p',\n byline: 'p',\n linkbox: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['image-credits', 'box[type=citation]'],\n },\n};\n","export const WwwLadbibleComExtractor = {\n domain: 'www.ladbible.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['[class*=Byline]'],\n },\n\n date_published: {\n selectors: ['time'],\n timezone: 'Europe/London',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['[class*=ArticleContainer]'],\n clean: [\n 'time',\n 'source',\n 'a[href^=\"https://www.ladbible.com/\"]',\n 'picture',\n '[class*=StyledCardBlock]',\n ],\n },\n};\n","export const TimesofindiaIndiatimesComExtractor = {\n domain: 'timesofindia.indiatimes.com',\n\n title: {\n selectors: ['h1'],\n },\n\n extend: {\n reporter: {\n selectors: ['div.byline'],\n transforms: {},\n },\n },\n\n date_published: {\n selectors: ['.byline'],\n format: 'MMM D, YYYY, HH:mm z',\n timezone: 'Asia/Kolkata',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.contentwrapper:has(section)'],\n defaultCleaner: false,\n\n clean: [\n 'section',\n 'h1',\n '.byline',\n '.img_cptn',\n '.icon_share_wrap',\n 'ul[itemtype=\"https://schema.org/BreadcrumbList\"]',\n ],\n },\n};\n","export const MaTtiasBeExtractor = {\n domain: 'ma.ttias.be',\n\n title: {\n selectors: [['meta[name=\"twitter:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n content: {\n selectors: [['.content']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // h1 elements will be demoted to h2, so demote h2 elements to h3.\n return 'h3';\n },\n h1: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // A subsequent h2 will be removed if there is not a paragraph before it, so\n // add a paragraph here. It will be removed anyway because it is empty.\n $node.after('<p></p>');\n },\n ul: $node => {\n // Articles contain lists of links which look like, but are not, navigation\n // elements. Adding this class attribute avoids them being incorrectly removed.\n $node.attr('class', 'entry-content-asset');\n },\n },\n },\n};\n","export const PastebinComExtractor = {\n domain: 'pastebin.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.username', '.paste_box_line2 .t_us + a'],\n },\n\n date_published: {\n selectors: ['.date', '.paste_box_line2 .t_da + span'],\n timezone: 'America/New_York',\n format: 'MMMM D, YYYY',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.source', '#selectable .text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n ol: 'div',\n li: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwGrueneDeExtractor = {\n domain: 'www.gruene.de',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[property=\"og:image\"]', 'content']],\n },\n\n content: {\n // selectors: ['section'],\n selectors: [['section header', 'section h2', 'section p', 'section ol']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['figcaption', 'p[class]'],\n },\n};\n","export const WwwEngadgetComExtractor = {\n domain: 'www.engadget.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['a.th-meta[data-ylk*=\"subsec:author\"]'],\n },\n\n // Engadget stories have publish dates, but the only representation of them on the page\n // is in a format like \"2h ago\". There are also these tags with blank values:\n // <meta class=\"swiftype\" name=\"published_at\" data-type=\"date\" value=\"\">\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: ['div[class*=\"o-title_mark\"] div'],\n },\n\n // Engadget stories do have lead images specified by an og:image meta tag, but selecting\n // the value attribute of that tag fails. I believe the \"ℑ\" sequence of characters\n // is triggering this inability to select the attribute value.\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n [\n // Some figures will be inside div.article-text, but some header figures/images\n // will not.\n '#page_body figure:not(div.article-text figure)',\n 'div.article-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ArstechnicaComExtractor = {\n domain: 'arstechnica.com',\n\n // Articles from this site are often paginated, but I was unable to write a CSS\n // selector to find the next page. On the last page, there will be a link with a CSS\n // selector indicating that the previous page is next. But the parser appears to find\n // the next page without this extractor finding it, as long as the fallback option is\n // left at its default value of true.\n\n title: {\n selectors: ['title'],\n },\n\n author: {\n selectors: ['*[rel=\"author\"] *[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['.byline time', 'datetime']],\n },\n\n dek: {\n selectors: ['h2[itemprop=\"description\"]'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // Some pages have an element h2 that is significant, and that the parser will\n // remove if not following a paragraph. Adding this empty paragraph fixes it, and\n // the empty paragraph will be removed anyway.\n $node.before('<p></p>');\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result.\n clean: [\n // Remove enlarge links and separators inside image captions.\n 'figcaption .enlarge-link',\n 'figcaption .sep',\n\n // I could not transform the video into usable elements, so I\n // removed them.\n 'figure.video',\n\n // Image galleries that do not work.\n '.gallery',\n\n 'aside',\n '.sidebar',\n ],\n },\n};\n","export const WwwNdtvComExtractor = {\n domain: 'www.ndtv.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"] span[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['span[itemprop=\"dateModified\"]', 'content']],\n },\n\n dek: {\n selectors: ['h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // This site puts a dateline in a 'b' above the first paragraph, and then somehow\n // blends it into the first paragraph with CSS. This transform moves the dateline\n // to the first paragraph.\n '.place_cont': $node => {\n if (!$node.parents('p').length) {\n const nextSibling = $node.next('p');\n if (nextSibling) {\n $node.remove();\n nextSibling.prepend($node);\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.highlghts_Wdgt',\n '.ins_instory_dv_caption',\n 'input',\n '._world-wrapper .mt20',\n ],\n },\n};\n","export const SpektrumExtractor = {\n domain: 'www.spektrum.de',\n\n title: {\n selectors: ['.content__title'],\n },\n\n author: {\n selectors: ['.content__author__info__name'],\n },\n\n date_published: {\n selectors: ['.content__meta__date'],\n timezone: 'Europe/Berlin',\n },\n\n dek: {\n selectors: ['.content__intro'],\n },\n\n lead_image_url: {\n selectors: [\n // This is how the meta tag appears in the original source code.\n ['meta[name=\"og:image\"]', 'value'],\n // This is how the meta tag appears in the DOM in Chrome.\n // The selector is included here to make the code work within the browser as well.\n ['meta[property=\"og:image\"]', 'content'],\n // This is the image that is shown on the page.\n // It can be slightly cropped compared to the original in the meta tag.\n '.image__article__top img',\n ],\n },\n\n content: {\n selectors: ['article.content'],\n clean: [\n '.breadcrumbs',\n '.hide-for-print',\n 'aside',\n 'header h2',\n '.image__article__top',\n '.content__author',\n '.copyright',\n '.callout-box',\n ],\n },\n};\n","export const PostlightComExtractor = {\n domain: 'postlight.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.single-hero__abstract'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'section.pl-post-link',\n 'aside',\n 'section.insights_featured_case_studies',\n ],\n },\n};\n","export const WwwInvestmentexecutiveComExtractor = {\n domain: 'www.investmentexecutive.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['div[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['section.article-body'],\n\n clean: ['.hidden'],\n },\n};\n","export const WwwCbcCaExtractor = {\n domain: 'www.cbc.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.authorText', '.bylineDetails'],\n },\n\n date_published: {\n selectors: [['.timeStamp[datetime]', 'datetime']],\n },\n\n dek: {\n selectors: ['.deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.story'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","(function(){\n\n var LTR_MARK = \"\\u200e\",\n RTL_MARK = \"\\u200f\",\n LTR = 'ltr', // Left to right direction content\n RTL = 'rtl', // Right to left direction content\n BIDI = 'bidi', // Both directions - any and all directions will not be ok\n NODI = ''; // No direction - any and all directions are ok\n\n var rtlSciriptRanges = {\n Hebrew: [\"0590\",\"05FF\"],\n Arabic: [\"0600\",\"06FF\"],\n NKo: [\"07C0\",\"07FF\"],\n Syriac: [\"0700\",\"074F\"],\n Thaana: [\"0780\",\"07BF\"],\n Tifinagh: [\"2D30\",\"2D7F\"]\n };\n\n /*\n * Gets string direction\n * @param {string} - String to check for direction\n * @returns {string} - 'ltr' if given string is left-to-right, \n * 'rtl' if it's right-to-left and 'bidi' if it has both types of characters \n */\n function getDirection(string) {\n\n if(typeof string === 'undefined')\n throw new Error('TypeError missing argument');\n\n if(typeof string !== 'string')\n throw new Error('TypeError getDirection expects strings');\n\n if(string === '')\n return NODI;\n \n if(string.indexOf(LTR_MARK) > -1 && string.indexOf(RTL_MARK) > -1)\n return BIDI;\n\n if(string.indexOf(LTR_MARK) > -1)\n return LTR;\n\n if(string.indexOf(RTL_MARK) > -1)\n return RTL;\n\n var hasRtl = hasDirectionCharacters(string, RTL);\n var hasLtr = hasDirectionCharacters(string, LTR);\n \n if(hasRtl && hasLtr)\n return BIDI;\n\n if(hasLtr)\n return LTR;\n\n if(hasRtl)\n return RTL;\n\n return NODI;\n }\n /**\n * Determine if a string has characters in right-to-left or left-to-right Unicode blocks\n * @param {string} string - String to check for characters\n * @param {string} direction - Direction to check. Either 'ltr' or 'rtl' string\n * @returns {boolean} - True if given string has direction specific characters, False otherwise\n */\n function hasDirectionCharacters(string, direction) {\n var i, char, range, charIsRtl,\n hasRtl = false,\n hasLtr = false,\n hasDigit = false;\n\n hasDigit = (string.search(/[0-9]/) > -1);\n\n // Remove white space and non directional characters\n string = string.replace(/[\\s\\n\\0\\f\\t\\v\\'\\\"\\-0-9\\+\\?\\!]+/gm, '');\n\n // Loop through each character\n for(i=0; i<string.length; i++) {\n char = string.charAt(i);\n\n // Assume character is not rtl\n charIsRtl = false;\n\n // Test each character against all ltr script ranges\n for (range in rtlSciriptRanges) {\n\n if (rtlSciriptRanges.hasOwnProperty(range)) {\n\n if ( isInScriptRange( char,\n rtlSciriptRanges[range][0],\n rtlSciriptRanges[range][1]) ){\n\n // If character is rtl, set rtl flag (hasRtl) for string to true\n hasRtl = true;\n\n // Set rtl flag for this character to true\n charIsRtl = true;\n }\n }\n }\n\n // If this character is *not* rtl then it is ltr and string has\n // ltr characters\n if(charIsRtl === false) {\n hasLtr = true;\n }\n }\n\n if(direction === RTL)\n return hasRtl;\n if(direction === LTR)\n return hasLtr || (!hasRtl && hasDigit);\n }\n\n /**\n * Checks if a a character is in a Unicode block range\n * @param {string} char - The character to check. An string with only one character\n * @param {string} from - Starting Unicode code of block in hexadecimal. Example: \"2D30\"\n * @param {string} to - Ending Unicode code of block in hexadecimal. Example: \"2F30\"\n * @returns {boolean} - true if char is in range.\n */\n function isInScriptRange(char, from, to) {\n var charCode = char.charCodeAt(0),\n fromCode = parseInt(from, 16),\n toCode = parseInt(to, 16);\n\n return charCode > fromCode && charCode < toCode;\n }\n\n /**\n * Monkey-patch String global object to expose getDirection method\n */\n function patchStringPrototype () {\n String.prototype.getDirection = function() {\n return getDirection(this.valueOf());\n };\n }\n\n // TODO make it AMD friendly\n if(typeof exports !== 'undefined') {\n exports.getDirection = getDirection;\n exports.patch = patchStringPrototype;\n } else {\n this.stringDirection = {\n getDirection: getDirection,\n patch: patchStringPrototype\n };\n }\n\n}).call(this);\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = ['.entry-summary'];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nexport const TIME_NOW_STRING = /^\\s*(just|right)?\\s*now\\s*/i;\nconst timeUnits = [\n 'seconds?',\n 'minutes?',\n 'hours?',\n 'days?',\n 'weeks?',\n 'months?',\n 'years?',\n];\nconst allTimeUnits = timeUnits.join('|');\nexport const TIME_AGO_STRING = new RegExp(\n `(\\\\d+)\\\\s+(${allTimeUnits})\\\\s+ago`,\n 'i'\n);\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING = new RegExp(\n `(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`,\n 'ig'\n);\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE = new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(author.replace(CLEAN_AUTHOR_RE, '$2').trim());\n}\n","(function(module) {\n 'use strict';\n\n module.exports.is_uri = is_iri;\n module.exports.is_http_uri = is_http_iri;\n module.exports.is_https_uri = is_https_iri;\n module.exports.is_web_uri = is_web_iri;\n // Create aliases\n module.exports.isUri = is_iri;\n module.exports.isHttpUri = is_http_iri;\n module.exports.isHttpsUri = is_https_iri;\n module.exports.isWebUri = is_web_iri;\n\n\n // private function\n // internal URI spitter method - direct from RFC 3986\n var splitUri = function(uri) {\n var splitted = uri.match(/(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/);\n return splitted;\n };\n\n function is_iri(value) {\n if (!value) {\n return;\n }\n\n // check for illegal characters\n if (/[^a-z0-9\\:\\/\\?\\#\\[\\]\\@\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=\\.\\-\\_\\~\\%]/i.test(value)) return;\n\n // check for hex escapes that aren't complete\n if (/%[^0-9a-f]/i.test(value)) return;\n if (/%[0-9a-f](:?[^0-9a-f]|$)/i.test(value)) return;\n\n var splitted = [];\n var scheme = '';\n var authority = '';\n var path = '';\n var query = '';\n var fragment = '';\n var out = '';\n\n // from RFC 3986\n splitted = splitUri(value);\n scheme = splitted[1]; \n authority = splitted[2];\n path = splitted[3];\n query = splitted[4];\n fragment = splitted[5];\n\n // scheme and path are required, though the path can be empty\n if (!(scheme && scheme.length && path.length >= 0)) return;\n\n // if authority is present, the path must be empty or begin with a /\n if (authority && authority.length) {\n if (!(path.length === 0 || /^\\//.test(path))) return;\n } else {\n // if authority is not present, the path must not start with //\n if (/^\\/\\//.test(path)) return;\n }\n\n // scheme must begin with a letter, then consist of letters, digits, +, ., or -\n if (!/^[a-z][a-z0-9\\+\\-\\.]*$/.test(scheme.toLowerCase())) return;\n\n // re-assemble the URL per section 5.3 in RFC 3986\n out += scheme + ':';\n if (authority && authority.length) {\n out += '//' + authority;\n }\n\n out += path;\n\n if (query && query.length) {\n out += '?' + query;\n }\n\n if (fragment && fragment.length) {\n out += '#' + fragment;\n }\n\n return out;\n }\n\n function is_http_iri(value, allowHttps) {\n if (!is_iri(value)) {\n return;\n }\n\n var splitted = [];\n var scheme = '';\n var authority = '';\n var path = '';\n var port = '';\n var query = '';\n var fragment = '';\n var out = '';\n\n // from RFC 3986\n splitted = splitUri(value);\n scheme = splitted[1]; \n authority = splitted[2];\n path = splitted[3];\n query = splitted[4];\n fragment = splitted[5];\n\n if (!scheme) return;\n\n if(allowHttps) {\n if (scheme.toLowerCase() != 'https') return;\n } else {\n if (scheme.toLowerCase() != 'http') return;\n }\n\n // fully-qualified URIs must have an authority section that is\n // a valid host\n if (!authority) {\n return;\n }\n\n // enable port component\n if (/:(\\d+)$/.test(authority)) {\n port = authority.match(/:(\\d+)$/)[0];\n authority = authority.replace(/:\\d+$/, '');\n }\n\n out += scheme + ':';\n out += '//' + authority;\n \n if (port) {\n out += port;\n }\n \n out += path;\n \n if(query && query.length){\n out += '?' + query;\n }\n\n if(fragment && fragment.length){\n out += '#' + fragment;\n }\n \n return out;\n }\n\n function is_https_iri(value) {\n return is_http_iri(value, true);\n }\n\n function is_web_iri(value) {\n return (is_http_iri(value) || is_https_iri(value));\n }\n\n})(module);\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","!function(a,i){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=i(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],i):i(a.moment)}(this,function(o){\"use strict\";void 0===o.version&&o.default&&(o=o.default);var i,A={},n={},t={},s={},u={};o&&\"string\"==typeof o.version||N(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\");var a=o.version.split(\".\"),e=+a[0],r=+a[1];function m(a){return 96<a?a-87:64<a?a-29:a-48}function c(a){var i=0,e=a.split(\".\"),r=e[0],c=e[1]||\"\",o=1,A=0,n=1;for(45===a.charCodeAt(0)&&(n=-(i=1));i<r.length;i++)A=60*A+m(r.charCodeAt(i));for(i=0;i<c.length;i++)o/=60,A+=m(c.charCodeAt(i))*o;return A*n}function f(a){for(var i=0;i<a.length;i++)a[i]=c(a[i])}function l(a,i){var e,r=[];for(e=0;e<i.length;e++)r[e]=a[i[e]];return r}function p(a){var i=a.split(\"|\"),e=i[2].split(\" \"),r=i[3].split(\"\"),c=i[4].split(\" \");return f(e),f(r),f(c),function(a,i){for(var e=0;e<i;e++)a[e]=Math.round((a[e-1]||0)+6e4*a[e]);a[i-1]=1/0}(c,r.length),{name:i[0],abbrs:l(i[1].split(\" \"),r),offsets:l(e,r),untils:c,population:0|i[5]}}function M(a){a&&this._set(p(a))}function b(a,i){this.name=a,this.zones=i}function d(a){var i=a.toTimeString(),e=i.match(/\\([a-z ]+\\)/i);\"GMT\"===(e=e&&e[0]?(e=e[0].match(/[A-Z]/g))?e.join(\"\"):void 0:(e=i.match(/[A-Z]{3,5}/g))?e[0]:void 0)&&(e=void 0),this.at=+a,this.abbr=e,this.offset=a.getTimezoneOffset()}function h(a){this.zone=a,this.offsetScore=0,this.abbrScore=0}function E(a,i){for(var e,r;r=6e4*((i.at-a.at)/12e4|0);)(e=new d(new Date(a.at+r))).offset===a.offset?a=e:i=e;return a}function g(a,i){return a.offsetScore!==i.offsetScore?a.offsetScore-i.offsetScore:a.abbrScore!==i.abbrScore?a.abbrScore-i.abbrScore:a.zone.population!==i.zone.population?i.zone.population-a.zone.population:i.zone.name.localeCompare(a.zone.name)}function P(a,i){var e,r;for(f(i),e=0;e<i.length;e++)r=i[e],u[r]=u[r]||{},u[r][a]=!0}function z(){try{var a=Intl.DateTimeFormat().resolvedOptions().timeZone;if(a&&3<a.length){var i=s[T(a)];if(i)return i;N(\"Moment Timezone found \"+a+\" from the Intl api, but did not have that data loaded.\")}}catch(a){}var e,r,c,o=function(){var a,i,e,r=(new Date).getFullYear()-2,c=new d(new Date(r,0,1)),o=[c];for(e=1;e<48;e++)(i=new d(new Date(r,e,1))).offset!==c.offset&&(a=E(c,i),o.push(a),o.push(new d(new Date(a.at+6e4)))),c=i;for(e=0;e<4;e++)o.push(new d(new Date(r+e,0,1))),o.push(new d(new Date(r+e,6,1)));return o}(),A=o.length,n=function(a){var i,e,r,c=a.length,o={},A=[];for(i=0;i<c;i++)for(e in r=u[a[i].offset]||{})r.hasOwnProperty(e)&&(o[e]=!0);for(i in o)o.hasOwnProperty(i)&&A.push(s[i]);return A}(o),t=[];for(r=0;r<n.length;r++){for(e=new h(S(n[r]),A),c=0;c<A;c++)e.scoreOffsetAt(o[c]);t.push(e)}return t.sort(g),0<t.length?t[0].zone.name:void 0}function T(a){return(a||\"\").toLowerCase().replace(/\\//g,\"_\")}function _(a){var i,e,r,c;for(\"string\"==typeof a&&(a=[a]),i=0;i<a.length;i++)c=T(e=(r=a[i].split(\"|\"))[0]),A[c]=a[i],s[c]=e,P(c,r[2].split(\" \"))}function S(a,i){a=T(a);var e,r=A[a];return r instanceof M?r:\"string\"==typeof r?(r=new M(r),A[a]=r):n[a]&&i!==S&&(e=S(n[a],S))?((r=A[a]=new M)._set(e),r.name=s[a],r):null}function k(a){var i,e,r,c;for(\"string\"==typeof a&&(a=[a]),i=0;i<a.length;i++)r=T((e=a[i].split(\"|\"))[0]),c=T(e[1]),n[r]=c,s[r]=e[0],n[c]=r,s[c]=e[1]}function C(a){_(a.zones),k(a.links),function(a){var i,e,r,c;if(a&&a.length)for(i=0;i<a.length;i++)e=(c=a[i].split(\"|\"))[0].toUpperCase(),r=c[1].split(\" \"),t[e]=new b(e,r)}(a.countries),G.dataVersion=a.version}function B(a){var i=\"X\"===a._f||\"x\"===a._f;return!(!a._a||void 0!==a._tzm||i)}function N(a){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(a)}function G(a){var i=Array.prototype.slice.call(arguments,0,-1),e=arguments[arguments.length-1],r=S(e),c=o.utc.apply(null,i);return r&&!o.isMoment(a)&&B(c)&&c.add(r.parse(c),\"minutes\"),c.tz(e),c}(e<2||2==e&&r<6)&&N(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+o.version+\". See momentjs.com\"),M.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var i,e=+a,r=this.untils;for(i=0;i<r.length;i++)if(e<r[i])return i},countries:function(){var i=this.name;return Object.keys(t).filter(function(a){return-1!==t[a].zones.indexOf(i)})},parse:function(a){var i,e,r,c,o=+a,A=this.offsets,n=this.untils,t=n.length-1;for(c=0;c<t;c++)if(i=A[c],e=A[c+1],r=A[c?c-1:c],i<e&&G.moveAmbiguousForward?i=e:r<i&&G.moveInvalidForward&&(i=r),o<n[c]-6e4*i)return A[c];return A[t]},abbr:function(a){return this.abbrs[this._index(a)]},offset:function(a){return N(\"zone.offset has been deprecated in favor of zone.utcOffset\"),this.offsets[this._index(a)]},utcOffset:function(a){return this.offsets[this._index(a)]}},h.prototype.scoreOffsetAt=function(a){this.offsetScore+=Math.abs(this.zone.utcOffset(a.at)-a.offset),this.zone.abbr(a.at).replace(/[^A-Z]/g,\"\")!==a.abbr&&this.abbrScore++},G.version=\"0.5.36\",G.dataVersion=\"\",G._zones=A,G._links=n,G._names=s,G._countries=t,G.add=_,G.link=k,G.load=C,G.zone=S,G.zoneExists=function a(i){return a.didShowError||(a.didShowError=!0,N(\"moment.tz.zoneExists('\"+i+\"') has been deprecated in favor of !moment.tz.zone('\"+i+\"')\")),!!S(i)},G.guess=function(a){return i&&!a||(i=z()),i},G.names=function(){var a,i=[];for(a in s)s.hasOwnProperty(a)&&(A[a]||A[n[a]])&&s[a]&&i.push(s[a]);return i.sort()},G.Zone=M,G.unpack=p,G.unpackBase60=c,G.needsOffset=B,G.moveInvalidForward=!0,G.moveAmbiguousForward=!1,G.countries=function(){return Object.keys(t)},G.zonesForCountry=function(a,i){if(!(a=function(a){return a=a.toUpperCase(),t[a]||null}(a)))return null;var e=a.zones.sort();return i?e.map(function(a){return{name:a,offset:S(a).utcOffset(new Date)}}):e};var y,L=o.fn;function D(a){return function(){return this._z?this._z.abbr(this):a.call(this)}}function O(a){return function(){return this._z=null,a.apply(this,arguments)}}o.tz=G,o.defaultZone=null,o.updateOffset=function(a,i){var e,r=o.defaultZone;if(void 0===a._z&&(r&&B(a)&&!a._isUTC&&(a._d=o.utc(a._a)._d,a.utc().add(r.parse(a),\"minutes\")),a._z=r),a._z)if(e=a._z.utcOffset(a),Math.abs(e)<16&&(e/=60),void 0!==a.utcOffset){var c=a._z;a.utcOffset(-e,i),a._z=c}else a.zone(e,i)},L.tz=function(a,i){if(a){if(\"string\"!=typeof a)throw new Error(\"Time zone name must be a string, got \"+a+\" [\"+typeof a+\"]\");return this._z=S(a),this._z?o.updateOffset(this,i):N(\"Moment Timezone has no data for \"+a+\". See http://momentjs.com/timezone/docs/#/data-loading/.\"),this}if(this._z)return this._z.name},L.zoneName=D(L.zoneName),L.zoneAbbr=D(L.zoneAbbr),L.utc=O(L.utc),L.local=O(L.local),L.utcOffset=(y=L.utcOffset,function(){return 0<arguments.length&&(this._z=null),y.apply(this,arguments)}),o.tz.setDefault=function(a){return(e<2||2==e&&r<9)&&N(\"Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js \"+o.version+\".\"),o.defaultZone=a?S(a):null,o};var v=o.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(v)?(v.push(\"_z\"),v.push(\"_a\")):v&&(v._z=null),C({version:\"2022c\",zones:[\"Africa/Abidjan|GMT|0|0||48e5\",\"Africa/Nairobi|EAT|-30|0||47e5\",\"Africa/Algiers|CET|-10|0||26e5\",\"Africa/Lagos|WAT|-10|0||17e6\",\"Africa/Maputo|CAT|-20|0||26e5\",\"Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5\",\"Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6\",\"Africa/Johannesburg|SAST|-20|0||84e5\",\"Africa/Juba|EAT CAT|-30 -20|01|24nx0|\",\"Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5\",\"Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|\",\"Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5\",\"Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326\",\"America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4\",\"America/Santo_Domingo|AST|40|0||29e5\",\"America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4\",\"America/Fortaleza|-03|30|0||34e5\",\"America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5\",\"America/Panama|EST|50|0||15e5\",\"America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Bahia|-02 -03|20 30|01|1GCq0|27e5\",\"America/Managua|CST|60|0||22e5\",\"America/La_Paz|-04|40|0||19e5\",\"America/Lima|-05|50|0||11e6\",\"America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5\",\"America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5\",\"America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Phoenix|MST|70|0||42e5\",\"America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6\",\"America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4\",\"America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6\",\"America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4\",\"America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3\",\"America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2\",\"America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5\",\"America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2\",\"America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2\",\"America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Noronha|-02|20|0||30e2\",\"America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5\",\"Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5\",\"America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4\",\"America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4\",\"Antarctica/Casey|+11 +08|-b0 -80|010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10\",\"Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70\",\"Pacific/Port_Moresby|+10|-a0|0||25e4\",\"Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Asia/Tashkent|+05|-50|0||23e5\",\"Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Asia/Baghdad|+03|-30|0||66e5\",\"Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40\",\"Asia/Dhaka|+06|-60|0||16e6\",\"Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Kamchatka|+12|-c0|0||18e4\",\"Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|+07|-70|0||15e6\",\"Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|\",\"Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5\",\"Asia/Kuala_Lumpur|+08|-80|0||71e5\",\"Asia/Kolkata|IST|-5u|0||15e6\",\"Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4\",\"Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|CST|-80|0||23e6\",\"Asia/Colombo|+0530|-5u|0||22e5\",\"Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|+09|-90|0||19e4\",\"Asia/Dubai|+04|-40|0||39e5\",\"Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1q00|18e5\",\"Asia/Hong_Kong|HKT|-80|0||73e5\",\"Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4\",\"Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|WIB|-70|0||31e6\",\"Asia/Jayapura|WIT|-90|0||26e4\",\"Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4\",\"Asia/Kabul|+0430|-4u|0||46e5\",\"Asia/Karachi|PKT|-50|0||24e6\",\"Asia/Kathmandu|+0545|-5J|0||12e5\",\"Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4\",\"Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5\",\"Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3\",\"Asia/Makassar|WITA|-80|0||15e5\",\"Asia/Manila|PST|-80|0||24e6\",\"Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5\",\"Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5\",\"Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5\",\"Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5\",\"Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4\",\"Asia/Rangoon|+0630|-6u|0||48e5\",\"Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4\",\"Asia/Seoul|KST|-90|0||23e6\",\"Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2\",\"Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Tokyo|JST|-90|0||38e6\",\"Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5\",\"Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4\",\"Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5\",\"Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5\",\"Atlantic/Cape_Verde|-01|10|0||50e4\",\"Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST|-a0|0||20e5\",\"Australia/Darwin|ACST|-9u|0||12e4\",\"Australia/Eucla|+0845|-8J|0||368\",\"Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Perth|AWST|-80|0||18e5\",\"Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2\",\"Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5\",\"Etc/GMT-1|+01|-10|0||\",\"Pacific/Guadalcanal|+11|-b0|0||11e4\",\"Pacific/Fakaofo|+13|-d0|0||483\",\"Pacific/Kiritimati|+14|-e0|0||51e2\",\"Etc/GMT-2|+02|-20|0||\",\"Pacific/Tahiti|-10|a0|0||18e4\",\"Pacific/Niue|-11|b0|0||12e2\",\"Etc/GMT+12|-12|c0|0||\",\"Pacific/Galapagos|-06|60|0||25e3\",\"Etc/GMT+7|-07|70|0||\",\"Pacific/Pitcairn|-08|80|0||56\",\"Pacific/Gambier|-09|90|0||125\",\"Etc/UTC|UTC|0|0||\",\"Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5\",\"Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6\",\"Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4\",\"Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4\",\"Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4\",\"Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6\",\"Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|\",\"Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Volgograd|+04 +03|-40 -30|0101|1N7y0 9Jd0 5gn0|10e5\",\"Pacific/Honolulu|HST|a0|0||37e4\",\"MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4\",\"Pacific/Fiji|+13 +12|-d0 -c0|010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 4q00|88e4\",\"Pacific/Guam|ChST|-a0|0||17e4\",\"Pacific/Marquesas|-0930|9u|0||86e2\",\"Pacific/Pago_Pago|SST|b0|0||37e2\",\"Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Bissau\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Monrovia\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|America/Danmarkshavn\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Etc/GMT\",\"Africa/Abidjan|Etc/GMT+0\",\"Africa/Abidjan|Etc/GMT-0\",\"Africa/Abidjan|Etc/GMT0\",\"Africa/Abidjan|Etc/Greenwich\",\"Africa/Abidjan|GMT\",\"Africa/Abidjan|GMT+0\",\"Africa/Abidjan|GMT-0\",\"Africa/Abidjan|GMT0\",\"Africa/Abidjan|Greenwich\",\"Africa/Abidjan|Iceland\",\"Africa/Algiers|Africa/Tunis\",\"Africa/Cairo|Egypt\",\"Africa/Casablanca|Africa/El_Aaiun\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Ndjamena\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|America/Juneau\",\"America/Anchorage|America/Nome\",\"America/Anchorage|America/Sitka\",\"America/Anchorage|America/Yakutat\",\"America/Anchorage|US/Alaska\",\"America/Campo_Grande|America/Cuiaba\",\"America/Chicago|America/Indiana/Knox\",\"America/Chicago|America/Indiana/Tell_City\",\"America/Chicago|America/Knox_IN\",\"America/Chicago|America/Matamoros\",\"America/Chicago|America/Menominee\",\"America/Chicago|America/North_Dakota/Beulah\",\"America/Chicago|America/North_Dakota/Center\",\"America/Chicago|America/North_Dakota/New_Salem\",\"America/Chicago|America/Rainy_River\",\"America/Chicago|America/Rankin_Inlet\",\"America/Chicago|America/Resolute\",\"America/Chicago|America/Winnipeg\",\"America/Chicago|CST6CDT\",\"America/Chicago|Canada/Central\",\"America/Chicago|US/Central\",\"America/Chicago|US/Indiana-Starke\",\"America/Chihuahua|America/Mazatlan\",\"America/Chihuahua|Mexico/BajaSur\",\"America/Denver|America/Boise\",\"America/Denver|America/Cambridge_Bay\",\"America/Denver|America/Edmonton\",\"America/Denver|America/Inuvik\",\"America/Denver|America/Ojinaga\",\"America/Denver|America/Shiprock\",\"America/Denver|America/Yellowknife\",\"America/Denver|Canada/Mountain\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Fortaleza|America/Argentina/Buenos_Aires\",\"America/Fortaleza|America/Argentina/Catamarca\",\"America/Fortaleza|America/Argentina/ComodRivadavia\",\"America/Fortaleza|America/Argentina/Cordoba\",\"America/Fortaleza|America/Argentina/Jujuy\",\"America/Fortaleza|America/Argentina/La_Rioja\",\"America/Fortaleza|America/Argentina/Mendoza\",\"America/Fortaleza|America/Argentina/Rio_Gallegos\",\"America/Fortaleza|America/Argentina/Salta\",\"America/Fortaleza|America/Argentina/San_Juan\",\"America/Fortaleza|America/Argentina/San_Luis\",\"America/Fortaleza|America/Argentina/Tucuman\",\"America/Fortaleza|America/Argentina/Ushuaia\",\"America/Fortaleza|America/Belem\",\"America/Fortaleza|America/Buenos_Aires\",\"America/Fortaleza|America/Catamarca\",\"America/Fortaleza|America/Cayenne\",\"America/Fortaleza|America/Cordoba\",\"America/Fortaleza|America/Jujuy\",\"America/Fortaleza|America/Maceio\",\"America/Fortaleza|America/Mendoza\",\"America/Fortaleza|America/Paramaribo\",\"America/Fortaleza|America/Recife\",\"America/Fortaleza|America/Rosario\",\"America/Fortaleza|America/Santarem\",\"America/Fortaleza|Antarctica/Rothera\",\"America/Fortaleza|Atlantic/Stanley\",\"America/Fortaleza|Etc/GMT+3\",\"America/Godthab|America/Nuuk\",\"America/Halifax|America/Glace_Bay\",\"America/Halifax|America/Goose_Bay\",\"America/Halifax|America/Moncton\",\"America/Halifax|America/Thule\",\"America/Halifax|Atlantic/Bermuda\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/La_Paz|America/Boa_Vista\",\"America/La_Paz|America/Guyana\",\"America/La_Paz|America/Manaus\",\"America/La_Paz|America/Porto_Velho\",\"America/La_Paz|Brazil/West\",\"America/La_Paz|Etc/GMT+4\",\"America/Lima|America/Bogota\",\"America/Lima|America/Guayaquil\",\"America/Lima|Etc/GMT+5\",\"America/Los_Angeles|America/Ensenada\",\"America/Los_Angeles|America/Santa_Isabel\",\"America/Los_Angeles|America/Tijuana\",\"America/Los_Angeles|America/Vancouver\",\"America/Los_Angeles|Canada/Pacific\",\"America/Los_Angeles|Mexico/BajaNorte\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Managua|America/Belize\",\"America/Managua|America/Costa_Rica\",\"America/Managua|America/El_Salvador\",\"America/Managua|America/Guatemala\",\"America/Managua|America/Regina\",\"America/Managua|America/Swift_Current\",\"America/Managua|America/Tegucigalpa\",\"America/Managua|Canada/Saskatchewan\",\"America/Mexico_City|America/Bahia_Banderas\",\"America/Mexico_City|America/Merida\",\"America/Mexico_City|America/Monterrey\",\"America/Mexico_City|Mexico/General\",\"America/New_York|America/Detroit\",\"America/New_York|America/Fort_Wayne\",\"America/New_York|America/Indiana/Indianapolis\",\"America/New_York|America/Indiana/Marengo\",\"America/New_York|America/Indiana/Petersburg\",\"America/New_York|America/Indiana/Vevay\",\"America/New_York|America/Indiana/Vincennes\",\"America/New_York|America/Indiana/Winamac\",\"America/New_York|America/Indianapolis\",\"America/New_York|America/Iqaluit\",\"America/New_York|America/Kentucky/Louisville\",\"America/New_York|America/Kentucky/Monticello\",\"America/New_York|America/Louisville\",\"America/New_York|America/Montreal\",\"America/New_York|America/Nassau\",\"America/New_York|America/Nipigon\",\"America/New_York|America/Pangnirtung\",\"America/New_York|America/Thunder_Bay\",\"America/New_York|America/Toronto\",\"America/New_York|Canada/Eastern\",\"America/New_York|EST5EDT\",\"America/New_York|US/East-Indiana\",\"America/New_York|US/Eastern\",\"America/New_York|US/Michigan\",\"America/Noronha|Atlantic/South_Georgia\",\"America/Noronha|Brazil/DeNoronha\",\"America/Noronha|Etc/GMT+2\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|America/Jamaica\",\"America/Panama|EST\",\"America/Panama|Jamaica\",\"America/Phoenix|America/Creston\",\"America/Phoenix|America/Dawson_Creek\",\"America/Phoenix|America/Hermosillo\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Rio_Branco|America/Eirunepe\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Santo_Domingo|America/Anguilla\",\"America/Santo_Domingo|America/Antigua\",\"America/Santo_Domingo|America/Aruba\",\"America/Santo_Domingo|America/Barbados\",\"America/Santo_Domingo|America/Blanc-Sablon\",\"America/Santo_Domingo|America/Curacao\",\"America/Santo_Domingo|America/Dominica\",\"America/Santo_Domingo|America/Grenada\",\"America/Santo_Domingo|America/Guadeloupe\",\"America/Santo_Domingo|America/Kralendijk\",\"America/Santo_Domingo|America/Lower_Princes\",\"America/Santo_Domingo|America/Marigot\",\"America/Santo_Domingo|America/Martinique\",\"America/Santo_Domingo|America/Montserrat\",\"America/Santo_Domingo|America/Port_of_Spain\",\"America/Santo_Domingo|America/Puerto_Rico\",\"America/Santo_Domingo|America/St_Barthelemy\",\"America/Santo_Domingo|America/St_Kitts\",\"America/Santo_Domingo|America/St_Lucia\",\"America/Santo_Domingo|America/St_Thomas\",\"America/Santo_Domingo|America/St_Vincent\",\"America/Santo_Domingo|America/Tortola\",\"America/Santo_Domingo|America/Virgin\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Whitehorse|America/Dawson\",\"America/Whitehorse|Canada/Yukon\",\"Antarctica/Palmer|America/Punta_Arenas\",\"Asia/Baghdad|Antarctica/Syowa\",\"Asia/Baghdad|Asia/Aden\",\"Asia/Baghdad|Asia/Bahrain\",\"Asia/Baghdad|Asia/Kuwait\",\"Asia/Baghdad|Asia/Qatar\",\"Asia/Baghdad|Asia/Riyadh\",\"Asia/Baghdad|Etc/GMT-3\",\"Asia/Baghdad|Europe/Minsk\",\"Asia/Bangkok|Asia/Ho_Chi_Minh\",\"Asia/Bangkok|Asia/Novokuznetsk\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Saigon\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Etc/GMT-7\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Dhaka|Antarctica/Vostok\",\"Asia/Dhaka|Asia/Almaty\",\"Asia/Dhaka|Asia/Bishkek\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dhaka|Asia/Kashgar\",\"Asia/Dhaka|Asia/Qostanay\",\"Asia/Dhaka|Asia/Thimbu\",\"Asia/Dhaka|Asia/Thimphu\",\"Asia/Dhaka|Asia/Urumqi\",\"Asia/Dhaka|Etc/GMT-6\",\"Asia/Dhaka|Indian/Chagos\",\"Asia/Dili|Etc/GMT-9\",\"Asia/Dili|Pacific/Palau\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Asia/Tbilisi\",\"Asia/Dubai|Asia/Yerevan\",\"Asia/Dubai|Etc/GMT-4\",\"Asia/Dubai|Europe/Samara\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Mauritius\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Gaza|Asia/Hebron\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jakarta|Asia/Pontianak\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kamchatka|Asia/Anadyr\",\"Asia/Kamchatka|Etc/GMT-12\",\"Asia/Kamchatka|Kwajalein\",\"Asia/Kamchatka|Pacific/Funafuti\",\"Asia/Kamchatka|Pacific/Kwajalein\",\"Asia/Kamchatka|Pacific/Majuro\",\"Asia/Kamchatka|Pacific/Nauru\",\"Asia/Kamchatka|Pacific/Tarawa\",\"Asia/Kamchatka|Pacific/Wake\",\"Asia/Kamchatka|Pacific/Wallis\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Brunei\",\"Asia/Kuala_Lumpur|Asia/Kuching\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Etc/GMT-8\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|Asia/Macao\",\"Asia/Shanghai|Asia/Macau\",\"Asia/Shanghai|Asia/Taipei\",\"Asia/Shanghai|PRC\",\"Asia/Shanghai|ROC\",\"Asia/Tashkent|Antarctica/Mawson\",\"Asia/Tashkent|Asia/Aqtau\",\"Asia/Tashkent|Asia/Aqtobe\",\"Asia/Tashkent|Asia/Ashgabat\",\"Asia/Tashkent|Asia/Ashkhabad\",\"Asia/Tashkent|Asia/Atyrau\",\"Asia/Tashkent|Asia/Dushanbe\",\"Asia/Tashkent|Asia/Oral\",\"Asia/Tashkent|Asia/Samarkand\",\"Asia/Tashkent|Etc/GMT-5\",\"Asia/Tashkent|Indian/Kerguelen\",\"Asia/Tashkent|Indian/Maldives\",\"Asia/Tehran|Iran\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Vladivostok|Asia/Ust-Nera\",\"Asia/Yakutsk|Asia/Khandyga\",\"Atlantic/Azores|America/Scoresbysund\",\"Atlantic/Cape_Verde|Etc/GMT+1\",\"Australia/Adelaide|Australia/Broken_Hill\",\"Australia/Adelaide|Australia/South\",\"Australia/Adelaide|Australia/Yancowinna\",\"Australia/Brisbane|Australia/Lindeman\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Darwin|Australia/North\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Antarctica/Macquarie\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/Currie\",\"Australia/Sydney|Australia/Hobart\",\"Australia/Sydney|Australia/Melbourne\",\"Australia/Sydney|Australia/NSW\",\"Australia/Sydney|Australia/Tasmania\",\"Australia/Sydney|Australia/Victoria\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|Asia/Nicosia\",\"Europe/Athens|EET\",\"Europe/Athens|Europe/Bucharest\",\"Europe/Athens|Europe/Helsinki\",\"Europe/Athens|Europe/Kiev\",\"Europe/Athens|Europe/Kyiv\",\"Europe/Athens|Europe/Mariehamn\",\"Europe/Athens|Europe/Nicosia\",\"Europe/Athens|Europe/Riga\",\"Europe/Athens|Europe/Sofia\",\"Europe/Athens|Europe/Tallinn\",\"Europe/Athens|Europe/Uzhgorod\",\"Europe/Athens|Europe/Vilnius\",\"Europe/Athens|Europe/Zaporozhye\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Atlantic/Canary\",\"Europe/Lisbon|Atlantic/Faeroe\",\"Europe/Lisbon|Atlantic/Faroe\",\"Europe/Lisbon|Atlantic/Madeira\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Africa/Ceuta\",\"Europe/Paris|Arctic/Longyearbyen\",\"Europe/Paris|Atlantic/Jan_Mayen\",\"Europe/Paris|CET\",\"Europe/Paris|Europe/Amsterdam\",\"Europe/Paris|Europe/Andorra\",\"Europe/Paris|Europe/Belgrade\",\"Europe/Paris|Europe/Berlin\",\"Europe/Paris|Europe/Bratislava\",\"Europe/Paris|Europe/Brussels\",\"Europe/Paris|Europe/Budapest\",\"Europe/Paris|Europe/Busingen\",\"Europe/Paris|Europe/Copenhagen\",\"Europe/Paris|Europe/Gibraltar\",\"Europe/Paris|Europe/Ljubljana\",\"Europe/Paris|Europe/Luxembourg\",\"Europe/Paris|Europe/Madrid\",\"Europe/Paris|Europe/Malta\",\"Europe/Paris|Europe/Monaco\",\"Europe/Paris|Europe/Oslo\",\"Europe/Paris|Europe/Podgorica\",\"Europe/Paris|Europe/Prague\",\"Europe/Paris|Europe/Rome\",\"Europe/Paris|Europe/San_Marino\",\"Europe/Paris|Europe/Sarajevo\",\"Europe/Paris|Europe/Skopje\",\"Europe/Paris|Europe/Stockholm\",\"Europe/Paris|Europe/Tirane\",\"Europe/Paris|Europe/Vaduz\",\"Europe/Paris|Europe/Vatican\",\"Europe/Paris|Europe/Vienna\",\"Europe/Paris|Europe/Warsaw\",\"Europe/Paris|Europe/Zagreb\",\"Europe/Paris|Europe/Zurich\",\"Europe/Paris|Poland\",\"Europe/Ulyanovsk|Europe/Astrakhan\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Fakaofo|Etc/GMT-13\",\"Pacific/Fakaofo|Pacific/Enderbury\",\"Pacific/Fakaofo|Pacific/Kanton\",\"Pacific/Galapagos|Etc/GMT+6\",\"Pacific/Gambier|Etc/GMT+9\",\"Pacific/Guadalcanal|Etc/GMT-11\",\"Pacific/Guadalcanal|Pacific/Efate\",\"Pacific/Guadalcanal|Pacific/Kosrae\",\"Pacific/Guadalcanal|Pacific/Noumea\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kiritimati|Etc/GMT-14\",\"Pacific/Niue|Etc/GMT+11\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Pitcairn|Etc/GMT+8\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Etc/GMT-10\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tahiti|Etc/GMT+10\",\"Pacific/Tahiti|Pacific/Rarotonga\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv Europe/Uzhgorod Europe/Zaporozhye\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Honolulu Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),o});","module.exports = parseFormat\n\nvar dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\nvar abbreviatedDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\nvar shortestDayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nvar monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\nvar abbreviatedMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\nvar regexDayNames = new RegExp(dayNames.join('|'), 'i')\nvar regexAbbreviatedDayNames = new RegExp(abbreviatedDayNames.join('|'), 'i')\nvar regexShortestDayNames = new RegExp('\\\\b(' + shortestDayNames.join('|') + ')\\\\b', 'i')\nvar regexMonthNames = new RegExp(monthNames.join('|'), 'i')\nvar regexAbbreviatedMonthNames = new RegExp(abbreviatedMonthNames.join('|'), 'i')\n\nvar regexFirstSecondThirdFourth = /(\\d+)(st|nd|rd|th)\\b/i\nvar regexEndian = /(\\d{1,4})([/.-])(\\d{1,2})[/.-](\\d{1,4})/\n\nvar regexTimezone = /((\\+|-)\\d\\d:?\\d\\d)$/\nvar amOrPm = '(' + ['AM?', 'PM?'].join('|') + ')'\nvar regexHoursWithLeadingZeroDigitMinutesSecondsAmPm = new RegExp('0\\\\d\\\\:\\\\d{1,2}\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursWithLeadingZeroDigitMinutesAmPm = new RegExp('0\\\\d\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursWithLeadingZeroDigitAmPm = new RegExp('0\\\\d(\\\\s*)' + amOrPm, 'i')\nvar regexHoursMinutesSecondsAmPm = new RegExp('\\\\d{1,2}\\\\:\\\\d{1,2}\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursMinutesAmPm = new RegExp('\\\\d{1,2}\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursAmPm = new RegExp('\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\n\nvar regexISO8601HoursWithLeadingZeroMinutesSecondsMilliseconds = /\\d{2}:\\d{2}:\\d{2}\\.\\d{3}/\nvar regexISO8601HoursWithLeadingZeroMinutesSecondsCentiSeconds = /\\d{2}:\\d{2}:\\d{2}\\.\\d{2}/\nvar regexISO8601HoursWithLeadingZeroMinutesSecondsDeciSeconds = /\\d{2}:\\d{2}:\\d{2}\\.\\d{1}/\nvar regexHoursWithLeadingZeroMinutesSeconds = /0\\d:\\d{2}:\\d{2}/\nvar regexHoursWithLeadingZeroMinutes = /0\\d:\\d{2}/\nvar regexHoursMinutesSeconds = /\\d{1,2}:\\d{2}:\\d{2}/\nvar regexHoursMinutesSecondsMilliseconds = /\\d{1,2}:\\d{2}:\\d{2}\\.\\d{3}/\nvar regexHoursMinutesSecondsCentiSeconds = /\\d{1,2}:\\d{2}:\\d{2}\\.\\d{2}/\nvar regexHoursMinutesSecondsDeciSeconds = /\\d{1,2}:\\d{2}:\\d{2}\\.\\d{1}/\nvar regexHoursMinutes = /\\d{1,2}:\\d{2}/\nvar regexYearLong = /\\d{4}/\nvar regexDayLeadingZero = /0\\d/\nvar regexDay = /\\d{1,2}/\nvar regexYearShort = /\\d{2}/\n\nvar regexDayShortMonthShort = /^([1-9])\\/([1-9]|0[1-9])$/\nvar regexDayShortMonth = /^([1-9])\\/(1[012])$/\nvar regexDayMonthShort = /^(0[1-9]|[12][0-9]|3[01])\\/([1-9])$/\nvar regexDayMonth = /^(0[1-9]|[12][0-9]|3[01])\\/(1[012]|0[1-9])$/\n\nvar regexMonthShortYearShort = /^([1-9])\\/([1-9][0-9])$/\nvar regexMonthYearShort = /^(0[1-9]|1[012])\\/([1-9][0-9])$/\n\nvar formatIncludesMonth = /([/][M]|[M][/]|[MM]|[MMMM])/\n\nvar regexFillingWords = /\\b(at)\\b/i\n\nvar regexUnixMillisecondTimestamp = /\\d{13}/\nvar regexUnixTimestamp = /\\d{10}/\n\n// option defaults\nvar defaultOrder = {\n '/': 'MDY',\n '.': 'DMY',\n '-': 'YMD'\n}\n\nfunction parseFormat (dateString, options) {\n var format = dateString.toString()\n\n // default options\n options = options || {}\n options.preferredOrder = options.preferredOrder || defaultOrder\n\n // Unix Millisecond Timestamp ☛ x\n format = format.replace(regexUnixMillisecondTimestamp, 'x')\n // Unix Timestamp ☛ X\n format = format.replace(regexUnixTimestamp, 'X')\n\n // escape filling words\n format = format.replace(regexFillingWords, '[$1]')\n\n // DAYS\n\n // Monday ☛ dddd\n format = format.replace(regexDayNames, 'dddd')\n // Mon ☛ ddd\n format = format.replace(regexAbbreviatedDayNames, 'ddd')\n // Mo ☛ dd\n format = format.replace(regexShortestDayNames, 'dd')\n\n // 1st, 2nd, 23rd ☛ do\n format = format.replace(regexFirstSecondThirdFourth, 'Do')\n\n // MONTHS\n\n // January ☛ MMMM\n format = format.replace(regexMonthNames, 'MMMM')\n // Jan ☛ MMM\n format = format.replace(regexAbbreviatedMonthNames, 'MMM')\n\n // replace endians, like 8/20/2010, 20.8.2010 or 2010-8-20\n format = format.replace(regexEndian, replaceEndian.bind(null, options))\n\n // TIME\n\n // timezone +02:00 ☛ Z\n format = format.replace(regexTimezone, 'Z')\n // 23:39:43.331 ☛ 'HH:mm:ss.SSS'\n format = format.replace(regexISO8601HoursWithLeadingZeroMinutesSecondsMilliseconds, 'HH:mm:ss.SSS')\n // 23:39:43.33 ☛ 'HH:mm:ss.SS'\n format = format.replace(regexISO8601HoursWithLeadingZeroMinutesSecondsCentiSeconds, 'HH:mm:ss.SS')\n // 23:39:43.3 ☛ 'HH:mm:ss.S'\n format = format.replace(regexISO8601HoursWithLeadingZeroMinutesSecondsDeciSeconds, 'HH:mm:ss.S')\n function replaceWithAmPm (timeFormat) {\n return function (match, whitespace, amPm) {\n return timeFormat + whitespace + (amPm[0].toUpperCase() === amPm[0] ? 'A' : 'a')\n }\n }\n // 05:30:20pm ☛ hh:mm:ssa\n format = format.replace(regexHoursWithLeadingZeroDigitMinutesSecondsAmPm, replaceWithAmPm('hh:mm:ss'))\n // 10:30:20pm ☛ h:mm:ssa\n format = format.replace(regexHoursMinutesSecondsAmPm, replaceWithAmPm('h:mm:ss'))\n // 05:30pm ☛ hh:mma\n format = format.replace(regexHoursWithLeadingZeroDigitMinutesAmPm, replaceWithAmPm('hh:mm'))\n // 10:30pm ☛ h:mma\n format = format.replace(regexHoursMinutesAmPm, replaceWithAmPm('h:mm'))\n // 05pm ☛ hha\n format = format.replace(regexHoursWithLeadingZeroDigitAmPm, replaceWithAmPm('hh'))\n // 10pm ☛ ha\n format = format.replace(regexHoursAmPm, replaceWithAmPm('h'))\n // 05:30:20 ☛ HH:mm:ss\n format = format.replace(regexHoursWithLeadingZeroMinutesSeconds, 'HH:mm:ss')\n // 5:30:20.222 ☛ H:mm:ss.SSS\n format = format.replace(regexHoursMinutesSecondsMilliseconds, 'H:mm:ss.SSS')\n // 5:30:20.22 ☛ H:mm:ss.SS\n format = format.replace(regexHoursMinutesSecondsCentiSeconds, 'H:mm:ss.SS')\n // 5:30:20.2 ☛ H:mm:ss.S\n format = format.replace(regexHoursMinutesSecondsDeciSeconds, 'H:mm:ss.S')\n // 10:30:20 ☛ H:mm:ss\n format = format.replace(regexHoursMinutesSeconds, 'H:mm:ss')\n // 05:30 ☛ H:mm\n format = format.replace(regexHoursWithLeadingZeroMinutes, 'HH:mm')\n // 10:30 ☛ HH:mm\n format = format.replace(regexHoursMinutes, 'H:mm')\n\n // do we still have numbers left?\n\n // Lets check for 4 digits first, these are years for sure\n format = format.replace(regexYearLong, 'YYYY')\n\n // check if both numbers are < 13, then it must be D/M\n format = format.replace(regexDayShortMonthShort, 'D/M')\n\n // check if first number is < 10 && last < 13, then it must be D/MM\n format = format.replace(regexDayShortMonth, 'D/MM')\n\n // check if last number is < 32 && last < 10, then it must be DD/M\n format = format.replace(regexDayMonthShort, 'DD/M')\n\n // check if both numbers are > 10, but first < 32 && last < 13, then it must be DD/MM\n format = format.replace(regexDayMonth, 'DD/MM')\n\n // check if first < 10 && last > 12, then it must be M/YY\n format = format.replace(regexMonthShortYearShort, 'M/YY')\n\n // check if first < 13 && last > 12, then it must be MM/YY\n format = format.replace(regexMonthYearShort, 'MM/YY')\n\n // to prevent 9.20 gets formated to D.Y, we format the complete date first, then go for the time\n if (format.match(formatIncludesMonth)) {\n var regexHoursDotWithLeadingZeroOrDoubleDigitMinutes = /0\\d.\\d{2}|\\d{2}.\\d{2}/\n var regexHoursDotMinutes = /\\d{1}.\\d{2}/\n\n format = format.replace(regexHoursDotWithLeadingZeroOrDoubleDigitMinutes, 'H.mm')\n format = format.replace(regexHoursDotMinutes, 'h.mm')\n }\n\n // now, the next number, if existing, must be a day\n format = format.replace(regexDayLeadingZero, 'DD')\n format = format.replace(regexDay, 'D')\n\n // last but not least, there could still be a year left\n format = format.replace(regexYearShort, 'YY')\n\n if (format.length < 1) {\n format = undefined\n }\n\n return format\n}\n\n// if we can't find an endian based on the separator, but\n// there still is a short date with day, month & year,\n// we try to make a smart decision to identify the order\nfunction replaceEndian (options, matchedPart, first, separator, second, third) {\n var parts\n var hasSingleDigit = Math.min(first.length, second.length, third.length) === 1\n var hasQuadDigit = Math.max(first.length, second.length, third.length) === 4\n var preferredOrder = typeof options.preferredOrder === 'string' ? options.preferredOrder : options.preferredOrder[separator]\n\n first = parseInt(first, 10)\n second = parseInt(second, 10)\n third = parseInt(third, 10)\n parts = [first, second, third]\n preferredOrder = preferredOrder.toUpperCase()\n\n // If first is a year, order will always be Year-Month-Day\n if (first > 31) {\n parts[0] = hasQuadDigit ? 'YYYY' : 'YY'\n parts[1] = hasSingleDigit ? 'M' : 'MM'\n parts[2] = hasSingleDigit ? 'D' : 'DD'\n return parts.join(separator)\n }\n\n // Second will never be the year. And if it is a day,\n // the order will always be Month-Day-Year\n if (second > 12) {\n parts[0] = hasSingleDigit ? 'M' : 'MM'\n parts[1] = hasSingleDigit ? 'D' : 'DD'\n parts[2] = hasQuadDigit ? 'YYYY' : 'YY'\n return parts.join(separator)\n }\n\n // if third is a year ...\n if (third > 31) {\n parts[2] = hasQuadDigit ? 'YYYY' : 'YY'\n\n // ... try to find day in first and second.\n // If found, the remaining part is the month.\n if (preferredOrder[0] === 'M' && first < 13) {\n parts[0] = hasSingleDigit ? 'M' : 'MM'\n parts[1] = hasSingleDigit ? 'D' : 'DD'\n return parts.join(separator)\n }\n parts[0] = hasSingleDigit ? 'D' : 'DD'\n parts[1] = hasSingleDigit ? 'M' : 'MM'\n return parts.join(separator)\n }\n\n // if we had no luck until here, we use the preferred order\n parts[preferredOrder.indexOf('D')] = hasSingleDigit ? 'D' : 'DD'\n parts[preferredOrder.indexOf('M')] = hasSingleDigit ? 'M' : 'MM'\n parts[preferredOrder.indexOf('Y')] = hasQuadDigit ? 'YYYY' : 'YY'\n\n return parts.join(separator)\n}\n","var parseFormat = require('./lib/parseformat')\nmodule.exports = parseFormat\n\n/* istanbul ignore next */\nif (typeof window !== 'undefined' && window.moment) {\n window.moment.parseFormat = parseFormat\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_AGO_STRING,\n TIME_NOW_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n if (TIME_AGO_STRING.test(dateString)) {\n const fragments = TIME_AGO_STRING.exec(dateString);\n return moment().subtract(fragments[1], fragments[2]);\n }\n\n if (TIME_NOW_STRING.test(dateString)) {\n return moment();\n }\n\n return timezone\n ? moment.tz(dateString, format || parseFormat(dateString), timezone)\n : moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(\n dateString,\n { timezone, format } = {}\n) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n if (SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10) * 1000).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n { $, cleanConditionally = true, title = '', url = '', defaultCleaner = true }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like <title>, etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '')\n $p.remove();\n });\n\n return $;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport { TITLE_SPLITTERS_RE, DOMAIN_ENDINGS_RE } from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] = Reflect.ownKeys(termCounts).reduce(\n (acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n },\n [0, 0]\n );\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce(\n (acc, end) => (acc.length > end.length ? acc : end),\n ''\n );\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle\n .slice(-1)[0]\n .toLowerCase()\n .replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","var _ = require('lodash');\n\nfunction sum (arr) {\n\treturn arr.reduce(function (p, c, i, a) {\n\t\treturn p + c;\n\t});\n}\n\nfunction ensureArr (arr) {\n\tif (_.isArray(arr)) {\n\t\treturn arr;\n\t} else if (typeof arr === 'string') {\n\t\treturn arr.split('');\n\t} else {\n\t\tthrow Error('Parameter must be a string or array.');\n\t}\n}\n\n/**\n * Computes the jaro-winkler distance for two given arrays.\n *\n * NOTE: this implementation is based on the one found in the\n * Lucene Java library.\n *\n * h3 Examples:\n *\n * wuzzy.jarowinkler(\n * \t\t['D', 'W', 'A', 'Y', 'N', 'E'],\n * \t\t['D', 'U', 'A', 'N', 'E']\n * \t);\n * \t// -> 0.840\n *\n * wuzzy.jarowinkler(\n * \t\t'DWAYNE',\n * \t\t'DUANE'\n * \t);\n * \t// -> 0.840\n *\n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @param {Number} t - the threshold for adding\n * the winkler bonus (defaults to 0.7)\n * @return {Number} returns the jaro-winkler distance for\n * the two provided arrays.\n */\nexports.jarowinkler = function (a, b, t) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tvar max, min;\n\tif (a.length > b.length) {\n\t\tmax = a;\n\t\tmin = b;\n\t} else {\n\t\tmax = b;\n\t\tmin = a;\n\t}\n\tvar threshold = t ? t : .7;\n\tvar weight = .1;\n\tvar range = Math.floor(Math.max((max.length / 2) - 1, 0));\n\tvar mIdx = [];\n\tvar mFlg = [];\n\tvar mi, xi, xn, c1;\n\tvar matches = 0;\n\tfor (mi = 0; mi < min.length; mi++) {\n\t\tc1 = min[mi];\n\t\tfor (xi = Math.max(mi - range, 0), xn = Math.min(mi + range + 1, max.length);\n\t\t\t xi < xn;\n\t\t\t xi++) {\n\t\t\tif (!mFlg[xi] && (c1 === max[xi])) {\n\t\t\t\tmIdx[mi] = xi;\n\t\t\t\tmFlg[xi] = true;\n\t\t\t\tmatches++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar ma = [];\n\tvar mb = [];\n\tvar i, si;\n\tvar trans = 0;\n\tvar prefix = 0;\n\tfor (i = 0, si = 0; i < min.length; i++) {\n\t\tif (mIdx[i] > -1) {\n\t\t\tma[si] = min[i];\n\t\t\tsi++;\n\t\t}\n\t}\n\tfor(i = 0, si = 0; i < max.length; i++) {\n\t\tif (mFlg[i]) {\n\t\t\tmb[si] = max[i];\n\t\t\tsi++;\n\t\t}\n\t}\n\tfor (mi = 0; mi < ma.length; mi++) {\n\t\tif (ma[mi] !== mb[mi]) {\n\t\t\ttrans++;\n\t\t}\n\t}\n\tfor (mi = 0; mi < min.length; mi++) {\n\t\tif (a[mi] === b[mi]) {\n\t\t\tprefix++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tvar m = matches;\n\tvar t = trans / 2;\n\tif (!m) {\n\t\treturn 0;\n\t} else {\n\t\tvar j = (m / a.length + m / b.length + (m - t) / m) / 3\n\t\tvar jw = (j < threshold\n\t\t\t? j\n\t\t\t: (j + Math.min(weight, 1 / max.length) * prefix * (1 - j)));\n\t\treturn jw;\n\t}\n\n}\n\n/**\n * Calculates the levenshtein distance for the\n * two provided arrays and returns the normalized\n * distance.\n *\n * h3 Examples:\n *\n * wuzzy.levenshtein(\n * \t\t['D', 'W', 'A', 'Y', 'N', 'E'],\n * \t\t['D', 'U', 'A', 'N', 'E']\n * \t);\n * \t// -> 0.66666667\n *\n * \t\tor\n *\n * wuzzy.levenshtein(\n * \t\t'DWAYNE',\n * \t\t'DUANE'\n * \t);\n * \t// -> 0.66666667\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @param {Object} w - (optional) a set of key/value pairs\n * definining weights for the deletion (key: d), insertion\n * (key: i), and substitution (key: s). default values are\n * 1 for all operations.\n * @return {Number} returns the levenshtein distance for\n * the two provided arrays.\n */\nexports.levenshtein = function (a, b, w) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tif (a.length === 0) {\n\t\treturn b.length;\n\t}\n\tif (b.length === 0) {\n\t\treturn a.length;\n\t}\n\n\tvar weights = (w ? w : {\n\t\td: 1,\n\t\ti: 1,\n\t\ts: 1\n\t});\n\tvar v0 = [];\n\tvar v1 = [];\n\tvar vlen = b.length + 1;\n\tvar i,j;\n\tvar cost;\n\tvar mlen;\n\n\tfor (i = 0; i < vlen; i++) {\n\t\tv0[i] = i;\n\t}\n\n\tfor (i = 0; i < a.length; i++) {\n\t\tv1[0] = i + 1;\n\n\t\tfor (j = 0; j < b.length; j++) {\n\t\t\tcost = (a[i] === b[j]) ? 0 : weights.s;\n\t\t\tv1[j + 1] = Math.min(\n\t\t\t\tv1[j] + weights.d,\n\t\t\t\tv0[j + 1] + weights.i,\n\t\t\t\tv0[j] + cost\n\t\t\t);\n\t\t}\n\n\t\tfor (j = 0; j < vlen; j++) {\n\t\t\tv0[j] = v1[j];\n\t\t}\n\t}\n\n\tmlen = Math.max(a.length, b.length);\n\n\treturn (mlen - v1[b.length]) / mlen;\n}\n\n/**\n * Computes the n-gram edit distance for any n (defaults to 2).\n *\n * NOTE: this implementation is based on the one found in the\n * Lucene Java library.\n *\n * h3 Examples:\n *\n * wuzzy.ngram(\n * \t\t['D', 'W', 'A', 'Y', 'N', 'E'],\n * \t\t['D', 'U', 'A', 'N', 'E']\n * \t);\n * \t// -> 0.583\n *\n * \t\tor\n *\n * wuzzy.ngram(\n * \t\t'DWAYNE',\n * \t\t'DUANE'\n * \t);\n * \t// -> 0.583\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @param {Number} ng - (optional) the n-gram size to work with (defaults to 2)\n * @return {Number} returns the ngram distance for\n * the two provided arrays.\n */\nexports.ngram = function (a, b, ng) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tvar al = a.length;\n\tvar bl = b.length;\n\tvar n = (ng ? ng : 2);\n\tvar cost;\n\tvar i, j, ni, ti, tn, ec;\n\tvar sa = [];\n\tvar p = [];\n\tvar d = [];\n\tvar _d = [];\n\tvar t_j = [];\n\tvar pdl = al + 1;\n\n\t// empty string situation\n\tif ((al === 0) || (bl === 0)) {\n\t\tif (al === bl) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t// smaller than n situation\n\tcost = 0;\n\tif ((al < n) || (bl < n)) {\n\t\tfor (i = 0, ni = Math.min(al, bl); i < ni; i++) {\n\t\t\tif (a[i] === b[i]) {\n\t\t\t\tcost++;\n\t\t\t}\n\t\t}\n\t\treturn cost / Math.max(al, bl);\n\t}\n\n\tfor (i = 0; i < (al + n - 1); i++) {\n\t\tif (i < (n - 1)) {\n\t\t\tsa[i] = 0;\n\t\t} else {\n\t\t\tsa[i] = a[i - n + 1];\n\t\t}\n\t}\n\n\tfor (i = 0; i <= al; i++) {\n\t\tp[i] = i;\n\t}\n\n\tfor (j = 1; j <= bl; j++) {\n\t\tif (j < n) {\n\t\t\tfor (ti = 0; ti < (n - j); ti++) {\n\t\t\t\tt_j[ti] = 0;\n\t\t\t}\n\t\t\tfor (ti = (n - j); ti < n; ti++) {\n\t\t\t\tt_j[ti] = b[ti - (n - j)];\n\t\t\t}\n\t\t} else {\n\t\t\tt_j = b.slice(j - n, j);\n\t\t}\n\t\td[0] = j;\n\t\tfor (i = 1; i <= al; i++) {\n\t\t\tcost = 0;\n\t\t\ttn = n;\n\t\t\tfor (ni = 0; ni < n; ni++) {\n\t\t\t\tif (sa[i - 1 + ni] !== t_j[ni]) {\n\t\t\t\t\tcost++;\n\t\t\t\t} else if (sa[i - 1 + ni] === 0) {\n\t\t\t\t\ttn--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tec = cost / tn;\n\t\t\td[i] = Math.min(\n\t\t\t\tMath.min(\n\t\t\t\t\td[i - 1] + 1,\n\t\t\t\t\tp[i] + 1\n\t\t\t\t),\n\t\t\t\tp[i - 1] + ec\n\t\t\t);\n\t\t}\n\n\t\t_d = p;\n\t\tp = d;\n\t\td = _d;\n\t}\n\n\treturn 1.0 - (p[al] / Math.max(al, bl));\n}\n\n/**\n * Calculates a pearson correlation score for two given\n * objects (compares values of similar keys).\n *\n * h3 Examples:\n *\n * wuzzy.pearson(\n * \t\t{a: 2.5, b: 3.5, c: 3.0, d: 3.5, e: 2.5, f: 3.0},\n * \t\t{a: 3.0, b: 3.5, c: 1.5, d: 5.0, e: 3.5, f: 3.0, g: 5.0}\n * \t);\n * \t// -> 0.396\n *\n * \t\tor\n *\n * wuzzy.pearson(\n * \t\t{a: 2.5, b: 1},\n * \t\t{o: 3.5, e: 6.0}\n * \t);\n * \t// -> 1.0\n * \n * @param {Object} a - the first object to compare\n * @param {Object} b - the second object to compare\n * @return {Number} returns the pearson correlation for\n * the two provided arrays.\n */\nexports.pearson = function (a, b) {\n\tvar sk = [];\n\tObject.keys(a).forEach(function (k) {\n\t\tif (b[k]) {\n\t\t\tsk.push(k);\n\t\t}\n\t});\n\tvar n = sk.length;\n\n\tif (n === 0) {\n\t\treturn 0;\n\t}\n\n\tvar sa = sum(sk.map(function (k) {\n\t\treturn a[k];\n\t}));\n\tvar sb = sum(sk.map(function (k) {\n\t\treturn b[k];\n\t}));\n\n\tvar sas = sum(sk.map(function (k) {\n\t\treturn Math.pow(a[k], 2);\n\t}));\n\n\tvar sbs = sum(sk.map(function (k) {\n\t\treturn Math.pow(b[k], 2);\n\t}));\n\n\tvar sp = sum(sk.map(function (k) {\n\t\treturn a[k] * b[k];\n\t}));\n\n\tvar num = sp - (sa * sb / n);\n\tvar den = Math.sqrt((sas - Math.pow(sa, 2) / n) * (sbs - Math.pow(sb, 2) / n));\n\n\tif (den === 0) {\n\t\treturn 0;\n\t} else {\n\t\treturn num / den;\n\t}\n}\n\n/**\n * Calculates the jaccard index for the two\n * provided arrays.\n *\n * h3 Examples:\n *\n * wuzzy.jaccard(\n * \t\t['a', 'b', 'c', 'd', 'e', 'f'],\n * \t\t['a', 'e', 'f']\n * \t);\n * \t// -> 0.5\n *\n * \t\tor\n *\n * wuzzy.jaccard(\n * \t\t'abcdef',\n * \t\t'aef'\n * \t);\n * \t// -> 0.5\n *\n * \t\tor \n *\n * wuzzy.jaccard(\n * \t\t['abe', 'babe', 'cabe', 'dabe', 'eabe', 'fabe'],\n * \t\t['babe']\n * \t);\n * \t// -> 0.16666667\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @return {Number} returns the jaccard index for\n * the two provided arrays.\n */\nexports.jaccard = function (a, b) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\treturn (_.intersection(a, b).length / _.union(a, b).length);\n}\n\n/**\n * Calculates the tanimoto distance (weighted jaccard index).\n *\n * h3 Examples:\n *\n * wuzzy.tanimoto(\n * \t\t['a', 'b', 'c', 'd', 'd', 'e', 'f', 'f'],\n * \t\t['a', 'e', 'f']\n * \t);\n * \t// -> 0.375\n *\n * \t\tor\n *\n * wuzzy.tanimoto(\n * \t\t'abcddeff',\n * \t\t'aef'\n * \t);\n * \t// -> 0.375\n *\n * \t\tor \n *\n * wuzzy.tanimoto(\n * \t\t['abe', 'babe', 'cabe', 'dabe', 'eabe', 'fabe', 'fabe'],\n * \t\t['babe']\n * \t);\n * \t// -> 0.14285714\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @return {Number} returns the tanimoto distance for\n * the two provided arrays.\n */\nexports.tanimoto = function (a, b) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tvar both = _.intersection(a, b).length;\n\treturn (both / (a.length + b.length - both));\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import { stripTags } from 'utils/dom';\nimport { excerptContent, normalizeSpaces } from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10))\n return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import { stripUnlikelyCandidates, convertToParagraphs } from 'utils/dom';\n\nimport { scoreContent, findTopCandidate } from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import { CANDIDATES_WHITELIST, CANDIDATES_BLACKLIST } from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*')\n .not('a')\n .each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n }\n if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(extractBestNode($, opts), {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n },\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = ['og:title'];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n // eslint-disable-next-line no-restricted-syntax\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta(\n $,\n DATE_PUBLISHED_META_TAGS,\n metaCache,\n false\n );\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = ['link[rel=image_src]'];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach($node => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) {\n // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return $imgs.length / 2 - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*')\n .first()\n .prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl = extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] = Reflect.ownKeys(imgScores).reduce(\n (acc, key) => (imgScores[key] > acc[1] ? [key, imgScores[key]] : acc),\n [null, 0]\n );\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n","// Generated by CoffeeScript 1.8.0\n(function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof exports === 'object') {\n return module.exports = factory();\n } else {\n return root.Heap = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n}).call(this);\n","// Generated by CoffeeScript 1.3.1\n\n/*\nModule difflib -- helpers for computing deltas between objects.\n\nFunction getCloseMatches(word, possibilities, n=3, cutoff=0.6):\n Use SequenceMatcher to return list of the best \"good enough\" matches.\n\nFunction contextDiff(a, b):\n For two lists of strings, return a delta in context diff format.\n\nFunction ndiff(a, b):\n Return a delta: the difference between `a` and `b` (lists of strings).\n\nFunction restore(delta, which):\n Return one of the two sequences that generated an ndiff delta.\n\nFunction unifiedDiff(a, b):\n For two lists of strings, return a delta in unified diff format.\n\nClass SequenceMatcher:\n A flexible class for comparing pairs of sequences of any type.\n\nClass Differ:\n For producing human-readable deltas from sequences of lines of text.\n*/\n\n\n(function() {\n var Differ, Heap, IS_CHARACTER_JUNK, IS_LINE_JUNK, SequenceMatcher, contextDiff, floor, getCloseMatches, max, min, ndiff, restore, unifiedDiff, _any, _arrayCmp, _calculateRatio, _countLeading, _formatRangeContext, _formatRangeUnified, _has,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i } return -1 }\n\n floor = Math.floor, max = Math.max, min = Math.min\n\n Heap = require('heap')\n\n _calculateRatio = function(matches, length) {\n if (length) {\n return 2.0 * matches / length\n } else {\n return 1.0\n }\n }\n\n _arrayCmp = function(a, b) {\n var i, la, lb, _i, _ref, _ref1\n _ref = [a.length, b.length], la = _ref[0], lb = _ref[1]\n for (i = _i = 0, _ref1 = min(la, lb); 0 <= _ref1 ? _i < _ref1 : _i > _ref1; i = 0 <= _ref1 ? ++_i : --_i) {\n if (a[i] < b[i]) {\n return -1\n }\n if (a[i] > b[i]) {\n return 1\n }\n }\n return la - lb\n }\n\n _has = function(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key)\n }\n\n _any = function(items) {\n var item, _i, _len\n for (_i = 0, _len = items.length; _i < _len; _i++) {\n item = items[_i]\n if (item) {\n return true\n }\n }\n return false\n }\n\n SequenceMatcher = (function() {\n\n /*\n SequenceMatcher is a flexible class for comparing pairs of sequences of\n any type, so long as the sequence elements are hashable. The basic\n algorithm predates, and is a little fancier than, an algorithm\n published in the late 1980's by Ratcliff and Obershelp under the\n hyperbolic name \"gestalt pattern matching\". The basic idea is to find\n the longest contiguous matching subsequence that contains no \"junk\"\n elements (R-O doesn't address junk). The same idea is then applied\n recursively to the pieces of the sequences to the left and to the right\n of the matching subsequence. This does not yield minimal edit\n sequences, but does tend to yield matches that \"look right\" to people.\n \n SequenceMatcher tries to compute a \"human-friendly diff\" between two\n sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the\n longest *contiguous* & junk-free matching subsequence. That's what\n catches peoples' eyes. The Windows(tm) windiff has another interesting\n notion, pairing up elements that appear uniquely in each sequence.\n That, and the method here, appear to yield more intuitive difference\n reports than does diff. This method appears to be the least vulnerable\n to synching up on blocks of \"junk lines\", though (like blank lines in\n ordinary text files, or maybe \"<P>\" lines in HTML files). That may be\n because this is the only method of the 3 that has a *concept* of\n \"junk\" <wink>.\n \n Example, comparing two strings, and considering blanks to be \"junk\":\n \n >>> isjunk = (c) -> c is ' '\n >>> s = new SequenceMatcher(isjunk,\n 'private Thread currentThread;',\n 'private volatile Thread currentThread;')\n \n .ratio() returns a float in [0, 1], measuring the \"similarity\" of the\n sequences. As a rule of thumb, a .ratio() value over 0.6 means the\n sequences are close matches:\n \n >>> s.ratio().toPrecision(3)\n '0.866'\n \n If you're only interested in where the sequences match,\n .getMatchingBlocks() is handy:\n \n >>> for [a, b, size] in s.getMatchingBlocks()\n ... console.log(\"a[#{a}] and b[#{b}] match for #{size} elements\");\n a[0] and b[0] match for 8 elements\n a[8] and b[17] match for 21 elements\n a[29] and b[38] match for 0 elements\n \n Note that the last tuple returned by .get_matching_blocks() is always a\n dummy, (len(a), len(b), 0), and this is the only case in which the last\n tuple element (number of elements matched) is 0.\n \n If you want to know how to change the first sequence into the second,\n use .get_opcodes():\n \n >>> for [op, a1, a2, b1, b2] in s.getOpcodes()\n ... console.log \"#{op} a[#{a1}:#{a2}] b[#{b1}:#{b2}]\"\n equal a[0:8] b[0:8]\n insert a[8:8] b[8:17]\n equal a[8:29] b[17:38]\n \n See the Differ class for a fancy human-friendly file differencer, which\n uses SequenceMatcher both to compare sequences of lines, and to compare\n sequences of characters within similar (near-matching) lines.\n \n See also function getCloseMatches() in this module, which shows how\n simple code building on SequenceMatcher can be used to do useful work.\n \n Timing: Basic R-O is cubic time worst case and quadratic time expected\n case. SequenceMatcher is quadratic time for the worst case and has\n expected-case behavior dependent in a complicated way on how many\n elements the sequences have in common; best case time is linear.\n \n Methods:\n \n constructor(isjunk=null, a='', b='')\n Construct a SequenceMatcher.\n \n setSeqs(a, b)\n Set the two sequences to be compared.\n \n setSeq1(a)\n Set the first sequence to be compared.\n \n setSeq2(b)\n Set the second sequence to be compared.\n \n findLongestMatch(alo, ahi, blo, bhi)\n Find longest matching block in a[alo:ahi] and b[blo:bhi].\n \n getMatchingBlocks()\n Return list of triples describing matching subsequences.\n \n getOpcodes()\n Return list of 5-tuples describing how to turn a into b.\n \n ratio()\n Return a measure of the sequences' similarity (float in [0,1]).\n \n quickRatio()\n Return an upper bound on .ratio() relatively quickly.\n \n realQuickRatio()\n Return an upper bound on ratio() very quickly.\n */\n\n\n function SequenceMatcher(isjunk, a, b, autojunk) {\n this.isjunk = isjunk\n if (a == null) {\n a = ''\n }\n if (b == null) {\n b = ''\n }\n this.autojunk = autojunk != null ? autojunk : true\n /*\n Construct a SequenceMatcher.\n \n Optional arg isjunk is null (the default), or a one-argument\n function that takes a sequence element and returns true iff the\n element is junk. Null is equivalent to passing \"(x) -> 0\", i.e.\n no elements are considered to be junk. For example, pass\n (x) -> x in ' \\t'\n if you're comparing lines as sequences of characters, and don't\n want to synch up on blanks or hard tabs.\n \n Optional arg a is the first of two sequences to be compared. By\n default, an empty string. The elements of a must be hashable. See\n also .setSeqs() and .setSeq1().\n \n Optional arg b is the second of two sequences to be compared. By\n default, an empty string. The elements of b must be hashable. See\n also .setSeqs() and .setSeq2().\n \n Optional arg autojunk should be set to false to disable the\n \"automatic junk heuristic\" that treats popular elements as junk\n (see module documentation for more information).\n */\n\n this.a = this.b = null\n this.setSeqs(a, b)\n }\n\n SequenceMatcher.prototype.setSeqs = function(a, b) {\n /* \n Set the two sequences to be compared. \n \n >>> s = new SequenceMatcher()\n >>> s.setSeqs('abcd', 'bcde')\n >>> s.ratio()\n 0.75\n */\n this.setSeq1(a)\n return this.setSeq2(b)\n }\n\n SequenceMatcher.prototype.setSeq1 = function(a) {\n /* \n Set the first sequence to be compared. \n \n The second sequence to be compared is not changed.\n \n >>> s = new SequenceMatcher(null, 'abcd', 'bcde')\n >>> s.ratio()\n 0.75\n >>> s.setSeq1('bcde')\n >>> s.ratio()\n 1.0\n \n SequenceMatcher computes and caches detailed information about the\n second sequence, so if you want to compare one sequence S against\n many sequences, use .setSeq2(S) once and call .setSeq1(x)\n repeatedly for each of the other sequences.\n \n See also setSeqs() and setSeq2().\n */\n if (a === this.a) {\n return\n }\n this.a = a\n return this.matchingBlocks = this.opcodes = null\n }\n\n SequenceMatcher.prototype.setSeq2 = function(b) {\n /*\n Set the second sequence to be compared. \n \n The first sequence to be compared is not changed.\n \n >>> s = new SequenceMatcher(null, 'abcd', 'bcde')\n >>> s.ratio()\n 0.75\n >>> s.setSeq2('abcd')\n >>> s.ratio()\n 1.0\n \n SequenceMatcher computes and caches detailed information about the\n second sequence, so if you want to compare one sequence S against\n many sequences, use .setSeq2(S) once and call .setSeq1(x)\n repeatedly for each of the other sequences.\n \n See also setSeqs() and setSeq1().\n */\n if (b === this.b) {\n return\n }\n this.b = b\n this.matchingBlocks = this.opcodes = null\n this.fullbcount = null\n return this._chainB()\n }\n\n SequenceMatcher.prototype._chainB = function() {\n var b, b2j, elt, i, idxs, indices, isjunk, junk, n, ntest, popular, _i, _j, _len, _len1, _ref\n b = this.b\n this.b2j = b2j = {}\n for (i = _i = 0, _len = b.length; _i < _len; i = ++_i) {\n elt = b[i]\n indices = _has(b2j, elt) ? b2j[elt] : b2j[elt] = []\n indices.push(i)\n }\n junk = {}\n isjunk = this.isjunk\n if (isjunk) {\n _ref = Object.keys(b2j)\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n elt = _ref[_j]\n if (isjunk(elt)) {\n junk[elt] = true\n delete b2j[elt]\n }\n }\n }\n popular = {}\n n = b.length\n if (this.autojunk && n >= 200) {\n ntest = floor(n / 100) + 1\n for (elt in b2j) {\n idxs = b2j[elt]\n if (idxs.length > ntest) {\n popular[elt] = true\n delete b2j[elt]\n }\n }\n }\n this.isbjunk = function(b) {\n return _has(junk, b)\n }\n return this.isbpopular = function(b) {\n return _has(popular, b)\n }\n }\n\n SequenceMatcher.prototype.findLongestMatch = function(alo, ahi, blo, bhi) {\n /* \n Find longest matching block in a[alo...ahi] and b[blo...bhi]. \n \n If isjunk is not defined:\n \n Return [i,j,k] such that a[i...i+k] is equal to b[j...j+k], where\n alo <= i <= i+k <= ahi\n blo <= j <= j+k <= bhi\n and for all [i',j',k'] meeting those conditions,\n k >= k'\n i <= i'\n and if i == i', j <= j'\n \n In other words, of all maximal matching blocks, return one that\n starts earliest in a, and of all those maximal matching blocks that\n start earliest in a, return the one that starts earliest in b.\n \n >>> isjunk = (x) -> x is ' '\n >>> s = new SequenceMatcher(isjunk, ' abcd', 'abcd abcd')\n >>> s.findLongestMatch(0, 5, 0, 9)\n [1, 0, 4]\n \n >>> s = new SequenceMatcher(null, 'ab', 'c')\n >>> s.findLongestMatch(0, 2, 0, 1)\n [0, 0, 0]\n */\n\n var a, b, b2j, besti, bestj, bestsize, i, isbjunk, j, j2len, k, newj2len, _i, _j, _len, _ref, _ref1, _ref2, _ref3, _ref4, _ref5\n _ref = [this.a, this.b, this.b2j, this.isbjunk], a = _ref[0], b = _ref[1], b2j = _ref[2], isbjunk = _ref[3]\n _ref1 = [alo, blo, 0], besti = _ref1[0], bestj = _ref1[1], bestsize = _ref1[2]\n j2len = {}\n for (i = _i = alo; alo <= ahi ? _i < ahi : _i > ahi; i = alo <= ahi ? ++_i : --_i) {\n newj2len = {}\n _ref2 = (_has(b2j, a[i]) ? b2j[a[i]] : [])\n for (_j = 0, _len = _ref2.length; _j < _len; _j++) {\n j = _ref2[_j]\n if (j < blo) {\n continue\n }\n if (j >= bhi) {\n break\n }\n k = newj2len[j] = (j2len[j - 1] || 0) + 1\n if (k > bestsize) {\n _ref3 = [i - k + 1, j - k + 1, k], besti = _ref3[0], bestj = _ref3[1], bestsize = _ref3[2]\n }\n }\n j2len = newj2len\n }\n while (besti > alo && bestj > blo && !isbjunk(b[bestj - 1]) && a[besti - 1] === b[bestj - 1]) {\n _ref4 = [besti - 1, bestj - 1, bestsize + 1], besti = _ref4[0], bestj = _ref4[1], bestsize = _ref4[2]\n }\n while (besti + bestsize < ahi && bestj + bestsize < bhi && !isbjunk(b[bestj + bestsize]) && a[besti + bestsize] === b[bestj + bestsize]) {\n bestsize++\n }\n while (besti > alo && bestj > blo && isbjunk(b[bestj - 1]) && a[besti - 1] === b[bestj - 1]) {\n _ref5 = [besti - 1, bestj - 1, bestsize + 1], besti = _ref5[0], bestj = _ref5[1], bestsize = _ref5[2]\n }\n while (besti + bestsize < ahi && bestj + bestsize < bhi && isbjunk(b[bestj + bestsize]) && a[besti + bestsize] === b[bestj + bestsize]) {\n bestsize++\n }\n return [besti, bestj, bestsize]\n }\n\n SequenceMatcher.prototype.getMatchingBlocks = function() {\n /*\n Return list of triples describing matching subsequences.\n \n Each triple is of the form [i, j, n], and means that\n a[i...i+n] == b[j...j+n]. The triples are monotonically increasing in\n i and in j. it's also guaranteed that if\n [i, j, n] and [i', j', n'] are adjacent triples in the list, and\n the second is not the last triple in the list, then i+n != i' or\n j+n != j'. IOW, adjacent triples never describe adjacent equal\n blocks.\n \n The last triple is a dummy, [a.length, b.length, 0], and is the only\n triple with n==0.\n \n >>> s = new SequenceMatcher(null, 'abxcd', 'abcd')\n >>> s.getMatchingBlocks()\n [[0, 0, 2], [3, 2, 2], [5, 4, 0]]\n */\n\n var ahi, alo, bhi, blo, i, i1, i2, j, j1, j2, k, k1, k2, la, lb, matchingBlocks, nonAdjacent, queue, x, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4\n if (this.matchingBlocks) {\n return this.matchingBlocks\n }\n _ref = [this.a.length, this.b.length], la = _ref[0], lb = _ref[1]\n queue = [[0, la, 0, lb]]\n matchingBlocks = []\n while (queue.length) {\n _ref1 = queue.pop(), alo = _ref1[0], ahi = _ref1[1], blo = _ref1[2], bhi = _ref1[3]\n _ref2 = x = this.findLongestMatch(alo, ahi, blo, bhi), i = _ref2[0], j = _ref2[1], k = _ref2[2]\n if (k) {\n matchingBlocks.push(x)\n if (alo < i && blo < j) {\n queue.push([alo, i, blo, j])\n }\n if (i + k < ahi && j + k < bhi) {\n queue.push([i + k, ahi, j + k, bhi])\n }\n }\n }\n matchingBlocks.sort(_arrayCmp)\n i1 = j1 = k1 = 0\n nonAdjacent = []\n for (_i = 0, _len = matchingBlocks.length; _i < _len; _i++) {\n _ref3 = matchingBlocks[_i], i2 = _ref3[0], j2 = _ref3[1], k2 = _ref3[2]\n if (i1 + k1 === i2 && j1 + k1 === j2) {\n k1 += k2\n } else {\n if (k1) {\n nonAdjacent.push([i1, j1, k1])\n }\n _ref4 = [i2, j2, k2], i1 = _ref4[0], j1 = _ref4[1], k1 = _ref4[2]\n }\n }\n if (k1) {\n nonAdjacent.push([i1, j1, k1])\n }\n nonAdjacent.push([la, lb, 0])\n return this.matchingBlocks = nonAdjacent\n }\n\n SequenceMatcher.prototype.getOpcodes = function() {\n /* \n Return list of 5-tuples describing how to turn a into b.\n \n Each tuple is of the form [tag, i1, i2, j1, j2]. The first tuple\n has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the\n tuple preceding it, and likewise for j1 == the previous j2.\n \n The tags are strings, with these meanings:\n \n 'replace': a[i1...i2] should be replaced by b[j1...j2]\n 'delete': a[i1...i2] should be deleted.\n Note that j1==j2 in this case.\n 'insert': b[j1...j2] should be inserted at a[i1...i1].\n Note that i1==i2 in this case.\n 'equal': a[i1...i2] == b[j1...j2]\n \n >>> s = new SequenceMatcher(null, 'qabxcd', 'abycdf')\n >>> s.getOpcodes()\n [ [ 'delete' , 0 , 1 , 0 , 0 ] ,\n [ 'equal' , 1 , 3 , 0 , 2 ] ,\n [ 'replace' , 3 , 4 , 2 , 3 ] ,\n [ 'equal' , 4 , 6 , 3 , 5 ] ,\n [ 'insert' , 6 , 6 , 5 , 6 ] ]\n */\n\n var ai, answer, bj, i, j, size, tag, _i, _len, _ref, _ref1, _ref2\n if (this.opcodes) {\n return this.opcodes\n }\n i = j = 0\n this.opcodes = answer = []\n _ref = this.getMatchingBlocks()\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n _ref1 = _ref[_i], ai = _ref1[0], bj = _ref1[1], size = _ref1[2]\n tag = ''\n if (i < ai && j < bj) {\n tag = 'replace'\n } else if (i < ai) {\n tag = 'delete'\n } else if (j < bj) {\n tag = 'insert'\n }\n if (tag) {\n answer.push([tag, i, ai, j, bj])\n }\n _ref2 = [ai + size, bj + size], i = _ref2[0], j = _ref2[1]\n if (size) {\n answer.push(['equal', ai, i, bj, j])\n }\n }\n return answer\n }\n\n SequenceMatcher.prototype.getGroupedOpcodes = function(n) {\n var codes, group, groups, i1, i2, j1, j2, nn, tag, _i, _len, _ref, _ref1, _ref2, _ref3\n if (n == null) {\n n = 3\n }\n /* \n Isolate change clusters by eliminating ranges with no changes.\n \n Return a list groups with upto n lines of context.\n Each group is in the same format as returned by get_opcodes().\n \n >>> a = [1...40].map(String)\n >>> b = a.slice()\n >>> b[8...8] = 'i'\n >>> b[20] += 'x'\n >>> b[23...28] = []\n >>> b[30] += 'y'\n >>> s = new SequenceMatcher(null, a, b)\n >>> s.getGroupedOpcodes()\n [ [ [ 'equal' , 5 , 8 , 5 , 8 ],\n [ 'insert' , 8 , 8 , 8 , 9 ],\n [ 'equal' , 8 , 11 , 9 , 12 ] ],\n [ [ 'equal' , 16 , 19 , 17 , 20 ],\n [ 'replace' , 19 , 20 , 20 , 21 ],\n [ 'equal' , 20 , 22 , 21 , 23 ],\n [ 'delete' , 22 , 27 , 23 , 23 ],\n [ 'equal' , 27 , 30 , 23 , 26 ] ],\n [ [ 'equal' , 31 , 34 , 27 , 30 ],\n [ 'replace' , 34 , 35 , 30 , 31 ],\n [ 'equal' , 35 , 38 , 31 , 34 ] ] ]\n */\n\n codes = this.getOpcodes()\n if (!codes.length) {\n codes = [['equal', 0, 1, 0, 1]]\n }\n if (codes[0][0] === 'equal') {\n _ref = codes[0], tag = _ref[0], i1 = _ref[1], i2 = _ref[2], j1 = _ref[3], j2 = _ref[4]\n codes[0] = [tag, max(i1, i2 - n), i2, max(j1, j2 - n), j2]\n }\n if (codes[codes.length - 1][0] === 'equal') {\n _ref1 = codes[codes.length - 1], tag = _ref1[0], i1 = _ref1[1], i2 = _ref1[2], j1 = _ref1[3], j2 = _ref1[4]\n codes[codes.length - 1] = [tag, i1, min(i2, i1 + n), j1, min(j2, j1 + n)]\n }\n nn = n + n\n groups = []\n group = []\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n _ref2 = codes[_i], tag = _ref2[0], i1 = _ref2[1], i2 = _ref2[2], j1 = _ref2[3], j2 = _ref2[4]\n if (tag === 'equal' && i2 - i1 > nn) {\n group.push([tag, i1, min(i2, i1 + n), j1, min(j2, j1 + n)])\n groups.push(group)\n group = []\n _ref3 = [max(i1, i2 - n), max(j1, j2 - n)], i1 = _ref3[0], j1 = _ref3[1]\n }\n group.push([tag, i1, i2, j1, j2])\n }\n if (group.length && !(group.length === 1 && group[0][0] === 'equal')) {\n groups.push(group)\n }\n return groups\n }\n\n SequenceMatcher.prototype.ratio = function() {\n /*\n Return a measure of the sequences' similarity (float in [0,1]).\n \n Where T is the total number of elements in both sequences, and\n M is the number of matches, this is 2.0*M / T.\n Note that this is 1 if the sequences are identical, and 0 if\n they have nothing in common.\n \n .ratio() is expensive to compute if you haven't already computed\n .getMatchingBlocks() or .getOpcodes(), in which case you may\n want to try .quickRatio() or .realQuickRatio() first to get an\n upper bound.\n \n >>> s = new SequenceMatcher(null, 'abcd', 'bcde')\n >>> s.ratio()\n 0.75\n >>> s.quickRatio()\n 0.75\n >>> s.realQuickRatio()\n 1.0\n */\n\n var match, matches, _i, _len, _ref\n matches = 0\n _ref = this.getMatchingBlocks()\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n match = _ref[_i]\n matches += match[2]\n }\n return _calculateRatio(matches, this.a.length + this.b.length)\n }\n\n SequenceMatcher.prototype.quickRatio = function() {\n /*\n Return an upper bound on ratio() relatively quickly.\n \n This isn't defined beyond that it is an upper bound on .ratio(), and\n is faster to compute.\n */\n\n var avail, elt, fullbcount, matches, numb, _i, _j, _len, _len1, _ref, _ref1\n if (!this.fullbcount) {\n this.fullbcount = fullbcount = {}\n _ref = this.b\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elt = _ref[_i]\n fullbcount[elt] = (fullbcount[elt] || 0) + 1\n }\n }\n fullbcount = this.fullbcount\n avail = {}\n matches = 0\n _ref1 = this.a\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n elt = _ref1[_j]\n if (_has(avail, elt)) {\n numb = avail[elt]\n } else {\n numb = fullbcount[elt] || 0\n }\n avail[elt] = numb - 1\n if (numb > 0) {\n matches++\n }\n }\n return _calculateRatio(matches, this.a.length + this.b.length)\n }\n\n SequenceMatcher.prototype.realQuickRatio = function() {\n /*\n Return an upper bound on ratio() very quickly.\n \n This isn't defined beyond that it is an upper bound on .ratio(), and\n is faster to compute than either .ratio() or .quickRatio().\n */\n\n var la, lb, _ref\n _ref = [this.a.length, this.b.length], la = _ref[0], lb = _ref[1]\n return _calculateRatio(min(la, lb), la + lb)\n }\n\n return SequenceMatcher\n\n })()\n\n getCloseMatches = function(word, possibilities, n, cutoff) {\n var result, s, score, x, _i, _j, _len, _len1, _ref, _results\n if (n == null) {\n n = 3\n }\n if (cutoff == null) {\n cutoff = 0.6\n }\n /*\n Use SequenceMatcher to return list of the best \"good enough\" matches.\n \n word is a sequence for which close matches are desired (typically a\n string).\n \n possibilities is a list of sequences against which to match word\n (typically a list of strings).\n \n Optional arg n (default 3) is the maximum number of close matches to\n return. n must be > 0.\n \n Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities\n that don't score at least that similar to word are ignored.\n \n The best (no more than n) matches among the possibilities are returned\n in a list, sorted by similarity score, most similar first.\n \n >>> getCloseMatches('appel', ['ape', 'apple', 'peach', 'puppy'])\n ['apple', 'ape']\n >>> KEYWORDS = require('coffee-script').RESERVED\n >>> getCloseMatches('wheel', KEYWORDS)\n ['when', 'while']\n >>> getCloseMatches('accost', KEYWORDS)\n ['const']\n */\n\n if (!(n > 0)) {\n throw new Error(\"n must be > 0: (\" + n + \")\")\n }\n if (!((0.0 <= cutoff && cutoff <= 1.0))) {\n throw new Error(\"cutoff must be in [0.0, 1.0]: (\" + cutoff + \")\")\n }\n result = []\n s = new SequenceMatcher()\n s.setSeq2(word)\n for (_i = 0, _len = possibilities.length; _i < _len; _i++) {\n x = possibilities[_i]\n s.setSeq1(x)\n if (s.realQuickRatio() >= cutoff && s.quickRatio() >= cutoff && s.ratio() >= cutoff) {\n result.push([s.ratio(), x])\n }\n }\n result = Heap.nlargest(result, n, _arrayCmp)\n _results = []\n for (_j = 0, _len1 = result.length; _j < _len1; _j++) {\n _ref = result[_j], score = _ref[0], x = _ref[1]\n _results.push(x)\n }\n return _results\n }\n\n _countLeading = function(line, ch) {\n /*\n Return number of `ch` characters at the start of `line`.\n \n >>> _countLeading(' abc', ' ')\n 3\n */\n\n var i, n, _ref\n _ref = [0, line.length], i = _ref[0], n = _ref[1]\n while (i < n && line[i] === ch) {\n i++\n }\n return i\n }\n\n Differ = (function() {\n\n /*\n Differ is a class for comparing sequences of lines of text, and\n producing human-readable differences or deltas. Differ uses\n SequenceMatcher both to compare sequences of lines, and to compare\n sequences of characters within similar (near-matching) lines.\n \n Each line of a Differ delta begins with a two-letter code:\n \n '- ' line unique to sequence 1\n '+ ' line unique to sequence 2\n ' ' line common to both sequences\n '? ' line not present in either input sequence\n \n Lines beginning with '? ' attempt to guide the eye to intraline\n differences, and were not present in either input sequence. These lines\n can be confusing if the sequences contain tab characters.\n \n Note that Differ makes no claim to produce a *minimal* diff. To the\n contrary, minimal diffs are often counter-intuitive, because they synch\n up anywhere possible, sometimes accidental matches 100 pages apart.\n Restricting synch points to contiguous matches preserves some notion of\n locality, at the occasional cost of producing a longer diff.\n \n Example: Comparing two texts.\n \n >>> text1 = ['1. Beautiful is better than ugly.\\n',\n ... '2. Explicit is better than implicit.\\n',\n ... '3. Simple is better than complex.\\n',\n ... '4. Complex is better than complicated.\\n']\n >>> text1.length\n 4\n >>> text2 = ['1. Beautiful is better than ugly.\\n',\n ... '3. Simple is better than complex.\\n',\n ... '4. Complicated is better than complex.\\n',\n ... '5. Flat is better than nested.\\n']\n \n Next we instantiate a Differ object:\n \n >>> d = new Differ()\n \n Note that when instantiating a Differ object we may pass functions to\n filter out line and character 'junk'.\n \n Finally, we compare the two:\n \n >>> result = d.compare(text1, text2)\n [ ' 1. Beautiful is better than ugly.\\n',\n '- 2. Explicit is better than implicit.\\n',\n '- 3. Simple is better than complex.\\n',\n '+ 3. Simple is better than complex.\\n',\n '? ++\\n',\n '- 4. Complex is better than complicated.\\n',\n '? ^ ---- ^\\n',\n '+ 4. Complicated is better than complex.\\n',\n '? ++++ ^ ^\\n',\n '+ 5. Flat is better than nested.\\n' ]\n \n Methods:\n \n constructor(linejunk=null, charjunk=null)\n Construct a text differencer, with optional filters.\n compare(a, b)\n Compare two sequences of lines; generate the resulting delta.\n */\n\n\n function Differ(linejunk, charjunk) {\n this.linejunk = linejunk\n this.charjunk = charjunk\n /*\n Construct a text differencer, with optional filters.\n \n The two optional keyword parameters are for filter functions:\n \n - `linejunk`: A function that should accept a single string argument,\n and return true iff the string is junk. The module-level function\n `IS_LINE_JUNK` may be used to filter out lines without visible\n characters, except for at most one splat ('#'). It is recommended\n to leave linejunk null. \n \n - `charjunk`: A function that should accept a string of length 1. The\n module-level function `IS_CHARACTER_JUNK` may be used to filter out\n whitespace characters (a blank or tab; **note**: bad idea to include\n newline in this!). Use of IS_CHARACTER_JUNK is recommended.\n */\n\n }\n\n Differ.prototype.compare = function(a, b) {\n /*\n Compare two sequences of lines; generate the resulting delta.\n \n Each sequence must contain individual single-line strings ending with\n newlines. Such sequences can be obtained from the `readlines()` method\n of file-like objects. The delta generated also consists of newline-\n terminated strings, ready to be printed as-is via the writeline()\n method of a file-like object.\n \n Example:\n \n >>> d = new Differ\n >>> d.compare(['one\\n', 'two\\n', 'three\\n'],\n ... ['ore\\n', 'tree\\n', 'emu\\n'])\n [ '- one\\n',\n '? ^\\n',\n '+ ore\\n',\n '? ^\\n',\n '- two\\n',\n '- three\\n',\n '? -\\n',\n '+ tree\\n',\n '+ emu\\n' ]\n */\n\n var ahi, alo, bhi, blo, cruncher, g, line, lines, tag, _i, _j, _len, _len1, _ref, _ref1\n cruncher = new SequenceMatcher(this.linejunk, a, b)\n lines = []\n _ref = cruncher.getOpcodes()\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n _ref1 = _ref[_i], tag = _ref1[0], alo = _ref1[1], ahi = _ref1[2], blo = _ref1[3], bhi = _ref1[4]\n switch (tag) {\n case 'replace':\n g = this._fancyReplace(a, alo, ahi, b, blo, bhi)\n break\n case 'delete':\n g = this._dump('-', a, alo, ahi)\n break\n case 'insert':\n g = this._dump('+', b, blo, bhi)\n break\n case 'equal':\n g = this._dump(' ', a, alo, ahi)\n break\n default:\n throw new Error(\"unknow tag (\" + tag + \")\")\n }\n for (_j = 0, _len1 = g.length; _j < _len1; _j++) {\n line = g[_j]\n lines.push(line)\n }\n }\n return lines\n }\n\n Differ.prototype._dump = function(tag, x, lo, hi) {\n /*\n Generate comparison results for a same-tagged range.\n */\n\n var i, _i, _results\n _results = []\n for (i = _i = lo; lo <= hi ? _i < hi : _i > hi; i = lo <= hi ? ++_i : --_i) {\n _results.push(\"\" + tag + \" \" + x[i])\n }\n return _results\n }\n\n Differ.prototype._plainReplace = function(a, alo, ahi, b, blo, bhi) {\n var first, g, line, lines, second, _i, _j, _len, _len1, _ref\n if (bhi - blo < ahi - alo) {\n first = this._dump('+', b, blo, bhi)\n second = this._dump('-', a, alo, ahi)\n } else {\n first = this._dump('-', a, alo, ahi)\n second = this._dump('+', b, blo, bhi)\n }\n lines = []\n _ref = [first, second]\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n g = _ref[_i]\n for (_j = 0, _len1 = g.length; _j < _len1; _j++) {\n line = g[_j]\n lines.push(line)\n }\n }\n return lines\n }\n\n Differ.prototype._fancyReplace = function(a, alo, ahi, b, blo, bhi) {\n /*\n When replacing one block of lines with another, search the blocks\n for *similar* lines; the best-matching pair (if any) is used as a\n synch point, and intraline difference marking is done on the\n similar pair. Lots of work, but often worth it.\n \n Example:\n >>> d = new Differ\n >>> d._fancyReplace(['abcDefghiJkl\\n'], 0, 1,\n ... ['abcdefGhijkl\\n'], 0, 1)\n [ '- abcDefghiJkl\\n',\n '? ^ ^ ^\\n',\n '+ abcdefGhijkl\\n',\n '? ^ ^ ^\\n' ]\n */\n\n var aelt, ai, ai1, ai2, atags, belt, bestRatio, besti, bestj, bj, bj1, bj2, btags, cruncher, cutoff, eqi, eqj, i, j, la, lb, line, lines, tag, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _n, _o, _ref, _ref1, _ref10, _ref11, _ref12, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9\n _ref = [0.74, 0.75], bestRatio = _ref[0], cutoff = _ref[1]\n cruncher = new SequenceMatcher(this.charjunk)\n _ref1 = [null, null], eqi = _ref1[0], eqj = _ref1[1]\n lines = []\n for (j = _i = blo; blo <= bhi ? _i < bhi : _i > bhi; j = blo <= bhi ? ++_i : --_i) {\n bj = b[j]\n cruncher.setSeq2(bj)\n for (i = _j = alo; alo <= ahi ? _j < ahi : _j > ahi; i = alo <= ahi ? ++_j : --_j) {\n ai = a[i]\n if (ai === bj) {\n if (eqi === null) {\n _ref2 = [i, j], eqi = _ref2[0], eqj = _ref2[1]\n }\n continue\n }\n cruncher.setSeq1(ai)\n if (cruncher.realQuickRatio() > bestRatio && cruncher.quickRatio() > bestRatio && cruncher.ratio() > bestRatio) {\n _ref3 = [cruncher.ratio(), i, j], bestRatio = _ref3[0], besti = _ref3[1], bestj = _ref3[2]\n }\n }\n }\n if (bestRatio < cutoff) {\n if (eqi === null) {\n _ref4 = this._plainReplace(a, alo, ahi, b, blo, bhi)\n for (_k = 0, _len = _ref4.length; _k < _len; _k++) {\n line = _ref4[_k]\n lines.push(line)\n }\n return lines\n }\n _ref5 = [eqi, eqj, 1.0], besti = _ref5[0], bestj = _ref5[1], bestRatio = _ref5[2]\n } else {\n eqi = null\n }\n _ref6 = this._fancyHelper(a, alo, besti, b, blo, bestj)\n for (_l = 0, _len1 = _ref6.length; _l < _len1; _l++) {\n line = _ref6[_l]\n lines.push(line)\n }\n _ref7 = [a[besti], b[bestj]], aelt = _ref7[0], belt = _ref7[1]\n if (eqi === null) {\n atags = btags = ''\n cruncher.setSeqs(aelt, belt)\n _ref8 = cruncher.getOpcodes()\n for (_m = 0, _len2 = _ref8.length; _m < _len2; _m++) {\n _ref9 = _ref8[_m], tag = _ref9[0], ai1 = _ref9[1], ai2 = _ref9[2], bj1 = _ref9[3], bj2 = _ref9[4]\n _ref10 = [ai2 - ai1, bj2 - bj1], la = _ref10[0], lb = _ref10[1]\n switch (tag) {\n case 'replace':\n atags += Array(la + 1).join('^')\n btags += Array(lb + 1).join('^')\n break\n case 'delete':\n atags += Array(la + 1).join('-')\n break\n case 'insert':\n btags += Array(lb + 1).join('+')\n break\n case 'equal':\n atags += Array(la + 1).join(' ')\n btags += Array(lb + 1).join(' ')\n break\n default:\n throw new Error(\"unknow tag (\" + tag + \")\")\n }\n }\n _ref11 = this._qformat(aelt, belt, atags, btags)\n for (_n = 0, _len3 = _ref11.length; _n < _len3; _n++) {\n line = _ref11[_n]\n lines.push(line)\n }\n } else {\n lines.push(' ' + aelt)\n }\n _ref12 = this._fancyHelper(a, besti + 1, ahi, b, bestj + 1, bhi)\n for (_o = 0, _len4 = _ref12.length; _o < _len4; _o++) {\n line = _ref12[_o]\n lines.push(line)\n }\n return lines\n }\n\n Differ.prototype._fancyHelper = function(a, alo, ahi, b, blo, bhi) {\n var g\n g = []\n if (alo < ahi) {\n if (blo < bhi) {\n g = this._fancyReplace(a, alo, ahi, b, blo, bhi)\n } else {\n g = this._dump('-', a, alo, ahi)\n }\n } else if (blo < bhi) {\n g = this._dump('+', b, blo, bhi)\n }\n return g\n }\n\n Differ.prototype._qformat = function(aline, bline, atags, btags) {\n /*\n Format \"?\" output and deal with leading tabs.\n \n Example:\n \n >>> d = new Differ\n >>> d._qformat('\\tabcDefghiJkl\\n', '\\tabcdefGhijkl\\n',\n [ '- \\tabcDefghiJkl\\n',\n '? \\t ^ ^ ^\\n',\n '+ \\tabcdefGhijkl\\n',\n '? \\t ^ ^ ^\\n' ]\n */\n\n var common, lines\n lines = []\n common = min(_countLeading(aline, '\\t'), _countLeading(bline, '\\t'))\n common = min(common, _countLeading(atags.slice(0, common), ' '))\n common = min(common, _countLeading(btags.slice(0, common), ' '))\n atags = atags.slice(common).replace(/\\s+$/, '')\n btags = btags.slice(common).replace(/\\s+$/, '')\n lines.push('- ' + aline)\n if (atags.length) {\n lines.push(\"? \" + (Array(common + 1).join('\\t')) + atags + \"\\n\")\n }\n lines.push('+ ' + bline)\n if (btags.length) {\n lines.push(\"? \" + (Array(common + 1).join('\\t')) + btags + \"\\n\")\n }\n return lines\n }\n\n return Differ\n\n })()\n\n IS_LINE_JUNK = function(line, pat) {\n if (pat == null) {\n pat = /^\\s*#?\\s*$/\n }\n /*\n Return 1 for ignorable line: iff `line` is blank or contains a single '#'.\n \n Examples:\n \n >>> IS_LINE_JUNK('\\n')\n true\n >>> IS_LINE_JUNK(' # \\n')\n true\n >>> IS_LINE_JUNK('hello\\n')\n false\n */\n\n return pat.test(line)\n }\n\n IS_CHARACTER_JUNK = function(ch, ws) {\n if (ws == null) {\n ws = ' \\t'\n }\n /*\n Return 1 for ignorable character: iff `ch` is a space or tab.\n \n Examples:\n >>> IS_CHARACTER_JUNK(' ').should.be.true\n true\n >>> IS_CHARACTER_JUNK('\\t').should.be.true\n true\n >>> IS_CHARACTER_JUNK('\\n').should.be.false\n false\n >>> IS_CHARACTER_JUNK('x').should.be.false\n false\n */\n\n return __indexOf.call(ws, ch) >= 0\n }\n\n _formatRangeUnified = function(start, stop) {\n /*\n Convert range to the \"ed\" format'\n */\n\n var beginning, length\n beginning = start + 1\n length = stop - start\n if (length === 1) {\n return \"\" + beginning\n }\n if (!length) {\n beginning--\n }\n return \"\" + beginning + \",\" + length\n }\n\n unifiedDiff = function(a, b, _arg) {\n var file1Range, file2Range, first, fromdate, fromfile, fromfiledate, group, i1, i2, j1, j2, last, line, lines, lineterm, n, started, tag, todate, tofile, tofiledate, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6\n _ref = _arg != null ? _arg : {}, fromfile = _ref.fromfile, tofile = _ref.tofile, fromfiledate = _ref.fromfiledate, tofiledate = _ref.tofiledate, n = _ref.n, lineterm = _ref.lineterm\n /*\n Compare two sequences of lines; generate the delta as a unified diff.\n \n Unified diffs are a compact way of showing line changes and a few\n lines of context. The number of context lines is set by 'n' which\n defaults to three.\n \n By default, the diff control lines (those with ---, +++, or @@) are\n created with a trailing newline. \n \n For inputs that do not have trailing newlines, set the lineterm\n argument to \"\" so that the output will be uniformly newline free.\n \n The unidiff format normally has a header for filenames and modification\n times. Any or all of these may be specified using strings for\n 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.\n The modification times are normally expressed in the ISO 8601 format.\n \n Example:\n \n >>> unifiedDiff('one two three four'.split(' '),\n ... 'zero one tree four'.split(' '), {\n ... fromfile: 'Original'\n ... tofile: 'Current',\n ... fromfiledate: '2005-01-26 23:30:50',\n ... tofiledate: '2010-04-02 10:20:52',\n ... lineterm: ''\n ... })\n [ '--- Original\\t2005-01-26 23:30:50',\n '+++ Current\\t2010-04-02 10:20:52',\n '@@ -1,4 +1,4 @@',\n '+zero',\n ' one',\n '-two',\n '-three',\n '+tree',\n ' four' ]\n */\n\n if (fromfile == null) {\n fromfile = ''\n }\n if (tofile == null) {\n tofile = ''\n }\n if (fromfiledate == null) {\n fromfiledate = ''\n }\n if (tofiledate == null) {\n tofiledate = ''\n }\n if (n == null) {\n n = 3\n }\n if (lineterm == null) {\n lineterm = '\\n'\n }\n lines = []\n started = false\n _ref1 = (new SequenceMatcher(null, a, b)).getGroupedOpcodes()\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n group = _ref1[_i]\n if (!started) {\n started = true\n fromdate = fromfiledate ? \"\\t\" + fromfiledate : ''\n todate = tofiledate ? \"\\t\" + tofiledate : ''\n lines.push(\"--- \" + fromfile + fromdate + lineterm)\n lines.push(\"+++ \" + tofile + todate + lineterm)\n }\n _ref2 = [group[0], group[group.length - 1]], first = _ref2[0], last = _ref2[1]\n file1Range = _formatRangeUnified(first[1], last[2])\n file2Range = _formatRangeUnified(first[3], last[4])\n lines.push(\"@@ -\" + file1Range + \" +\" + file2Range + \" @@\" + lineterm)\n for (_j = 0, _len1 = group.length; _j < _len1; _j++) {\n _ref3 = group[_j], tag = _ref3[0], i1 = _ref3[1], i2 = _ref3[2], j1 = _ref3[3], j2 = _ref3[4]\n if (tag === 'equal') {\n _ref4 = a.slice(i1, i2)\n for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n line = _ref4[_k]\n lines.push(' ' + line)\n }\n continue\n }\n if (tag === 'replace' || tag === 'delete') {\n _ref5 = a.slice(i1, i2)\n for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {\n line = _ref5[_l]\n lines.push('-' + line)\n }\n }\n if (tag === 'replace' || tag === 'insert') {\n _ref6 = b.slice(j1, j2)\n for (_m = 0, _len4 = _ref6.length; _m < _len4; _m++) {\n line = _ref6[_m]\n lines.push('+' + line)\n }\n }\n }\n }\n return lines\n }\n\n _formatRangeContext = function(start, stop) {\n /*\n Convert range to the \"ed\" format'\n */\n\n var beginning, length\n beginning = start + 1\n length = stop - start\n if (!length) {\n beginning--\n }\n if (length <= 1) {\n return \"\" + beginning\n }\n return \"\" + beginning + \",\" + (beginning + length - 1)\n }\n\n contextDiff = function(a, b, _arg) {\n var file1Range, file2Range, first, fromdate, fromfile, fromfiledate, group, i1, i2, j1, j2, last, line, lines, lineterm, n, prefix, started, tag, todate, tofile, tofiledate, _, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6\n _ref = _arg != null ? _arg : {}, fromfile = _ref.fromfile, tofile = _ref.tofile, fromfiledate = _ref.fromfiledate, tofiledate = _ref.tofiledate, n = _ref.n, lineterm = _ref.lineterm\n /*\n Compare two sequences of lines; generate the delta as a context diff.\n \n Context diffs are a compact way of showing line changes and a few\n lines of context. The number of context lines is set by 'n' which\n defaults to three.\n \n By default, the diff control lines (those with *** or ---) are\n created with a trailing newline. This is helpful so that inputs\n created from file.readlines() result in diffs that are suitable for\n file.writelines() since both the inputs and outputs have trailing\n newlines.\n \n For inputs that do not have trailing newlines, set the lineterm\n argument to \"\" so that the output will be uniformly newline free.\n \n The context diff format normally has a header for filenames and\n modification times. Any or all of these may be specified using\n strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.\n The modification times are normally expressed in the ISO 8601 format.\n If not specified, the strings default to blanks.\n \n Example:\n >>> a = ['one\\n', 'two\\n', 'three\\n', 'four\\n']\n >>> b = ['zero\\n', 'one\\n', 'tree\\n', 'four\\n']\n >>> contextDiff(a, b, {fromfile: 'Original', tofile: 'Current'})\n [ '*** Original\\n',\n '--- Current\\n',\n '***************\\n',\n '*** 1,4 ****\\n',\n ' one\\n',\n '! two\\n',\n '! three\\n',\n ' four\\n',\n '--- 1,4 ----\\n',\n '+ zero\\n',\n ' one\\n',\n '! tree\\n',\n ' four\\n' ]\n */\n\n if (fromfile == null) {\n fromfile = ''\n }\n if (tofile == null) {\n tofile = ''\n }\n if (fromfiledate == null) {\n fromfiledate = ''\n }\n if (tofiledate == null) {\n tofiledate = ''\n }\n if (n == null) {\n n = 3\n }\n if (lineterm == null) {\n lineterm = '\\n'\n }\n prefix = {\n insert: '+ ',\n \"delete\": '- ',\n replace: '! ',\n equal: ' '\n }\n started = false\n lines = []\n _ref1 = (new SequenceMatcher(null, a, b)).getGroupedOpcodes()\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n group = _ref1[_i]\n if (!started) {\n started = true\n fromdate = fromfiledate ? \"\\t\" + fromfiledate : ''\n todate = tofiledate ? \"\\t\" + tofiledate : ''\n lines.push(\"*** \" + fromfile + fromdate + lineterm)\n lines.push(\"--- \" + tofile + todate + lineterm)\n _ref2 = [group[0], group[group.length - 1]], first = _ref2[0], last = _ref2[1]\n lines.push('***************' + lineterm)\n file1Range = _formatRangeContext(first[1], last[2])\n lines.push(\"*** \" + file1Range + \" ****\" + lineterm)\n if (_any((function() {\n var _j, _len1, _ref3, _results\n _results = []\n for (_j = 0, _len1 = group.length; _j < _len1; _j++) {\n _ref3 = group[_j], tag = _ref3[0], _ = _ref3[1], _ = _ref3[2], _ = _ref3[3], _ = _ref3[4]\n _results.push(tag === 'replace' || tag === 'delete')\n }\n return _results\n })())) {\n for (_j = 0, _len1 = group.length; _j < _len1; _j++) {\n _ref3 = group[_j], tag = _ref3[0], i1 = _ref3[1], i2 = _ref3[2], _ = _ref3[3], _ = _ref3[4]\n if (tag !== 'insert') {\n _ref4 = a.slice(i1, i2)\n for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n line = _ref4[_k]\n lines.push(prefix[tag] + line)\n }\n }\n }\n }\n file2Range = _formatRangeContext(first[3], last[4])\n lines.push(\"--- \" + file2Range + \" ----\" + lineterm)\n if (_any((function() {\n var _l, _len3, _ref5, _results\n _results = []\n for (_l = 0, _len3 = group.length; _l < _len3; _l++) {\n _ref5 = group[_l], tag = _ref5[0], _ = _ref5[1], _ = _ref5[2], _ = _ref5[3], _ = _ref5[4]\n _results.push(tag === 'replace' || tag === 'insert')\n }\n return _results\n })())) {\n for (_l = 0, _len3 = group.length; _l < _len3; _l++) {\n _ref5 = group[_l], tag = _ref5[0], _ = _ref5[1], _ = _ref5[2], j1 = _ref5[3], j2 = _ref5[4]\n if (tag !== 'delete') {\n _ref6 = b.slice(j1, j2)\n for (_m = 0, _len4 = _ref6.length; _m < _len4; _m++) {\n line = _ref6[_m]\n lines.push(prefix[tag] + line)\n }\n }\n }\n }\n }\n }\n return lines\n }\n\n ndiff = function(a, b, linejunk, charjunk) {\n if (charjunk == null) {\n charjunk = IS_CHARACTER_JUNK\n }\n /*\n Compare `a` and `b` (lists of strings); return a `Differ`-style delta.\n \n Optional keyword parameters `linejunk` and `charjunk` are for filter\n functions (or None):\n \n - linejunk: A function that should accept a single string argument, and\n return true iff the string is junk. The default is null, and is\n recommended; \n \n - charjunk: A function that should accept a string of length 1. The\n default is module-level function IS_CHARACTER_JUNK, which filters out\n whitespace characters (a blank or tab; note: bad idea to include newline\n in this!).\n \n Example:\n >>> a = ['one\\n', 'two\\n', 'three\\n']\n >>> b = ['ore\\n', 'tree\\n', 'emu\\n']\n >>> ndiff(a, b)\n [ '- one\\n',\n '? ^\\n',\n '+ ore\\n',\n '? ^\\n',\n '- two\\n',\n '- three\\n',\n '? -\\n',\n '+ tree\\n',\n '+ emu\\n' ]\n */\n\n return (new Differ(linejunk, charjunk)).compare(a, b)\n }\n\n restore = function(delta, which) {\n /*\n Generate one of the two sequences that generated a delta.\n \n Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract\n lines originating from file 1 or 2 (parameter `which`), stripping off line\n prefixes.\n \n Examples:\n >>> a = ['one\\n', 'two\\n', 'three\\n']\n >>> b = ['ore\\n', 'tree\\n', 'emu\\n']\n >>> diff = ndiff(a, b)\n >>> restore(diff, 1)\n [ 'one\\n',\n 'two\\n',\n 'three\\n' ]\n >>> restore(diff, 2)\n [ 'ore\\n',\n 'tree\\n',\n 'emu\\n' ]\n */\n\n var line, lines, prefixes, tag, _i, _len, _ref\n tag = {\n 1: '- ',\n 2: '+ '\n }[which]\n if (!tag) {\n throw new Error(\"unknow delta choice (must be 1 or 2): \" + which)\n }\n prefixes = [' ', tag]\n lines = []\n for (_i = 0, _len = delta.length; _i < _len; _i++) {\n line = delta[_i]\n if (_ref = line.slice(0, 2), __indexOf.call(prefixes, _ref) >= 0) {\n lines.push(line.slice(2))\n }\n }\n return lines\n }\n\n exports._arrayCmp = _arrayCmp\n\n exports.SequenceMatcher = SequenceMatcher\n\n exports.getCloseMatches = getCloseMatches\n\n exports._countLeading = _countLeading\n\n exports.Differ = Differ\n\n exports.IS_LINE_JUNK = IS_LINE_JUNK\n\n exports.IS_CHARACTER_JUNK = IS_CHARACTER_JUNK\n\n exports._formatRangeUnified = _formatRangeUnified\n\n exports.unifiedDiff = unifiedDiff\n\n exports._formatRangeContext = _formatRangeContext\n\n exports.contextDiff = contextDiff\n\n exports.ndiff = ndiff\n\n exports.restore = restore\n\n}).call(this)\n","module.exports = require('./lib/difflib');\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp(\n '(next|weiter|continue|>([^|]|$)|»([^|]|$))',\n 'i'\n);\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import URL from 'url';\n\nimport { getAttrs, isWordpress } from 'utils/dom';\nimport { removeAnchor, pageNumFromUrl } from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr(\n 'id'\n ) || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (\n !shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)\n ) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${\n possiblePages[href].linkText\n }|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","import URL from 'url';\n\nimport { DIGIT_RE, EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE, CAP_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (\n !negativeMatch &&\n NEGATIVE_SCORE_RE.test(parentData) &&\n EXTRANEOUS_LINK_HINTS_RE.test(parentData)\n ) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(\n null,\n articleUrl,\n href\n ).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { articleBaseUrl, removeAnchor } from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce(\n (acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n },\n { score: -100 }\n );\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = ['og:url'];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n};\n\nexport default GenericUrlExtractor;\n","'use strict';\n\nvar defaults = {\n ellipse: '…',\n chars: [' ', '-'],\n max: 140,\n truncate: true\n};\n\nfunction ellipsize(str, max, ellipse, chars, truncate) {\n if (str.length < max) return str;\n\n var last = 0,\n c = '',\n midMax = Math.floor(max / 2),\n computedMax = truncate === 'middle' ? midMax : max;\n\n for (var i = 0, len = str.length; i < len; i++) {\n c = str.charAt(i);\n\n if (chars.indexOf(c) !== -1 && truncate !== 'middle') {\n last = i;\n }\n\n if (i < computedMax) continue;\n if (last === 0) {\n return !truncate ? \n '' : \n str.substring(0, computedMax - 1) + ellipse + (\n truncate === 'middle' ? \n str.substring(str.length - midMax, str.length) : \n ''\n );\n }\n\n return str.substring(0, last) + ellipse;\n }\n\n return str;\n}\n\nmodule.exports = function(str, max, opts) {\n if (typeof str !== 'string' || str.length === 0) return '';\n if (max === 0) return '';\n\n opts = opts || {};\n\n for (var key in defaults) {\n if (opts[key] === null || typeof opts[key] === 'undefined') {\n opts[key] = defaults[key];\n }\n }\n\n opts.max = max || opts.max;\n\n return ellipsize(str, opts.max, opts.ellipse, opts.chars, opts.truncate);\n};\n","export const EXCERPT_META_SELECTORS = ['og:description', 'twitter:description'];\n","import ellipsize from 'ellipsize';\n\nimport { extractFromMeta, stripTags } from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst getWordCount = content => {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n};\n\nconst getWordCountAlt = content => {\n content = content.replace(/<[^>]*>/g, ' ');\n content = content.replace(/\\s+/g, ' ');\n content = content.trim();\n return content.split(' ').length;\n};\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n let count = getWordCount(content);\n if (count === 1) count = getWordCountAlt(content);\n return count;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n","import { MediumExtractor, BloggerExtractor } from './custom';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\nimport { apiExtractors } from './add-extractor';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname\n .split('.')\n .slice(-2)\n .join('.');\n\n return (\n apiExtractors[hostname] ||\n apiExtractors[baseDomain] ||\n Extractors[hostname] ||\n Extractors[baseDomain] ||\n detectByHtml($) ||\n GenericExtractor\n );\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo, makeLinksAbsolute } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach(key => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml, allowMultiple) {\n return selectors.find(selector => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return (\n (allowMultiple || (!allowMultiple && $(s).length === 1)) &&\n $(s).attr(attr) &&\n $(s)\n .attr(attr)\n .trim() !== ''\n );\n }\n\n return (\n (allowMultiple || (!allowMultiple && $(selector).length === 1)) &&\n $(selector)\n .text()\n .trim() !== ''\n );\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true, allowMultiple } = extractionOpts;\n\n const overrideAllowMultiple = type === 'lead_image_url' || allowMultiple;\n\n const matchingSelector = findMatchingSelector(\n $,\n selectors,\n extractHtml,\n overrideAllowMultiple\n );\n\n if (!matchingSelector) return null;\n\n function transformAndClean($node) {\n makeLinksAbsolute($node, $, opts.url || '');\n cleanBySelectors($node, $, extractionOpts);\n transformElements($node, $, extractionOpts);\n return $node;\n }\n\n function selectHtml() {\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((_, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n $content = transformAndClean($content);\n if (Cleaners[type]) {\n Cleaners[type]($content, { ...opts, defaultCleaner });\n }\n\n if (allowMultiple) {\n return $content\n .children()\n .toArray()\n .map(el => $.html($(el)));\n }\n\n return $.html($content);\n }\n\n if (extractHtml) {\n return selectHtml(matchingSelector);\n }\n\n let $match;\n let result;\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr, transform] = matchingSelector;\n $match = $(selector);\n $match = transformAndClean($match);\n result = $match.map((_, el) => {\n const item = $(el)\n .attr(attr)\n .trim();\n return transform ? transform(item) : item;\n });\n } else {\n $match = $(matchingSelector);\n $match = transformAndClean($match);\n result = $match.map((_, el) =>\n $(el)\n .text()\n .trim()\n );\n }\n\n result =\n Array.isArray(result.toArray()) && allowMultiple\n ? result.toArray()\n : result[0];\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner && Cleaners[type]) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nexport function selectExtendedTypes(extend, opts) {\n const results = {};\n Reflect.ownKeys(extend).forEach(t => {\n if (!results[t]) {\n results[t] = select({ ...opts, type: t, extractionOpts: extend[t] });\n }\n });\n return results;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title,\n });\n const lead_image_url = extractResult({\n ...opts,\n type: 'lead_image_url',\n content,\n });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } = extractResult({\n ...opts,\n type: 'url_and_domain',\n }) || { url: null, domain: null };\n\n let extendedResults = {};\n if (extractor.extend) {\n extendedResults = selectExtendedTypes(extractor.extend, opts);\n }\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n ...extendedResults,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages({\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n}) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n // eslint-disable-next-line no-await-in-loop\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${\n nextPageResult.content\n }`,\n };\n\n // eslint-disable-next-line prefer-destructuring\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({\n content: `<div>${result.content}</div>`,\n });\n return {\n ...result,\n total_pages: pages,\n rendered_pages: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\nimport TurndownService from 'turndown';\n\nimport Resource from 'resource';\nimport { validateUrl } from 'utils';\nimport addCustomExtractor from 'extractors/add-extractor';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor, { selectExtendedTypes } from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Parser = {\n async parse(url, { html, ...opts } = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n contentType = 'html',\n headers = {},\n extend,\n customExtractor,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return {\n error: true,\n message:\n 'The url parameter passed does not look like a valid URL. Please check your URL and try again.',\n };\n }\n\n const $ = await Resource.create(url, html, parsedUrl, headers);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // Add custom extractor via cli.\n if (customExtractor) {\n addCustomExtractor(customExtractor);\n }\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // if html still has not been set (i.e., url passed to Parser.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta')\n .map((_, node) => $(node).attr('name'))\n .toArray();\n\n let extendedTypes = {};\n if (extend) {\n extendedTypes = selectExtendedTypes(extend, { $, url, html });\n }\n\n let result = RootExtractor.extract(Extractor, {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n contentType,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages({\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n });\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n if (contentType === 'markdown') {\n const turndownService = new TurndownService();\n result.content = turndownService.turndown(result.content);\n } else if (contentType === 'text') {\n result.content = $.text($(result.content));\n }\n\n return { ...result, ...extendedTypes };\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n fetchResource(url) {\n return Resource.create(url);\n },\n\n addExtractor(extractor) {\n return addCustomExtractor(extractor);\n },\n};\n\nexport default Parser;\n"],"names":["global","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","module","inModule","exports","wrap","ContinueSentinel","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","call","Gp","GeneratorFunctionPrototype","Generator","create","GeneratorFunction","constructor","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","arg","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","self","tryLocsList","iter","next","then","result","done","value","toString","keys","object","key","push","reverse","length","pop","Context","reset","skipTempReset","prev","sent","_sent","undefined","delegate","method","tryEntries","forEach","resetTryEntry","charAt","isNaN","slice","stop","rootRecord","completion","type","rval","dispatchException","exception","context","handle","loc","caught","record","i","entry","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","iterable","resultName","nextLoc","protoGenerator","generator","_invoke","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","fn","obj","err","previousPromise","callInvokeWithMethodAndArg","Promise","resolve","reject","invoke","unwrapped","error","return","TypeError","info","pushTryEntry","locs","iteratorMethod","Function","g","hadRuntime","getOwnPropertyNames","indexOf","oldRuntime","require","e","it","propertyIsEnumerable","cof","split","IObject","defined","bitmap","enumerable","configurable","writable","S","isObject","val","valueOf","exec","defineProperty","get","a","window","Math","__g","document","is","createElement","gOPD","getOwnPropertyDescriptor","O","P","toIObject","toPrimitive","IE8_DOM_DEFINE","has","createDesc","pIE","f","core","version","__e","that","aFunction","b","c","apply","arguments","dP","Attributes","anObject","$export","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","target","ctx","C","virtual","R","hide","U","KEY","exp","fails","$getOwnPropertyDescriptor","IS_INCLUDES","$Object","id","px","random","concat","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","store","mode","copyright","USE_SYMBOL","uid","def","TAG","tag","stat","wksExt","ceil","floor","min","toInteger","max","shared","arrayIndexOf","$this","el","fromIndex","toLength","index","toAbsoluteIndex","IE_PROTO","names","$keys","enumBugKeys","getOwnPropertySymbols","Array","isArray","defineProperties","Properties","getKeys","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","dPs","hiddenKeys","gOPN","windowNames","getWindowNames","$GOPD","$DP","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","wks","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","ObjectProto","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","DESCRIPTORS","$fails","_create","D","protoDesc","sym","_k","isSymbol","$defineProperty","$defineProperties","getSymbols","gOPS","symbols","enumKeys","l","$propertyIsEnumerable","E","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","redefine","$set","set","es6Symbols","j","wellKnownSymbols","k","wksDefine","keyFor","useSetter","useSimple","replacer","$replacer","args","setToStringTag","toObject","desc","_Object$defineProperty","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","excluded","sourceKeys","objectWithoutPropertiesLoose","sourceSymbolKeys","TO_STRING","Constructor","NAME","descriptor","ITERATOR","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","Iterators","$at","pos","s","String","charCodeAt","iterated","_t","_i","point","step","Arguments","TO_STRING_TAG","DOMIterables","Collection","defer","channel","port","ARG","T","tryGet","callee","forbiddenField","ret","ArrayProto","getIteratorMethod","classof","BREAK","RETURN","iterFn","getIterFn","isArrayIter","SPECIES","un","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","data","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","clear","macrotask","Observer","MutationObserver","WebKitMutationObserver","isNode","PromiseCapability","promise","$$resolve","$$reject","v","navigator","userAgent","x","promiseCapability","newPromiseCapability","safe","SAFE_CLOSING","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","skipClosing","arr","task","microtask","head","last","notify","flush","parent","domain","exit","enter","standalone","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapabilityModule","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","anInstance","onFulfilled","onRejected","speciesConstructor","r","capability","promiseResolve","all","remaining","forOf","$index","alreadyCalled","race","onFinally","isFunction","callbackfn","asyncGeneratorStep","gen","_next","_throw","_Promise","root","freeExports","nodeType","freeModule","freeGlobal","punycode","maxInt","regexPunycode","regexNonASCII","regexSeparators","errors","stringFromCharCode","fromCharCode","RangeError","map","array","mapDomain","string","parts","replace","join","ucs2decode","extra","output","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","base","decode","input","basic","oldi","t","baseMinusT","codePoint","inputLength","n","bias","lastIndexOf","splice","encode","handledCPCount","basicLength","m","q","currentValue","handledCPCountPlusOne","qMinusT","test","toLowerCase","prop","qs","sep","eq","options","regexp","maxKeys","len","kstr","vstr","idx","substr","decodeURIComponent","stringifyPrimitive","isFinite","ks","encodeURIComponent","urlParse","relative","resolveObject","util","Url","format","protocol","slashes","auth","host","hostname","hash","search","query","pathname","path","href","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","url","parseQueryString","slashesDenoteHost","u","parse","queryIndex","splitter","uSplit","rest","trim","simplePath","querystring","lowerProto","match","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","unshift","toASCII","p","h","ae","esc","escape","qm","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","up","isAbsolute","PARSING_NODE","flat","o","y","item","nonce","noModule","text","getAttribute","setAttribute","parentNode","init","jquery","toArray","pushStack","merge","prevObject","each","first","even","grep","odd","end","sort","extend","isPlainObject","expando","isReady","noop","isEmptyObject","globalEval","makeArray","inArray","guid","support","d","Date","ue","A","N","L","H","M","I","RegExp","$","_","z","X","V","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","Y","Q","J","K","Z","ee","te","ne","re","ie","oe","be","disabled","nodeName","dir","childNodes","se","ownerDocument","getElementById","getElementsByTagName","getElementsByClassName","qsa","ye","scope","xe","querySelectorAll","removeAttribute","cacheLength","le","ce","fe","attrHandle","pe","sourceIndex","nextSibling","de","he","ge","isDisabled","ve","isXML","namespaceURI","setDocument","defaultView","top","attachEvent","attributes","className","createComment","getById","getElementsByName","find","getAttributeNode","innerHTML","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","contains","sortDetached","attr","specified","uniqueSort","detectDuplicates","sortStable","getText","textContent","firstChild","nodeValue","selectors","createPseudo","preFilter","lastChild","uniqueID","pseudos","setFilters","not","lang","location","focus","activeElement","hasFocus","tabIndex","enabled","checked","selected","selectedIndex","header","button","gt","nth","radio","checkbox","file","password","image","submit","me","we","Te","Ce","Ee","filters","tokenize","compile","selector","select","defaultValue","expr","unique","isXMLDoc","escapeSelector","parseHTML","ready","children","contents","closest","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","Callbacks","once","stopOnFalse","memory","remove","disable","lock","locked","fireWith","fire","fired","Deferred","always","pipe","progress","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","when","warn","message","stack","readyException","removeEventListener","readyWait","readyState","doScroll","toUpperCase","cache","access","hasData","removeData","_data","_removeData","dequeue","_queueHooks","clearQueue","composed","getRootNode","css","cur","cssNumber","unit","start","body","show","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","thead","col","tr","td","_default","tbody","tfoot","colgroup","caption","th","optgroup","htmlPrefilter","off","Se","namespace","isTrigger","special","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","events","triggered","dispatch","bindType","origType","delegateCount","setup","teardown","removeEvent","fix","delegateTarget","preDispatch","handlers","isPropagationStopped","currentTarget","elem","isImmediatePropagationStopped","rnamespace","handleObj","postDispatch","addProp","originalEvent","load","noBubble","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","code","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","on","one","ke","Ae","Ne","je","De","qe","Le","He","clone","_evalUrl","Oe","cleanData","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","Pe","Re","opener","getComputedStyle","Me","Ie","We","getPropertyValue","pixelBoxStyles","width","minWidth","maxWidth","Fe","cssText","marginLeft","right","position","offsetWidth","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","Be","$e","_e","ze","cssProps","Ue","Xe","Ve","visibility","Ge","letterSpacing","fontWeight","Ye","Qe","Je","getClientRects","Ke","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","setProperty","getBoundingClientRect","left","margin","padding","border","expand","Tween","easing","propHooks","duration","fx","scrollTop","scrollLeft","linear","swing","cos","PI","Ze","et","tt","nt","rt","ot","hidden","requestAnimationFrame","interval","tick","at","st","ut","tweeners","prefilters","startTime","tweens","props","opts","specialEasing","originalProperties","originalOptions","createTween","bind","timer","anim","Animation","tweener","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","old","fadeTo","animate","timers","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","clearTimeout","checkOn","optSelected","radioValue","ct","ft","removeAttr","attrHooks","pt","dt","ht","vt","removeProp","propFix","addClass","removeClass","toggleClass","hasClass","yt","valHooks","focusin","mt","xt","parentWindow","simulate","triggerHandler","bt","wt","Tt","parseXML","DOMParser","parseFromString","Ct","Et","St","kt","At","param","serialize","serializeArray","Nt","jt","Dt","qt","Lt","Ht","Ot","Pt","Rt","Mt","It","Wt","dataTypes","Ft","ajaxSettings","flatOptions","active","lastModified","etag","isLocal","processData","contentType","accepts","xml","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","statusCode","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","dataType","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","success","timeout","send","dataFilter","statusText","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","visible","xhr","XMLHttpRequest","Bt","$t","cors","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","response","script","scriptAttrs","charset","scriptCharset","zt","Ut","jsonp","jsonpCallback","createHTMLDocument","implementation","animated","offset","setOffset","using","pageYOffset","pageXOffset","offsetParent","scrollTo","Height","Width","unbind","undelegate","hover","Xt","proxy","holdReady","parseJSON","isWindow","camelCase","isNumeric","Vt","jQuery","Gt","noConflict","rootjQuery","contextOverride","removeUnusedTags","$node","cloneHtml","browser","isContainer","tagName","repeat","character","count","$body","$head","returnHtml","Node","COMMENT_NODE","blockElements","isBlock","voidElements","isVoid","meaningfulWhenBlankElements","tagNames","some","rules","cleanAttribute","attribute","Rules","_keep","_remove","blankRule","replacement","blankReplacement","keepReplacement","defaultRule","defaultReplacement","findRule","rule","filterValue","current","isPre","paragraph","lineBreak","br","heading","hLevel","Number","headingStyle","blockquote","list","lastElementChild","listItem","prefix","bulletListMarker","indentedCodeBlock","codeBlockStyle","fencedCodeBlock","language","fenceChar","fence","fenceSize","fenceInCodeRegex","horizontalRule","hr","inlineLink","linkStyle","title","referenceLink","reference","linkReferenceStyle","references","emphasis","emDelimiter","strong","strongDelimiter","hasSiblings","previousSibling","isCodeBlock","extraSpace","delimiter","alt","keep","forNode","isBlank","_htmlParser","HTMLParser","Parser","canParse","canParseHTMLNatively","useActiveX","ActiveXObject","shouldUseActiveX","doc","designMode","createHTMLParser","RootNode","element","prevText","keepLeadingWs","nextNode","collapseWhitespace","preformattedCode","isPreOrCode","isCode","isMeaningfulWhenBlank","hasVoid","hasMeaningfulWhenBlank","flankingWhitespace","leading","trailing","edges","leadingAscii","leadingNonAscii","trailingNonAscii","trailingAscii","isFlankedByWhitespace","side","sibling","regExp","isFlanked","reduce","escapes","TurndownService","defaults","outerHTML","destination","replacementForNode","postProcess","whitespace","s1","indexEnd","substring","trimTrailingNewlines","s2","nls","turndown","canConvert","use","plugin","addRule","accumulator","iconv","NORMALIZE_RE","normalizeSpaces","space","spaces","ltrim","rtrim","exporter","ALIAS","FORCE","TYPE","$parseInt","$trim","hex","ws","str","radix","PAGE_IN_HREF_RE","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","removeAnchor","_Array$isArray","getIterator","_arr","_getIterator","arrayWithHoles","iterableToArrayLimit","nonIterableRest","articleBaseUrl","parsed","parsedUrl","URL","firstSegmentHasLetters","cleanedSegments","acc","rawSegment","segment","includes","possibleSegment","fileExt","goodSegment","isGoodSegment","SENTENCE_END_RE","excerptContent","words","getEncoding","encoding","startLine","requestLine","statusLine","onlyHeaders","line","nl","firstLine","parseHeaders","major","minor","statusMessage","_header","normalize","i1","i2","i3","extract","skip","nextLine","addHeaderLine","field","dest","XHR","request","log","callback","options_onResponse","onResponse","verbose","level","logger","levels","formatted","getLogger","uri","unsupported_options","DEFAULT_TIMEOUT","accept","form","multi","boundry","lines","multipart","authorization","o1","o2","o3","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","b64_enc","timed_out","is_cors","ajaxLocation","rurl","ajaxLocParts","is_crossDomain","supports_cors","req_seq","seq_id","_id","cors_err","timeoutTimer","er","did","on_state_change","withCredentials","debug","OPENED","HEADERS_RECEIVED","on_response","LOADING","on_loading","DONE","httpHeaders","on_end","loading","run_xhr","requester","params","post","put","shortcut","couch","resp","REQUEST_HEADERS","cheerio","BAD_CONTENT_TYPES_RE","validateResponse","parseNon200","contentLength","fetchResource","encodeURI","jar","gzip","followAllRedirects","followRedirect","_context","convertMetaProp","from","to","Reflect","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","WHITELIST_ATTRS_RE","CLEAN_CONDITIONALLY_TAGS","HEADER_TAG_LIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_RE","PAGE_RE","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","brsToPs","collapsing","$element","nextElement","paragraphize","convertToParagraphs","span","$span","convertNodeTo","convertSpans","div","$div","convertDivs","attrs","getAttrs","attribString","_Reflect$ownKeys","cleanImages","$article","img","$img","_parseInt","cleanForHeight","removeSpacers","arr2","arrayLike","aLen","mapfn","mapping","createProperty","isIterable","_isIterable","_Array$from","arrayWithoutHoles","iterableToArray","nonIterableSpread","markToKeep","article","tags","removeAllButWhitelist","attribs","setAttrs","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS_RE","READABILITY_ASSET","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","getWeight","classes","score","$parseFloat","Infinity","getScore","_parseFloat","scoreCommas","idkRe","scoreParagraph","textLength","lengthBonus","chunks","scoreLength","setScore","addScore","amount","getOrInitScore","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","contentBonus","density","linkDensity","siblingContent","siblingContentLength","cleanTags","weight","pCount","imgCount","previousNode","removeUnlessContent","SIZE","getEntry","_f","getConstructor","IS_MAP","ADDER","_l","redefineAll","validate","setStrong","$iterDefine","setSpecies","original","$create","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","res","common","IS_WEAK","IS_ADDER","size","toJSON","COLLECTION","of","cb","mapFn","nextItem","Set","makeLinksAbsolute","$content","rootUrl","baseUrl","absoluteUrl","setAttr","absolutize","urlSet","srcset","candidates","absoluteCandidates","candidate","_toConsumableArray","absolutizeSet","totalTextLength","linkLength","_typeof2","_Symbol","_Symbol$iterator","_typeof","extractFromMeta","metaNames","cachedNames","foundNames","metaValue","stripTags","isGoodNode","maxChildren","nodeClass","class","withinComment","extractFromSelectors","textOnly","nodes","cleanText","nodeIsSufficient","IS_LINK","IS_IMAGE","IS_SRCSET","TAGS_TO_REMOVE","convertLazyLoadedImages","existingSrc","extractSrcFromJSON","isComment","clean","cleanComments","Resource","preparedResponse","alreadyDecoded","failed","generateDoc","encodeDoc","normalizeMetaTags","decodedContent","metaContentType","properEncoding","range","validateUrl","$assign","assign","extractor","domains","mergeSupportedDomains","supportedDomains","apiExtractors","addExtractor","BloggerExtractor","transforms","noscript","author","date_published","NYMagExtractor","$children","dek","ApartmentTherapyExtractor","sources","lead_image_url","next_page_url","excerpt","MediumExtractor","$text","ytRe","thumb","youtubeId","$caption","figure","WwwMsnbcComExtractor","GeniusComExtractor","song","release_date","album","cover_art_url","WiredJpExtractor","dataOriginal","WwwAbendblattDeExtractor","defaultCleaner","tweets","$tweetContainer","timezone","videoId","description","imgHtml","$imgSrc","$imageParent","$dataAttrContainer","imgPath1","imgPath2","$figure","figcaption","bgImg","table","innerHtml","byline","linkbox","reporter","ul","ol","li","CustomExtractors","rtlSciriptRanges","Hebrew","Arabic","NKo","Syriac","Thaana","Tifinagh","getDirection","hasRtl","hasDirectionCharacters","hasLtr","direction","char","charIsRtl","hasDigit","isInScriptRange","fromCode","toCode","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","TIME_NOW_STRING","allTimeUnits","TIME_AGO_STRING","allMonths","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","is_uri","is_iri","is_http_uri","is_http_iri","is_https_uri","is_https_iri","is_web_uri","is_web_iri","isUri","isHttpUri","isHttpsUri","isWebUri","splitUri","splitted","authority","fragment","scheme","allowHttps","leadImageUrl","validUrl","hookCallback","hooks","hasOwnProp","isObjectEmpty","isUndefined","isNumber","isDate","arrLen","createUTC","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","deprecationHandler","argLen","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","number","targetLength","forceSign","absNumber","abs","zerosToFill","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","formatMoment","expandFormat","mom","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","getSetYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","extractFromRFC2822Strings","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","period","tmp","addSubtract","isAdding","invalid","subtract","isString","isMomentInput","arrayTest","dataTypeTest","isNumberOrStringArray","property","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","isCalendarSpec","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","prioritizedLen","toDate","toISOString","keepOffset","inspect","suffix","zone","for","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","factory","moment","default","abbrs","offsets","untils","population","_set","zones","toTimeString","offsetScore","abbrScore","localeCompare","links","countries","dataVersion","tz","_index","moveAmbiguousForward","moveInvalidForward","scoreOffsetAt","_zones","_links","_names","_countries","link","zoneExists","didShowError","guess","Intl","DateTimeFormat","resolvedOptions","timeZone","Zone","unpack","unpackBase60","needsOffset","zonesForCountry","_z","defaultZone","setDefault","dateString","replaceWithAmPm","amPm","preferredOrder","defaultOrder","regexUnixMillisecondTimestamp","regexUnixTimestamp","regexFillingWords","regexDayNames","regexAbbreviatedDayNames","regexShortestDayNames","regexFirstSecondThirdFourth","regexMonthNames","regexAbbreviatedMonthNames","regexEndian","replaceEndian","regexTimezone","regexISO8601HoursWithLeadingZeroMinutesSecondsMilliseconds","regexISO8601HoursWithLeadingZeroMinutesSecondsCentiSeconds","regexISO8601HoursWithLeadingZeroMinutesSecondsDeciSeconds","regexHoursWithLeadingZeroDigitMinutesSecondsAmPm","regexHoursMinutesSecondsAmPm","regexHoursWithLeadingZeroDigitMinutesAmPm","regexHoursMinutesAmPm","regexHoursWithLeadingZeroDigitAmPm","regexHoursAmPm","regexHoursWithLeadingZeroMinutesSeconds","regexHoursMinutesSecondsMilliseconds","regexHoursMinutesSecondsCentiSeconds","regexHoursMinutesSecondsDeciSeconds","regexHoursMinutesSeconds","regexHoursWithLeadingZeroMinutes","regexHoursMinutes","regexYearLong","regexDayShortMonthShort","regexDayShortMonth","regexDayMonthShort","regexDayMonth","regexMonthShortYearShort","regexMonthYearShort","formatIncludesMonth","regexDayLeadingZero","regexDay","regexYearShort","amOrPm","matchedPart","third","hasSingleDigit","hasQuadDigit","parseFormat","cleanDateString","fragments","cleanDatePublished","extractCleanNode","cleanConditionally","rewriteTopLevel","stripJunkTags","$hOnes","cleanHOnes","$header","cleanHeaders","$p","removeEmpty","cleanAttributes","cleanTitle","splitTitle","newTitle","extractBreadcrumbTitle","cleanDomainFromTitle","resolveSplitTitle","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","\\","'","\n","\r","
","
","freeParseFloat","freeParseInt","freeSelf","moduleExports","freeProcess","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","escapeHtmlChar","&","<",">","\"","escapeStringChar","chr","hasUnicode","mapToArray","overArg","transform","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","&","<",">",""","'","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","cloneRegExp","symbol","cloneSymbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","evaluate","interpolate","variable","imports","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","depth","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","guard","isIterateeCall","createCaseFirst","methodName","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","resolver","memoized","Cache","negate","overArgs","funcsLength","partial","partialRight","rearg","gte","isError","isInteger","lte","iteratorToArray","remainder","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","omit","CLONE_DEEP_FLAG","basePick","toPairs","toPairsIn","word","capitalize","upperFirst","kebabCase","lowerFirst","snakeCase","startCase","upperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","pad","strLength","padEnd","padStart","floating","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","ensureArr","cost","mlen","weights","v0","v1","vlen","termCounts","titleText","maxTerm","longestEnd","nakedDomain","startSlug","wuzzy","endSlug","Cleaners","cleanImage","dekText","cleanContent","extractBestNode","stripUnlikelyCandidates","classAndId","findTopCandidate","parentSelector","childSelector","scoreContent","GenericContentExtractor","defaultOpts","getContentNode","cleanAndReturnNode","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","regexList","matchRe","extractFromUrl","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","scoreImageUrl","scoreAttr","$gParent","scoreByParents","scoreBySibling","area","scoreByDimensions","$imgs","scoreByPosition","topUrl","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","lastelt","returnitem","_ref","_j","_ref1","_results","_results1","_len","los","startpos","newitem","parentpos","childpos","endpos","rightpos","pushpop","peek","heap","insert","front","Differ","IS_CHARACTER_JUNK","IS_LINE_JUNK","SequenceMatcher","contextDiff","getCloseMatches","ndiff","restore","unifiedDiff","_any","_arrayCmp","_calculateRatio","_countLeading","_formatRangeContext","_formatRangeUnified","_has","__indexOf","la","lb","items","isjunk","autojunk","setSeqs","setSeq1","setSeq2","matchingBlocks","opcodes","fullbcount","_chainB","b2j","elt","junk","ntest","popular","_len1","isbjunk","isbpopular","findLongestMatch","alo","ahi","blo","bhi","besti","bestj","bestsize","j2len","newj2len","_ref2","_ref3","_ref4","_ref5","getMatchingBlocks","j1","j2","k1","k2","nonAdjacent","getOpcodes","ai","answer","bj","getGroupedOpcodes","codes","groups","nn","ratio","quickRatio","avail","numb","realQuickRatio","possibilities","cutoff","ch","linejunk","charjunk","compare","_fancyReplace","_dump","_plainReplace","aelt","ai1","ai2","atags","belt","bestRatio","bj1","btags","cruncher","eqi","eqj","_len2","_len3","_len4","_m","_o","_ref10","_ref11","_ref12","_ref6","_ref7","_ref8","_ref9","_fancyHelper","_qformat","aline","bline","pat","beginning","_arg","file1Range","file2Range","fromdate","fromfile","fromfiledate","lineterm","started","todate","tofile","tofiledate","equal","prefixes","DIGIT_RE","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreLinks","articleUrl","previousUrls","baseRegex","makeBaseRegex","isWp","isWordpress","scoredPages","possiblePages","$link","linkText","shouldScore","possiblePage","linkData","makeSig","pageNum","pageNumFromUrl","scoreBaseUrl","scoreNextLinkText","scoreCapLinks","scorePrevLink","positiveMatch","negativeMatch","parentData","scoreExtraneousLinks","scorePageInLink","linkTextAsNum","scoreLinkText","difflib","scoreSimilarity","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","ellipse","midMax","computedMax","ellipsize","EXCERPT_META_SELECTORS","GenericExcerptExtractor","GenericWordCountExtractor","getWordCount","getWordCountAlt","GenericExtractor","url_and_domain","word_count","stringDirection","loaded","Detectors","getExtractor","baseDomain","Extractors","detectByHtml","extractionOpts","extractHtml","allowMultiple","matchingSelector","findMatchingSelector","transformAndClean","cleanBySelectors","$matches","transformElements","$wrapper","selectHtml","selectExtendedTypes","results","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","extendedResults","collectAllPages","Extractor","pages","nextPageResult","total_pages","rendered_pages","fetchAllPages","customExtractor","addCustomExtractor","extendedTypes","turndownService"],"mappings":"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a,EAAQ2vC,EAAM1gB,KAAK6yB,GACzBnS,EAAM1gB,KAAK8yB,EAAI/hD,GACf2vC,EAAMjJ,WAAWob,MAGZz3B,ECLT,IAAI23B,GAAU18C,EAAqB08C,WAClBA,IAAWA,GAAQ/vC,SAAW,SAAiBzM,OAC1DtF,EAAOkO,GAAK1G,EAAEY,EAAS9C,IACvB6K,EAAaC,GAAK5I,SACf2I,EAAanQ,EAAKoK,OAAO+F,EAAW7K,IAAOtF,GCLpDqI,EAAQA,EAAQrC,EAAG,UAAW,CAAE+L,QAAS3M,KCFzC/H,OAAiB+H,EAA+B08C,QAAQ/vC,QCA3CgwC,GAAY,IAAI73B,OAAO,2BAA4B,KAInD83B,GAAa,sBAEbC,GAAiB,CAC5B,yCACA,kDACA,wCACA,sCACA,qCACA,8CAIWC,GAAoB,CAC/B,QACA,SACA,WACA,OACA,QACA,KACA,QACA,SACA,UAuBWC,GAAqB,IAAIj4B,mBAdP,CAC7B,MACA,SACA,QACA,OACA,OACA,QACA,KACA,MACA,aACA,QACA,UAIqBlL,KAAK,WAC1B,KAUWojC,GAA2B,CACtC,KACA,KACA,QACA,MACA,SACA,QACApjC,KAAK,KAIMqjC,GADO,CAAC,KAAM,KAAM,KAAM,KAAM,MACFrjC,KAAK,KAmFnCsjC,GAAsB,CACjC,IACA,aACA,KACA,MACA,MACA,IACA,MACA,SACAtjC,KAAK,KAkEMujC,GAAoB,IAAIr4B,OAvBD,CAClC,UACA,iBACA,kBACA,OACA,OACA,UACA,sBACA,QACA,SACA,OACA,SACA,OACA,aACA,YACA,OACA,QACA,OACA,WACA,WAKqBlL,KAAK,KAC1B,KAoEWwjC,GAAoB,IAAIt4B,OA1DD,CAClC,QACA,SACA,SACA,MACA,WACA,SACA,SACA,QACA,OACA,QACA,UACA,aACA,UACA,OACA,SACA,QACA,OACA,OACA,UACA,WACA,OACA,SACA,WACA,OACA,OACA,OACA,WACA,oBACA,OACA,YACA,OACA,WACA,QACA,OACA,QACA,WACA,QACA,MACA,UACA,UACA,eACA,SACA,YACA,QACA,WACA,WACA,OACA,UACA,UACA,QACA,MACA,UACA,OACA,QACA,UAIqBlL,KAAK,KAC1B,KAiCWyjC,GAAU,IAAIv4B,OAAO,kBAAmB,KAyExCw4B,GAAsB,IAAIx4B,mBAjDP,CAC9B,UACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,MACA,WACA,KACA,MACA,KACA,KACA,QACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,KACA,KACA,MACA,SACA,KACA,SACA,IACA,MACA,WACA,UACA,QACA,QACA,WACA,QACA,KACA,QACA,KACA,KACA,SAGsBlL,KAAK,WAC3B,KAOI2jC,GAjVuC,CAC3C,WACA,QACA,SACA,UACA,UACA,MACA,iBACA,QACA,UACA,eACA,SACA,kBACA,QACA,OAEA,SACA,SACA,SACA,QACA,OACA,OACA,MACA,WACA,QACA,aACA,WACA,4BACA,QACA,gBACA,UACA,SACA,SACA,MACA,QACA,WACA,UACA,WACA,UACA,UACA,SAySwD3jC,KAAK,KAClD4jC,GAAuB,IAAI14B,OAAOy4B,GAAqB,KAE9DE,GA9RuC,CAC3C,MACA,UACA,OACA,YACA,SACA,UACA,sBACA,SACA,QACA,SACA,QACA,OACA,OACA,QACA,UA+QwD7jC,KAAK,KAClD8jC,GAAuB,IAAI54B,OAAO24B,GAAqB,KC1ZrD,SAASE,GAAQ54B,OAC1B64B,GAAa,SACjB74B,EAAE,MAAM5B,MAAK,SAACjc,EAAO+oC,OACb4N,EAAW94B,EAAEkrB,GACb6N,EAAcD,EAASvjD,OAAO4G,IAAI,GAEpC48C,GAAqD,OAAtCA,EAAYrT,QAAQ1uB,eACrC6hC,GAAa,EACbC,EAAS1vB,UACAyvB,IACTA,GAAa,ECRJ,SAAsBlpC,EAAMqQ,OAAG6nB,0DACtCvC,EAAQtlB,EAAErQ,MAEZk4B,EAAI,SACF0E,EAAU58B,EAAKmT,YACbpH,EAAIsE,EAAE,WAKVusB,KACEA,EAAQ7G,UAAW6S,GAAoBxhC,KAAKw1B,EAAQ7G,WACtD,OACwB6G,EAAhBzpB,IAAAA,YACR9C,EAAEusB,GAASnZ,SAAS1X,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"} \ No newline at end of file diff --git a/dist/mercury.js b/dist/mercury.js index 32c0b61ae..23817530d 100644 --- a/dist/mercury.js +++ b/dist/mercury.js @@ -1546,7 +1546,7 @@ function convertLazyLoadedImages($) { src = _JSON$parse.src; if (typeof src === 'string') return src; - } catch (e) { + } catch (_) { return false; } @@ -1919,7 +1919,7 @@ var TwitterExtractor = { var NYTimesExtractor = { domain: 'www.nytimes.com', title: { - selectors: ['h1.g-headline', 'h1[itemprop="headline"]', 'h1.headline', 'h1 .balancedHeadline'] + selectors: ['h1[data-testid="headline"]', 'h1.g-headline', 'h1[itemprop="headline"]', 'h1.headline', 'h1 .balancedHeadline'] }, author: { selectors: [['meta[name="author"]', 'value'], '.g-byline', '.byline', ['meta[name="byl"]', 'value']] @@ -1937,7 +1937,7 @@ var NYTimesExtractor = { clean: ['.ad', 'header#story-header', '.story-body-1 .lede.video', '.visually-hidden', '#newsletter-promo', '.promo', '.comments-button', '.hidden', '.comments', '.supplemental', '.nocontent', '.story-footer-links'] }, date_published: { - selectors: [['meta[name="article:published"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[name="article:published"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -1974,7 +1974,7 @@ var TheAtlanticExtractor = { selectors: [['time[itemprop="datePublished"]', 'datetime']] }, lead_image_url: { - selectors: [['img[itemprop="url"]', 'src']] + selectors: [['meta[name="og:image"]', 'value']] }, next_page_url: null, excerpt: null @@ -1986,30 +1986,33 @@ var TheAtlanticExtractor = { var NewYorkerExtractor = { domain: 'www.newyorker.com', title: { - selectors: ['h1[class^="content-header"]', 'h1[class^="ArticleHeader__hed"]', ['meta[name="og:title"]', 'value']] + selectors: ['h1[class^="content-header"]', 'h1[class^="ArticleHeader__hed"]', 'h1[class*="ContentHeaderHed"]', ['meta[name="og:title"]', 'value']] }, author: { - selectors: [['meta[name="author"]', 'value'], 'div[class^="ArticleContributors"] a[rel="author"]', 'article header div[class*="Byline__multipleContributors"]'] + selectors: ['article header div[class^="BylinesWrapper"]', ['meta[name="article:author"]', 'value'], 'div[class^="ArticleContributors"] a[rel="author"]', 'article header div[class*="Byline__multipleContributors"]'] }, content: { - selectors: ['article.article.main-content', 'main[class^="Layout__content"]'], + selectors: ['.article__body', 'article.article.main-content', 'main[class^="Layout__content"]'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images - transforms: [], + transforms: { + '.caption__text': 'figcaption', + '.caption__credit': 'figcaption' + }, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['footer[class^="ArticleFooter__footer"]'] + clean: ['footer[class^="ArticleFooter__footer"]', 'aside'] }, date_published: { - selectors: ['time.content-header__publish-date', ['meta[name="pubdate"]', 'value']], + selectors: [['meta[name="article:published_time"]', 'value'], 'time.content-header__publish-date', ['meta[name="pubdate"]', 'value']], timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, dek: { - selectors: ['div.content-header__dek', 'h2[class^="ArticleHeader__dek"]'] + selectors: ['div[class^="ContentHeaderDek"]', 'div.content-header__dek', 'h2[class^="ArticleHeader__dek"]'] }, next_page_url: null, excerpt: null @@ -2021,10 +2024,10 @@ var NewYorkerExtractor = { var WiredExtractor = { domain: 'www.wired.com', title: { - selectors: ['h1.content-header__hed', 'h1.post-title'] + selectors: ['h1[data-testId="ContentHeaderHed"]'] }, author: { - selectors: [['meta[name="author"]', 'value'], 'a[rel="author"]'] + selectors: [['meta[name="article:author"]', 'value'], 'a[rel="author"]'] }, content: { selectors: ['article.article.main-content', 'article.content'], @@ -2034,10 +2037,10 @@ var WiredExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.visually-hidden', 'figcaption img.photo'] + clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'] }, date_published: { - selectors: ['time.content-header__publish-date', ['meta[itemprop="datePublished"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2124,14 +2127,15 @@ var YahooExtractor = { // (e.g., NYTimesExtractor) var BuzzfeedExtractor = { domain: 'www.buzzfeed.com', + supportedDomains: ['www.buzzfeednews.com'], title: { - selectors: ['h1[id="post-title"]'] + selectors: ['h1.embed-headline-title'] }, author: { - selectors: ['a[data-action="user/username"]', 'byline__author'] + selectors: ['a[data-action="user/username"]', 'byline__author', ['meta[name="author"]', 'value']] }, content: { - selectors: [['.longform_custom_header_media', '#buzz_sub_buzz'], '#buzz_sub_buzz'], + selectors: [['div[class^="featureimage_featureImageWrapper"]', '.js-subbuzz-wrapper'], ['.js-subbuzz-wrapper']], defaultCleaner: false, // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images @@ -2149,16 +2153,16 @@ var BuzzfeedExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.instapaper_ignore', '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline', '.share-box', '.print'] + clean: ['.instapaper_ignore', '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline', '.share-box', '.print', '.js-inline-share-bar', '.js-ad-placement'] }, date_published: { - selectors: ['.buzz-datetime'] + selectors: [['time[datetime]', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, dek: { - selectors: [] + selectors: ['.embed-headline-description'] }, next_page_url: null, excerpt: null @@ -2204,14 +2208,14 @@ var WikiaExtractor = { var LittleThingsExtractor = { domain: 'www.littlethings.com', title: { - selectors: ['h1.post-title'] + selectors: ['h1[class*="PostHeader"]', 'h1.post-title'] }, author: { - selectors: [['meta[name="author"]', 'value']] + selectors: ['div[class^="PostHeader__ScAuthorNameSection"]', ['meta[name="author"]', 'value']] }, content: { selectors: [// enter content selectors - '.mainContentIntro', '.content-wrapper'], + 'section[class*="PostMainArticle"]', '.mainContentIntro', '.content-wrapper'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: [], @@ -2256,13 +2260,13 @@ var DeadspinExtractor = { domain: 'deadspin.com', supportedDomains: ['jezebel.com', 'lifehacker.com', 'kotaku.com', 'gizmodo.com', 'jalopnik.com', 'kinja.com', 'avclub.com', 'clickhole.com', 'splinternews.com', 'theonion.com', 'theroot.com', 'thetakeout.com', 'theinventory.com'], title: { - selectors: ['h1.headline'] + selectors: ['header h1', 'h1.headline'] }, author: { - selectors: ['.author'] + selectors: ['a[data-ga*="Author"]', '.author'] }, content: { - selectors: ['.post-content', '.entry-content'], + selectors: ['.js_post-content', '.post-content', '.entry-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -2277,7 +2281,7 @@ var DeadspinExtractor = { clean: ['.magnifier', '.lightbox'] }, date_published: { - selectors: [['time.updated[datetime]', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['time.updated[datetime]', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2302,7 +2306,7 @@ var DeadspinExtractor = { var BroadwayWorldExtractor = { domain: 'www.broadwayworld.com', title: { - selectors: ['h1.article-title'] + selectors: ['h1[itemprop=headline]', 'h1.article-title'] }, author: { selectors: ['span[itemprop=author]'] @@ -2471,7 +2475,7 @@ var WwwTmzComExtractor = { }, author: 'TMZ STAFF', date_published: { - selectors: ['.article-posted-date'], + selectors: ['.article__published-at', '.article-posted-date'], timezone: 'America/Los_Angeles' }, dek: { @@ -2482,7 +2486,7 @@ var WwwTmzComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-content', '.all-post-body'], + selectors: ['.article__blocks', '.article-content', '.all-post-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2565,10 +2569,10 @@ var WwwHuffingtonpostComExtractor = { var NewrepublicComExtractor = { domain: 'newrepublic.com', title: { - selectors: ['h1.article-headline', '.minutes-primary h1.minute-title'] + selectors: ['h1.article-headline'] }, author: { - selectors: ['div.author-list', '.minutes-primary h3.minute-byline'] + selectors: ['span.AuthorList'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']], @@ -2581,7 +2585,7 @@ var NewrepublicComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.article-cover', 'div.content-body'], ['.minute-image', '.minutes-primary div.content-body']], + selectors: [['div.article-body']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2598,7 +2602,7 @@ var MoneyCnnComExtractor = { selectors: ['.article-title'] }, author: { - selectors: ['.byline a'] + selectors: [['meta[name="author"]', 'value'], '.byline a'] }, date_published: { selectors: [['meta[name="date"]', 'value']], @@ -2635,7 +2639,7 @@ var WwwThevergeComExtractor = { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['h2.p-dek'] + selectors: ['.p-dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2671,10 +2675,10 @@ var WwwCnnComExtractor = { selectors: ['h1.pg-headline', 'h1'] }, author: { - selectors: ['.metadata__byline__author'] + selectors: [['meta[name="author"]', 'value']] }, date_published: { - selectors: [['meta[name="pubdate"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2747,10 +2751,10 @@ var WwwAolComExtractor = { var WwwYoutubeComExtractor = { domain: 'www.youtube.com', title: { - selectors: ['.watch-title', 'h1.watch-title-container'] + selectors: [['meta[name="title"]', 'value'], '.watch-title', 'h1.watch-title-container'] }, author: { - selectors: ['.yt-user-info'] + selectors: [['link[itemprop="name"]', 'content'], '.yt-user-info'] }, date_published: { selectors: [['meta[itemProp="datePublished"]', 'value']], @@ -2765,13 +2769,18 @@ var WwwYoutubeComExtractor = { }, content: { defaultCleaner: false, - selectors: [['#player-api', '#eow-description']], + selectors: ['#player-container-outer', 'ytd-expandable-video-description-body-renderer #description', ['#player-api', '#description']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { '#player-api': function playerApi($node, $) { var videoId = $('meta[itemProp="videoId"]').attr('value'); $node.html("\n <iframe src=\"https://www.youtube.com/embed/".concat(videoId, "\" frameborder=\"0\" allowfullscreen></iframe>")); + }, + '#player-container-outer': function playerContainerOuter($node, $) { + var videoId = $('meta[itemProp="videoId"]').attr('value'); + var description = $('meta[itemProp="description"]').attr('value'); + $node.html("\n <iframe src=\"https://www.youtube.com/embed/".concat(videoId, "\" frameborder=\"0\" allowfullscreen></iframe>\n <div><span>").concat(description, "</span></div>")); } }, // Is there anything that is in the result that shouldn't be? @@ -2784,22 +2793,22 @@ var WwwYoutubeComExtractor = { var WwwTheguardianComExtractor = { domain: 'www.theguardian.com', title: { - selectors: ['.content__headline'] + selectors: ['h1', '.content__headline'] }, author: { - selectors: ['p.byline'] + selectors: ['address[data-link-name="byline"]', 'p.byline'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['.content__standfirst'] + selectors: ['div[data-gu-name="standfirst"]', '.content__standfirst'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.content__article-body'], + selectors: ['#maincontent', '.content__article-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2822,7 +2831,7 @@ var WwwSbnationComExtractor = { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['h2.c-entry-summary.p-dek'] + selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -2845,24 +2854,24 @@ var WwwBloombergComExtractor = { selectors: [// normal articles '.lede-headline', // /graphics/ template 'h1.article-title', // /news/ template - 'h1.lede-text-only__hed'] + 'h1[class^="headline"]', 'h1.lede-text-only__hed'] }, author: { selectors: [['meta[name="parsely-author"]', 'value'], '.byline-details__link', // /graphics/ template '.bydek', // /news/ template - '.author'] + '.author', 'p[class*="author"]'] }, date_published: { - selectors: [['time.published-at', 'datetime'], ['time[datetime]', 'datetime'], ['meta[name="date"]', 'value'], ['meta[name="parsely-pub-date"]', 'value']] + selectors: [['time.published-at', 'datetime'], ['time[datetime]', 'datetime'], ['meta[name="date"]', 'value'], ['meta[name="parsely-pub-date"]', 'value'], ['meta[name="parsely-pub-date"]', 'content']] }, dek: { selectors: [] }, lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] + selectors: [['meta[name="og:image"]', 'value'], ['meta[name="og:image"]', 'content']] }, content: { - selectors: ['.article-body__content', // /graphics/ template + selectors: ['.article-body__content', '.body-content', // /graphics/ template ['section.copy-block'], // /news/ template '.body-copy'], // Is there anything in the content you selected that needs transformed @@ -2878,19 +2887,19 @@ var WwwBloombergComExtractor = { var WwwBustleComExtractor = { domain: 'www.bustle.com', title: { - selectors: ['h1.post-page__title'] + selectors: ['h1', 'h1.post-page__title'] }, author: { - selectors: ['div.content-meta__author'] + selectors: ['a[href*="profile"]', 'div.content-meta__author'] }, date_published: { - selectors: [['time.content-meta__published-date[datetime]', 'datetime']] + selectors: [['time', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.post-page__body'], + selectors: ['article', '.post-page__body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -2968,7 +2977,7 @@ var QzComExtractor = { selectors: [['meta[name="author"]', 'value']] }, date_published: { - selectors: [['time[datetime]', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['time[datetime]', 'datetime']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value'], ['meta[property="og:image"]', 'content'], ['meta[name="twitter:image"]', 'content']] @@ -3020,10 +3029,10 @@ var WwwDmagazineComExtractor = { var WwwReutersComExtractor = { domain: 'www.reuters.com', title: { - selectors: ['h1.article-headline'] + selectors: ['h1[class*="ArticleHeader-headline-"]', 'h1.article-headline'] }, author: { - selectors: ['.author'] + selectors: [['meta[name="og:article:author"]', 'value'], '.author'] }, date_published: { selectors: [['meta[name="og:article:published_time"]', 'value']] @@ -3032,7 +3041,7 @@ var WwwReutersComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#article-text'], + selectors: ['div.ArticleBodyWrapper', '#article-text'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3041,26 +3050,26 @@ var WwwReutersComExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['#article-byline .author'] + clean: ['div[class^="ArticleBody-byline-container-"]', '#article-byline .author'] } }; var MashableComExtractor = { domain: 'mashable.com', title: { - selectors: ['h1.title'] + selectors: ['header h1', 'h1.title'] }, author: { - selectors: ['span.author_name a'] + selectors: [['meta[name="article:author"]', 'value'], 'span.author_name a'] }, date_published: { - selectors: [['meta[name="og:article:published_time"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['section.article-content.blueprint'], + selectors: ['#article', 'section.article-content.blueprint'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3076,19 +3085,19 @@ var MashableComExtractor = { var WwwChicagotribuneComExtractor = { domain: 'www.chicagotribune.com', title: { - selectors: ['h1.trb_ar_hl_t'] + selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['span.trb_ar_by_nm_au'] + selectors: ['div.article_byline span:first-of-type'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: ['time'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.trb_ar_page'], + selectors: ['article'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3185,13 +3194,13 @@ var WwwNationalgeographicComExtractor = { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: ['.article__deck'] + selectors: ['.Article__Headline__Desc', '.article__deck'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.parsys.content', '.__image-lead__'], '.content'], + selectors: ['section.Article__Content', ['.parsys.content', '.__image-lead__'], '.content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3225,19 +3234,19 @@ var WwwNationalgeographicComExtractor = { var WwwLatimesComExtractor = { domain: 'www.latimes.com', title: { - selectors: ['.trb_ar_hl'] + selectors: ['h1.headline', '.trb_ar_hl'] }, author: { - selectors: [['meta[name="author"]', 'value']] + selectors: ['a[data-click="standardBylineAuthorName"]', ['meta[name="author"]', 'value']] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[itemprop="datePublished"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.trb_ar_main'], + selectors: ['.page-article-body', '.trb_ar_main'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3257,7 +3266,7 @@ var PagesixComExtractor = { domain: 'pagesix.com', supportedDomains: ['nypost.com'], title: { - selectors: ['h1 a'] + selectors: [['meta[name="og:title"]', 'value']] }, author: { selectors: ['.byline'] @@ -3292,7 +3301,7 @@ var ThefederalistpapersOrgExtractor = { selectors: ['h1.entry-title'] }, author: { - selectors: ['main span.entry-author-name'] + selectors: ['.author-meta-title', 'main span.entry-author-name'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -3301,31 +3310,31 @@ var ThefederalistpapersOrgExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-content'], + selectors: ['.content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: [['p[style]']] + clean: ['header', '.article-sharing', '.after-article', '.type-commenting', '.more-posts', ['p[style]']] } }; var WwwCbssportsComExtractor = { domain: 'www.cbssports.com', title: { - selectors: ['.article-headline'] + selectors: ['.Article-headline', '.article-headline'] }, author: { - selectors: ['.author-name'] + selectors: ['.ArticleAuthor-nameText', '.author-name'] }, date_published: { - selectors: [['.date-original-reading-time time', 'datetime']], + selectors: [['meta[itemprop="datePublished"]', 'value']], timezone: 'UTC' }, dek: { - selectors: ['.article-subline'] + selectors: ['.Article-subline', '.article-subline'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -3348,10 +3357,10 @@ var WwwMsnbcComExtractor = { selectors: ['h1', 'h1.is-title-pane'] }, author: { - selectors: ['.author'] + selectors: ['.byline-name', '.author'] }, date_published: { - selectors: [['meta[name="DC.date.issued"]', 'value']] + selectors: [['meta[itemprop="datePublished"]', 'value'], ['meta[name="DC.date.issued"]', 'value']] }, dek: { selectors: [['meta[name="description"]', 'value']] @@ -3360,7 +3369,7 @@ var WwwMsnbcComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.pane-node-body'], + selectors: ['.article-body__content', '.pane-node-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3417,48 +3426,49 @@ var WwwThepoliticalinsiderComExtractor = { var WwwMentalflossComExtractor = { domain: 'www.mentalfloss.com', title: { - selectors: ['h1.title', '.title-group', '.inner'] + selectors: [['meta[name="og:title"]', 'value'], 'h1.title', '.title-group', '.inner'] }, author: { - selectors: ['.field-name-field-enhanced-authors'] + selectors: ['a[data-vars-label*="authors"]', '.field-name-field-enhanced-authors'] }, date_published: { - selectors: ['.date-display-single'], + selectors: [['meta[name="article:published_time"]', 'value'], '.date-display-single'], timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.field.field-name-body'], + selectors: ['article main', 'div.field.field-name-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: [] + clean: ['small'] } }; var AbcnewsGoComExtractor = { domain: 'abcnews.go.com', title: { - selectors: ['.article-header h1'] + selectors: ['div[class*="Article_main__body"] h1', '.article-header h1'] }, author: { - selectors: ['.authors'], + selectors: ['.ShareByline span:nth-child(2)', '.authors'], clean: ['.author-overlay', '.by-text'] }, date_published: { - selectors: ['.timestamp'], + selectors: ['.ShareByline', '.timestamp'], + format: 'MMMM D, YYYY h:mm a', timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-copy'], + selectors: ['article', '.article-copy'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3472,19 +3482,19 @@ var AbcnewsGoComExtractor = { var WwwNydailynewsComExtractor = { domain: 'www.nydailynews.com', title: { - selectors: ['h1#ra-headline'] + selectors: ['h1.headline', 'h1#ra-headline'] }, author: { - selectors: [['meta[name="parsely-author"]', 'value']] + selectors: ['.article_byline span', ['meta[name="parsely-author"]', 'value']] }, date_published: { - selectors: [['meta[name="sailthru.date"]', 'value']] + selectors: ['time', ['meta[name="sailthru.date"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['article#ra-body'], + selectors: ['article', 'article#ra-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3579,19 +3589,22 @@ var ObserverComExtractor = { var PeopleComExtractor = { domain: 'people.com', title: { - selectors: [['meta[name="og:title"]', 'value']] + selectors: ['.article-header h1', ['meta[name="og:title"]', 'value']] }, author: { - selectors: ['a.author.url.fn'] + selectors: [['meta[name="sailthru.author"]', 'value'], 'a.author.url.fn'] }, date_published: { - selectors: [['meta[name="article:published_time"]', 'value']] + selectors: ['.mntl-attribution__item-date', ['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, + dek: { + selectors: ['.article-header h2'] + }, content: { - selectors: ['div.article-body__inner'], + selectors: ['div[class^="loc article-content"]', 'div.article-body__inner'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3608,17 +3621,17 @@ var WwwUsmagazineComExtractor = { selectors: ['header h1'] }, author: { - selectors: ['a.article-byline.tracked-offpage'] + selectors: ['a.author', 'a.article-byline.tracked-offpage'] }, date_published: { timezone: 'America/New_York', - selectors: ['time.article-published-date'] + selectors: [['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.article-body-inner'], + selectors: ['div.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3632,30 +3645,30 @@ var WwwUsmagazineComExtractor = { var WwwRollingstoneComExtractor = { domain: 'www.rollingstone.com', title: { - selectors: ['h1.content-title'] + selectors: ['h1.l-article-header__row--title', 'h1.content-title'] }, author: { - selectors: ['a.content-author.tracked-offpage'] + selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'] }, date_published: { - selectors: ['time.content-published-date'], + selectors: [['meta[name="article:published_time"]', 'value'], 'time.content-published-date'], timezone: 'America/New_York' }, dek: { - selectors: ['.content-description'] + selectors: ['h2.l-article-header__row--lead', '.content-description'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.lead-container', '.article-content'], '.article-content'], + selectors: ['.l-article-content', ['.lead-container', '.article-content'], '.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.module-related'] + clean: ['.c-related-links-wrapper', '.module-related'] } }; @@ -3665,7 +3678,7 @@ var twofortysevensportsComExtractor = { selectors: ['title', 'article header h1'] }, author: { - selectors: ['.author'] + selectors: ['.article-cnt__author', '.author'] }, date_published: { selectors: [['time[data-published]', 'data-published']] @@ -3674,7 +3687,7 @@ var twofortysevensportsComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['section.body.article'], + selectors: ['.article-body', 'section.body.article'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3688,10 +3701,10 @@ var twofortysevensportsComExtractor = { var UproxxComExtractor = { domain: 'uproxx.com', title: { - selectors: ['div.post-top h1'] + selectors: ['div.entry-header h1'] }, author: { - selectors: ['.post-top .authorname'] + selectors: [['meta[name="qc:author"]', 'value']] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -3700,7 +3713,7 @@ var UproxxComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.post-body'], + selectors: ['.entry-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3717,19 +3730,19 @@ var UproxxComExtractor = { var WwwEonlineComExtractor = { domain: 'www.eonline.com', title: { - selectors: ['h1.article__title'] + selectors: ['h1.article-detail__title', 'h1.article__title'] }, author: { - selectors: ['.entry-meta__author a'] + selectors: ['.article-detail__meta__author', '.entry-meta__author a'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[itemprop="datePublished"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.post-content section, .post-content div.post-content__image']], + selectors: [['.article-detail__main-content section'], ['.post-content section, .post-content div.post-content__image']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3808,12 +3821,10 @@ var WwwMacrumorsComExtractor = { selectors: ['h1', 'h1.title'] }, author: { - selectors: ['.author-url'] + selectors: ['article a[rel="author"]', '.author-url'] }, date_published: { - selectors: ['.article .byline'], - // Wednesday January 18, 2017 11:44 am PST - format: 'dddd MMMM D, YYYY h:mm A zz', + selectors: [['time', 'datetime']], timezone: 'America/Los_Angeles' }, dek: { @@ -3823,7 +3834,7 @@ var WwwMacrumorsComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article'], + selectors: ['article', '.article'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3840,19 +3851,19 @@ var WwwAndroidcentralComExtractor = { selectors: ['h1', 'h1.main-title'] }, author: { - selectors: ['.meta-by'] + selectors: [['meta[name="parsely-author"]', 'value']] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] }, dek: { - selectors: [['meta[name="og:description"]', 'value']] + selectors: [['meta[name="description"]', 'value']] }, lead_image_url: { - selectors: [['.image-large', 'src']] + selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-body'], + selectors: ['#article-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3872,17 +3883,17 @@ var WwwSiComExtractor = { selectors: [['meta[name="author"]', 'value']] }, date_published: { - selectors: ['.timestamp'], + selectors: [['meta[name="published"]', 'value']], timezone: 'America/New_York' }, dek: { - selectors: ['.quick-hit ul'] + selectors: ['.m-detail-header--dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['p', '.marquee_large_2x', '.component.image']], + selectors: ['.m-detail--body', ['p', '.marquee_large_2x', '.component.image']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -3906,20 +3917,20 @@ var WwwSiComExtractor = { var WwwRawstoryComExtractor = { domain: 'www.rawstory.com', title: { - selectors: ['.blog-title'] + selectors: [['meta[name="og:title"]', 'value'], '.blog-title'] }, author: { - selectors: ['.blog-author a:first-of-type'] + selectors: ['div.main-post-head .social-author__name', '.blog-author a:first-of-type'] }, date_published: { - selectors: ['.blog-author a:last-of-type'], + selectors: [['meta[name="article:published_time"]', 'value'], '.blog-author a:last-of-type'], timezone: 'EST' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.blog-content'], + selectors: ['.post-body', '.blog-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -3936,14 +3947,14 @@ var WwwCnetComExtractor = { selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['a.author'] + selectors: ['span.author', 'a.author'] }, date_published: { selectors: ['time'], timezone: 'America/Los_Angeles' }, dek: { - selectors: ['.article-dek'] + selectors: ['.c-head_dek', '.article-dek'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -3971,19 +3982,19 @@ var WwwCnetComExtractor = { var WwwTodayComExtractor = { domain: 'www.today.com', title: { - selectors: ['h1.entry-headline'] + selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'] }, author: { - selectors: [['meta[name="author"]', 'value']] + selectors: ['span.byline-name', ['meta[name="author"]', 'value']] }, date_published: { - selectors: [['meta[name="DC.date.issued"]', 'value']] + selectors: ['time[datetime]', ['meta[name="DC.date.issued"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-container'], + selectors: ['div.article-body__content', '.entry-container'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4036,7 +4047,7 @@ var WwwThepennyhoarderComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.post-img', '.post-text'], '.post-text'], + selectors: [['.post-img', '.post-text'], '.post-text', '.single-post-content-inner'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4076,38 +4087,6 @@ var WwwWesternjournalismComExtractor = { } }; -var FusionNetExtractor = { - domain: 'fusion.net', - title: { - selectors: ['.post-title', '.single-title', '.headline'] - }, - author: { - selectors: ['.show-for-medium .byline'] - }, - date_published: { - selectors: [['time.local-time', 'datetime']] - }, - dek: { - selectors: [// enter selectors - ] - }, - lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] - }, - content: { - selectors: [['.post-featured-media', '.article-content'], '.article-content'], - // Is there anything in the content you selected that needs transformed - // before it's consumable content? E.g., unusual lazy loaded images - transforms: { - '.fusion-youtube-oembed': 'figure' - }, - // Is there anything that is in the result that shouldn't be? - // The clean selectors will remove anything that matches from - // the result - clean: [] - } -}; - var WwwAmericanowComExtractor = { domain: 'www.americanow.com', title: { @@ -4171,19 +4150,19 @@ var ScienceflyComExtractor = { var HellogigglesComExtractor = { domain: 'hellogiggles.com', title: { - selectors: ['.title'] + selectors: [['meta[name="og:title"]', 'value'], '.title'] }, author: { - selectors: ['.author-link'] + selectors: ['.byline-wrapper span.author_name', '.author-link'] }, date_published: { - selectors: [['meta[name="article:published_time"]', 'value']] + selectors: [['meta[property="article:published_time"]', 'content'], ['meta[name="article:published_time"]', 'value']] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-content'], + selectors: ['.main-content', '.entry-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4200,7 +4179,7 @@ var ThoughtcatalogComExtractor = { selectors: ['h1.title', ['meta[name="og:title"]', 'value']] }, author: { - selectors: ['div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name', 'h1.writer-name'] + selectors: ['cite a', 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name', 'h1.writer-name'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -4216,7 +4195,7 @@ var ThoughtcatalogComExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.tc_mark'] + clean: ['.tc_mark', 'figcaption'] } }; @@ -4249,20 +4228,20 @@ var WwwInquisitrComExtractor = { var WwwNbcnewsComExtractor = { domain: 'www.nbcnews.com', title: { - selectors: ['div.article-hed h1'] + selectors: ['div.article-hero-headline h1', 'div.article-hed h1'] }, author: { - selectors: ['span.byline_author'] + selectors: ['div.article-inline-byline span.byline-name', 'span.byline_author'] }, date_published: { - selectors: [['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'], '.flag_article-wrapper time'], + selectors: [['meta[name="article:published"]', 'value'], ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'], '.flag_article-wrapper time'], timezone: 'America/New_York' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.article-body'], + selectors: ['div.article-body__content', 'div.article-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4306,10 +4285,10 @@ var WwwLinkedinComExtractor = { selectors: ['.article-title', 'h1'] }, author: { - selectors: [['meta[name="article:author"]', 'value'], '.entity-name a[rel=author]'] + selectors: ['.main-author-card h3', ['meta[name="article:author"]', 'value'], '.entity-name a[rel=author]'] }, date_published: { - selectors: [['time[itemprop="datePublished"]', 'datetime']], + selectors: ['.base-main-card__metadata', ['time[itemprop="datePublished"]', 'datetime']], timezone: 'America/Los_Angeles' }, dek: { @@ -4320,7 +4299,7 @@ var WwwLinkedinComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['header figure', '.prose'], '.prose'], + selectors: ['.article-content__body', ['header figure', '.prose'], '.prose'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4365,13 +4344,13 @@ var ObamawhitehouseArchivesGovExtractor = { var WwwOpposingviewsComExtractor = { domain: 'www.opposingviews.com', title: { - selectors: ['h1.title'] + selectors: ['h1.m-detail-header--title', 'h1.title'] }, author: { - selectors: ['div.date span span a'] + selectors: [['meta[name="author"]', 'value'], 'div.date span span a'] }, date_published: { - selectors: [['meta[name="publish_date"]', 'value']] + selectors: [['meta[name="published"]', 'value'], ['meta[name="publish_date"]', 'value']] }, dek: { selectors: [// enter selectors @@ -4381,7 +4360,7 @@ var WwwOpposingviewsComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-content'], + selectors: ['.m-detail--body', '.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4395,23 +4374,23 @@ var WwwOpposingviewsComExtractor = { var WwwProspectmagazineCoUkExtractor = { domain: 'www.prospectmagazine.co.uk', title: { - selectors: ['.page-title'] + selectors: ['.blog-header__title', '.page-title'] }, author: { - selectors: ['.aside_author .title'] + selectors: ['.blog-header__author-link', '.aside_author .title'] }, date_published: { - selectors: ['.post-info'], + selectors: [['meta[name="article:published_time"]', 'value'], '.post-info'], timezone: 'Europe/London' }, dek: { - selectors: ['.page-subtitle'] + selectors: ['.blog-header__description', '.page-subtitle'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['article .post_content'], + selectors: ['.blog__container', 'article .post_content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4428,10 +4407,10 @@ var ForwardComExtractor = { selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['.author-name', ['meta[name="sailthru.author"]', 'value']] + selectors: ['.post-author a', '.author-name', ['meta[name="sailthru.author"]', 'value']] }, date_published: { - selectors: [['meta[name="date"]', 'value']] + selectors: [['meta[name="article:published_time"]', 'value'], ['meta[name="date"]', 'value']] }, dek: { selectors: [// enter selectors @@ -4441,14 +4420,14 @@ var ForwardComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.post-item-media-wrap', '.post-item p']], + selectors: ['.content-container article', ['.post-item-media-wrap', '.post-item p']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.donate-box', '.message', '.subtitle'] + clean: ['.post-author', '.donate-box', '.message', '.subtitle'] } }; @@ -4488,10 +4467,11 @@ var GothamistComExtractor = { selectors: ['h1', '.entry-header h1'] }, author: { - selectors: ['.author'] + // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class + selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'] }, date_published: { - selectors: ['abbr', 'abbr.published'], + selectors: [['meta[name="article:published_time"]', 'value'], 'abbr', 'abbr.published'], timezone: 'America/New_York' }, dek: { @@ -4501,7 +4481,7 @@ var GothamistComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.entry-body'], + selectors: ['.article-body', '.entry-body'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -4525,19 +4505,19 @@ var WwwFoolComExtractor = { selectors: ['h1'] }, author: { - selectors: ['.author-inline .author-name'] + selectors: [['meta[name="author"]', 'value'], '.author-inline .author-name'] }, date_published: { selectors: [['meta[name="date"]', 'value']] }, dek: { - selectors: ['header h2'] + selectors: [['meta[name="og:description"]', 'value'], 'header h2'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['.article-content'], + selectors: ['.tailwind-article-body', '.article-content'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -4598,13 +4578,13 @@ var IciRadioCanadaCaExtractor = { timezone: 'America/New_York' }, dek: { - selectors: ['.bunker-component.lead'] + selectors: ['div.lead-container', '.bunker-component.lead'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['.main-multimedia-item', '.news-story-content']], + selectors: ['section.document-content-style', ['.main-multimedia-item', '.news-story-content']], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: {}, @@ -4651,7 +4631,7 @@ var WwwFastcompanyComExtractor = { selectors: ['h1'] }, author: { - selectors: ['.post__by'] + selectors: [['meta[name="author"]', 'value']] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -4705,7 +4685,7 @@ var NewsMynaviJpExtractor = { selectors: [['meta[name="og:title"]', 'value']] }, author: { - selectors: ['main div.article-author a.article-author__name'] + selectors: ['a.articleHeader_name', 'main div.article-author a.article-author__name'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -4717,7 +4697,7 @@ var NewsMynaviJpExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['main article div'], + selectors: ['div.article-body', 'main article div'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -4770,10 +4750,10 @@ var GithubComExtractor = { ] }, date_published: { - selectors: [['span[itemprop="dateModified"] relative-time', 'datetime']] + selectors: [['relative-time[datetime]', 'datetime'], ['span[itemprop="dateModified"] relative-time', 'datetime']] }, dek: { - selectors: ['span[itemprop="about"]'] + selectors: [['meta[name="description"]', 'value'], 'span[itemprop="about"]'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -4793,13 +4773,13 @@ var GithubComExtractor = { var WwwRedditComExtractor = { domain: 'www.reddit.com', title: { - selectors: ['div[data-test-id="post-content"] h2'] + selectors: ['div[data-test-id="post-content"] h1', 'div[data-test-id="post-content"] h2'] }, author: { selectors: ['div[data-test-id="post-content"] a[href*="user/"]'] }, date_published: { - selectors: ['div[data-test-id="post-content"] a[data-click-id="timestamp"]'] + selectors: ['div[data-test-id="post-content"] span[data-click-id="timestamp"]', 'div[data-test-id="post-content"] a[data-click-id="timestamp"]'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -4809,7 +4789,7 @@ var WwwRedditComExtractor = { ['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])', // external link 'div[data-test-id="post-content"] div[data-click-id="media"]'], // external link with media preview (YouTube, imgur album, etc...) ['div[data-test-id="post-content"] div[data-click-id="media"]'], // Embedded media (Reddit video) - ['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])'], // external link + ['div[data-test-id="post-content"] a'], // external link 'div[data-test-id="post-content"]'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images @@ -4830,7 +4810,7 @@ var WwwRedditComExtractor = { // Is there anything that is in the result that shouldn't be? // The clean selectors will remove anything that matches from // the result - clean: ['.icon'] + clean: ['.icon', 'span[id^="PostAwardBadges"]', 'div a[data-test-id="comments-page-link-num-comments"]'] } }; @@ -4906,7 +4886,7 @@ var BuzzapJpExtractor = { var WwwAsahiComExtractor = { domain: 'www.asahi.com', title: { - selectors: ['.ArticleTitle h1'] + selectors: ['main h1', '.ArticleTitle h1'] }, author: { selectors: [['meta[name="article:author"]', 'value']] @@ -4922,10 +4902,10 @@ var WwwAsahiComExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#MainInner div.ArticleBody'], + selectors: ['main'], defaultCleaner: false, transforms: {}, - clean: ['div.AdMod', 'div.LoginSelectArea'] + clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'] } }; @@ -4936,7 +4916,7 @@ var WwwSanwaCoJpExtractor = { }, author: null, date_published: { - selectors: ['p.date'], + selectors: ['dl.date'], format: 'YYYY.MM.DD', timezone: 'Asia/Tokyo' }, @@ -5183,7 +5163,7 @@ var WwwPublickey1JpExtractor = { selectors: ['h1'] }, author: { - selectors: ['#subcol p:has(img)'] + selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'] }, date_published: { selectors: ['div.pubdate'], @@ -5226,13 +5206,13 @@ var TakagihiromitsuJpExtractor = { var BookwalkerJpExtractor = { domain: 'bookwalker.jp', title: { - selectors: ['h1.main-heading'] + selectors: ['h1.p-main__title', 'h1.main-heading'] }, author: { - selectors: ['div.authors'] + selectors: ['div.p-author__list', 'div.authors'] }, date_published: { - selectors: ['.work-info .work-detail:first-of-type .work-detail-contents:last-of-type'], + selectors: ['dl.p-information__data dd:nth-of-type(7)', '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type'], timezone: 'Asia/Tokyo' }, dek: null, @@ -5240,7 +5220,7 @@ var BookwalkerJpExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: [['div.main-info', 'div.main-cover-inner']], + selectors: ['div.p-main__information', ['div.main-info', 'div.main-cover-inner']], defaultCleaner: false, transforms: {}, clean: ['span.label.label--trial', 'dt.info-head.info-head--coin', 'dd.info-contents.info-contents--coin', 'div.info-notice.fn-toggleClass'] @@ -5297,7 +5277,7 @@ var DeadlineComExtractor = { selectors: ['h1'] }, author: { - selectors: ['section.author h3'] + selectors: ['section.author h2'] }, date_published: { selectors: [['meta[name="article:published_time"]', 'value']] @@ -5314,7 +5294,7 @@ var DeadlineComExtractor = { $node.replaceWith(innerHtml); } }, - clean: [] + clean: ['figcaption'] } }; @@ -5351,10 +5331,10 @@ var GetnewsJpExtractor = { selectors: ['article h1'] }, author: { - selectors: ['span.prof'] + selectors: [['meta[name="article:author"]', 'value'], 'span.prof'] }, date_published: { - selectors: [['ul.cattag-top time', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['ul.cattag-top time', 'datetime']] }, dek: null, lead_image_url: { @@ -5370,20 +5350,20 @@ var GetnewsJpExtractor = { var WwwLifehackerJpExtractor = { domain: 'www.lifehacker.jp', title: { - selectors: ['h1.lh-summary-title'] + selectors: ['h1[class^="article_pArticle_Title"]', 'h1.lh-summary-title'] }, author: { - selectors: ['p.lh-entryDetailInner--credit'] + selectors: [['meta[name="author"]', 'value'], 'p.lh-entryDetailInner--credit'] }, date_published: { - selectors: [['div.lh-entryDetail-header time', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['div.lh-entryDetail-header time', 'datetime']] }, dek: null, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.lh-entryDetail-body'], + selectors: ['div[class^="article_pArticle_Body__"]', 'div.lh-entryDetail-body'], transforms: { 'img.lazyload': function imgLazyload($node) { var src = $node.attr('src'); @@ -5397,13 +5377,13 @@ var WwwLifehackerJpExtractor = { var SectIijAdJpExtractor = { domain: 'sect.iij.ad.jp', title: { - selectors: ['h3'] + selectors: ['div.title-box-inner h1', 'h3'] }, author: { - selectors: ['dl.entrydate dd'] + selectors: ['p.post-author a', 'dl.entrydate dd'] }, date_published: { - selectors: ['dl.entrydate dd'], + selectors: ['time'], format: 'YYYY年MM月DD日', timezone: 'Asia/Tokyo' }, @@ -5412,7 +5392,7 @@ var SectIijAdJpExtractor = { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#article'], + selectors: ['.entry-inner', '#article'], transforms: {}, clean: ['dl.entrydate'] } @@ -5421,21 +5401,21 @@ var SectIijAdJpExtractor = { var WwwOreillyCoJpExtractor = { domain: 'www.oreilly.co.jp', title: { - selectors: ['h3'] + selectors: [['meta[name="og:title"]', 'value'], 'h3'] }, author: { - selectors: ['li[itemprop="author"]'] + selectors: ['span[itemprop="author"]', 'li[itemprop="author"]'] }, date_published: { - selectors: [['meta[itemprop="datePublished"]', 'value']], + selectors: [['dd[itemprop="datePublished"]', 'content'], ['meta[itemprop="datePublished"]', 'value']], timezone: 'Asia/Tokyo' }, dek: null, lead_image_url: { - selectors: [['meta[name="og:image"]', 'value']] + selectors: [['meta[name="og:image:secure_url"]', 'value'], ['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#content'], + selectors: ['section.detail', '#content'], defaultCleaner: false, transforms: {}, clean: ['.social-tools'] @@ -5466,20 +5446,22 @@ var WwwIpaGoJpExtractor = { var WeeklyAsciiJpExtractor = { domain: 'weekly.ascii.jp', title: { - selectors: ['h1[itemprop="headline"]'] + selectors: ['article h1', 'h1[itemprop="headline"]'] }, author: { selectors: ['p.author'] }, date_published: { - selectors: [['meta[name="odate"]', 'value']] + selectors: ['p.date', ['meta[name="odate"]', 'value']], + format: 'YYYY年MM月DD日 HH:mm', + timezone: 'Asia/Tokyo' }, dek: null, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['div.article'], + selectors: ['div#contents_detail', 'div.article'], transforms: {}, clean: [] } @@ -5504,29 +5486,29 @@ var TechlogIijAdJpExtractor = { selectors: ['div.entry-content'], defaultCleaner: false, transforms: {}, - clean: [] + clean: ['.wp_social_bookmarking_light'] } }; var WiredJpExtractor = { domain: 'wired.jp', title: { - selectors: ['h1.post-title'] + selectors: ['h1[data-testid="ContentHeaderHed"]', 'h1.post-title'] }, author: { - selectors: ['p[itemprop="author"]'] + selectors: [['meta[name="article:author"]', 'value'], 'p[itemprop="author"]'] }, date_published: { - selectors: [['time', 'datetime']] + selectors: [['meta[name="article:published_time"]', 'value'], ['time', 'datetime']] }, dek: { - selectors: ['.post-intro'] + selectors: ['div[class^="ContentHeaderDek"]', '.post-intro'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['article.article-detail'], + selectors: ['div[data-attribute-verso-pattern="article-body"]', 'article.article-detail'], transforms: { 'img[data-original]': function imgDataOriginal($node) { var dataOriginal = $node.attr('data-original'); @@ -5573,7 +5555,7 @@ var WwwRbbtodayComExtractor = { selectors: [['header time', 'datetime']] }, dek: { - selectors: ['.arti-summary'] + selectors: [['meta[name="description"]', 'value'], '.arti-summary'] }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] @@ -5605,14 +5587,14 @@ var WwwLemondeFrExtractor = { content: { selectors: ['.article__content'], transforms: {}, - clean: [] + clean: ['figcaption'] } }; var WwwPhoronixComExtractor = { domain: 'www.phoronix.com', title: { - selectors: ['article header'] + selectors: ['article h1', 'article header'] }, author: { selectors: ['.author a:first-child'] @@ -5640,26 +5622,26 @@ var WwwPhoronixComExtractor = { var PitchforkComExtractor = { domain: 'pitchfork.com', title: { - selectors: ['title'] + selectors: [['meta[name="og:title"]', 'value'], 'title'] }, author: { - selectors: ['.authors-detail__display-name'] + selectors: [['meta[name="article:author"]', 'value'], '.authors-detail__display-name'] }, date_published: { - selectors: [['.pub-date', 'datetime']] + selectors: ['div[class^="InfoSliceWrapper-"]', ['.pub-date', 'datetime']] }, dek: { - selectors: ['.review-detail__abstract'] + selectors: [['meta[name="og:description"]', 'value'], '.review-detail__abstract'] }, lead_image_url: { - selectors: [['.single-album-tombstone__art img', 'src']] + selectors: [['meta[name="og:image"]', 'value'], ['.single-album-tombstone__art img', 'src']] }, content: { - selectors: ['.review-detail__text'] + selectors: ['div.body__inner-container', '.review-detail__text'] }, extend: { score: { - selectors: ['.score'] + selectors: ['p[class*="Rating"]', '.score'] } } }; @@ -5757,7 +5739,7 @@ var TimesofindiaIndiatimesComExtractor = { content: { selectors: ['div.contentwrapper:has(section)'], defaultCleaner: false, - clean: ['section', 'h1', '.byline', '.img_cptn'] + clean: ['section', 'h1', '.byline', '.img_cptn', '.icon_share_wrap', 'ul[itemtype="https://schema.org/BreadcrumbList"]'] } }; @@ -5807,17 +5789,18 @@ var PastebinComExtractor = { selectors: ['h1'] }, author: { - selectors: ['.paste_box_line2 .t_us + a'] + selectors: ['.username', '.paste_box_line2 .t_us + a'] }, date_published: { - selectors: ['.paste_box_line2 .t_da + span'], - timezone: 'America/New_York' + selectors: ['.date', '.paste_box_line2 .t_da + span'], + timezone: 'America/New_York', + format: 'MMMM D, YYYY' }, lead_image_url: { selectors: [['meta[name="og:image"]', 'value']] }, content: { - selectors: ['#selectable .text'], + selectors: ['.source', '#selectable .text'], // Is there anything in the content you selected that needs transformed // before it's consumable content? E.g., unusual lazy loaded images transforms: { @@ -5843,13 +5826,13 @@ var WwwAbendblattDeExtractor = { selectors: ['span.author-info__name-text'] }, date_published: { - selectors: [['time.article__header__date', 'datetime']] + selectors: [['time.teaser-stream-time', 'datetime'], ['time.article__header__date', 'datetime']] }, dek: { - selectors: ["span[itemprop='description']"] + selectors: [['meta[name="description"]', 'value']] }, lead_image_url: { - selectors: [["meta[name='og:image']", 'value']] + selectors: [['meta[name="og:image"]', 'value']] }, content: { selectors: ['div.article__body'], @@ -6228,7 +6211,6 @@ var CustomExtractors = /*#__PURE__*/Object.freeze({ WwwAlComExtractor: WwwAlComExtractor, WwwThepennyhoarderComExtractor: WwwThepennyhoarderComExtractor, WwwWesternjournalismComExtractor: WwwWesternjournalismComExtractor, - FusionNetExtractor: FusionNetExtractor, WwwAmericanowComExtractor: WwwAmericanowComExtractor, ScienceflyComExtractor: ScienceflyComExtractor, HellogigglesComExtractor: HellogigglesComExtractor, @@ -8181,3 +8163,4 @@ var Parser = { }; module.exports = Parser; +//# sourceMappingURL=mercury.js.map diff --git a/dist/mercury.js.map b/dist/mercury.js.map index 2d067a31d..560544722 100644 --- a/dist/mercury.js.map +++ b/dist/mercury.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/page-num-from-url.js","../src/utils/text/remove-anchor.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../src/utils/range.js","../src/utils/validate-url.js","../src/utils/errors.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../src/utils/dom/constants.js","../src/utils/dom/strip-unlikely-candidates.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/remove-empty.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/clean-headers.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/is-wordpress.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/merge-supported-domains.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.cinemablend.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.howtogeek.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/fusion.net/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.nj.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/all.js","../src/cleaners/constants.js","../src/cleaners/author.js","../src/cleaners/lead-image-url.js","../src/cleaners/dek.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../src/cleaners/index.js","../src/extractors/generic/content/extract-best-node.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/extractors/generic/dek/extractor.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["const NORMALIZE_RE = /\\s{2,}/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp('(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})', 'i');\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path.split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content.trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n if (ENCODING_RE.test(str)) {\n const testEncode = ENCODING_RE.exec(str)[1];\n if (iconv.encodingExists(testEncode)) {\n encoding = testEncode;\n }\n }\n return encoding;\n}\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield start += 1;\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","const Errors = {\n badUrl: {\n error: true,\n messages: 'The url parameter passed does not look like a valid URL. Please check your data and try again.',\n },\n};\n\nexport default Errors;\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser ? {} : {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n};\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(`^(${BAD_CONTENT_TYPES.join('|')})$`, 'i');\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = [\n 'nih.gov',\n 'gutenberg.org',\n];\n","import URL from 'url';\nimport request from 'request';\nimport { Errors } from 'utils';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 level or\n// not. Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon2xx = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon2xx) {\n throw new Error(\n `Resource returned a response status code of ${response.statusCode} and resource was instructed to reject non-2xx level status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host.split('.').slice(-2).join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any redirect\n followAllRedirects: true,\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return Errors.badUrl;\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(selector => `[${selector}]`);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(`^(${WHITELIST_ATTRS.join('|')})$`, 'i');\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(tag => `${tag}:empty`).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = ['ul', 'ol', 'table', 'div', 'button', 'form'].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n CANDIDATES_WHITELIST,\n CANDIDATES_BLACKLIST,\n} from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*').not('a').each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n } else if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive <br /> tags into\n// <p /> tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n // $(element).replaceWith('<p />')\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a <br />, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('<p></p>');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (sibling && !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))) {\n const nextSibling = sibling.nextSibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertable = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertable) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertable = $span.parents('p, div').length === 0;\n if (convertable) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive <br /> tags.\n// * <div /> tags without block level elements inside of them\n// * <span /> tags who are not children of <p /> or <div /> tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n // console.log(attrs)\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html = node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(\n `<${tag} ${attribString}>${html}</${tag}>`\n );\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n KEEP_SELECTORS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import {\n STRIP_OUTPUT_TAGS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article).not(`.${KEEP_CLASS}`).remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import {\n getAttrs,\n setAttrs,\n} from 'utils/dom';\n\nimport {\n WHITELIST_ATTRS_RE,\n KEEP_CLASS,\n} from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(node, Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {}));\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// function removeAttrs(article, $) {\n// REMOVE_ATTRS.forEach((attr) => {\n// $(`[${attr}]`, article).removeAttr(attr);\n// });\n// }\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $,\n );\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '') $p.remove();\n });\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import {\n scoreCommas,\n scoreLength,\n} from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import {\n getOrInitScore,\n setScore,\n} from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import {\n getScore,\n scoreNode,\n getWeight,\n addToParent,\n} from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n } else if (tagName.toLowerCase() === 'div') {\n return 5;\n } else if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n } else if (BAD_TAGS.test(tagName)) {\n return -3;\n } else if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport {\n scoreNode,\n setScore,\n getOrInitScore,\n addScore,\n} from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre').not('[score]').each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import {\n textLength,\n linkDensity,\n} from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('<div></div>');\n\n $candidate.parent().children().each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n } else if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n } else if (siblingContentLength <= 80 && density === 0 &&\n hasSentenceEnd(siblingContent)) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (wrappingDiv.children().length === 1 &&\n wrappingDiv.children().first().get(0) === $candidate.get(0)) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport {\n CLEAN_CONDITIONALLY_TAGS,\n KEEP_CLASS,\n} from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > (pCount / 3)) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (previousNode && normalizeSpaces(previousNode.text()).slice(-1) === ':') {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n return;\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0) return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n setAttr,\n} from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr, $content) {\n $(`[${attr}]`, $content).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n\n if (url) {\n const absoluteUrl = URL.resolve(rootUrl, url);\n setAttr(node, attr, absoluteUrl);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr, $content));\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim()\n .replace(/\\s+/g, ' ')\n .length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n } else if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values =\n nodes.map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n metaValue = values[0];\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find((parent) => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach((key) => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport { default as stripUnlikelyCandidates } from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export const IS_LINK = new RegExp('https?://', 'i');\nexport const IS_IMAGE = new RegExp('.(png|gif|jpe?g)', 'i');\n\nexport const TAGS_TO_REMOVE = [\n 'script',\n 'style',\n 'form',\n].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport {\n IS_LINK,\n IS_IMAGE,\n} from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach((attr) => {\n const value = attrs[attr];\n\n if (attr !== 'src' && IS_LINK.test(value) &&\n IS_IMAGE.test(value)) {\n $(img).attr('src', value);\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root().find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport {\n normalizeMetaTags,\n convertLazyLoadedImages,\n clean,\n} from './utils/dom';\n\nconst Resource = {\n\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n async create(url, preparedResponse, parsedUrl) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = { body: preparedResponse, response: validResponse };\n } else {\n result = await fetchResource(url, parsedUrl);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response }) {\n const { 'content-type': contentType } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') &&\n !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType }) {\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n\n // after first cheerio.load, check to see if encoding matches\n const metaContentType = $('meta[http-equiv=content-type]').attr('content');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","const merge = (extractor, domains) => (\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {})\n);\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains ?\n merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n :\n merge(extractor, [extractor.domain]);\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: [\n '.post-content noscript',\n ],\n\n // Selectors to remove from the extracted content\n clean: [\n ],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: [\n '.post-author-name',\n ],\n },\n\n title: {\n selectors: [\n '.post h2.title',\n ],\n },\n\n date_published: {\n selectors: [\n 'span.publishdate',\n ],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: [\n 'div.article-content',\n 'section.body',\n 'article.article',\n ],\n\n // Selectors to remove from the extracted content\n clean: [\n '.ad',\n '.single-related-story',\n ],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if ($children.length === 1 && $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: [\n 'h1.lede-feature-title',\n 'h1.headline-primary',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.by-authors',\n '.lede-feature-author',\n ],\n },\n\n dek: {\n selectors: [\n '.lede-feature-teaser',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: [\n '#mw-content-text',\n ],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': ($node) => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: [\n 'h2.title',\n ],\n },\n\n date_published: {\n selectors: [\n '#footer-info-lastmod',\n ],\n },\n\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('<div id=\"TWEETS_GO_HERE\"></div>');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: [\n '.permalink[role=main]',\n ],\n\n defaultCleaner: false,\n\n clean: [\n '.stream-item-footer',\n 'button',\n '.tweet-details-fixer',\n ],\n },\n\n author: {\n selectors: [\n '.tweet.permalink-tweet .username',\n ],\n },\n\n date_published: {\n selectors: [\n ['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms'],\n // '.tweet.permalink-tweet .metadata',\n ],\n },\n\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ],\n },\n\n content: {\n selectors: [\n 'div.g-blocks',\n 'article#story',\n ],\n\n transforms: {\n 'img.g-lazy': ($node) => {\n let src = $node.attr('src');\n // const widths = $node.attr('data-widths')\n // .slice(1)\n // .slice(0, -1)\n // .split(',');\n // if (widths.length) {\n // width = widths.slice(-1);\n // } else {\n // width = '900';\n // }\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: [\n 'h1.hed',\n ],\n },\n\n author: {\n selectors: [\n 'article#article .article-cover-extra .metadata .byline a',\n ],\n },\n\n content: {\n selectors: [\n ['.article-cover figure.lead-img', '.article-body'],\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[itemProp=\"datePublished\"]', 'datetime'],\n ],\n },\n\n lead_image_url: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.contributors',\n ],\n },\n\n content: {\n selectors: [\n 'div#articleBody',\n 'div.articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[itemProp=\"datePublished\"]', 'content'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.dek',\n 'h2.dek',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.visually-hidden',\n 'figcaption img.photo',\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'span.caption',\n\n ],\n },\n\n date_published: {\n selectors: [\n 'span.time',\n ],\n },\n\n lead_image_url: {\n selectors: [\n\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.figure-caption',\n\n ],\n },\n\n date_published: {\n selectors: [\n ['time.date[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n title: {\n selectors: [\n 'h1[id=\"post-title\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]', 'byline__author',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['.longform_custom_header_media', '#buzz_sub_buzz'],\n '#buzz_sub_buzz',\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': ($node) => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n ],\n },\n\n date_published: {\n selectors: [\n '.buzz-datetime',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard', '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [\n // enter title selectors\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.story-main-content',\n '.content-group', '.story-core',\n '.story-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'figcaption',\n ],\n },\n\n date_published: {\n selectors: [\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter lead_image_url selectors\n ['meta[name=\"og:image\"]', 'value'],\n\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n ],\n\n title: {\n selectors: [\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n content: {\n selectors: [\n '.post-content',\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': ($node) => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.magnifier',\n '.lightbox',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: [\n 'h1.article-title',\n ],\n },\n\n author: {\n selectors: [\n 'span[itemprop=author]',\n ],\n },\n\n content: {\n selectors: [\n 'div[itemprop=articlebody]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=datePublished]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: [\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n '.PostByline__name',\n ],\n },\n\n content: {\n selectors: [\n 'div.post__content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('<img />').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['.PostByline__timestamp[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n supportedDomains: [\n 'trackchanges.postlight.com',\n ],\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.section-content'],\n '.section-content',\n 'article > div > section',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Re-write lazy-loaded youtube videos\n iframe: ($node) => {\n const ytRe =\n /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe) // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $parent = $node.parents('figure');\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n }\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: ($node) => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n $node.empty().append([$img, $caption]);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: [\n '.post-title-breadcrumb',\n 'h1',\n '.headline',\n ],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: [\n '.article-posted-date',\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n '.all-post-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.lightbox-link',\n ],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: [\n 'h1',\n '#topper-headline-wrapper',\n ],\n },\n\n author: {\n selectors: [\n '.pb-byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['.pb-timestamp[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': ($node) => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.interstitial-link',\n '.newsletter-inline-unit',\n ],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: [\n 'h1.headline__title',\n ],\n },\n\n author: {\n selectors: [\n 'span.author-card__details__name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.headline__subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.entry__body',\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // 'div.top-media': ($node) => {\n // const $figure = $node.children('figure');\n // $node.replaceWith($figure);\n // },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: [\n 'h1.article-headline',\n '.minutes-primary h1.minute-title',\n ],\n },\n\n author: {\n selectors: [\n 'div.author-list',\n '.minutes-primary h3.minute-byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n 'h2.article-subhead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.article-cover', 'div.content-body'],\n ['.minute-image', '.minutes-primary div.content-body'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'aside',\n ],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: [\n '.article-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n '#storytext h2',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#storytext',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.inStoryHeading',\n ],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: ($node) => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: [\n 'h1.pg-headline',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.metadata__byline__author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': ($node) => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': ($node) => {\n if ($node.has('a')) {\n if ($node.text().trim() === $node.find('a').text().trim()) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: [\n 'h1.p-article__title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.p-article__byline__date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [\n '.yt-user-info',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemProp=\"datePublished\"]', 'value'],\n ],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n ['#player-api', '#eow-description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>`\n );\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: [\n '.content__headline',\n ],\n },\n\n author: {\n selectors: [\n 'p.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.content__standfirst',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.content__article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.hide-on-mobile',\n '.inline-icon',\n ],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.c-entry-summary.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.inline-newsletter',\n '.page-ad',\n ],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: [\n 'h1.post-page__title',\n ],\n },\n\n author: {\n selectors: [\n 'div.content-meta__author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.content-meta__published-date[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.post-page__body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: [\n 'h1',\n '.storytitle',\n ],\n },\n\n author: {\n selectors: [\n 'p.byline__name.byline__name--block',\n ],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.storytext',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div.enlarge_measure',\n ],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.c-entry-summary.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: [\n 'header.item-header.content-width-responsive',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.featured-image', '.item-body'],\n '.item-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.article-aside',\n '.progressive-image-thumbnail',\n ],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: [\n 'h1.story__title',\n ],\n },\n\n author: {\n selectors: [\n '.story__info .story__info__item:first-child',\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n },\n\n dek: {\n selectors: [\n '.story__subhead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['article figure a:first-child', 'href'],\n ],\n },\n\n content: {\n selectors: [\n '.story__content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: [\n 'h1.article-headline',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"og:article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#article-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '#article-byline .author',\n // 'span.location',\n // 'span.articleLocation',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n 'span.author_name a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"og:article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'section.article-content.blueprint',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [\n 'h1.trb_ar_hl_t',\n ],\n },\n\n author: {\n selectors: [\n 'span.trb_ar_by_nm_au',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.trb_ar_page',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': ($node) => {\n const imgHtml = $node.html();\n $node.parents('.e-image__image').find('.c-dynamic-image').replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline-component__contributors b span',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: [\n '.article__deck',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node.find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote.pull-quote--large',\n ],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline-component__contributors b span',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.article__deck',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent.find('.media--medium__container').children().first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend($(`<div class=\"__image-lead__\">\n <img src=\"${imgPath1}\"/>\n <img src=\"${imgPath2}\"/>\n </div>`));\n }\n } else {\n const $imgSrc = $node.find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote.pull-quote--small',\n ],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: [\n '.trb_ar_hl',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.trb_ar_main',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': ($node) => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.trb_ar_by',\n '.trb_ar_cr',\n ],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: [\n 'nypost.com',\n ],\n\n title: {\n selectors: [\n 'h1 a',\n ],\n },\n\n author: {\n selectors: [\n '.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.modal-trigger',\n ],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: [\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n 'main span.entry-author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: [\n '.article-headline',\n ],\n },\n\n author: {\n selectors: [\n '.author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['.date-original-reading-time time', 'datetime'],\n ],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: [\n '.article-subline',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.is-title-pane',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.pane-node-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [selector, attr] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(`<img src=\"${src}\" />`);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [\n ['meta[name=\"sailthru.title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: [\n 'div#article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.field.field-name-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: [\n '.article-header h1',\n ],\n },\n\n author: {\n selectors: [\n '.authors',\n ],\n clean: [\n '.author-overlay',\n '.by-text',\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n timezone: 'America/New_York',\n\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: [\n 'h1#ra-headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'article#ra-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'dl#ra-tags',\n '.ra-related',\n 'a.ra-editor',\n 'dl#ra-share-bottom',\n ],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: [\n 'h2.post-title',\n 'title-text',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.share-copy-title',\n '.post-tags',\n '.reactions',\n ],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: [\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n '.vcard',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'a.author.url.fn',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body__inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: [\n 'header h1',\n ],\n },\n\n author: {\n selectors: [\n 'a.article-byline.tracked-offpage',\n ],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [\n 'time.article-published-date',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.module-related',\n ],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: [\n 'h1.content-title',\n ],\n },\n\n author: {\n selectors: [\n 'a.content-author.tracked-offpage',\n ],\n },\n\n date_published: {\n selectors: [\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.content-description',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.module-related',\n ],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: [\n 'title',\n 'article header h1',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[data-published]', 'data-published'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'section.body.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: [\n 'div.post-top h1',\n ],\n },\n\n author: {\n selectors: [\n '.post-top .authorname',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.post-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: [\n 'h1.article__title',\n ],\n },\n\n author: {\n selectors: [\n '.entry-meta__author a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n date_published: {\n selectors: [\n 'p.published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.dateline-storybody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.contributor',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': ($node) => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.story-share',\n ],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.author-url',\n ],\n },\n\n date_published: {\n selectors: [\n '.article .byline',\n ],\n\n // Wednesday January 18, 2017 11:44 am PST\n format: 'dddd MMMM D, YYYY h:mm A zz',\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.meta-by',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['.image-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.intro',\n 'blockquote',\n ],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.quick-hit ul',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n\n noscript: ($node) => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n [\n '.inline-thumb',\n '.primary-message',\n '.description',\n '.instructions',\n ],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [\n '.blog-title',\n ],\n },\n\n author: {\n selectors: [\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.blog-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'a.author',\n ],\n },\n\n date_published: {\n selectors: [\n 'time',\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n '.article-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': ($node) => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwCinemablendComExtractor = {\n domain: 'www.cinemablend.com',\n\n title: {\n selectors: [\n '.story_title',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div#wrap_left_content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: [\n 'h1.entry-headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-container',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.label-comment',\n ],\n },\n};\n","export const WwwHowtogeekComExtractor = {\n domain: 'www.howtogeek.com',\n\n title: {\n selectors: [\n 'title',\n ],\n },\n\n author: {\n selectors: [\n '#authorinfobox a',\n ],\n },\n\n date_published: {\n selectors: [\n '#authorinfobox + div li',\n ],\n timezone: 'GMT',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.thecontent',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article_author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article_date_original\"]', 'value'],\n ],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [\n ['meta[name=\"dcterms.title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['link[rel=\"author\"]', 'title'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: [\n 'title',\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-sharing.top + div',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.ad-notice-small',\n ],\n },\n};\n","export const FusionNetExtractor = {\n domain: 'fusion.net',\n\n title: {\n selectors: [\n '.post-title',\n '.single-title',\n '.headline',\n ],\n },\n\n author: {\n selectors: [\n '.show-for-medium .byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.local-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-featured-media', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.fusion-youtube-oembed': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: [\n '.title',\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.article-content', '.image', '.body'],\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.article-video-wrapper',\n '.show-for-small-only',\n ],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: [\n '.entry-title',\n '.cb-entry-title',\n '.cb-single-title',\n ],\n },\n\n author: {\n selectors: [\n 'div.cb-author',\n 'div.cb-author-title',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['div.theiaPostSlider_slides img', 'src'],\n ],\n },\n\n content: {\n selectors: [\n 'div.theiaPostSlider_slides',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [\n '.title',\n ],\n },\n\n author: {\n selectors: [\n '.author-link',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: [\n 'h1.title',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry.post',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.tc_mark',\n ],\n },\n};\n","export const WwwNjComExtractor = {\n domain: 'www.nj.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article_author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article_date_original\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: [\n 'h1.entry-title.story--header--title',\n ],\n },\n\n author: {\n selectors: [\n 'div.story--header--author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'article.story',\n '.entry-content.',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: [\n 'div.article-hed h1',\n ],\n },\n\n author: {\n selectors: [\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.MblGHNMJ',\n ],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['picture', 'article.row'],\n 'article.row',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: [\n '.article-title',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.entity-image',\n ],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: [\n 'whitehouse.gov',\n ],\n\n title: {\n selectors: [\n 'h1',\n '.pane-node-title',\n ],\n },\n\n author: {\n selectors: [\n '.blog-author-link',\n '.node-person-name-link',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.field-name-field-forall-summary',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n 'div#content-start',\n '.pane-node-field-forall-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pane-node-title',\n '.pane-custom.pane-1',\n ],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n 'div.date span span a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.show-for-small-only',\n ],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: [\n '.page-title',\n ],\n },\n\n author: {\n selectors: [\n '.aside_author .title',\n ],\n },\n\n date_published: {\n selectors: [\n '.post-info',\n ],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: [\n '.page-subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // ['article.type-post div.post_content p'],\n 'article .post_content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.donate-box',\n '.message',\n '.subtitle',\n ],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: [\n 'h2',\n 'h2.title',\n ],\n },\n\n author: {\n selectors: [\n '.name',\n ],\n },\n\n date_published: {\n selectors: [\n ['.date.smart-date', 'data-origindate'],\n ],\n },\n\n dek: {\n selectors: [\n '.excerpt',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['.article-detail-hd img', 'src'],\n ],\n },\n\n content: {\n selectors: [\n '.detail',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.lazyload',\n '.lazylad',\n '.lazylood',\n ],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: [\n 'h1',\n '.entry-header h1',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n null,\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'header h2',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': ($node) => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`<figure><img src=\"${src}\"/></figure>`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '#pitch',\n ],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: [\n '.hed',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n 'a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.pub-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"dc.creator\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"dc.date.created\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.bunker-component.lead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n // author = re.sub(r'^\\s*(posted |written )?by\\s*:?\\s*(.*)(?i)',\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [\n];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = [\n '.entry-summary',\n];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING =\n new RegExp(`(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`, 'ig');\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE =\n new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(\n author.replace(CLEAN_AUTHOR_RE, '$2').trim()\n );\n}\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","import { stripTags } from 'utils/dom';\nimport {\n excerptContent,\n normalizeSpaces,\n} from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10)) return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n return timezone ?\n moment.tz(dateString, format || parseFormat(dateString), timezone) :\n moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(dateString, { timezone, format } = {}) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString) || SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n {\n $,\n cleanConditionally = true,\n title = '',\n url = '',\n defaultCleaner = true,\n }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like <title>, etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport {\n TITLE_SPLITTERS_RE,\n DOMAIN_ENDINGS_RE,\n} from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] =\n Reflect.ownKeys(termCounts)\n .reduce((acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n }, [0, 0]);\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce((acc, end) => acc.length > end.length ? acc : end, '');\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle.slice(-1)[0].toLowerCase().replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import {\n stripUnlikelyCandidates,\n convertToParagraphs,\n} from 'utils/dom';\n\nimport {\n scoreContent,\n findTopCandidate,\n} from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n // clone the node so we can get back to our\n // initial parsed state if needed\n // TODO Do I need this? – AP\n // let $root = $.root().clone()\n\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(\n extractBestNode($, opts),\n {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n\n // if return_type == \"html\":\n // return normalize_spaces(node_to_html(node))\n // else:\n // return node\n },\n\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = [\n 'og:title',\n];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n // /2012/01/27/ but not /2012/01/293\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n // 20120127 or 20120127T but not 2012012733 or 8201201733\n // /[^0-9](20\\d{2}[01]\\d[0-3]\\d)([^0-9]|$)/i,\n // 2012-01-27\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n // /2012/jan/27/\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta($, DATE_PUBLISHED_META_TAGS, metaCache, false);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// import {\n// DEK_META_TAGS,\n// DEK_SELECTORS,\n// DEK_URL_RES,\n// } from './constants';\n\n// import { cleanDek } from 'cleaners';\n\n// import {\n// extractFromMeta,\n// extractFromSelectors,\n// } from 'utils/dom';\n\n// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n // extract({ $, content, metaCache }) {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n\n// def extract_dek(self):\n// # First, check to see if we have a matching meta tag that we can make\n// # use of.\n// dek = self.extract_from_meta('dek', constants.DEK_META_TAGS)\n// if not dek:\n// # Second, look through our CSS/XPath selectors. This may return\n// # an HTML fragment.\n// dek = self.extract_from_selectors('dek',\n// constants.DEK_SELECTORS,\n// text_only=False)\n//\n// if dek:\n// # Make sure our dek isn't in the first few thousand characters\n// # of the content, otherwise it's just the start of the article\n// # and not a true dek.\n// content = self.extract_content()\n// content_chunk = normalize_spaces(strip_tags(content[:2000]))\n// dek_chunk = normalize_spaces(dek[:100]) # Already has no tags.\n//\n// # 80% or greater similarity means the dek was very similar to some\n// # of the starting content, so we skip it.\n// if fuzz.partial_ratio(content_chunk, dek_chunk) < 80:\n// return dek\n//\n// return None\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = [\n 'link[rel=image_src]',\n];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach(($node) => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) { // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return ($imgs.length / 2) - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*').first().prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl =\n extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] =\n Reflect.ownKeys(imgScores).reduce((acc, key) =>\n imgScores[key] > acc[1] ? [key, imgScores[key]] : acc\n , [null, 0]);\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n\n// def extract(self):\n// \"\"\"\n// # First, try to find the \"best\" image via the content.\n// # We'd rather not have to fetch each image and check dimensions,\n// # so try to do some analysis and determine them instead.\n// content = self.extractor.extract_content(return_type=\"node\")\n// imgs = content.xpath('.//img')\n// img_scores = defaultdict(int)\n// logger.debug('Scoring %d images from content', len(imgs))\n// for (i, img) in enumerate(imgs):\n// img_score = 0\n//\n// if not 'src' in img.attrib:\n// logger.debug('No src attribute found')\n// continue\n//\n// try:\n// parsed_img = urlparse(img.attrib['src'])\n// img_path = parsed_img.path.lower()\n// except ValueError:\n// logger.debug('ValueError getting img path.')\n// continue\n// logger.debug('Image path is %s', img_path)\n//\n// if constants.POSITIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Positive URL hints match. Adding 20.')\n// img_score += 20\n//\n// if constants.NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Negative URL hints match. Subtracting 20.')\n// img_score -= 20\n//\n// # Gifs are more often structure than photos\n// if img_path.endswith('gif'):\n// logger.debug('gif found. Subtracting 10.')\n// img_score -= 10\n//\n// # JPGs are more often photographs\n// if img_path.endswith('jpg'):\n// logger.debug('jpg found. Adding 10.')\n// img_score += 10\n//\n// # PNGs are neutral.\n//\n// # Alt attribute usually means non-presentational image.\n// if 'alt' in img.attrib and len(img.attrib['alt']) > 5:\n// logger.debug('alt attribute found. Adding 5.')\n// img_score += 5\n//\n// # Look through our parent and grandparent for figure-like\n// # container elements, give a bonus if we find them\n// parents = [img.getparent()]\n// if parents[0] is not None and parents[0].getparent() is not None:\n// parents.append(parents[0].getparent())\n// for p in parents:\n// if p.tag == 'figure':\n// logger.debug('Parent with <figure> tag found. Adding 25.')\n// img_score += 25\n//\n// p_sig = ' '.join([p.get('id', ''), p.get('class', '')])\n// if constants.PHOTO_HINTS_RE.search(p_sig):\n// logger.debug('Photo hints regex match. Adding 15.')\n// img_score += 15\n//\n// # Look at our immediate sibling and see if it looks like it's a\n// # caption. Bonus if so.\n// sibling = img.getnext()\n// if sibling is not None:\n// if sibling.tag == 'figcaption':\n// img_score += 25\n//\n// sib_sig = ' '.join([sibling.get('id', ''),\n// sibling.get('class', '')]).lower()\n// if 'caption' in sib_sig:\n// img_score += 15\n//\n// # Pull out width/height if they were set.\n// img_width = None\n// img_height = None\n// if 'width' in img.attrib:\n// try:\n// img_width = float(img.get('width'))\n// except ValueError:\n// pass\n// if 'height' in img.attrib:\n// try:\n// img_height = float(img.get('height'))\n// except ValueError:\n// pass\n//\n// # Penalty for skinny images\n// if img_width and img_width <= 50:\n// logger.debug('Skinny image found. Subtracting 50.')\n// img_score -= 50\n//\n// # Penalty for short images\n// if img_height and img_height <= 50:\n// # Wide, short images are more common than narrow, tall ones\n// logger.debug('Short image found. Subtracting 25.')\n// img_score -= 25\n//\n// if img_width and img_height and not 'sprite' in img_path:\n// area = img_width * img_height\n//\n// if area < 5000: # Smaller than 50x100\n// logger.debug('Image with small area found. Subtracting 100.')\n// img_score -= 100\n// else:\n// img_score += round(area/1000.0)\n//\n// # If the image is higher on the page than other images,\n// # it gets a bonus. Penalty if lower.\n// logger.debug('Adding page placement bonus of %d.', len(imgs)/2 - i)\n// img_score += len(imgs)/2 - i\n//\n// # Use the raw src here because we munged img_path for case\n// # insensitivity\n// logger.debug('Final score is %d.', img_score)\n// img_scores[img.attrib['src']] += img_score\n//\n// top_score = 0\n// top_url = None\n// for (url, score) in img_scores.items():\n// if score > top_score:\n// top_url = url\n// top_score = score\n//\n// if top_score > 0:\n// logger.debug('Using top score image from content. Score was %d', top_score)\n// return top_url\n//\n//\n// # If nothing else worked, check to see if there are any really\n// # probable nodes in the doc, like <link rel=\"image_src\" />.\n// logger.debug('Trying to find lead image in probable nodes')\n// for selector in constants.LEAD_IMAGE_URL_SELECTORS:\n// nodes = self.resource.extract_by_selector(selector)\n// for node in nodes:\n// clean_value = None\n// if node.attrib.get('src'):\n// clean_value = self.clean(node.attrib['src'])\n//\n// if not clean_value and node.attrib.get('href'):\n// clean_value = self.clean(node.attrib['href'])\n//\n// if not clean_value and node.attrib.get('value'):\n// clean_value = self.clean(node.attrib['value'])\n//\n// if clean_value:\n// logger.debug('Found lead image in probable nodes.')\n// logger.debug('Node was: %s', node)\n// return clean_value\n//\n// return None\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(null, articleUrl, href).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^|]|$)|»([^|]|$))', 'i');\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (!negativeMatch && NEGATIVE_SCORE_RE.test(parentData)\n && EXTRANEOUS_LINK_HINTS_RE.test(parentData)) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport {\n DIGIT_RE,\n EXTRANEOUS_LINK_HINTS_RE,\n} from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import {\n NEXT_LINK_TEXT_RE,\n CAP_LINK_TEXT_RE,\n} from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n isWordpress,\n} from 'utils/dom';\nimport {\n removeAnchor,\n pageNumFromUrl,\n} from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (!shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${possiblePages[href].linkText}|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import URL from 'url';\n\nimport {\n articleBaseUrl,\n removeAnchor,\n} from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce((acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n }, { score: -100 });\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = [\n 'og:url',\n];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n\n};\n\nexport default GenericUrlExtractor;\n","export const EXCERPT_META_SELECTORS = [\n 'og:description',\n 'twitter:description',\n];\n","import ellipsize from 'ellipsize';\n\nimport {\n extractFromMeta,\n stripTags,\n} from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","import {\n MediumExtractor,\n BloggerExtractor,\n} from './custom/';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname.split('.').slice(-2).join('.');\n\n return Extractors[hostname] || Extractors[baseDomain] ||\n detectByHtml($) || GenericExtractor;\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach((key) => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml) {\n return selectors.find((selector) => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return $(s).length === 1 && $(s).attr(attr) && $(s).attr(attr).trim() !== '';\n }\n\n return $(selector).length === 1 && $(selector).text().trim() !== '';\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true } = extractionOpts;\n\n const matchingSelector = findMatchingSelector($, selectors, extractHtml);\n\n if (!matchingSelector) return null;\n\n // Declaring result; will contain either\n // text or html, which will be cleaned\n // by the appropriate cleaner type\n\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n if (extractHtml) {\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((index, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n\n $content = transformElements($content, $, extractionOpts);\n $content = cleanBySelectors($content, $, extractionOpts);\n\n $content = Cleaners[type]($content, { ...opts, defaultCleaner });\n\n return $.html($content);\n }\n\n let result;\n\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr] = matchingSelector;\n result = $(selector).attr(attr).trim();\n } else {\n let $node = $(matchingSelector);\n\n $node = cleanBySelectors($node, $, extractionOpts);\n $node = transformElements($node, $, extractionOpts);\n\n result = $node.text().trim();\n }\n\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts, type: 'content', extractHtml: true, title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts, type: 'content', extractHtml: true, title,\n });\n const lead_image_url = extractResult({ ...opts, type: 'lead_image_url', content });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } =\n extractResult({ ...opts, type: 'url_and_domain' }) || { url: null, domain: null };\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages(\n {\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n }\n) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n contentOnly: true,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${nextPageResult.content}`,\n };\n\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({ content: `<div>${result.content}</div>` });\n return {\n ...result,\n total_pages: pages,\n pages_rendered: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\n\nimport Resource from 'resource';\nimport {\n validateUrl,\n Errors,\n} from 'utils';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Mercury = {\n async parse(url, html, opts = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return Errors.badUrl;\n }\n\n const $ = await Resource.create(url, html, parsedUrl);\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // if html still has not been set (i.e., url passed to Mercury.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta').map((_, node) => $(node).attr('name')).toArray();\n\n let result = RootExtractor.extract(\n Extractor,\n {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages(\n {\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n }\n );\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n return result;\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n async fetchResource(url) {\n return await Resource.create(url);\n },\n\n};\n\nexport default Mercury;\n"],"names":["NORMALIZE_RE","normalizeSpaces","text","replace","trim","extractFromUrl","url","regexList","matchRe","find","re","test","exec","PAGE_IN_HREF_RE","RegExp","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","pageNumFromUrl","matches","match","pageNum","parseInt","removeAnchor","split","isGoodSegment","segment","index","firstSegmentHasLetters","goodSegment","length","toLowerCase","articleBaseUrl","parsed","parsedUrl","URL","parse","protocol","host","path","cleanedSegments","reverse","reduce","acc","rawSegment","includes","possibleSegment","fileExt","push","join","SENTENCE_END_RE","hasSentenceEnd","excerptContent","content","words","slice","getEncoding","str","encoding","testEncode","iconv","encodingExists","range","start","end","validateUrl","hostname","Errors","REQUEST_HEADERS","cheerio","browser","FETCH_TIMEOUT","BAD_CONTENT_TYPES","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","get","options","resolve","reject","err","response","body","validateResponse","parseNon2xx","statusMessage","statusCode","Error","error","headers","contentType","contentLength","encodeURI","href","badUrl","fetchResource","convertMetaProp","$","from","to","each","_","node","$node","value","attr","removeAttr","normalizeMetaTags","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","REMOVE_ATTRS","REMOVE_ATTR_SELECTORS","map","selector","REMOVE_ATTR_LIST","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","REMOVE_EMPTY_TAGS","REMOVE_EMPTY_SELECTORS","tag","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","stripUnlikelyCandidates","not","classes","id","classAndId","remove","brsToPs","collapsing","element","$element","nextElement","next","tagName","paragraphize","br","sibling","nextSibling","p","appendTo","replaceWith","convertDivs","div","$div","convertable","children","convertSpans","span","$span","parents","convertToParagraphs","convertNodeTo","attrs","getAttrs","attribString","key","html","contents","cleanForHeight","$img","height","width","removeSpacers","cleanImages","$article","img","markToKeep","article","tags","addClass","stripJunkTags","cleanHOnes","$hOnes","removeAllButWhitelist","removeClass","cleanAttributes","parent","removeEmpty","$p","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","READABILITY_ASSET","DIGIT_RE","BR_TAGS_RE","BR_TAG_RE","UNLIKELY_RE","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","HTML_OR_BODY_RE","getWeight","score","getScore","parseFloat","scoreCommas","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","setScore","addScore","amount","getOrInitScore","e","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","scoreContent","forEach","parentSelector","childSelector","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","findTopCandidate","removeUnlessContent","weight","hasClass","pCount","inputCount","imgCount","nodeIsList","previousNode","prev","scriptCount","cleanTags","cleanHeaders","title","header","$header","prevAll","rewriteTopLevel","absolutize","rootUrl","$content","absoluteUrl","makeLinksAbsolute","totalTextLength","linkText","linkLength","extractFromMeta","metaNames","cachedNames","foundNames","filter","indexOf","name","type","nodes","values","toArray","metaValue","stripTags","isGoodNode","maxChildren","withinComment","extractFromSelectors","selectors","textOnly","cleanText","commentParent","nodeClass","class","undefined","nodeIsSufficient","isWordpress","attribs","attributes","setAttr","val","setAttribute","setAttrs","removeAttribute","IS_LINK","IS_IMAGE","TAGS_TO_REMOVE","convertLazyLoadedImages","isComment","cleanComments","root","clean","Resource","preparedResponse","validResponse","result","failed","generateDoc","encodeDoc","decodedContent","decode","load","metaContentType","properEncoding","merge","extractor","domains","domain","mergeSupportedDomains","supportedDomains","BloggerExtractor","NYMagExtractor","$children","WikipediaExtractor","prepend","TwitterExtractor","tweets","$tweetContainer","NYTimesExtractor","src","TheAtlanticExtractor","NewYorkerExtractor","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","has","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","youtubeId","BroadwayWorldExtractor","ApartmentTherapyExtractor","data","JSON","sources","MediumExtractor","ytRe","thumb","decodeURIComponent","$caption","empty","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","$text","WwwAolComExtractor","WwwYoutubeComExtractor","videoId","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","imgHtml","NewsNationalgeographicComExtractor","$imgSrc","WwwNationalgeographicComExtractor","$imageParent","$dataAttrContainer","imgPath1","imgPath2","WwwLatimesComExtractor","$figure","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwMsnbcComExtractor","lead_image_url","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwCinemablendComExtractor","WwwTodayComExtractor","WwwHowtogeekComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","FusionNetExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwNjComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","CustomExtractors","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","months","allMonths","timestamp1","timestamp2","timestamp3","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","author","leadImageUrl","validUrl","isWebUri","cleanDek","dek","excerpt","dekText","cleanDateString","dateString","createDate","timezone","format","moment","Date","tz","parseFormat","cleanDatePublished","toISOString","date","isValid","extractCleanNode","cleanConditionally","defaultCleaner","cleanTitle","resolveSplitTitle","h1","extractBreadcrumbTitle","splitTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","cleanDomainFromTitle","nakedDomain","startSlug","startSlugRatio","wuzzy","levenshtein","endSlug","endSlugRatio","newTitle","Cleaners","cleanImage","cleanContent","extractBestNode","opts","$topCandidate","GenericContentExtractor","defaultOpts","getContentNode","cleanAndReturnNode","k","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","regex","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","abbrevMonthsStr","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","GenericDekExtractor","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","scoreImageUrl","scoreAttr","scoreByParents","$figParent","$gParent","scoreBySibling","scoreByDimensions","area","round","scoreByPosition","$imgs","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","topUrl","scoreSimilarity","articleUrl","similarity","difflib","SequenceMatcher","ratio","diffPercent","diffModifier","scoreLinkText","linkTextAsNum","scorePageInLink","isWp","EXTRANEOUS_LINK_HINTS","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreExtraneousLinks","makeSig","$link","positiveMatch","negativeMatch","parentData","scorePrevLink","linkData","shouldScore","baseUrl","previousUrls","linkHost","fragment","scoreBaseUrl","baseRegex","scoreNextLinkText","scoreCapLinks","makeBaseRegex","scoreLinks","links","scoredPages","possiblePages","link","possiblePage","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","EXCERPT_META_SELECTORS","maxLength","ellipsize","ellipse","GenericExcerptExtractor","shortContent","GenericWordCountExtractor","GenericExtractor","extract","bind","stringDirection","getDirection","loaded","date_published","next_page_url","word_count","direction","url_and_domain","Detectors","detectByHtml","s","getExtractor","baseDomain","Extractors","cleanBySelectors","transformElements","transforms","$matches","findMatchingSelector","extractHtml","Array","isArray","select","extractionOpts","matchingSelector","$wrapper","wrap","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","Extractor","pages","create","extractorOpts","nextPageResult","collectAllPages","Mercury","fetchAllPages","window","location"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mercury.js","sources":["../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/page-num-from-url.js","../src/utils/text/remove-anchor.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../src/utils/dom/constants.js","../src/utils/dom/strip-unlikely-candidates.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/remove-empty.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/clean-headers.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/is-wordpress.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/range.js","../src/utils/validate-url.js","../src/utils/merge-supported-domains.js","../src/extractors/add-extractor.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/custom/www.fortinet.com/index.js","../src/extractors/custom/www.fastcompany.com/index.js","../src/extractors/custom/blisterreview.com/index.js","../src/extractors/custom/news.mynavi.jp/index.js","../src/extractors/custom/clinicaltrials.gov/index.js","../src/extractors/custom/github.com/index.js","../src/extractors/custom/www.reddit.com/index.js","../src/extractors/custom/otrs.com/index.js","../src/extractors/custom/www.ossnews.jp/index.js","../src/extractors/custom/buzzap.jp/index.js","../src/extractors/custom/www.asahi.com/index.js","../src/extractors/custom/www.sanwa.co.jp/index.js","../src/extractors/custom/www.elecom.co.jp/index.js","../src/extractors/custom/scan.netsecurity.ne.jp/index.js","../src/extractors/custom/jvndb.jvn.jp/index.js","../src/extractors/custom/genius.com/index.js","../src/extractors/custom/www.jnsa.org/index.js","../src/extractors/custom/phpspot.org/index.js","../src/extractors/custom/www.infoq.com/index.js","../src/extractors/custom/www.moongift.jp/index.js","../src/extractors/custom/www.itmedia.co.jp/index.js","../src/extractors/custom/www.publickey1.jp/index.js","../src/extractors/custom/takagi-hiromitsu.jp/index.js","../src/extractors/custom/bookwalker.jp/index.js","../src/extractors/custom/www.yomiuri.co.jp/index.js","../src/extractors/custom/japan.cnet.com/index.js","../src/extractors/custom/deadline.com/index.js","../src/extractors/custom/www.gizmodo.jp/index.js","../src/extractors/custom/getnews.jp/index.js","../src/extractors/custom/www.lifehacker.jp/index.js","../src/extractors/custom/sect.iij.ad.jp/index.js","../src/extractors/custom/www.oreilly.co.jp/index.js","../src/extractors/custom/www.ipa.go.jp/index.js","../src/extractors/custom/weekly.ascii.jp/index.js","../src/extractors/custom/techlog.iij.ad.jp/index.js","../src/extractors/custom/wired.jp/index.js","../src/extractors/custom/japan.zdnet.com/index.js","../src/extractors/custom/www.rbbtoday.com/index.js","../src/extractors/custom/www.lemonde.fr/index.js","../src/extractors/custom/www.phoronix.com/index.js","../src/extractors/custom/pitchfork.com/index.js","../src/extractors/custom/biorxiv.org/index.js","../src/extractors/custom/epaper.zeit.de/index.js","../src/extractors/custom/www.ladbible.com/index.js","../src/extractors/custom/timesofindia.indiatimes.com/index.js","../src/extractors/custom/ma.ttias.be/index.js","../src/extractors/custom/pastebin.com/index.js","../src/extractors/custom/www.abendblatt.de/index.js","../src/extractors/custom/www.gruene.de/index.js","../src/extractors/custom/www.engadget.com/index.js","../src/extractors/custom/arstechnica.com/index.js","../src/extractors/custom/www.ndtv.com/index.js","../src/extractors/custom/www.spektrum.de/index.js","../src/extractors/custom/postlight.com/index.js","../src/extractors/custom/www.investmentexecutive.com/index.js","../src/extractors/custom/www.cbc.ca/index.js","../src/extractors/all.js","../src/cleaners/constants.js","../src/cleaners/author.js","../src/cleaners/lead-image-url.js","../src/cleaners/dek.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../src/cleaners/index.js","../src/extractors/generic/content/extract-best-node.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/extractors/generic/dek/extractor.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["const NORMALIZE_RE = /\\s{2,}(?![^<>]*<\\/(pre|code|textarea)>)/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path\n .split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content\n .trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n const matches = ENCODING_RE.exec(str);\n if (matches !== null) {\n [, str] = matches;\n }\n if (iconv.encodingExists(str)) {\n encoding = str;\n }\n return encoding;\n}\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser\n ? {}\n : {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n };\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(\n `^(${BAD_CONTENT_TYPES.join('|')})$`,\n 'i'\n);\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = ['nih.gov', 'gutenberg.org'];\n","import URL from 'url';\nimport request from 'postman-request';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 or not.\n// Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon200 = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon200) {\n throw new Error(\n `Resource returned a response status code of ${\n response.statusCode\n } and resource was instructed to reject non-200 status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host\n .split('.')\n .slice(-2)\n .join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl, headers = {}) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS, ...headers },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any non-GET redirects\n followAllRedirects: true,\n ...(typeof window !== 'undefined'\n ? {}\n : {\n // Follow GET redirects; this option is for Node only\n followRedirect: true,\n }),\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return {\n error: true,\n message: e.message,\n };\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { CANDIDATES_WHITELIST, CANDIDATES_BLACKLIST } from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*')\n .not('a')\n .each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n }\n if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive <br /> tags into\n// <p /> tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a <br />, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('<p></p>');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (\n sibling &&\n !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))\n ) {\n const { nextSibling } = sibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertible = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertible) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertible = $span.parents('p, div, li, figcaption').length === 0;\n if (convertible) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive <br /> tags.\n// * <div /> tags without block level elements inside of them\n// * <span /> tags who are not children of <p /> or <div /> tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html =\n node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(`<${tag} ${attribString}>${html}</${tag}>`);\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport { KEEP_SELECTORS, KEEP_CLASS } from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import { getAttrs, setAttrs } from 'utils/dom';\n\nimport { WHITELIST_ATTRS_RE, KEEP_CLASS } from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(\n node,\n Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {})\n );\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $\n );\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '')\n $p.remove();\n });\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import { scoreCommas, scoreLength } from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import { getOrInitScore, setScore } from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import { getScore, scoreNode, getWeight, addToParent } from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n }\n if (tagName.toLowerCase() === 'div') {\n return 5;\n }\n if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n }\n if (BAD_TAGS.test(tagName)) {\n return -3;\n }\n if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport { scoreNode, setScore, getOrInitScore, addScore } from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre')\n .not('[score]')\n .each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import { textLength, linkDensity } from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('<div></div>');\n\n $candidate\n .parent()\n .children()\n .each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n }\n if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n }\n if (\n siblingContentLength <= 80 &&\n density === 0 &&\n hasSentenceEnd(siblingContent)\n ) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (\n wrappingDiv.children().length === 1 &&\n wrappingDiv\n .children()\n .first()\n .get(0) === $candidate.get(0)\n ) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport { CLEAN_CONDITIONALLY_TAGS, KEEP_CLASS } from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > pCount / 3) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (\n previousNode &&\n normalizeSpaces(previousNode.text()).slice(-1) === ':'\n ) {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0)\n return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim().replace(/\\s+/g, ' ').length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n }\n if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values = nodes\n .map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n [metaValue] = values;\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find(parent => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach(key => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport {\n default as stripUnlikelyCandidates,\n} from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export const IS_LINK = new RegExp('https?://', 'i');\nconst IMAGE_RE = '.(png|gif|jpe?g)';\nexport const IS_IMAGE = new RegExp(`${IMAGE_RE}`, 'i');\nexport const IS_SRCSET = new RegExp(\n `${IMAGE_RE}(\\\\?\\\\S+)?(\\\\s*[\\\\d.]+[wx])`,\n 'i'\n);\n\nexport const TAGS_TO_REMOVE = ['script', 'style', 'form'].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport { IS_LINK, IS_IMAGE, IS_SRCSET } from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n const extractSrcFromJSON = str => {\n try {\n const { src } = JSON.parse(str);\n if (typeof src === 'string') return src;\n } catch (_) {\n return false;\n }\n\n return false;\n };\n\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach(attr => {\n const value = attrs[attr];\n\n if (attr !== 'srcset' && IS_LINK.test(value) && IS_SRCSET.test(value)) {\n $(img).attr('srcset', value);\n } else if (\n attr !== 'src' &&\n attr !== 'srcset' &&\n IS_LINK.test(value) &&\n IS_IMAGE.test(value)\n ) {\n // Is the value a JSON object? If so, we should attempt to extract the image src from the data.\n const existingSrc = extractSrcFromJSON(value);\n if (existingSrc) {\n $(img).attr('src', existingSrc);\n } else {\n $(img).attr('src', value);\n }\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root()\n .find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport { normalizeMetaTags, convertLazyLoadedImages, clean } from './utils/dom';\n\nconst Resource = {\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n // :param headers: Custom headers to be included in the request\n async create(url, preparedResponse, parsedUrl, headers = {}) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = {\n body: preparedResponse,\n response: validResponse,\n alreadyDecoded: true,\n };\n } else {\n result = await fetchResource(url, parsedUrl, headers);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response, alreadyDecoded = false }) {\n const { 'content-type': contentType = '' } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') && !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType, alreadyDecoded });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType, alreadyDecoded = false }) {\n if (alreadyDecoded) {\n return cheerio.load(content);\n }\n\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n // after first cheerio.load, check to see if encoding matches\n const contentTypeSelector = cheerio.browser\n ? 'meta[http-equiv=content-type]'\n : 'meta[http-equiv=content-type i]';\n const metaContentType =\n $(contentTypeSelector).attr('content') ||\n $('meta[charset]').attr('charset');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (metaContentType && properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield (start += 1);\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","const merge = (extractor, domains) =>\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {});\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains\n ? merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n : merge(extractor, [extractor.domain]);\n}\n","import mergeSupportedDomains from '../utils/merge-supported-domains';\n\nexport const apiExtractors = {};\n\nexport default function addExtractor(extractor) {\n if (!extractor || !extractor.domain) {\n return {\n error: true,\n message: 'Unable to add custom extractor. Invalid parameters.',\n };\n }\n\n Object.assign(apiExtractors, mergeSupportedDomains(extractor));\n\n return apiExtractors;\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: ['.post-content noscript'],\n\n // Selectors to remove from the extracted content\n clean: [],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: ['.post-author-name'],\n },\n\n title: {\n selectors: ['.post h2.title'],\n },\n\n date_published: {\n selectors: ['span.publishdate'],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: ['div.article-content', 'section.body', 'article.article'],\n\n // Selectors to remove from the extracted content\n clean: ['.ad', '.single-related-story'],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if (\n $children.length === 1 &&\n $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img'\n ) {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: ['h1.lede-feature-title', 'h1.headline-primary', 'h1'],\n },\n\n author: {\n selectors: ['.by-authors', '.lede-feature-author'],\n },\n\n dek: {\n selectors: ['.lede-feature-teaser'],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: ['#mw-content-text'],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': $node => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: ['h2.title'],\n },\n\n date_published: {\n selectors: ['#footer-info-lastmod'],\n },\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('<div id=\"TWEETS_GO_HERE\"></div>');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: ['.permalink[role=main]'],\n\n defaultCleaner: false,\n\n clean: ['.stream-item-footer', 'button', '.tweet-details-fixer'],\n },\n\n author: {\n selectors: ['.tweet.permalink-tweet .username'],\n },\n\n date_published: {\n selectors: [['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms']],\n },\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1[data-testid=\"headline\"]',\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n 'h1 .balancedHeadline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ['meta[name=\"byl\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['div.g-blocks', 'section[name=\"articleBody\"]', 'article#story'],\n\n transforms: {\n 'img.g-lazy': $node => {\n let src = $node.attr('src');\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: ['h1', '.c-article-header__hed'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.c-byline__author'],\n },\n\n content: {\n selectors: ['article', '.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n '.c-article-writer__image',\n '.c-article-writer__content',\n '.c-letters-cta__text',\n '.c-footer__logo',\n '.c-recirculation-link',\n '.twitter-tweet',\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n date_published: {\n selectors: [['time[itemprop=\"datePublished\"]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1[class^=\"content-header\"]',\n 'h1[class^=\"ArticleHeader__hed\"]',\n 'h1[class*=\"ContentHeaderHed\"]',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'article header div[class^=\"BylinesWrapper\"]',\n ['meta[name=\"article:author\"]', 'value'],\n 'div[class^=\"ArticleContributors\"] a[rel=\"author\"]',\n 'article header div[class*=\"Byline__multipleContributors\"]',\n ],\n },\n\n content: {\n selectors: [\n '.article__body',\n 'article.article.main-content',\n 'main[class^=\"Layout__content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption__text': 'figcaption',\n '.caption__credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['footer[class^=\"ArticleFooter__footer\"]', 'aside'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-header__publish-date',\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n 'div[class^=\"ContentHeaderDek\"]',\n 'div.content-header__dek',\n 'h2[class^=\"ArticleHeader__dek\"]',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1[data-testId=\"ContentHeaderHed\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.article.main-content',\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span.caption'],\n },\n\n date_published: {\n selectors: ['span.time'],\n },\n\n lead_image_url: {\n selectors: [],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.figure-caption'],\n },\n\n date_published: {\n selectors: [['time.date[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n\n supportedDomains: ['www.buzzfeednews.com'],\n\n title: {\n selectors: [\n 'h1.embed-headline-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]',\n 'byline__author',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['div[class^=\"featureimage_featureImageWrapper\"]', '.js-subbuzz-wrapper'],\n ['.js-subbuzz-wrapper'],\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': $node => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n '.js-inline-share-bar',\n '.js-ad-placement',\n ],\n },\n\n date_published: {\n selectors: [['time[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.embed-headline-description'],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard',\n '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1[class*=\"PostHeader\"]',\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'div[class^=\"PostHeader__ScAuthorNameSection\"]',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n 'section[class*=\"PostMainArticle\"]',\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n ['div[itemprop=\"author\"] meta[itemprop=\"name\"]', 'value'],\n '.story-meta__authors .vcard',\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [['.story-text'], '.story-main-content', '.story-core'],\n\n transforms: [],\n\n clean: ['figcaption', '.story-meta', '.ad'],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ['.story-meta__details time[datetime]', 'datetime'],\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n 'avclub.com',\n 'clickhole.com',\n 'splinternews.com',\n 'theonion.com',\n 'theroot.com',\n 'thetakeout.com',\n 'theinventory.com',\n ],\n\n title: {\n selectors: ['header h1', 'h1.headline'],\n },\n\n author: {\n selectors: ['a[data-ga*=\"Author\"]', '.author'],\n },\n\n content: {\n selectors: ['.js_post-content', '.post-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': $node => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.magnifier', '.lightbox'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: ['h1[itemprop=headline]', 'h1.article-title'],\n },\n\n author: {\n selectors: ['span[itemprop=author]'],\n },\n\n content: {\n selectors: ['div[itemprop=articlebody]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[itemprop=datePublished]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: ['h1.headline'],\n },\n\n author: {\n selectors: ['.PostByline__name'],\n },\n\n content: {\n selectors: ['div.post__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('<img />').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['.PostByline__timestamp[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n title: {\n selectors: ['h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Allow drop cap character.\n 'section span:first-of-type': $node => {\n const $text = $node.html();\n if ($text.length === 1 && /^[a-zA-Z()]+$/.test($text)) {\n $node.replaceWith($text);\n }\n },\n // Re-write lazy-loaded youtube videos\n iframe: $node => {\n const ytRe = /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n const $parent = $node.parents('figure');\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe); // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n return;\n }\n\n // If we can't draw the YouTube preview, remove the figure.\n $parent.remove();\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: $node => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n\n $node.empty().append([$img, $caption]);\n },\n\n // Remove any smaller images that did not get caught by the generic image\n // cleaner (author photo 48px, leading sentence images 79px, etc.).\n img: $node => {\n const width = parseInt($node.attr('width'), 10);\n if (width < 100) $node.remove();\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span a', 'svg'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: ['.post-title-breadcrumb', 'h1', '.headline'],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: ['.article__published-at', '.article-posted-date'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__blocks', '.article-content', '.all-post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lightbox-link'],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: ['h1', '#topper-headline-wrapper'],\n },\n\n author: {\n selectors: ['.pb-author-name'],\n },\n\n date_published: {\n selectors: [['.author-timestamp[itemprop=\"datePublished\"]', 'content']],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': $node => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.interstitial-link', '.newsletter-inline-unit'],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: ['h1.headline__title'],\n },\n\n author: {\n selectors: ['span.author-card__details__name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: ['h2.headline__subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry__body'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: ['h1.article-headline'],\n },\n\n author: {\n selectors: ['span.AuthorList'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.article-subhead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['div.article-body']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['aside'],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: ['.article-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.byline a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: ['#storytext h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inStoryHeading'],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: ['h1.pg-headline', 'h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': $node => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': $node => {\n if ($node.has('a')) {\n if (\n $node.text().trim() ===\n $node\n .find('a')\n .text()\n .trim()\n ) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: ['h1.p-article__title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.p-article__byline__date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [['link[itemprop=\"name\"]', 'content'], '.yt-user-info'],\n },\n\n date_published: {\n selectors: [['meta[itemProp=\"datePublished\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n '#player-container-outer',\n 'ytd-expandable-video-description-body-renderer #description',\n ['#player-api', '#description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>`);\n },\n '#player-container-outer': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n const description = $('meta[itemProp=\"description\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>\n <div><span>${description}</span></div>`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: ['h1', '.content__headline'],\n },\n\n author: {\n selectors: ['address[data-link-name=\"byline\"]', 'p.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['div[data-gu-name=\"standfirst\"]', '.content__standfirst'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincontent', '.content__article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.hide-on-mobile', '.inline-icon'],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1[class^=\"headline\"]',\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n 'p[class*=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"og:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n '.body-content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inline-newsletter', '.page-ad'],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: ['h1', 'h1.post-page__title'],\n },\n\n author: {\n selectors: ['a[href*=\"profile\"]', 'div.content-meta__author'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.post-page__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: ['h1', '.storytitle'],\n },\n\n author: {\n selectors: ['p.byline__name.byline__name--block'],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['.storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['div.enlarge_measure'],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: ['article header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: ['#article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: ['h1.story__title'],\n },\n\n author: {\n selectors: ['.story__info .story__info__item:first-child'],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n format: 'MMMM D, YYYY h:mm a',\n },\n\n dek: {\n selectors: ['.story__subhead'],\n },\n\n lead_image_url: {\n selectors: [['article figure a:first-child', 'href']],\n },\n\n content: {\n selectors: ['.story__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: ['h1[class*=\"ArticleHeader-headline-\"]', 'h1.article-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"og:article:author\"]', 'value'], '.author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ArticleBodyWrapper', '#article-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div[class^=\"ArticleBody-byline-container-\"]',\n '#article-byline .author',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: ['header h1', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.author_name a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article', 'section.article-content.blueprint'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['div.article_byline span:first-of-type'],\n },\n\n date_published: {\n selectors: ['time'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': $node => {\n const imgHtml = $node.html();\n $node\n .parents('.e-image__image')\n .find('.c-dynamic-image')\n .replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: ['.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--large'],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.Article__Headline__Desc', '.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.Article__Content',\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent\n .find('.media--medium__container')\n .children()\n .first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend(\n $(`<div class=\"__image-lead__\">\n <img src=\"${imgPath1}\"/>\n <img src=\"${imgPath2}\"/>\n </div>`)\n );\n }\n } else {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--small'],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: ['h1.headline', '.trb_ar_hl'],\n },\n\n author: {\n selectors: [\n 'a[data-click=\"standardBylineAuthorName\"]',\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.page-article-body', '.trb_ar_main'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': $node => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.trb_ar_by', '.trb_ar_cr'],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: ['nypost.com'],\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.modal-trigger'],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author-meta-title', 'main span.entry-author-name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'header',\n '.article-sharing',\n '.after-article',\n '.type-commenting',\n '.more-posts',\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: ['.Article-headline', '.article-headline'],\n },\n\n author: {\n selectors: ['.ArticleAuthor-nameText', '.author-name'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: ['.Article-subline', '.article-subline'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: ['h1', 'h1.is-title-pane'],\n },\n\n author: {\n selectors: ['.byline-name', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body__content', '.pane-node-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [\n selector,\n attr,\n ] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(`<img src=\"${src}\" />`);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [['meta[name=\"sailthru.title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: ['div#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n 'a[data-vars-label*=\"authors\"]',\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article main', 'div.field.field-name-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['small'],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: ['div[class*=\"Article_main__body\"] h1', '.article-header h1'],\n },\n\n author: {\n selectors: ['.ShareByline span:nth-child(2)', '.authors'],\n clean: ['.author-overlay', '.by-text'],\n },\n\n date_published: {\n selectors: ['.ShareByline', '.timestamp'],\n format: 'MMMM D, YYYY h:mm a',\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: ['h1.headline', 'h1#ra-headline'],\n },\n\n author: {\n selectors: [\n '.article_byline span',\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: ['time', ['meta[name=\"sailthru.date\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', 'article#ra-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['dl#ra-tags', '.ra-related', 'a.ra-editor', 'dl#ra-share-bottom'],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: ['h1.title', 'h1.ArticleHeader-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n 'div.ArticleBody-articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: ['h2.post-title', 'title-text'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.share-copy-title', '.post-tags', '.reactions'],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author', '.vcard'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: ['.article-header h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value'], 'a.author.url.fn'],\n },\n\n date_published: {\n selectors: [\n '.mntl-attribution__item-date',\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article-header h2'],\n },\n\n content: {\n selectors: ['div[class^=\"loc article-content\"]', 'div.article-body__inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: {\n selectors: ['a.author', 'a.article-byline.tracked-offpage'],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related'],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: ['h1.l-article-header__row--title', 'h1.content-title'],\n },\n\n author: {\n selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.l-article-header__row--lead', '.content-description'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.l-article-content',\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.c-related-links-wrapper', '.module-related'],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: ['title', 'article header h1'],\n },\n\n author: {\n selectors: ['.article-cnt__author', '.author'],\n },\n\n date_published: {\n selectors: [['time[data-published]', 'data-published']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', 'section.body.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: ['div.entry-header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"qc:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: ['h1.article-detail__title', 'h1.article__title'],\n },\n\n author: {\n selectors: ['.article-detail__meta__author', '.entry-meta__author a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.article-detail__main-content section'],\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n date_published: {\n selectors: ['p.published-date'],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.dateline-storybody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n author: {\n selectors: ['.contributor'],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': $node => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.story-share'],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: ['h1', 'h1.title'],\n },\n\n author: {\n selectors: ['article a[rel=\"author\"]', '.author-url'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.intro', 'blockquote'],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: ['h1', 'h1.headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"published\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.m-detail-header--dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.m-detail--body',\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['.inline-thumb', '.primary-message', '.description', '.instructions'],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.blog-title'],\n },\n\n author: {\n selectors: [\n 'div.main-post-head .social-author__name',\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post-body', '.blog-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['span.author', 'a.author'],\n },\n\n date_published: {\n selectors: ['time'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: ['.c-head_dek', '.article-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': $node => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'],\n },\n\n author: {\n selectors: ['span.byline-name', ['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['time[datetime]', ['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', '.entry-container'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.label-comment'],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [['meta[name=\"dcterms.title\"]', 'value']],\n },\n\n author: {\n selectors: [['link[rel=\"author\"]', 'title']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n '.single-post-content-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: ['title', 'h1.entry-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n dek: {\n selectors: ['.subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-sharing.top + div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.ad-notice-small'],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: ['.title', ['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.article-content', '.image', '.body'], '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-video-wrapper', '.show-for-small-only'],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: ['.entry-title', '.cb-entry-title', '.cb-single-title'],\n },\n\n author: {\n selectors: ['div.cb-author', 'div.cb-author-title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['div.theiaPostSlider_slides img', 'src']],\n },\n\n content: {\n selectors: ['div.theiaPostSlider_slides'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.title'],\n },\n\n author: {\n selectors: ['.byline-wrapper span.author_name', '.author-link'],\n },\n\n date_published: {\n selectors: [\n ['meta[property=\"article:published_time\"]', 'content'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.main-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: ['h1.title', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'cite a',\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.tc_mark', 'figcaption'],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: ['h1.entry-title.story--header--title'],\n },\n\n author: {\n selectors: ['div.story--header--author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"datePublished\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.story', '.entry-content.'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: ['div.article-hero-headline h1', 'div.article-hed h1'],\n },\n\n author: {\n selectors: [\n 'div.article-inline-byline span.byline-name',\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', 'div.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.MblGHNMJ'],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['picture', 'article.row'], 'article.row'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: ['.article-title', 'h1'],\n },\n\n author: {\n selectors: [\n '.main-author-card h3',\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.base-main-card__metadata',\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.article-content__body',\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.entity-image'],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: ['whitehouse.gov'],\n\n title: {\n selectors: ['h1', '.pane-node-title'],\n },\n\n author: {\n selectors: ['.blog-author-link', '.node-person-name-link'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.field-name-field-forall-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: ['div#content-start', '.pane-node-field-forall-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pane-node-title', '.pane-custom.pane-1'],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: ['h1.m-detail-header--title', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], 'div.date span span a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"published\"]', 'value'],\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.m-detail--body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.show-for-small-only'],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: ['.blog-header__title', '.page-title'],\n },\n\n author: {\n selectors: ['.blog-header__author-link', '.aside_author .title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value'], '.post-info'],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: ['.blog-header__description', '.page-subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.blog__container', 'article .post_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n '.post-author a',\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.content-container article',\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.post-author', '.donate-box', '.message', '.subtitle'],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: ['h2', 'h2.title'],\n },\n\n author: {\n selectors: ['.name'],\n },\n\n date_published: {\n selectors: [['.date.smart-date', 'data-origindate']],\n },\n\n dek: {\n selectors: ['.excerpt'],\n },\n\n lead_image_url: {\n selectors: [['.article-detail-hd img', 'src']],\n },\n\n content: {\n selectors: ['.detail'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lazyload', '.lazylad', '.lazylood'],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: ['h1', '.entry-header h1'],\n },\n\n author: {\n // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class\n selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [null],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', '.entry-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value'], 'header h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.tailwind-article-body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': $node => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`<figure><img src=\"${src}\"/></figure>`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#pitch'],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: ['.hed', 'h1'],\n },\n\n author: {\n selectors: ['a[rel=author]'],\n },\n\n date_published: {\n selectors: ['.pub-date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"dc.creator\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"dc.date.created\"]', 'value']],\n format: 'YYYY-MM-DD|HH[h]mm',\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['div.lead-container', '.bunker-component.lead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.document-content-style',\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwFortinetComExtractor = {\n domain: 'www.fortinet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.b15-blog-meta__author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12',\n ],\n\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n return null;\n },\n },\n },\n};\n","export const WwwFastcompanyComExtractor = {\n domain: 'www.fastcompany.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.post__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post__article'],\n },\n};\n","export const BlisterreviewComExtractor = {\n domain: 'blisterreview.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span.author-name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.entry-date', 'datetime'],\n ['meta[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[itemprop=\"image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ['img.attachment-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n [\n '.elementor-section-wrap',\n '.elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n figcaption: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.comments-area'],\n },\n};\n","export const NewsMynaviJpExtractor = {\n domain: 'news.mynavi.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'a.articleHeader_name',\n 'main div.article-author a.article-author__name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body', 'main article div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n img: $node => {\n const src = $node.attr('data-original');\n if (src !== '') {\n $node.attr('src', src);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ClinicaltrialsGovExtractor = {\n domain: 'clinicaltrials.gov',\n\n title: {\n selectors: ['h1.tr-solo_record'],\n },\n\n author: {\n selectors: ['div#sponsor.tr-info-text'],\n },\n\n date_published: {\n // selectors: ['span.term[data-term=\"Last Update Posted\"]'],\n selectors: ['div:has(> span.term[data-term=\"Last Update Posted\"])'],\n },\n\n content: {\n selectors: ['div#tab-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.usa-alert> img'],\n },\n};\n","export const GithubComExtractor = {\n domain: 'github.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n ['relative-time[datetime]', 'datetime'],\n ['span[itemprop=\"dateModified\"] relative-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n 'span[itemprop=\"about\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['#readme article']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRedditComExtractor = {\n domain: 'www.reddit.com',\n\n title: {\n selectors: [\n 'div[data-test-id=\"post-content\"] h1',\n 'div[data-test-id=\"post-content\"] h2',\n ],\n },\n\n author: {\n selectors: ['div[data-test-id=\"post-content\"] a[href*=\"user/\"]'],\n },\n\n date_published: {\n selectors: [\n 'div[data-test-id=\"post-content\"] span[data-click-id=\"timestamp\"]',\n 'div[data-test-id=\"post-content\"] a[data-click-id=\"timestamp\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['div[data-test-id=\"post-content\"] p'], // text post\n [\n 'div[data-test-id=\"post-content\"] a[target=\"_blank\"]:not([data-click-id=\"timestamp\"])', // external link\n 'div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]', // embedded media\n ], // external link with media preview (YouTube, imgur album, etc...)\n ['div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]'], // Embedded media (Reddit video)\n ['div[data-test-id=\"post-content\"] a'], // external link\n 'div[data-test-id=\"post-content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[role=\"img\"]': $node => {\n // External link image preview\n const $img = $node.find('img');\n const bgImg = $node.css('background-image');\n if ($img.length === 1 && bgImg) {\n $img.attr('src', bgImg.match(/\\((.*?)\\)/)[1].replace(/('|\")/g, ''));\n return $img;\n }\n return $node;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.icon',\n 'span[id^=\"PostAwardBadges\"]',\n 'div a[data-test-id=\"comments-page-link-num-comments\"]',\n ],\n },\n};\n","export const OtrsComExtractor = {\n domain: 'otrs.com',\n\n title: {\n selectors: ['#main article h1'],\n },\n\n author: {\n selectors: ['div.dateplusauthor a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main article'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'div.dateplusauthor',\n 'div.gr-12.push-6.footershare',\n '#atftbx',\n 'div.category-modul',\n ],\n },\n};\n","export const WwwOssnewsJpExtractor = {\n domain: 'www.ossnews.jp',\n\n title: {\n selectors: ['#alpha-block h1.hxnewstitle'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.fs12'],\n format: 'YYYY年MM月DD日 HH:mm',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#alpha-block .section:has(h1.hxnewstitle)'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BuzzapJpExtractor = {\n domain: 'buzzap.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ctiframe'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwAsahiComExtractor = {\n domain: 'www.asahi.com',\n\n title: {\n selectors: ['main h1', '.ArticleTitle h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"pubdate\"]', 'value']],\n },\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'],\n },\n};\n","export const WwwSanwaCoJpExtractor = {\n domain: 'www.sanwa.co.jp',\n\n title: {\n selectors: ['#newsContent h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['dl.date'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#newsContent'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#smartphone', 'div.sns_box', 'div.contentFoot'],\n },\n};\n","export const WwwElecomCoJpExtractor = {\n domain: 'www.elecom.co.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.section-last'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['td.TableMain2'],\n\n defaultCleaner: false,\n\n transforms: {\n table: $node => {\n $node.attr('width', 'auto');\n },\n },\n\n clean: [],\n },\n};\n","export const ScanNetsecurityNeJpExtractor = {\n domain: 'scan.netsecurity.ne.jp',\n\n title: {\n selectors: ['header.arti-header h1.head'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['header.arti-header p.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.arti-content.arti-content--thumbnail'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['aside.arti-giga'],\n },\n};\n","export const JvndbJvnJpExtractor = {\n domain: 'jvndb.jvn.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['div.modifytxt:nth-child(2)'],\n format: 'YYYY/MM/DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#news-list'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const GeniusComExtractor = {\n domain: 'genius.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['h2 a'],\n },\n\n date_published: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.release_date;\n },\n ],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.album.cover_art_url;\n },\n ],\n ],\n },\n\n content: {\n selectors: ['.lyrics'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwJnsaOrgExtractor = {\n domain: 'www.jnsa.org',\n\n title: {\n selectors: ['#wgtitle h2'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main_area'],\n\n transforms: {},\n\n clean: ['#pankuzu', '#side'],\n },\n};\n","export const PhpspotOrgExtractor = {\n domain: 'phpspot.org',\n\n title: {\n selectors: ['h3.hl'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['h4.hl'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.entrybody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwInfoqComExtractor = {\n domain: 'www.infoq.com',\n\n title: {\n selectors: ['h1.heading'],\n },\n\n author: {\n selectors: ['div.widget.article__authors'],\n },\n\n date_published: {\n selectors: ['.article__readTime.date'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__data'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwMoongiftJpExtractor = {\n domain: 'www.moongift.jp',\n\n title: {\n selectors: ['h1.title a'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['ul.meta li:not(.social):first-of-type'],\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main'],\n\n transforms: {},\n\n clean: ['ul.mg_service.cf'],\n },\n};\n","export const WwwItmediaCoJpExtractor = {\n domain: 'www.itmedia.co.jp',\n\n supportedDomains: [\n 'www.atmarkit.co.jp',\n 'techtarget.itmedia.co.jp',\n 'nlab.itmedia.co.jp',\n ],\n\n title: {\n selectors: ['#cmsTitle h1'],\n },\n\n author: {\n selectors: ['#byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['#cmsAbstract h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#cmsBody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#snsSharebox'],\n },\n};\n","export const WwwPublickey1JpExtractor = {\n domain: 'www.publickey1.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'],\n },\n\n date_published: {\n selectors: ['div.pubdate'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincol'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#breadcrumbs', 'div.sbm', 'div.ad_footer'],\n },\n};\n","export const TakagihiromitsuJpExtractor = {\n domain: 'takagi-hiromitsu.jp',\n\n title: {\n selectors: ['h3'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[http-equiv=\"Last-Modified\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.body'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BookwalkerJpExtractor = {\n domain: 'bookwalker.jp',\n\n title: {\n selectors: ['h1.p-main__title', 'h1.main-heading'],\n },\n\n author: {\n selectors: ['div.p-author__list', 'div.authors'],\n },\n\n date_published: {\n selectors: [\n 'dl.p-information__data dd:nth-of-type(7)',\n '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type',\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.p-main__information',\n ['div.main-info', 'div.main-cover-inner'],\n ],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'span.label.label--trial',\n 'dt.info-head.info-head--coin',\n 'dd.info-contents.info-contents--coin',\n 'div.info-notice.fn-toggleClass',\n ],\n },\n};\n","export const WwwYomiuriCoJpExtractor = {\n domain: 'www.yomiuri.co.jp',\n\n title: {\n selectors: ['h1.title-article.c-article-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.p-main-contents'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const JapanCnetComExtractor = {\n domain: 'japan.cnet.com',\n\n title: {\n selectors: ['.leaf-headline-ttl'],\n },\n\n author: {\n selectors: ['.writer'],\n },\n\n date_published: {\n selectors: ['.date'],\n format: 'YYYY年MM月DD日 HH時mm分',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const DeadlineComExtractor = {\n domain: 'deadline.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['section.author h2'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item'],\n\n transforms: {\n '.embed-twitter': $node => {\n const innerHtml = $node.html();\n $node.replaceWith(innerHtml);\n },\n },\n\n clean: ['figcaption'],\n },\n};\n","export const WwwGizmodoJpExtractor = {\n domain: 'www.gizmodo.jp',\n\n title: {\n selectors: ['h1.p-post-title'],\n },\n\n author: {\n selectors: ['li.p-post-AssistAuthor'],\n },\n\n date_published: {\n selectors: [['li.p-post-AssistTime time', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.p-post'],\n\n transforms: {\n 'img.p-post-thumbnailImage': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['h1.p-post-title', 'ul.p-post-Assist'],\n },\n};\n","export const GetnewsJpExtractor = {\n domain: 'getnews.jp',\n\n title: {\n selectors: ['article h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.prof'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['ul.cattag-top time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.post-bodycopy'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwLifehackerJpExtractor = {\n domain: 'www.lifehacker.jp',\n\n title: {\n selectors: ['h1[class^=\"article_pArticle_Title\"]', 'h1.lh-summary-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n 'p.lh-entryDetailInner--credit',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['div.lh-entryDetail-header time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[class^=\"article_pArticle_Body__\"]',\n 'div.lh-entryDetail-body',\n ],\n\n transforms: {\n 'img.lazyload': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['p.lh-entryDetailInner--credit'],\n },\n};\n","export const SectIijAdJpExtractor = {\n domain: 'sect.iij.ad.jp',\n\n title: {\n selectors: ['div.title-box-inner h1', 'h3'],\n },\n\n author: {\n selectors: ['p.post-author a', 'dl.entrydate dd'],\n },\n\n date_published: {\n selectors: ['time'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-inner', '#article'],\n\n transforms: {},\n\n clean: ['dl.entrydate'],\n },\n};\n","export const WwwOreillyCoJpExtractor = {\n domain: 'www.oreilly.co.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h3'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"]', 'li[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [\n ['dd[itemprop=\"datePublished\"]', 'content'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image:secure_url\"]', 'value'],\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['section.detail', '#content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.social-tools'],\n },\n};\n","export const WwwIpaGoJpExtractor = {\n domain: 'www.ipa.go.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.ipar_text_right'],\n format: 'YYYY年M月D日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#ipar_main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['p.ipar_text_right'],\n },\n};\n","export const WeeklyAsciiJpExtractor = {\n domain: 'weekly.ascii.jp',\n\n title: {\n selectors: ['article h1', 'h1[itemprop=\"headline\"]'],\n },\n\n author: {\n selectors: ['p.author'],\n },\n\n date_published: {\n selectors: ['p.date', ['meta[name=\"odate\"]', 'value']],\n\n format: 'YYYY年MM月DD日 HH:mm',\n\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div#contents_detail', 'div.article'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const TechlogIijAdJpExtractor = {\n domain: 'techlog.iij.ad.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['a[rel=\"author\"]'],\n },\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.wp_social_bookmarking_light'],\n },\n};\n","import URL from 'url';\n\nexport const WiredJpExtractor = {\n domain: 'wired.jp',\n\n title: {\n selectors: ['h1[data-testid=\"ContentHeaderHed\"]', 'h1.post-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'p[itemprop=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: ['div[class^=\"ContentHeaderDek\"]', '.post-intro'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[data-attribute-verso-pattern=\"article-body\"]',\n 'article.article-detail',\n ],\n\n transforms: {\n 'img[data-original]': $node => {\n const dataOriginal = $node.attr('data-original');\n const src = $node.attr('src');\n const url = URL.resolve(src, dataOriginal);\n $node.attr('src', url);\n },\n },\n\n clean: ['.post-category', 'time', 'h1.post-title', '.social-area-syncer'],\n },\n};\n","export const JapanZdnetComExtractor = {\n domain: 'japan.zdnet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"cXenseParse:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwRbbtodayComExtractor = {\n domain: 'www.rbbtoday.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.writer.writer-name'],\n },\n\n date_published: {\n selectors: [['header time', 'datetime']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value'], '.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.arti-content'],\n\n transforms: {},\n\n clean: ['.arti-giga'],\n },\n};\n","export const WwwLemondeFrExtractor = {\n domain: 'www.lemonde.fr',\n\n title: {\n selectors: ['h1.article__title'],\n },\n\n author: {\n selectors: ['.author__name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article__desc'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__content'],\n\n transforms: {},\n\n clean: ['figcaption'],\n },\n};\n","export const WwwPhoronixComExtractor = {\n domain: 'www.phoronix.com',\n\n title: {\n selectors: ['article h1', 'article header'],\n },\n\n author: {\n selectors: ['.author a:first-child'],\n },\n\n date_published: {\n selectors: ['.author'],\n // 1 June 2019 at 08:34 PM EDT\n format: 'D MMMM YYYY at hh:mm',\n timezone: 'America/New_York',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PitchforkComExtractor = {\n domain: 'pitchfork.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.authors-detail__display-name',\n ],\n },\n\n date_published: {\n selectors: ['div[class^=\"InfoSliceWrapper-\"]', ['.pub-date', 'datetime']],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n '.review-detail__abstract',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['.single-album-tombstone__art img', 'src'],\n ],\n },\n\n content: {\n selectors: ['div.body__inner-container', '.review-detail__text'],\n },\n\n extend: {\n score: {\n selectors: ['p[class*=\"Rating\"]', '.score'],\n },\n },\n};\n","export const BiorxivOrgExtractor = {\n domain: 'biorxiv.org',\n\n title: {\n selectors: ['h1#page-title'],\n },\n\n author: {\n selectors: [\n 'div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors',\n ],\n },\n\n content: {\n selectors: ['div#abstract-1'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const EpaperZeitDeExtractor = {\n domain: 'epaper.zeit.de',\n\n title: {\n selectors: ['p.title'],\n },\n\n author: {\n selectors: ['.article__author'],\n },\n\n date_published: null,\n\n excerpt: {\n selectors: ['subtitle'],\n },\n\n lead_image_url: null,\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'p.title': 'h1',\n '.article__author': 'p',\n byline: 'p',\n linkbox: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['image-credits', 'box[type=citation]'],\n },\n};\n","export const WwwLadbibleComExtractor = {\n domain: 'www.ladbible.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['[class*=Byline]'],\n },\n\n date_published: {\n selectors: ['time'],\n timezone: 'Europe/London',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['[class*=ArticleContainer]'],\n clean: [\n 'time',\n 'source',\n 'a[href^=\"https://www.ladbible.com/\"]',\n 'picture',\n '[class*=StyledCardBlock]',\n ],\n },\n};\n","export const TimesofindiaIndiatimesComExtractor = {\n domain: 'timesofindia.indiatimes.com',\n\n title: {\n selectors: ['h1'],\n },\n\n extend: {\n reporter: {\n selectors: ['div.byline'],\n transforms: {},\n },\n },\n\n date_published: {\n selectors: ['.byline'],\n format: 'MMM D, YYYY, HH:mm z',\n timezone: 'Asia/Kolkata',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.contentwrapper:has(section)'],\n defaultCleaner: false,\n\n clean: [\n 'section',\n 'h1',\n '.byline',\n '.img_cptn',\n '.icon_share_wrap',\n 'ul[itemtype=\"https://schema.org/BreadcrumbList\"]',\n ],\n },\n};\n","export const MaTtiasBeExtractor = {\n domain: 'ma.ttias.be',\n\n title: {\n selectors: [['meta[name=\"twitter:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n content: {\n selectors: [['.content']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // h1 elements will be demoted to h2, so demote h2 elements to h3.\n return 'h3';\n },\n h1: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // A subsequent h2 will be removed if there is not a paragraph before it, so\n // add a paragraph here. It will be removed anyway because it is empty.\n $node.after('<p></p>');\n },\n ul: $node => {\n // Articles contain lists of links which look like, but are not, navigation\n // elements. Adding this class attribute avoids them being incorrectly removed.\n $node.attr('class', 'entry-content-asset');\n },\n },\n },\n};\n","export const PastebinComExtractor = {\n domain: 'pastebin.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.username', '.paste_box_line2 .t_us + a'],\n },\n\n date_published: {\n selectors: ['.date', '.paste_box_line2 .t_da + span'],\n timezone: 'America/New_York',\n format: 'MMMM D, YYYY',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.source', '#selectable .text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n ol: 'div',\n li: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-unused-expressions */\nexport const WwwAbendblattDeExtractor = {\n domain: 'www.abendblatt.de',\n\n title: {\n selectors: ['h2.article__header__headline'],\n },\n\n author: {\n selectors: ['span.author-info__name-text'],\n },\n\n date_published: {\n selectors: [\n ['time.teaser-stream-time', 'datetime'],\n ['time.article__header__date', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n p: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n div: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwGrueneDeExtractor = {\n domain: 'www.gruene.de',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[property=\"og:image\"]', 'content']],\n },\n\n content: {\n // selectors: ['section'],\n selectors: [['section header', 'section h2', 'section p', 'section ol']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['figcaption', 'p[class]'],\n },\n};\n","export const WwwEngadgetComExtractor = {\n domain: 'www.engadget.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['a.th-meta[data-ylk*=\"subsec:author\"]'],\n },\n\n // Engadget stories have publish dates, but the only representation of them on the page\n // is in a format like \"2h ago\". There are also these tags with blank values:\n // <meta class=\"swiftype\" name=\"published_at\" data-type=\"date\" value=\"\">\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: ['div[class*=\"o-title_mark\"] div'],\n },\n\n // Engadget stories do have lead images specified by an og:image meta tag, but selecting\n // the value attribute of that tag fails. I believe the \"ℑ\" sequence of characters\n // is triggering this inability to select the attribute value.\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n [\n // Some figures will be inside div.article-text, but some header figures/images\n // will not.\n '#page_body figure:not(div.article-text figure)',\n 'div.article-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ArstechnicaComExtractor = {\n domain: 'arstechnica.com',\n\n // Articles from this site are often paginated, but I was unable to write a CSS\n // selector to find the next page. On the last page, there will be a link with a CSS\n // selector indicating that the previous page is next. But the parser appears to find\n // the next page without this extractor finding it, as long as the fallback option is\n // left at its default value of true.\n\n title: {\n selectors: ['title'],\n },\n\n author: {\n selectors: ['*[rel=\"author\"] *[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['.byline time', 'datetime']],\n },\n\n dek: {\n selectors: ['h2[itemprop=\"description\"]'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // Some pages have an element h2 that is significant, and that the parser will\n // remove if not following a paragraph. Adding this empty paragraph fixes it, and\n // the empty paragraph will be removed anyway.\n $node.before('<p></p>');\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result.\n clean: [\n // Remove enlarge links and separators inside image captions.\n 'figcaption .enlarge-link',\n 'figcaption .sep',\n\n // I could not transform the video into usable elements, so I\n // removed them.\n 'figure.video',\n\n // Image galleries that do not work.\n '.gallery',\n\n 'aside',\n '.sidebar',\n ],\n },\n};\n","export const WwwNdtvComExtractor = {\n domain: 'www.ndtv.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"] span[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['span[itemprop=\"dateModified\"]', 'content']],\n },\n\n dek: {\n selectors: ['h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // This site puts a dateline in a 'b' above the first paragraph, and then somehow\n // blends it into the first paragraph with CSS. This transform moves the dateline\n // to the first paragraph.\n '.place_cont': $node => {\n if (!$node.parents('p').length) {\n const nextSibling = $node.next('p');\n if (nextSibling) {\n $node.remove();\n nextSibling.prepend($node);\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.highlghts_Wdgt',\n '.ins_instory_dv_caption',\n 'input',\n '._world-wrapper .mt20',\n ],\n },\n};\n","export const SpektrumExtractor = {\n domain: 'www.spektrum.de',\n\n title: {\n selectors: ['.content__title'],\n },\n\n author: {\n selectors: ['.content__author__info__name'],\n },\n\n date_published: {\n selectors: ['.content__meta__date'],\n timezone: 'Europe/Berlin',\n },\n\n dek: {\n selectors: ['.content__intro'],\n },\n\n lead_image_url: {\n selectors: [\n // This is how the meta tag appears in the original source code.\n ['meta[name=\"og:image\"]', 'value'],\n // This is how the meta tag appears in the DOM in Chrome.\n // The selector is included here to make the code work within the browser as well.\n ['meta[property=\"og:image\"]', 'content'],\n // This is the image that is shown on the page.\n // It can be slightly cropped compared to the original in the meta tag.\n '.image__article__top img',\n ],\n },\n\n content: {\n selectors: ['article.content'],\n clean: [\n '.breadcrumbs',\n '.hide-for-print',\n 'aside',\n 'header h2',\n '.image__article__top',\n '.content__author',\n '.copyright',\n '.callout-box',\n ],\n },\n};\n","export const PostlightComExtractor = {\n domain: 'postlight.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.single-hero__abstract'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'section.pl-post-link',\n 'aside',\n 'section.insights_featured_case_studies',\n ],\n },\n};\n","export const WwwInvestmentexecutiveComExtractor = {\n domain: 'www.investmentexecutive.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['div[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['section.article-body'],\n\n clean: ['.hidden'],\n },\n};\n","export const WwwCbcCaExtractor = {\n domain: 'www.cbc.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.authorText', '.bylineDetails'],\n },\n\n date_published: {\n selectors: [['.timeStamp[datetime]', 'datetime']],\n },\n\n dek: {\n selectors: ['.deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.story'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = ['.entry-summary'];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nexport const TIME_NOW_STRING = /^\\s*(just|right)?\\s*now\\s*/i;\nconst timeUnits = [\n 'seconds?',\n 'minutes?',\n 'hours?',\n 'days?',\n 'weeks?',\n 'months?',\n 'years?',\n];\nconst allTimeUnits = timeUnits.join('|');\nexport const TIME_AGO_STRING = new RegExp(\n `(\\\\d+)\\\\s+(${allTimeUnits})\\\\s+ago`,\n 'i'\n);\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING = new RegExp(\n `(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`,\n 'ig'\n);\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE = new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(author.replace(CLEAN_AUTHOR_RE, '$2').trim());\n}\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","import { stripTags } from 'utils/dom';\nimport { excerptContent, normalizeSpaces } from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10))\n return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_AGO_STRING,\n TIME_NOW_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n if (TIME_AGO_STRING.test(dateString)) {\n const fragments = TIME_AGO_STRING.exec(dateString);\n return moment().subtract(fragments[1], fragments[2]);\n }\n\n if (TIME_NOW_STRING.test(dateString)) {\n return moment();\n }\n\n return timezone\n ? moment.tz(dateString, format || parseFormat(dateString), timezone)\n : moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(\n dateString,\n { timezone, format } = {}\n) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n if (SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10) * 1000).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n { $, cleanConditionally = true, title = '', url = '', defaultCleaner = true }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like <title>, etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport { TITLE_SPLITTERS_RE, DOMAIN_ENDINGS_RE } from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] = Reflect.ownKeys(termCounts).reduce(\n (acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n },\n [0, 0]\n );\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce(\n (acc, end) => (acc.length > end.length ? acc : end),\n ''\n );\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle\n .slice(-1)[0]\n .toLowerCase()\n .replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import { stripUnlikelyCandidates, convertToParagraphs } from 'utils/dom';\n\nimport { scoreContent, findTopCandidate } from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(extractBestNode($, opts), {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n },\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = ['og:title'];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n // eslint-disable-next-line no-restricted-syntax\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta(\n $,\n DATE_PUBLISHED_META_TAGS,\n metaCache,\n false\n );\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = ['link[rel=image_src]'];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach($node => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) {\n // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return $imgs.length / 2 - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*')\n .first()\n .prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl = extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] = Reflect.ownKeys(imgScores).reduce(\n (acc, key) => (imgScores[key] > acc[1] ? [key, imgScores[key]] : acc),\n [null, 0]\n );\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(\n null,\n articleUrl,\n href\n ).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp(\n '(next|weiter|continue|>([^|]|$)|»([^|]|$))',\n 'i'\n);\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (\n !negativeMatch &&\n NEGATIVE_SCORE_RE.test(parentData) &&\n EXTRANEOUS_LINK_HINTS_RE.test(parentData)\n ) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { DIGIT_RE, EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE, CAP_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { getAttrs, isWordpress } from 'utils/dom';\nimport { removeAnchor, pageNumFromUrl } from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr(\n 'id'\n ) || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (\n !shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)\n ) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${\n possiblePages[href].linkText\n }|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import URL from 'url';\n\nimport { articleBaseUrl, removeAnchor } from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce(\n (acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n },\n { score: -100 }\n );\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = ['og:url'];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n};\n\nexport default GenericUrlExtractor;\n","export const EXCERPT_META_SELECTORS = ['og:description', 'twitter:description'];\n","import ellipsize from 'ellipsize';\n\nimport { extractFromMeta, stripTags } from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst getWordCount = content => {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n};\n\nconst getWordCountAlt = content => {\n content = content.replace(/<[^>]*>/g, ' ');\n content = content.replace(/\\s+/g, ' ');\n content = content.trim();\n return content.split(' ').length;\n};\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n let count = getWordCount(content);\n if (count === 1) count = getWordCountAlt(content);\n return count;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","import { MediumExtractor, BloggerExtractor } from './custom';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\nimport { apiExtractors } from './add-extractor';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname\n .split('.')\n .slice(-2)\n .join('.');\n\n return (\n apiExtractors[hostname] ||\n apiExtractors[baseDomain] ||\n Extractors[hostname] ||\n Extractors[baseDomain] ||\n detectByHtml($) ||\n GenericExtractor\n );\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo, makeLinksAbsolute } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach(key => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml, allowMultiple) {\n return selectors.find(selector => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return (\n (allowMultiple || (!allowMultiple && $(s).length === 1)) &&\n $(s).attr(attr) &&\n $(s)\n .attr(attr)\n .trim() !== ''\n );\n }\n\n return (\n (allowMultiple || (!allowMultiple && $(selector).length === 1)) &&\n $(selector)\n .text()\n .trim() !== ''\n );\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true, allowMultiple } = extractionOpts;\n\n const overrideAllowMultiple = type === 'lead_image_url' || allowMultiple;\n\n const matchingSelector = findMatchingSelector(\n $,\n selectors,\n extractHtml,\n overrideAllowMultiple\n );\n\n if (!matchingSelector) return null;\n\n function transformAndClean($node) {\n makeLinksAbsolute($node, $, opts.url || '');\n cleanBySelectors($node, $, extractionOpts);\n transformElements($node, $, extractionOpts);\n return $node;\n }\n\n function selectHtml() {\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((_, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n $content = transformAndClean($content);\n if (Cleaners[type]) {\n Cleaners[type]($content, { ...opts, defaultCleaner });\n }\n\n if (allowMultiple) {\n return $content\n .children()\n .toArray()\n .map(el => $.html($(el)));\n }\n\n return $.html($content);\n }\n\n if (extractHtml) {\n return selectHtml(matchingSelector);\n }\n\n let $match;\n let result;\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr, transform] = matchingSelector;\n $match = $(selector);\n $match = transformAndClean($match);\n result = $match.map((_, el) => {\n const item = $(el)\n .attr(attr)\n .trim();\n return transform ? transform(item) : item;\n });\n } else {\n $match = $(matchingSelector);\n $match = transformAndClean($match);\n result = $match.map((_, el) =>\n $(el)\n .text()\n .trim()\n );\n }\n\n result =\n Array.isArray(result.toArray()) && allowMultiple\n ? result.toArray()\n : result[0];\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner && Cleaners[type]) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nexport function selectExtendedTypes(extend, opts) {\n const results = {};\n Reflect.ownKeys(extend).forEach(t => {\n if (!results[t]) {\n results[t] = select({ ...opts, type: t, extractionOpts: extend[t] });\n }\n });\n return results;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title,\n });\n const lead_image_url = extractResult({\n ...opts,\n type: 'lead_image_url',\n content,\n });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } = extractResult({\n ...opts,\n type: 'url_and_domain',\n }) || { url: null, domain: null };\n\n let extendedResults = {};\n if (extractor.extend) {\n extendedResults = selectExtendedTypes(extractor.extend, opts);\n }\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n ...extendedResults,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages({\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n}) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n // eslint-disable-next-line no-await-in-loop\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${\n nextPageResult.content\n }`,\n };\n\n // eslint-disable-next-line prefer-destructuring\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({\n content: `<div>${result.content}</div>`,\n });\n return {\n ...result,\n total_pages: pages,\n rendered_pages: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\nimport TurndownService from 'turndown';\n\nimport Resource from 'resource';\nimport { validateUrl } from 'utils';\nimport addCustomExtractor from 'extractors/add-extractor';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor, { selectExtendedTypes } from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Parser = {\n async parse(url, { html, ...opts } = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n contentType = 'html',\n headers = {},\n extend,\n customExtractor,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return {\n error: true,\n message:\n 'The url parameter passed does not look like a valid URL. Please check your URL and try again.',\n };\n }\n\n const $ = await Resource.create(url, html, parsedUrl, headers);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // Add custom extractor via cli.\n if (customExtractor) {\n addCustomExtractor(customExtractor);\n }\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // if html still has not been set (i.e., url passed to Parser.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta')\n .map((_, node) => $(node).attr('name'))\n .toArray();\n\n let extendedTypes = {};\n if (extend) {\n extendedTypes = selectExtendedTypes(extend, { $, url, html });\n }\n\n let result = RootExtractor.extract(Extractor, {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n contentType,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages({\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n });\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n if (contentType === 'markdown') {\n const turndownService = new TurndownService();\n result.content = turndownService.turndown(result.content);\n } else if (contentType === 'text') {\n result.content = $.text($(result.content));\n }\n\n return { ...result, ...extendedTypes };\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n fetchResource(url) {\n return Resource.create(url);\n },\n\n addExtractor(extractor) {\n return addCustomExtractor(extractor);\n },\n};\n\nexport default Parser;\n"],"names":["NORMALIZE_RE","normalizeSpaces","text","replace","trim","extractFromUrl","url","regexList","matchRe","find","re","test","exec","PAGE_IN_HREF_RE","RegExp","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","pageNumFromUrl","matches","match","pageNum","removeAnchor","split","isGoodSegment","segment","index","firstSegmentHasLetters","goodSegment","length","toLowerCase","articleBaseUrl","parsed","parsedUrl","URL","parse","protocol","host","path","cleanedSegments","reverse","reduce","acc","rawSegment","includes","possibleSegment","fileExt","push","join","SENTENCE_END_RE","hasSentenceEnd","excerptContent","content","words","slice","getEncoding","str","encoding","iconv","encodingExists","REQUEST_HEADERS","cheerio","browser","FETCH_TIMEOUT","BAD_CONTENT_TYPES","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","get","options","resolve","reject","request","err","response","body","validateResponse","parseNon200","statusMessage","statusCode","Error","error","headers","contentType","contentLength","fetchResource","encodeURI","href","timeout","jar","gzip","followAllRedirects","window","followRedirect","message","convertMetaProp","$","from","to","each","_","node","$node","value","attr","removeAttr","normalizeMetaTags","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","stripUnlikelyCandidates","not","classes","id","classAndId","remove","brsToPs","collapsing","element","$element","nextElement","next","tagName","paragraphize","br","sibling","nextSibling","p","appendTo","replaceWith","convertDivs","div","$div","convertible","children","convertNodeTo","convertSpans","span","$span","parents","convertToParagraphs","tag","attrs","getAttrs","attribString","map","key","html","contents","cleanForHeight","$img","height","width","removeSpacers","cleanImages","$article","img","markToKeep","article","tags","hostname","addClass","stripJunkTags","cleanHOnes","$hOnes","removeAllButWhitelist","setAttrs","removeClass","cleanAttributes","parent","removeEmpty","$p","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","READABILITY_ASSET","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","getWeight","score","getScore","scoreCommas","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","setScore","addScore","amount","getOrInitScore","e","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","scoreContent","forEach","parentSelector","childSelector","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","findTopCandidate","removeUnlessContent","weight","hasClass","pCount","inputCount","imgCount","nodeIsList","previousNode","prev","scriptCount","cleanTags","cleanHeaders","title","header","$header","prevAll","rewriteTopLevel","absolutize","rootUrl","baseUrl","absoluteUrl","setAttr","absolutizeSet","$content","urlSet","srcset","candidates","absoluteCandidates","candidate","parts","absoluteUrlSet","makeLinksAbsolute","totalTextLength","linkText","linkLength","extractFromMeta","metaNames","cachedNames","foundNames","filter","name","indexOf","type","nodes","values","toArray","metaValue","stripTags","isGoodNode","maxChildren","withinComment","extractFromSelectors","selectors","textOnly","selector","cleanText","commentParent","nodeClass","class","undefined","nodeIsSufficient","isWordpress","attribs","attributes","val","setAttribute","removeAttribute","IS_LINK","IMAGE_RE","IS_IMAGE","IS_SRCSET","TAGS_TO_REMOVE","convertLazyLoadedImages","extractSrcFromJSON","JSON","src","existingSrc","isComment","cleanComments","root","clean","Resource","create","preparedResponse","validResponse","result","alreadyDecoded","failed","generateDoc","encodeDoc","load","decodedContent","decode","contentTypeSelector","metaContentType","properEncoding","range","start","end","validateUrl","merge","extractor","domains","domain","mergeSupportedDomains","supportedDomains","apiExtractors","addExtractor","BloggerExtractor","transforms","noscript","author","date_published","NYMagExtractor","h1","$children","dek","WikipediaExtractor","defaultCleaner","prepend","TwitterExtractor","tweets","$tweetContainer","s","NYTimesExtractor","lead_image_url","next_page_url","excerpt","TheAtlanticExtractor","NewYorkerExtractor","timezone","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","h2","has","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","youtubeId","BroadwayWorldExtractor","ApartmentTherapyExtractor","data","sources","MediumExtractor","$text","iframe","ytRe","thumb","decodeURIComponent","$caption","empty","figure","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","WwwAolComExtractor","WwwYoutubeComExtractor","videoId","description","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","format","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","imgHtml","NewsNationalgeographicComExtractor","$imgSrc","WwwNationalgeographicComExtractor","$imageParent","$dataAttrContainer","imgPath1","imgPath2","WwwLatimesComExtractor","$figure","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwMsnbcComExtractor","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwTodayComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","WwwFortinetComExtractor","WwwFastcompanyComExtractor","BlisterreviewComExtractor","figcaption","NewsMynaviJpExtractor","ClinicaltrialsGovExtractor","GithubComExtractor","WwwRedditComExtractor","bgImg","css","OtrsComExtractor","WwwOssnewsJpExtractor","BuzzapJpExtractor","WwwAsahiComExtractor","WwwSanwaCoJpExtractor","WwwElecomCoJpExtractor","table","ScanNetsecurityNeJpExtractor","JvndbJvnJpExtractor","GeniusComExtractor","res","json","song","release_date","album","cover_art_url","WwwJnsaOrgExtractor","PhpspotOrgExtractor","WwwInfoqComExtractor","WwwMoongiftJpExtractor","WwwItmediaCoJpExtractor","WwwPublickey1JpExtractor","TakagihiromitsuJpExtractor","BookwalkerJpExtractor","WwwYomiuriCoJpExtractor","JapanCnetComExtractor","DeadlineComExtractor","innerHtml","WwwGizmodoJpExtractor","GetnewsJpExtractor","WwwLifehackerJpExtractor","SectIijAdJpExtractor","WwwOreillyCoJpExtractor","WwwIpaGoJpExtractor","WeeklyAsciiJpExtractor","TechlogIijAdJpExtractor","WiredJpExtractor","dataOriginal","JapanZdnetComExtractor","WwwRbbtodayComExtractor","WwwLemondeFrExtractor","WwwPhoronixComExtractor","PitchforkComExtractor","extend","BiorxivOrgExtractor","EpaperZeitDeExtractor","byline","linkbox","WwwLadbibleComExtractor","TimesofindiaIndiatimesComExtractor","reporter","MaTtiasBeExtractor","after","ul","PastebinComExtractor","ol","li","WwwAbendblattDeExtractor","o","n","i","r","charCodeAt","String","fromCharCode","WwwGrueneDeExtractor","WwwEngadgetComExtractor","ArstechnicaComExtractor","before","WwwNdtvComExtractor","SpektrumExtractor","PostlightComExtractor","WwwInvestmentexecutiveComExtractor","WwwCbcCaExtractor","CustomExtractors","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","TIME_NOW_STRING","timeUnits","allTimeUnits","TIME_AGO_STRING","months","allMonths","timestamp1","timestamp2","timestamp3","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","leadImageUrl","validUrl","isWebUri","cleanDek","dekText","cleanDateString","dateString","createDate","moment","Date","fragments","subtract","tz","parseFormat","cleanDatePublished","toISOString","date","isValid","extractCleanNode","cleanConditionally","cleanTitle","resolveSplitTitle","extractBreadcrumbTitle","splitTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","cleanDomainFromTitle","nakedDomain","startSlug","startSlugRatio","wuzzy","levenshtein","endSlug","endSlugRatio","newTitle","Cleaners","cleanImage","cleanContent","extractBestNode","opts","$topCandidate","GenericContentExtractor","defaultOpts","extract","getContentNode","cleanAndReturnNode","k","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","regex","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","abbrevMonthsStr","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","GenericDekExtractor","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","scoreImageUrl","scoreAttr","scoreByParents","$figParent","$gParent","scoreBySibling","scoreByDimensions","area","round","scoreByPosition","$imgs","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","topUrl","scoreSimilarity","articleUrl","similarity","difflib","SequenceMatcher","ratio","diffPercent","diffModifier","scoreLinkText","linkTextAsNum","scorePageInLink","isWp","DIGIT_RE","EXTRANEOUS_LINK_HINTS","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreExtraneousLinks","makeSig","$link","positiveMatch","negativeMatch","parentData","scorePrevLink","linkData","shouldScore","previousUrls","linkHost","fragment","scoreBaseUrl","baseRegex","scoreNextLinkText","scoreCapLinks","makeBaseRegex","scoreLinks","links","scoredPages","possiblePages","link","possiblePage","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","EXCERPT_META_SELECTORS","maxLength","ellipsize","ellipse","GenericExcerptExtractor","shortContent","getWordCount","getWordCountAlt","GenericWordCountExtractor","count","GenericExtractor","bind","url_and_domain","word_count","direction","stringDirection","getDirection","loaded","Detectors","detectByHtml","getExtractor","baseDomain","Extractors","cleanBySelectors","transformElements","$matches","findMatchingSelector","extractHtml","allowMultiple","select","extractionOpts","overrideAllowMultiple","matchingSelector","transformAndClean","selectHtml","$wrapper","wrap","el","$match","transform","item","selectExtendedTypes","results","t","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","extendedResults","collectAllPages","Extractor","pages","extractorOpts","nextPageResult","total_pages","rendered_pages","Parser","fetchAllPages","customExtractor","location","addCustomExtractor","extendedTypes","turndownService","TurndownService","turndown"],"mappings":"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"} \ No newline at end of file diff --git a/dist/mercury.web.js b/dist/mercury.web.js index 3f4021b24..092ff6f3f 100644 --- a/dist/mercury.web.js +++ b/dist/mercury.web.js @@ -1 +1,2 @@ -var Mercury=function(){"use strict";function rn(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t=e(function(O){!function(e){var c,t=Object.prototype,u=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",n=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag",o=e.regeneratorRuntime;if(o)O.exports=o;else{(o=e.regeneratorRuntime=O.exports).wrap=y;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},s={};s[a]=function(){return this};var l=Object.getPrototypeOf,g=l&&l(l(C([])));g&&g!==t&&u.call(g,a)&&(s=g);var v=w.prototype=b.prototype=Object.create(s);A.prototype=v.constructor=w,w.constructor=A,w[i]=A.displayName="GeneratorFunction",o.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===A||"GeneratorFunction"===(t.displayName||t.name))},o.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,i in e||(e[i]="GeneratorFunction")),e.prototype=Object.create(v),e},o.awrap=function(e){return{__await:e}},x(k.prototype),k.prototype[n]=function(){return this},o.AsyncIterator=k,o.async=function(e,t,r,n){var a=new k(y(e,t,r,n));return o.isGeneratorFunction(t)?a:a.next().then(function(e){return e.done?e.value:a.next()})},x(v),v[i]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},o.keys=function(r){var n=[];for(var e in r)n.push(e);return n.reverse(),function e(){for(;n.length;){var t=n.pop();if(t in r)return e.value=t,e.done=!1,e}return e.done=!0,e}},o.values=C,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=c,this.done=!1,this.delegate=null,this.method="next",this.arg=c,this.tryEntries.forEach(S),!e)for(var t in this)"t"===t.charAt(0)&&u.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=c)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(r){if(this.done)throw r;var n=this;function e(e,t){return i.type="throw",i.arg=r,n.next=e,t&&(n.method="next",n.arg=c),!!t}for(var t=this.tryEntries.length-1;0<=t;--t){var a=this.tryEntries[t],i=a.completion;if("root"===a.tryLoc)return e("end");if(a.tryLoc<=this.prev){var o=u.call(a,"catchLoc"),s=u.call(a,"finallyLoc");if(o&&s){if(this.prev<a.catchLoc)return e(a.catchLoc,!0);if(this.prev<a.finallyLoc)return e(a.finallyLoc)}else if(o){if(this.prev<a.catchLoc)return e(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return e(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;0<=r;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&u.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var a=n;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,m):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),m},finish:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),S(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;S(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:C(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=c),m}}}function y(e,t,r,n){var i,o,s,c,a=t&&t.prototype instanceof b?t:b,u=Object.create(a.prototype),l=new T(n||[]);return u._invoke=(i=e,o=r,s=l,c=f,function(e,t){if(c===h)throw new Error("Generator is already running");if(c===p){if("throw"===e)throw t;return D()}for(s.method=e,s.arg=t;;){var r=s.delegate;if(r){var n=E(r,s);if(n){if(n===m)continue;return n}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(c===f)throw c=p,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);c=h;var a=_(i,o,s);if("normal"===a.type){if(c=s.done?p:d,a.arg===m)continue;return{value:a.arg,done:s.done}}"throw"===a.type&&(c=p,s.method="throw",s.arg=a.arg)}}),u}function _(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}function b(){}function A(){}function w(){}function x(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function k(c){var t;this._invoke=function(r,n){function e(){return new Promise(function(e,t){!function t(e,r,n,a){var i=_(c[e],c,r);if("throw"!==i.type){var o=i.arg,s=o.value;return s&&"object"==typeof s&&u.call(s,"__await")?Promise.resolve(s.__await).then(function(e){t("next",e,n,a)},function(e){t("throw",e,n,a)}):Promise.resolve(s).then(function(e){o.value=e,n(o)},function(e){return t("throw",e,n,a)})}a(i.arg)}(r,n,e,t)})}return t=t?t.then(e,e):e()}}function E(e,t){var r=e.iterator[t.method];if(r===c){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=c,E(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var n=_(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,m;var a=n.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=c),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function C(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,n=function e(){for(;++r<t.length;)if(u.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=c,e.done=!0,e};return n.next=n}}return{next:D}}function D(){return{value:c,done:!0}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())}),r=function(){return this||"object"==typeof self&&self}()||Function("return this")(),n=r.regeneratorRuntime&&0<=Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime"),a=n&&r.regeneratorRuntime;r.regeneratorRuntime=void 0;var i=t;if(n)r.regeneratorRuntime=a;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}var M=i,o={}.toString,s=function(e){return o.call(e).slice(8,-1)},d=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==s(e)?e.split(""):Object(e)},c=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},u=function(e){return d(c(e))},h={f:{}.propertyIsEnumerable},w=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},l=function(e){return"object"==typeof e?null!==e:"function"==typeof e},f=function(e,t){if(!l(e))return e;var r,n;if(t&&"function"==typeof(r=e.toString)&&!l(n=r.call(e)))return n;if("function"==typeof(r=e.valueOf)&&!l(n=r.call(e)))return n;if(!t&&"function"==typeof(r=e.toString)&&!l(n=r.call(e)))return n;throw TypeError("Can't convert object to primitive value")},p={}.hasOwnProperty,m=function(e,t){return p.call(e,t)},g=function(e){try{return!!e()}catch(e){return!0}},v=!g(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),y=e(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),_=y.document,b=l(_)&&l(_.createElement),A=function(e){return b?_.createElement(e):{}},x=!v&&!g(function(){return 7!=Object.defineProperty(A("div"),"a",{get:function(){return 7}}).a}),k=Object.getOwnPropertyDescriptor,E={f:v?k:function(e,t){if(e=u(e),t=f(t,!0),x)try{return k(e,t)}catch(e){}if(m(e,t))return w(!h.f.call(e,t),e[t])}},S=e(function(e){var t=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=t)}),T=(S.version,function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}),C=function(n,a,e){if(T(n),void 0===a)return n;switch(e){case 1:return function(e){return n.call(a,e)};case 2:return function(e,t){return n.call(a,e,t)};case 3:return function(e,t,r){return n.call(a,e,t,r)}}return function(){return n.apply(a,arguments)}},D=function(e){if(!l(e))throw TypeError(e+" is not an object!");return e},O=Object.defineProperty,N={f:v?Object.defineProperty:function(e,t,r){if(D(e),t=f(t,!0),D(r),x)try{return O(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},P=v?function(e,t,r){return N.f(e,t,w(1,r))}:function(e,t,r){return e[t]=r,e},j="prototype",z=function(e,t,r){var n,a,i,o=e&z.F,s=e&z.G,c=e&z.S,u=e&z.P,l=e&z.B,f=e&z.W,d=s?S:S[t]||(S[t]={}),h=d[j],p=s?y:c?y[t]:(y[t]||{})[j];for(n in s&&(r=t),r)(a=!o&&p&&void 0!==p[n])&&m(d,n)||(i=a?p[n]:r[n],d[n]=s&&"function"!=typeof p[n]?r[n]:l&&a?C(i,y):f&&p[n]==i?function(n){var e=function(e,t,r){if(this instanceof n){switch(arguments.length){case 0:return new n;case 1:return new n(e);case 2:return new n(e,t)}return new n(e,t,r)}return n.apply(this,arguments)};return e[j]=n[j],e}(i):u&&"function"==typeof i?C(Function.call,i):i,u&&((d.virtual||(d.virtual={}))[n]=i,e&z.R&&h&&!h[n]&&P(h,n,i)))};z.F=1,z.G=2,z.S=4,z.P=8,z.B=16,z.W=32,z.U=64,z.R=128;var R=z,L=function(e,t){var r=(S.Object||{})[e]||Object[e],n={};n[e]=t(r),R(R.S+R.F*g(function(){r(1)}),"Object",n)},Y=E.f;L("getOwnPropertyDescriptor",function(){return function(e,t){return Y(u(e),t)}});var W,I=S.Object,B=function(e,t){return I.getOwnPropertyDescriptor(e,t)},q=P,H=0,F=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+F).toString(36))},U=e(function(e){var r=G("meta"),t=N.f,n=0,a=Object.isExtensible||function(){return!0},i=!g(function(){return a(Object.preventExtensions({}))}),o=function(e){t(e,r,{value:{i:"O"+ ++n,w:{}}})},s=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!l(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!m(e,r)){if(!a(e))return"F";if(!t)return"E";o(e)}return e[r].i},getWeak:function(e,t){if(!m(e,r)){if(!a(e))return!0;if(!t)return!1;o(e)}return e[r].w},onFreeze:function(e){return i&&s.NEED&&a(e)&&!m(e,r)&&o(e),e}}}),$=(U.KEY,U.NEED,U.fastKey,U.getWeak,U.onFreeze,e(function(e){var t="__core-js_shared__",r=y[t]||(y[t]={});(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:S.version,mode:"pure",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),V=e(function(e){var t=$("wks"),r=y.Symbol,n="function"==typeof r;(e.exports=function(e){return t[e]||(t[e]=n&&r[e]||(n?r:G)("Symbol."+e))}).store=t}),K=N.f,J=V("toStringTag"),Z=function(e,t,r){e&&!m(e=r?e:e.prototype,J)&&K(e,J,{configurable:!0,value:t})},X={f:V},Q=N.f,ee=function(e){var t=S.Symbol||(S.Symbol={});"_"==e.charAt(0)||e in t||Q(t,e,{value:X.f(e)})},te=Math.ceil,re=Math.floor,ne=function(e){return isNaN(e=+e)?0:(0<e?re:te)(e)},ae=Math.min,ie=function(e){return 0<e?ae(ne(e),9007199254740991):0},oe=Math.max,se=Math.min,ce=$("keys"),ue=function(e){return ce[e]||(ce[e]=G(e))},le=(W=!1,function(e,t,r){var n,a,i,o=u(e),s=ie(o.length),c=(a=s,(n=ne(n=r))<0?oe(n+a,0):se(n,a));if(W&&t!=t){for(;c<s;)if((i=o[c++])!=i)return!0}else for(;c<s;c++)if((W||c in o)&&o[c]===t)return W||c||0;return!W&&-1}),fe=ue("IE_PROTO"),de=function(e,t){var r,n=u(e),a=0,i=[];for(r in n)r!=fe&&m(n,r)&&i.push(r);for(;t.length>a;)m(n,r=t[a++])&&(~le(i,r)||i.push(r));return i},he="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),pe=Object.keys||function(e){return de(e,he)},me={f:Object.getOwnPropertySymbols},ge=Array.isArray||function(e){return"Array"==s(e)},ve=v?Object.defineProperties:function(e,t){D(e);for(var r,n=pe(t),a=n.length,i=0;i<a;)N.f(e,r=n[i++],t[r]);return e},ye=y.document,_e=ye&&ye.documentElement,be=ue("IE_PROTO"),Ae=function(){},we="prototype",xe=function(){var e,t=A("iframe"),r=he.length;for(t.style.display="none",_e.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),xe=e.F;r--;)delete xe[we][he[r]];return xe()},ke=Object.create||function(e,t){var r;return null!==e?(Ae[we]=D(e),r=new Ae,Ae[we]=null,r[be]=e):r=xe(),void 0===t?r:ve(r,t)},Ee=he.concat("length","prototype"),Me={f:Object.getOwnPropertyNames||function(e){return de(e,Ee)}},Se=Me.f,Te={}.toString,Ce="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],De={f:function(e){return Ce&&"[object Window]"==Te.call(e)?function(e){try{return Se(e)}catch(e){return Ce.slice()}}(e):Se(u(e))}},Oe=U.KEY,Ne=E.f,Pe=N.f,je=De.f,ze=y.Symbol,Re=y.JSON,Le=Re&&Re.stringify,Ye="prototype",We=V("_hidden"),Ie=V("toPrimitive"),Be={}.propertyIsEnumerable,qe=$("symbol-registry"),He=$("symbols"),Fe=$("op-symbols"),Ge=Object[Ye],Ue="function"==typeof ze,$e=y.QObject,Ve=!$e||!$e[Ye]||!$e[Ye].findChild,Ke=v&&g(function(){return 7!=ke(Pe({},"a",{get:function(){return Pe(this,"a",{value:7}).a}})).a})?function(e,t,r){var n=Ne(Ge,t);n&&delete Ge[t],Pe(e,t,r),n&&e!==Ge&&Pe(Ge,t,n)}:Pe,Je=function(e){var t=He[e]=ke(ze[Ye]);return t._k=e,t},Ze=Ue&&"symbol"==typeof ze.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof ze},Xe=function(e,t,r){return e===Ge&&Xe(Fe,t,r),D(e),t=f(t,!0),D(r),m(He,t)?(r.enumerable?(m(e,We)&&e[We][t]&&(e[We][t]=!1),r=ke(r,{enumerable:w(0,!1)})):(m(e,We)||Pe(e,We,w(1,{})),e[We][t]=!0),Ke(e,t,r)):Pe(e,t,r)},Qe=function(e,t){D(e);for(var r,n=function(e){var t=pe(e),r=me.f;if(r)for(var n,a=r(e),i=h.f,o=0;a.length>o;)i.call(e,n=a[o++])&&t.push(n);return t}(t=u(t)),a=0,i=n.length;a<i;)Xe(e,r=n[a++],t[r]);return e},et=function(e){var t=Be.call(this,e=f(e,!0));return!(this===Ge&&m(He,e)&&!m(Fe,e))&&(!(t||!m(this,e)||!m(He,e)||m(this,We)&&this[We][e])||t)},tt=function(e,t){if(e=u(e),t=f(t,!0),e!==Ge||!m(He,t)||m(Fe,t)){var r=Ne(e,t);return!r||!m(He,t)||m(e,We)&&e[We][t]||(r.enumerable=!0),r}},rt=function(e){for(var t,r=je(u(e)),n=[],a=0;r.length>a;)m(He,t=r[a++])||t==We||t==Oe||n.push(t);return n},nt=function(e){for(var t,r=e===Ge,n=je(r?Fe:u(e)),a=[],i=0;n.length>i;)!m(He,t=n[i++])||r&&!m(Ge,t)||a.push(He[t]);return a};Ue||(q((ze=function(){if(this instanceof ze)throw TypeError("Symbol is not a constructor!");var t=G(0<arguments.length?arguments[0]:void 0),r=function(e){this===Ge&&r.call(Fe,e),m(this,We)&&m(this[We],t)&&(this[We][t]=!1),Ke(this,t,w(1,e))};return v&&Ve&&Ke(Ge,t,{configurable:!0,set:r}),Je(t)})[Ye],"toString",function(){return this._k}),E.f=tt,N.f=Xe,Me.f=De.f=rt,h.f=et,me.f=nt,X.f=function(e){return Je(V(e))}),R(R.G+R.W+R.F*!Ue,{Symbol:ze});for(var at="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;at.length>it;)V(at[it++]);for(var ot=pe(V.store),st=0;ot.length>st;)ee(ot[st++]);R(R.S+R.F*!Ue,"Symbol",{for:function(e){return m(qe,e+="")?qe[e]:qe[e]=ze(e)},keyFor:function(e){if(!Ze(e))throw TypeError(e+" is not a symbol!");for(var t in qe)if(qe[t]===e)return t},useSetter:function(){Ve=!0},useSimple:function(){Ve=!1}}),R(R.S+R.F*!Ue,"Object",{create:function(e,t){return void 0===t?ke(e):Qe(ke(e),t)},defineProperty:Xe,defineProperties:Qe,getOwnPropertyDescriptor:tt,getOwnPropertyNames:rt,getOwnPropertySymbols:nt}),Re&&R(R.S+R.F*(!Ue||g(function(){var e=ze();return"[null]"!=Le([e])||"{}"!=Le({a:e})||"{}"!=Le(Object(e))})),"JSON",{stringify:function(e){for(var t,r,n=[e],a=1;arguments.length>a;)n.push(arguments[a++]);if(r=t=n[1],(l(t)||void 0!==e)&&!Ze(e))return ge(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!Ze(t))return t}),n[1]=t,Le.apply(Re,n)}}),ze[Ye][Ie]||P(ze[Ye],Ie,ze[Ye].valueOf),Z(ze,"Symbol"),Z(Math,"Math",!0),Z(y.JSON,"JSON",!0);var ct=S.Object.getOwnPropertySymbols,ut=function(e){return Object(c(e))};L("keys",function(){return function(e){return pe(ut(e))}});var lt=S.Object.keys;R(R.S+R.F*!v,"Object",{defineProperty:N.f});var ft=S.Object,dt=function(e,t,r){return ft.defineProperty(e,t,r)};var ht=function(e,t,r){return t in e?dt(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e};var pt=function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=lt(r);"function"==typeof ct&&(n=n.concat(ct(r).filter(function(e){return B(r,e).enumerable}))),n.forEach(function(e){ht(t,e,r[e])})}return t};var mt=function(e,t){if(null==e)return{};var r,n,a={},i=lt(e);for(n=0;n<i.length;n++)r=i[n],0<=t.indexOf(r)||(a[r]=e[r]);return a};var gt=function(e,t){if(null==e)return{};var r,n,a=mt(e,t);if(ct){var i=ct(e);for(n=0;n<i.length;n++)r=i[n],0<=t.indexOf(r)||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a},vt={},yt={};P(yt,V("iterator"),function(){return this});var _t,bt=ue("IE_PROTO"),At=Object.prototype,wt=Object.getPrototypeOf||function(e){return e=ut(e),m(e,bt)?e[bt]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?At:null},xt=V("iterator"),kt=!([].keys&&"next"in[].keys()),Et="values",Mt=function(){return this},St=function(e,t,r,n,a,i,o){var s,c,u;c=t,u=n,(s=r).prototype=ke(yt,{next:w(1,u)}),Z(s,c+" Iterator");var l,f,d,h=function(e){if(!kt&&e in v)return v[e];switch(e){case"keys":case Et:return function(){return new r(this,e)}}return function(){return new r(this,e)}},p=t+" Iterator",m=a==Et,g=!1,v=e.prototype,y=v[xt]||v["@@iterator"]||a&&v[a],_=y||h(a),b=a?m?h("entries"):_:void 0,A="Array"==t&&v.entries||y;if(A&&(d=wt(A.call(new e)))!==Object.prototype&&d.next&&Z(d,p,!0),m&&y&&y.name!==Et&&(g=!0,_=function(){return y.call(this)}),o&&(kt||g||!v[xt])&&P(v,xt,_),vt[t]=_,vt[p]=Mt,a)if(l={values:m?_:h(Et),keys:i?_:h("keys"),entries:b},o)for(f in l)f in v||q(v,f,l[f]);else R(R.P+R.F*(kt||g),t,l);return l},Tt=(_t=!0,function(e,t){var r,n,a=String(c(e)),i=ne(t),o=a.length;return i<0||o<=i?_t?"":void 0:(r=a.charCodeAt(i))<55296||56319<r||i+1===o||(n=a.charCodeAt(i+1))<56320||57343<n?_t?a.charAt(i):r:_t?a.slice(i,i+2):n-56320+(r-55296<<10)+65536});St(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=Tt(t,r),this._i+=e.length,{value:e,done:!1})});var Ct=function(e,t){return{value:t,done:!!e}};St(Array,"Array",function(e,t){this._t=u(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,Ct(1)):Ct(0,"keys"==t?r:"values"==t?e[r]:[r,e[r]])},"values");vt.Arguments=vt.Array;for(var Dt=V("toStringTag"),Ot="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),Nt=0;Nt<Ot.length;Nt++){var Pt=Ot[Nt],jt=y[Pt],zt=jt&&jt.prototype;zt&&!zt[Dt]&&P(zt,Dt,Pt),vt[Pt]=vt.Array}var Rt,Lt,Yt,Wt=V("toStringTag"),It="Arguments"==s(function(){return arguments}()),Bt=function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Wt))?r:It?s(t):"Object"==(n=s(t))&&"function"==typeof t.callee?"Arguments":n},qt=function(e,t,r,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(r+": incorrect invocation!");return e},Ht=function(t,e,r,n){try{return n?e(D(r)[0],r[1]):e(r)}catch(e){var a=t.return;throw void 0!==a&&D(a.call(t)),e}},Ft=V("iterator"),Gt=Array.prototype,Ut=function(e){return void 0!==e&&(vt.Array===e||Gt[Ft]===e)},$t=V("iterator"),Vt=S.getIteratorMethod=function(e){if(null!=e)return e[$t]||e["@@iterator"]||vt[Bt(e)]},Kt=e(function(e){var d={},h={},t=e.exports=function(e,t,r,n,a){var i,o,s,c,u=a?function(){return e}:Vt(e),l=C(r,n,t?2:1),f=0;if("function"!=typeof u)throw TypeError(e+" is not iterable!");if(Ut(u)){for(i=ie(e.length);f<i;f++)if((c=t?l(D(o=e[f])[0],o[1]):l(e[f]))===d||c===h)return c}else for(s=u.call(e);!(o=s.next()).done;)if((c=Ht(s,l,o.value,t))===d||c===h)return c};t.BREAK=d,t.RETURN=h}),Jt=V("species"),Zt=function(e,t){var r,n=D(e).constructor;return void 0===n||null==(r=D(n)[Jt])?t:T(r)},Xt=y.process,Qt=y.setImmediate,er=y.clearImmediate,tr=y.MessageChannel,rr=y.Dispatch,nr=0,ar={},ir="onreadystatechange",or=function(){var e=+this;if(ar.hasOwnProperty(e)){var t=ar[e];delete ar[e],t()}},sr=function(e){or.call(e.data)};Qt&&er||(Qt=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return ar[++nr]=function(){!function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}e.apply(r,t)}("function"==typeof e?e:Function(e),t)},Rt(nr),nr},er=function(e){delete ar[e]},"process"==s(Xt)?Rt=function(e){Xt.nextTick(C(or,e,1))}:rr&&rr.now?Rt=function(e){rr.now(C(or,e,1))}:tr?(Yt=(Lt=new tr).port2,Lt.port1.onmessage=sr,Rt=C(Yt.postMessage,Yt,1)):y.addEventListener&&"function"==typeof postMessage&&!y.importScripts?(Rt=function(e){y.postMessage(e+"","*")},y.addEventListener("message",sr,!1)):Rt=ir in A("script")?function(e){_e.appendChild(A("script"))[ir]=function(){_e.removeChild(this),or.call(e)}}:function(e){setTimeout(C(or,e,1),0)});var cr={set:Qt,clear:er},ur=cr.set,lr=y.MutationObserver||y.WebKitMutationObserver,fr=y.process,dr=y.Promise,hr="process"==s(fr);function pr(e){var r,n;this.promise=new e(function(e,t){if(void 0!==r||void 0!==n)throw TypeError("Bad Promise constructor");r=e,n=t}),this.resolve=T(r),this.reject=T(n)}var mr={f:function(e){return new pr(e)}},gr=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},vr=y.navigator,yr=vr&&vr.userAgent||"",_r=function(e,t){if(D(e),l(t)&&t.constructor===e)return t;var r=mr.f(e);return(0,r.resolve)(t),r.promise},br=function(e,t,r){for(var n in t)r&&e[n]?e[n]=t[n]:P(e,n,t[n]);return e},Ar=V("species"),wr=function(e){var t="function"==typeof S[e]?S[e]:y[e];v&&t&&!t[Ar]&&N.f(t,Ar,{configurable:!0,get:function(){return this}})},xr=V("iterator"),kr=!1;try{[7][xr]().return=function(){kr=!0}}catch(e){}var Er,Mr,Sr,Tr,Cr=function(e,t){if(!t&&!kr)return!1;var r=!1;try{var n=[7],a=n[xr]();a.next=function(){return{done:r=!0}},n[xr]=function(){return a},e(n)}catch(e){}return r},Dr=cr.set,Or=function(){var r,n,a,e=function(){var e,t;for(hr&&(e=fr.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(e){throw r?a():n=void 0,e}}n=void 0,e&&e.enter()};if(hr)a=function(){fr.nextTick(e)};else if(!lr||y.navigator&&y.navigator.standalone)if(dr&&dr.resolve){var t=dr.resolve(void 0);a=function(){t.then(e)}}else a=function(){ur.call(y,e)};else{var i=!0,o=document.createTextNode("");new lr(e).observe(o,{characterData:!0}),a=function(){o.data=i=!i}}return function(e){var t={fn:e,next:void 0};n&&(n.next=t),r||(r=t,a()),n=t}}(),Nr="Promise",Pr=y.TypeError,jr=y.process,zr=jr&&jr.versions,Rr=zr&&zr.v8||"",Lr=y[Nr],Yr="process"==Bt(jr),Wr=function(){},Ir=Mr=mr.f,Br=!!function(){try{var e=Lr.resolve(1),t=(e.constructor={})[V("species")]=function(e){e(Wr,Wr)};return(Yr||"function"==typeof PromiseRejectionEvent)&&e.then(Wr)instanceof t&&0!==Rr.indexOf("6.6")&&-1===yr.indexOf("Chrome/66")}catch(e){}}(),qr=function(e){var t;return!(!l(e)||"function"!=typeof(t=e.then))&&t},Hr=function(l,r){if(!l._n){l._n=!0;var n=l._c;Or(function(){for(var c=l._v,u=1==l._s,e=0,t=function(e){var t,r,n,a=u?e.ok:e.fail,i=e.resolve,o=e.reject,s=e.domain;try{a?(u||(2==l._h&&Ur(l),l._h=1),!0===a?t=c:(s&&s.enter(),t=a(c),s&&(s.exit(),n=!0)),t===e.promise?o(Pr("Promise-chain cycle")):(r=qr(t))?r.call(t,i,o):i(t)):o(c)}catch(e){s&&!n&&s.exit(),o(e)}};n.length>e;)t(n[e++]);l._c=[],l._n=!1,r&&!l._h&&Fr(l)})}},Fr=function(i){Dr.call(y,function(){var e,t,r,n=i._v,a=Gr(i);if(a&&(e=gr(function(){Yr?jr.emit("unhandledRejection",n,i):(t=y.onunhandledrejection)?t({promise:i,reason:n}):(r=y.console)&&r.error&&r.error("Unhandled promise rejection",n)}),i._h=Yr||Gr(i)?2:1),i._a=void 0,a&&e.e)throw e.v})},Gr=function(e){return 1!==e._h&&0===(e._a||e._c).length},Ur=function(t){Dr.call(y,function(){var e;Yr?jr.emit("rejectionHandled",t):(e=y.onrejectionhandled)&&e({promise:t,reason:t._v})})},$r=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Hr(t,!0))},Vr=function(e){var r,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Pr("Promise can't be resolved itself");(r=qr(e))?Or(function(){var t={_w:n,_d:!1};try{r.call(e,C(Vr,t,1),C($r,t,1))}catch(e){$r.call(t,e)}}):(n._v=e,n._s=1,Hr(n,!1))}catch(e){$r.call({_w:n,_d:!1},e)}}};Br||(Lr=function(e){qt(this,Lr,Nr,"_h"),T(e),Er.call(this);try{e(C(Vr,this,1),C($r,this,1))}catch(e){$r.call(this,e)}},(Er=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=br(Lr.prototype,{then:function(e,t){var r=Ir(Zt(this,Lr));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=Yr?jr.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&Hr(this,!1),r.promise},catch:function(e){return this.then(void 0,e)}}),Sr=function(){var e=new Er;this.promise=e,this.resolve=C(Vr,e,1),this.reject=C($r,e,1)},mr.f=Ir=function(e){return e===Lr||e===Tr?new Sr(e):Mr(e)}),R(R.G+R.W+R.F*!Br,{Promise:Lr}),Z(Lr,Nr),wr(Nr),Tr=S[Nr],R(R.S+R.F*!Br,Nr,{reject:function(e){var t=Ir(this);return(0,t.reject)(e),t.promise}}),R(R.S+!0*R.F,Nr,{resolve:function(e){return _r(this===Tr?Lr:this,e)}}),R(R.S+R.F*!(Br&&Cr(function(e){Lr.all(e).catch(Wr)})),Nr,{all:function(e){var o=this,t=Ir(o),s=t.resolve,c=t.reject,r=gr(function(){var n=[],a=0,i=1;Kt(e,!1,function(e){var t=a++,r=!1;n.push(void 0),i++,o.resolve(e).then(function(e){r||(r=!0,n[t]=e,--i||s(n))},c)}),--i||s(n)});return r.e&&c(r.v),t.promise},race:function(e){var t=this,r=Ir(t),n=r.reject,a=gr(function(){Kt(e,!1,function(e){t.resolve(e).then(r.resolve,n)})});return a.e&&n(a.v),r.promise}}),R(R.P+R.R,"Promise",{finally:function(t){var r=Zt(this,S.Promise||y.Promise),e="function"==typeof t;return this.then(e?function(e){return _r(r,t()).then(function(){return e})}:t,e?function(e){return _r(r,t()).then(function(){throw e})}:t)}}),R(R.S,"Promise",{try:function(e){var t=mr.f(this),r=gr(e);return(r.e?t.reject:t.resolve)(r.v),t.promise}});var Kr=S.Promise;function Jr(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Kr.resolve(c).then(n,a)}var Zr=function(s){return function(){var e=this,o=arguments;return new Kr(function(t,r){var n=s.apply(e,o);function a(e){Jr(n,t,r,a,i,"next",e)}function i(e){Jr(n,t,r,a,i,"throw",e)}a(void 0)})}},Xr="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Qr=e(function(O,N){!function(e){var t=N&&!N.nodeType&&N,r=O&&!O.nodeType&&O,n="object"==typeof Xr&&Xr;n.global!==n&&n.window!==n&&n.self!==n||(e=n);var a,i,v=2147483647,y=36,_=1,b=26,o=38,s=700,A=72,w=128,x="-",c=/^xn--/,u=/[^\x20-\x7E]/,l=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=y-_,k=Math.floor,E=String.fromCharCode;function M(e){throw RangeError(f[e])}function h(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function p(e,t){var r=e.split("@"),n="";return 1<r.length&&(n=r[0]+"@",e=r[1]),n+h((e=e.replace(l,".")).split("."),t).join(".")}function S(e){for(var t,r,n=[],a=0,i=e.length;a<i;)55296<=(t=e.charCodeAt(a++))&&t<=56319&&a<i?56320==(64512&(r=e.charCodeAt(a++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),a--):n.push(t);return n}function T(e){return h(e,function(e){var t="";return 65535<e&&(t+=E((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=E(e)}).join("")}function C(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function D(e,t,r){var n=0;for(e=r?k(e/s):e>>1,e+=k(e/t);d*b>>1<e;n+=y)e=k(e/d);return k(n+(d+1)*e/(e+o))}function m(e){var t,r,n,a,i,o,s,c,u,l,f,d=[],h=e.length,p=0,m=w,g=A;for((r=e.lastIndexOf(x))<0&&(r=0),n=0;n<r;++n)128<=e.charCodeAt(n)&&M("not-basic"),d.push(e.charCodeAt(n));for(a=0<r?r+1:0;a<h;){for(i=p,o=1,s=y;h<=a&&M("invalid-input"),f=e.charCodeAt(a++),(y<=(c=f-48<10?f-22:f-65<26?f-65:f-97<26?f-97:y)||c>k((v-p)/o))&&M("overflow"),p+=c*o,!(c<(u=s<=g?_:g+b<=s?b:s-g));s+=y)o>k(v/(l=y-u))&&M("overflow"),o*=l;g=D(p-i,t=d.length+1,0==i),k(p/t)>v-m&&M("overflow"),m+=k(p/t),p%=t,d.splice(p++,0,m)}return T(d)}function g(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g=[];for(d=(e=S(e)).length,t=w,i=A,o=r=0;o<d;++o)(f=e[o])<128&&g.push(E(f));for(n=a=g.length,a&&g.push(x);n<d;){for(s=v,o=0;o<d;++o)t<=(f=e[o])&&f<s&&(s=f);for(s-t>k((v-r)/(h=n+1))&&M("overflow"),r+=(s-t)*h,t=s,o=0;o<d;++o)if((f=e[o])<t&&++r>v&&M("overflow"),f==t){for(c=r,u=y;!(c<(l=u<=i?_:i+b<=u?b:u-i));u+=y)m=c-l,p=y-l,g.push(E(C(l+m%p,0))),c=k(m/p);g.push(E(C(c,0))),i=D(r,h,n==a),r=0,++n}++r,++t}return g.join("")}if(a={version:"1.3.2",ucs2:{decode:S,encode:T},decode:m,encode:g,toASCII:function(e){return p(e,function(e){return u.test(e)?"xn--"+g(e):e})},toUnicode:function(e){return p(e,function(e){return c.test(e)?m(e.slice(4).toLowerCase()):e})}},t&&r)if(O.exports==t)r.exports=a;else for(i in a)a.hasOwnProperty(i)&&(t[i]=a[i]);else e.punycode=a}(this)}),en={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}};var tn=function(e,t,r,n){t=t||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(t);var o=1e3;n&&"number"==typeof n.maxKeys&&(o=n.maxKeys);var s,c,u=e.length;0<o&&o<u&&(u=o);for(var l=0;l<u;++l){var f,d,h,p,m=e[l].replace(i,"%20"),g=m.indexOf(r);d=0<=g?(f=m.substr(0,g),m.substr(g+1)):(f=m,""),h=decodeURIComponent(f),p=decodeURIComponent(d),s=a,c=h,Object.prototype.hasOwnProperty.call(s,c)?Array.isArray(a[h])?a[h].push(p):a[h]=[a[h],p]:a[h]=p}return a},nn=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},an=function(r,n,a,e){return n=n||"&",a=a||"=",null===r&&(r=void 0),"object"==typeof r?Object.keys(r).map(function(e){var t=encodeURIComponent(nn(e))+a;return Array.isArray(r[e])?r[e].map(function(e){return t+encodeURIComponent(nn(e))}).join(n):t+encodeURIComponent(nn(r[e]))}).join(n):e?encodeURIComponent(nn(e))+a+encodeURIComponent(nn(r)):""},on=e(function(e,t){t.decode=t.parse=tn,t.encode=t.stringify=an}),sn=(on.decode,on.parse,on.encode,on.stringify,En),cn=function(e,t){return En(e,!1,!0).resolve(t)},un=function(e,t){return e?En(e,!1,!0).resolveObject(t):t},ln=function(e){en.isString(e)&&(e=En(e));return e instanceof dn?e.format():dn.prototype.format.call(e)},fn=dn;function dn(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var hn=/^([a-z0-9.+-]+:)/i,pn=/:[0-9]*$/,mn=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,gn=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),vn=["'"].concat(gn),yn=["%","/","?",";","#"].concat(vn),_n=["/","?","#"],bn=/^[+a-z0-9A-Z_-]{0,63}$/,An=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,wn={javascript:!0,"javascript:":!0},xn={javascript:!0,"javascript:":!0},kn={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function En(e,t,r){if(e&&en.isObject(e)&&e instanceof dn)return e;var n=new dn;return n.parse(e,t,r),n}dn.prototype.parse=function(e,t,r){if(!en.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),a=-1!==n&&n<e.indexOf("#")?"?":"#",i=e.split(a);i[0]=i[0].replace(/\\/g,"/");var o=e=i.join(a);if(o=o.trim(),!r&&1===e.split("#").length){var s=mn.exec(o);if(s)return this.path=o,this.href=o,this.pathname=s[1],s[2]?(this.search=s[2],this.query=t?on.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var c=hn.exec(o);if(c){var u=(c=c[0]).toLowerCase();this.protocol=u,o=o.substr(c.length)}if(r||c||o.match(/^\/\/[^@\/]+@[^@\/]+/)){var l="//"===o.substr(0,2);!l||c&&xn[c]||(o=o.substr(2),this.slashes=!0)}if(!xn[c]&&(l||c&&!kn[c])){for(var f,d,h=-1,p=0;p<_n.length;p++){-1!==(m=o.indexOf(_n[p]))&&(-1===h||m<h)&&(h=m)}-1!==(d=-1===h?o.lastIndexOf("@"):o.lastIndexOf("@",h))&&(f=o.slice(0,d),o=o.slice(d+1),this.auth=decodeURIComponent(f)),h=-1;for(p=0;p<yn.length;p++){var m;-1!==(m=o.indexOf(yn[p]))&&(-1===h||m<h)&&(h=m)}-1===h&&(h=o.length),this.host=o.slice(0,h),o=o.slice(h),this.parseHost(),this.hostname=this.hostname||"";var g="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!g)for(var v=this.hostname.split(/\./),y=(p=0,v.length);p<y;p++){var _=v[p];if(_&&!_.match(bn)){for(var b="",A=0,w=_.length;A<w;A++)127<_.charCodeAt(A)?b+="x":b+=_[A];if(!b.match(bn)){var x=v.slice(0,p),k=v.slice(p+1),E=_.match(An);E&&(x.push(E[1]),k.unshift(E[2])),k.length&&(o="/"+k.join(".")+o),this.hostname=x.join(".");break}}}255<this.hostname.length?this.hostname="":this.hostname=this.hostname.toLowerCase(),g||(this.hostname=Qr.toASCII(this.hostname));var M=this.port?":"+this.port:"",S=this.hostname||"";this.host=S+M,this.href+=this.host,g&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!wn[u])for(p=0,y=vn.length;p<y;p++){var T=vn[p];if(-1!==o.indexOf(T)){var C=encodeURIComponent(T);C===T&&(C=escape(T)),o=o.split(T).join(C)}}var D=o.indexOf("#");-1!==D&&(this.hash=o.substr(D),o=o.slice(0,D));var O=o.indexOf("?");if(-1!==O?(this.search=o.substr(O),this.query=o.substr(O+1),t&&(this.query=on.parse(this.query)),o=o.slice(0,O)):t&&(this.search="",this.query={}),o&&(this.pathname=o),kn[u]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){M=this.pathname||"";var N=this.search||"";this.path=M+N}return this.href=this.format(),this},dn.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&en.isObject(this.query)&&Object.keys(this.query).length&&(i=on.stringify(this.query));var o=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||kn[t])&&!1!==a?(a="//"+(a||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):a||(a=""),n&&"#"!==n.charAt(0)&&(n="#"+n),o&&"?"!==o.charAt(0)&&(o="?"+o),t+a+(r=r.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(o=o.replace("#","%23"))+n},dn.prototype.resolve=function(e){return this.resolveObject(En(e,!1,!0)).format()},dn.prototype.resolveObject=function(e){if(en.isString(e)){var t=new dn;t.parse(e,!1,!0),e=t}for(var r=new dn,n=Object.keys(this),a=0;a<n.length;a++){var i=n[a];r[i]=this[i]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var o=Object.keys(e),s=0;s<o.length;s++){var c=o[s];"protocol"!==c&&(r[c]=e[c])}return kn[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!kn[e.protocol]){for(var u=Object.keys(e),l=0;l<u.length;l++){var f=u[l];r[f]=e[f]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||xn[e.protocol])r.pathname=e.pathname;else{for(var d=(e.pathname||"").split("/");d.length&&!(e.host=d.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),r.pathname=d.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var h=r.pathname||"",p=r.search||"";r.path=h+p}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var m=r.pathname&&"/"===r.pathname.charAt(0),g=e.host||e.pathname&&"/"===e.pathname.charAt(0),v=g||m||r.host&&e.pathname,y=v,_=r.pathname&&r.pathname.split("/")||[],b=(d=e.pathname&&e.pathname.split("/")||[],r.protocol&&!kn[r.protocol]);if(b&&(r.hostname="",r.port=null,r.host&&(""===_[0]?_[0]=r.host:_.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),v=v&&(""===d[0]||""===_[0])),g)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,_=d;else if(d.length)_||(_=[]),_.pop(),_=_.concat(d),r.search=e.search,r.query=e.query;else if(!en.isNullOrUndefined(e.search)){if(b)r.hostname=r.host=_.shift(),(E=!!(r.host&&0<r.host.indexOf("@"))&&r.host.split("@"))&&(r.auth=E.shift(),r.host=r.hostname=E.shift());return r.search=e.search,r.query=e.query,en.isNull(r.pathname)&&en.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!_.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var A=_.slice(-1)[0],w=(r.host||e.host||1<_.length)&&("."===A||".."===A)||""===A,x=0,k=_.length;0<=k;k--)"."===(A=_[k])?_.splice(k,1):".."===A?(_.splice(k,1),x++):x&&(_.splice(k,1),x--);if(!v&&!y)for(;x--;x)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),w&&"/"!==_.join("/").substr(-1)&&_.push("");var E,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);b&&(r.hostname=r.host=M?"":_.length?_.shift():"",(E=!!(r.host&&0<r.host.indexOf("@"))&&r.host.split("@"))&&(r.auth=E.shift(),r.host=r.hostname=E.shift()));return(v=v||r.host&&_.length)&&!M&&_.unshift(""),_.length?r.pathname=_.join("/"):(r.pathname=null,r.path=null),en.isNull(r.pathname)&&en.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},dn.prototype.parseHost=function(){var e=this.host,t=pn.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var Mn,Sn={parse:sn,resolve:cn,resolveObject:un,format:ln,Url:fn},Tn=e(function(e){var t,r;t="undefined"!=typeof window?window:this,r=function(x,e){var t=[],n=Object.getPrototypeOf,s=t.slice,m=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},c=t.push,a=t.indexOf,r={},i=r.toString,g=r.hasOwnProperty,o=g.toString,u=o.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},_=function(e){return null!=e&&e===e.window},k=x.document,l={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,r){var n,a,i=(r=r||k).createElement("script");if(i.text=e,t)for(n in l)(a=t[n]||t.getAttribute&&t.getAttribute(n))&&i.setAttribute(n,a);r.head.appendChild(i).parentNode.removeChild(i)}function A(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?r[i.call(e)]||"object":typeof e}var E=function(e,t){return new E.fn.init(e,t)};function f(e){var t=!!e&&"length"in e&&e.length,r=A(e);return!y(e)&&!_(e)&&("array"===r||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:"3.6.0",constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(r){return this.pushStack(E.map(this,function(e,t){return r.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,r=+e+(e<0?t:0);return this.pushStack(0<=r&&r<t?[this[r]]:[])},end:function(){return this.prevObject||this.constructor()},push:c,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,r,n,a,i,o=arguments[0]||{},s=1,c=arguments.length,u=!1;for("boolean"==typeof o&&(u=o,o=arguments[s]||{},s++),"object"==typeof o||y(o)||(o={}),s===c&&(o=this,s--);s<c;s++)if(null!=(e=arguments[s]))for(t in e)n=e[t],"__proto__"!==t&&o!==n&&(u&&n&&(E.isPlainObject(n)||(a=Array.isArray(n)))?(r=o[t],i=a&&!Array.isArray(r)?[]:a||E.isPlainObject(r)?r:{},a=!1,o[t]=E.extend(u,i,n)):void 0!==n&&(o[t]=n));return o},E.extend({expando:"jQuery"+("3.6.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,r;return!(!e||"[object Object]"!==i.call(e)||(t=n(e))&&("function"!=typeof(r=g.call(t,"constructor")&&t.constructor)||o.call(r)!==u))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,r){b(e,{nonce:t&&t.nonce},r)},each:function(e,t){var r,n=0;if(f(e))for(r=e.length;n<r&&!1!==t.call(e[n],n,e[n]);n++);else for(n in e)if(!1===t.call(e[n],n,e[n]))break;return e},makeArray:function(e,t){var r=t||[];return null!=e&&(f(Object(e))?E.merge(r,"string"==typeof e?[e]:e):c.call(r,e)),r},inArray:function(e,t,r){return null==t?-1:a.call(t,e,r)},merge:function(e,t){for(var r=+t.length,n=0,a=e.length;n<r;n++)e[a++]=t[n];return e.length=a,e},grep:function(e,t,r){for(var n=[],a=0,i=e.length,o=!r;a<i;a++)!t(e[a],a)!==o&&n.push(e[a]);return n},map:function(e,t,r){var n,a,i=0,o=[];if(f(e))for(n=e.length;i<n;i++)null!=(a=t(e[i],i,r))&&o.push(a);else for(i in e)null!=(a=t(e[i],i,r))&&o.push(a);return m(o)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){r["[object "+t+"]"]=t.toLowerCase()});var d=function(r){var e,h,b,i,a,p,f,m,A,c,u,w,x,o,k,g,s,l,v,E="sizzle"+1*new Date,d=r.document,M=0,n=0,y=ce(),_=ce(),S=ce(),T=ce(),C=function(e,t){return e===t&&(u=!0),0},D={}.hasOwnProperty,t=[],O=t.pop,N=t.push,P=t.push,j=t.slice,z=function(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",Y="(?:\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+L+"*("+Y+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+Y+"))|)"+L+"*\\]",I=":("+Y+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(L+"+","g"),q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),H=new RegExp("^"+L+"*,"+L+"*"),F=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),G=new RegExp(L+"|>"),U=new RegExp(I),$=new RegExp("^"+Y+"$"),V={ID:new RegExp("^#("+Y+")"),CLASS:new RegExp("^\\.("+Y+")"),TAG:new RegExp("^("+Y+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+I),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},K=/HTML$/i,J=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\([^\\r\\n\\f])","g"),re=function(e,t){var r="0x"+e.slice(1)-65536;return t||(r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320))},ne=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){w()},oe=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{P.apply(t=j.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){P={apply:t.length?function(e,t){N.apply(e,j.call(t))}:function(e,t){for(var r=e.length,n=0;e[r++]=t[n++];);e.length=r-1}}}function se(e,t,r,n){var a,i,o,s,c,u,l,f=t&&t.ownerDocument,d=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==d&&9!==d&&11!==d)return r;if(!n&&(w(t),t=t||x,k)){if(11!==d&&(c=Q.exec(e)))if(a=c[1]){if(9===d){if(!(o=t.getElementById(a)))return r;if(o.id===a)return r.push(o),r}else if(f&&(o=f.getElementById(a))&&v(t,o)&&o.id===a)return r.push(o),r}else{if(c[2])return P.apply(r,t.getElementsByTagName(e)),r;if((a=c[3])&&h.getElementsByClassName&&t.getElementsByClassName)return P.apply(r,t.getElementsByClassName(a)),r}if(h.qsa&&!T[e+" "]&&(!g||!g.test(e))&&(1!==d||"object"!==t.nodeName.toLowerCase())){if(l=e,f=t,1===d&&(G.test(e)||F.test(e))){for((f=ee.test(e)&&ve(t.parentNode)||t)===t&&h.scope||((s=t.getAttribute("id"))?s=s.replace(ne,ae):t.setAttribute("id",s=E)),i=(u=p(e)).length;i--;)u[i]=(s?"#"+s:":scope")+" "+_e(u[i]);l=u.join(",")}try{return P.apply(r,f.querySelectorAll(l)),r}catch(t){T(e,!0)}finally{s===E&&t.removeAttribute("id")}}}return m(e.replace(q,"$1"),t,r,n)}function ce(){var n=[];return function e(t,r){return n.push(t+" ")>b.cacheLength&&delete e[n.shift()],e[t+" "]=r}}function ue(e){return e[E]=!0,e}function le(e){var t=x.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var r=e.split("|"),n=r.length;n--;)b.attrHandle[r[n]]=t}function de(e,t){var r=t&&e,n=r&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(n)return n;if(r)for(;r=r.nextSibling;)if(r===t)return-1;return e?1:-1}function he(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function pe(r){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===r}}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&oe(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ge(o){return ue(function(i){return i=+i,ue(function(e,t){for(var r,n=o([],e.length,i),a=n.length;a--;)e[r=n[a]]&&(e[r]=!(t[r]=e[r]))})})}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in h=se.support={},a=se.isXML=function(e){var t=e&&e.namespaceURI,r=e&&(e.ownerDocument||e).documentElement;return!K.test(t||r&&r.nodeName||"HTML")},w=se.setDocument=function(e){var t,r,n=e?e.ownerDocument||e:d;return n!=x&&9===n.nodeType&&n.documentElement&&(o=(x=n).documentElement,k=!a(x),d!=x&&(r=x.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",ie,!1):r.attachEvent&&r.attachEvent("onunload",ie)),h.scope=le(function(e){return o.appendChild(e).appendChild(x.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),h.attributes=le(function(e){return e.className="i",!e.getAttribute("className")}),h.getElementsByTagName=le(function(e){return e.appendChild(x.createComment("")),!e.getElementsByTagName("*").length}),h.getElementsByClassName=X.test(x.getElementsByClassName),h.getById=le(function(e){return o.appendChild(e).id=E,!x.getElementsByName||!x.getElementsByName(E).length}),h.getById?(b.filter.ID=function(e){var t=e.replace(te,re);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&k){var r=t.getElementById(e);return r?[r]:[]}}):(b.filter.ID=function(e){var r=e.replace(te,re);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===r}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&k){var r,n,a,i=t.getElementById(e);if(i){if((r=i.getAttributeNode("id"))&&r.value===e)return[i];for(a=t.getElementsByName(e),n=0;i=a[n++];)if((r=i.getAttributeNode("id"))&&r.value===e)return[i]}return[]}}),b.find.TAG=h.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):h.qsa?t.querySelectorAll(e):void 0}:function(e,t){var r,n=[],a=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;r=i[a++];)1===r.nodeType&&n.push(r);return n},b.find.CLASS=h.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&k)return t.getElementsByClassName(e)},s=[],g=[],(h.qsa=X.test(x.querySelectorAll))&&(le(function(e){var t;o.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+L+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+L+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||g.push("~="),(t=x.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+L+"*name"+L+"*="+L+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")}),le(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=x.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+L+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),o.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(h.matchesSelector=X.test(l=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&le(function(e){h.disconnectedMatch=l.call(e,"*"),l.call(e,"[s!='']:x"),s.push("!=",I)}),g=g.length&&new RegExp(g.join("|")),s=s.length&&new RegExp(s.join("|")),t=X.test(o.compareDocumentPosition),v=t||X.test(o.contains)?function(e,t){var r=9===e.nodeType?e.documentElement:e,n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(r.contains?r.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},C=t?function(e,t){if(e===t)return u=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!h.sortDetached&&t.compareDocumentPosition(e)===r?e==x||e.ownerDocument==d&&v(d,e)?-1:t==x||t.ownerDocument==d&&v(d,t)?1:c?z(c,e)-z(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return u=!0,0;var r,n=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e==x?-1:t==x?1:a?-1:i?1:c?z(c,e)-z(c,t):0;if(a===i)return de(e,t);for(r=e;r=r.parentNode;)o.unshift(r);for(r=t;r=r.parentNode;)s.unshift(r);for(;o[n]===s[n];)n++;return n?de(o[n],s[n]):o[n]==d?-1:s[n]==d?1:0}),x},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(w(e),h.matchesSelector&&k&&!T[t+" "]&&(!s||!s.test(t))&&(!g||!g.test(t)))try{var r=l.call(e,t);if(r||h.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){T(t,!0)}return 0<se(t,x,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=x&&w(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=x&&w(e);var r=b.attrHandle[t.toLowerCase()],n=r&&D.call(b.attrHandle,t.toLowerCase())?r(e,t,!k):void 0;return void 0!==n?n:h.attributes||!k?e.getAttribute(t):(n=e.getAttributeNode(t))&&n.specified?n.value:null},se.escape=function(e){return(e+"").replace(ne,ae)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],n=0,a=0;if(u=!h.detectDuplicates,c=!h.sortStable&&e.slice(0),e.sort(C),u){for(;t=e[a++];)t===e[a]&&(n=r.push(a));for(;n--;)e.splice(r[n],1)}return c=null,e},i=se.getText=function(e){var t,r="",n=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)r+=i(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[n++];)r+=i(t);return r},(b=se.selectors={cacheLength:50,createPseudo:ue,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,re),e[3]=(e[3]||e[4]||e[5]||"").replace(te,re),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,r=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":r&&U.test(r)&&(t=p(r,!0))&&(t=r.indexOf(")",r.length-t)-r.length)&&(e[0]=e[0].slice(0,t),e[2]=r.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,re).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=y[e+" "];return t||(t=new RegExp("(^|"+L+")"+e+"("+L+"|$)"))&&y(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(r,n,a){return function(e){var t=se.attr(e,r);return null==t?"!="===n:!n||(t+="","="===n?t===a:"!="===n?t!==a:"^="===n?a&&0===t.indexOf(a):"*="===n?a&&-1<t.indexOf(a):"$="===n?a&&t.slice(-a.length)===a:"~="===n?-1<(" "+t.replace(B," ")+" ").indexOf(a):"|="===n&&(t===a||t.slice(0,a.length+1)===a+"-"))}},CHILD:function(p,e,t,m,g){var v="nth"!==p.slice(0,3),y="last"!==p.slice(-4),_="of-type"===e;return 1===m&&0===g?function(e){return!!e.parentNode}:function(e,t,r){var n,a,i,o,s,c,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,f=_&&e.nodeName.toLowerCase(),d=!r&&!_,h=!1;if(l){if(v){for(;u;){for(o=e;o=o[u];)if(_?o.nodeName.toLowerCase()===f:1===o.nodeType)return!1;c=u="only"===p&&!c&&"nextSibling"}return!0}if(c=[y?l.firstChild:l.lastChild],y&&d){for(h=(s=(n=(a=(i=(o=l)[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]||[])[0]===M&&n[1])&&n[2],o=s&&l.childNodes[s];o=++s&&o&&o[u]||(h=s=0)||c.pop();)if(1===o.nodeType&&++h&&o===e){a[p]=[M,s,h];break}}else if(d&&(h=s=(n=(a=(i=(o=e)[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]||[])[0]===M&&n[1]),!1===h)for(;(o=++s&&o&&o[u]||(h=s=0)||c.pop())&&((_?o.nodeName.toLowerCase()!==f:1!==o.nodeType)||!++h||(d&&((a=(i=o[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]=[M,h]),o!==e)););return(h-=g)===m||h%m==0&&0<=h/m}}},PSEUDO:function(e,i){var t,o=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return o[E]?o(i):1<o.length?(t=[e,e,"",i],b.setFilters.hasOwnProperty(e.toLowerCase())?ue(function(e,t){for(var r,n=o(e,i),a=n.length;a--;)e[r=z(e,n[a])]=!(t[r]=n[a])}):function(e){return o(e,0,t)}):o}},pseudos:{not:ue(function(e){var n=[],a=[],s=f(e.replace(q,"$1"));return s[E]?ue(function(e,t,r,n){for(var a,i=s(e,null,n,[]),o=e.length;o--;)(a=i[o])&&(e[o]=!(t[o]=a))}):function(e,t,r){return n[0]=e,s(n,null,r,a),n[0]=null,!a.pop()}}),has:ue(function(t){return function(e){return 0<se(t,e).length}}),contains:ue(function(t){return t=t.replace(te,re),function(e){return-1<(e.textContent||i(e)).indexOf(t)}}),lang:ue(function(r){return $.test(r||"")||se.error("unsupported lang: "+r),r=r.replace(te,re).toLowerCase(),function(e){var t;do{if(t=k?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===r||0===t.indexOf(r+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=r.location&&r.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===o},focus:function(e){return e===x.activeElement&&(!x.hasFocus||x.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge(function(){return[0]}),last:ge(function(e,t){return[t-1]}),eq:ge(function(e,t,r){return[r<0?r+t:r]}),even:ge(function(e,t){for(var r=0;r<t;r+=2)e.push(r);return e}),odd:ge(function(e,t){for(var r=1;r<t;r+=2)e.push(r);return e}),lt:ge(function(e,t,r){for(var n=r<0?r+t:t<r?t:r;0<=--n;)e.push(n);return e}),gt:ge(function(e,t,r){for(var n=r<0?r+t:r;++n<t;)e.push(n);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=he(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=pe(e);function ye(){}function _e(e){for(var t=0,r=e.length,n="";t<r;t++)n+=e[t].value;return n}function be(s,e,t){var c=e.dir,u=e.next,l=u||c,f=t&&"parentNode"===l,d=n++;return e.first?function(e,t,r){for(;e=e[c];)if(1===e.nodeType||f)return s(e,t,r);return!1}:function(e,t,r){var n,a,i,o=[M,d];if(r){for(;e=e[c];)if((1===e.nodeType||f)&&s(e,t,r))return!0}else for(;e=e[c];)if(1===e.nodeType||f)if(a=(i=e[E]||(e[E]={}))[e.uniqueID]||(i[e.uniqueID]={}),u&&u===e.nodeName.toLowerCase())e=e[c]||e;else{if((n=a[l])&&n[0]===M&&n[1]===d)return o[2]=n[2];if((a[l]=o)[2]=s(e,t,r))return!0}return!1}}function Ae(a){return 1<a.length?function(e,t,r){for(var n=a.length;n--;)if(!a[n](e,t,r))return!1;return!0}:a[0]}function we(e,t,r,n,a){for(var i,o=[],s=0,c=e.length,u=null!=t;s<c;s++)(i=e[s])&&(r&&!r(i,n,a)||(o.push(i),u&&t.push(s)));return o}function xe(h,p,m,g,v,e){return g&&!g[E]&&(g=xe(g)),v&&!v[E]&&(v=xe(v,e)),ue(function(e,t,r,n){var a,i,o,s=[],c=[],u=t.length,l=e||function(e,t,r){for(var n=0,a=t.length;n<a;n++)se(e,t[n],r);return r}(p||"*",r.nodeType?[r]:r,[]),f=!h||!e&&p?l:we(l,s,h,r,n),d=m?v||(e?h:u||g)?[]:t:f;if(m&&m(f,d,r,n),g)for(a=we(d,c),g(a,[],r,n),i=a.length;i--;)(o=a[i])&&(d[c[i]]=!(f[c[i]]=o));if(e){if(v||h){if(v){for(a=[],i=d.length;i--;)(o=d[i])&&a.push(f[i]=o);v(null,d=[],a,n)}for(i=d.length;i--;)(o=d[i])&&-1<(a=v?z(e,o):s[i])&&(e[a]=!(t[a]=o))}}else d=we(d===t?d.splice(u,d.length):d),v?v(null,t,d,n):P.apply(t,d)})}function ke(e){for(var a,t,r,n=e.length,i=b.relative[e[0].type],o=i||b.relative[" "],s=i?1:0,c=be(function(e){return e===a},o,!0),u=be(function(e){return-1<z(a,e)},o,!0),l=[function(e,t,r){var n=!i&&(r||t!==A)||((a=t).nodeType?c(e,t,r):u(e,t,r));return a=null,n}];s<n;s++)if(t=b.relative[e[s].type])l=[be(Ae(l),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(r=++s;r<n&&!b.relative[e[r].type];r++);return xe(1<s&&Ae(l),1<s&&_e(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(q,"$1"),t,s<r&&ke(e.slice(s,r)),r<n&&ke(e=e.slice(r)),r<n&&_e(e))}l.push(t)}return Ae(l)}return ye.prototype=b.filters=b.pseudos,b.setFilters=new ye,p=se.tokenize=function(e,t){var r,n,a,i,o,s,c,u=_[e+" "];if(u)return t?0:u.slice(0);for(o=e,s=[],c=b.preFilter;o;){for(i in r&&!(n=H.exec(o))||(n&&(o=o.slice(n[0].length)||o),s.push(a=[])),r=!1,(n=F.exec(o))&&(r=n.shift(),a.push({value:r,type:n[0].replace(q," ")}),o=o.slice(r.length)),b.filter)!(n=V[i].exec(o))||c[i]&&!(n=c[i](n))||(r=n.shift(),a.push({value:r,type:i,matches:n}),o=o.slice(r.length));if(!r)break}return t?o.length:o?se.error(e):_(e,s).slice(0)},f=se.compile=function(e,t){var r,g,v,y,_,n,a=[],i=[],o=S[e+" "];if(!o){for(t||(t=p(e)),r=t.length;r--;)(o=ke(t[r]))[E]?a.push(o):i.push(o);(o=S(e,(g=i,y=0<(v=a).length,_=0<g.length,n=function(e,t,r,n,a){var i,o,s,c=0,u="0",l=e&&[],f=[],d=A,h=e||_&&b.find.TAG("*",a),p=M+=null==d?1:Math.random()||.1,m=h.length;for(a&&(A=t==x||t||a);u!==m&&null!=(i=h[u]);u++){if(_&&i){for(o=0,t||i.ownerDocument==x||(w(i),r=!k);s=g[o++];)if(s(i,t||x,r)){n.push(i);break}a&&(M=p)}y&&((i=!s&&i)&&c--,e&&l.push(i))}if(c+=u,y&&u!==c){for(o=0;s=v[o++];)s(l,f,t,r);if(e){if(0<c)for(;u--;)l[u]||f[u]||(f[u]=O.call(n));f=we(f)}P.apply(n,f),a&&!e&&0<f.length&&1<c+v.length&&se.uniqueSort(n)}return a&&(M=p,A=d),l},y?ue(n):n))).selector=e}return o},m=se.select=function(e,t,r,n){var a,i,o,s,c,u="function"==typeof e&&e,l=!n&&p(e=u.selector||e);if(r=r||[],1===l.length){if(2<(i=l[0]=l[0].slice(0)).length&&"ID"===(o=i[0]).type&&9===t.nodeType&&k&&b.relative[i[1].type]){if(!(t=(b.find.ID(o.matches[0].replace(te,re),t)||[])[0]))return r;u&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(a=V.needsContext.test(e)?0:i.length;a--&&(o=i[a],!b.relative[s=o.type]);)if((c=b.find[s])&&(n=c(o.matches[0].replace(te,re),ee.test(i[0].type)&&ve(t.parentNode)||t))){if(i.splice(a,1),!(e=n.length&&_e(i)))return P.apply(r,n),r;break}}return(u||f(e,l))(n,t,!k,r,!t||ee.test(e)&&ve(t.parentNode)||t),r},h.sortStable=E.split("").sort(C).join("")===E,h.detectDuplicates=!!u,w(),h.sortDetached=le(function(e){return 1&e.compareDocumentPosition(x.createElement("fieldset"))}),le(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,r){if(!r)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),h.attributes&&le(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,r){if(!r&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),le(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,r){var n;if(!r)return!0===e[t]?t.toLowerCase():(n=e.getAttributeNode(t))&&n.specified?n.value:null}),se}(x);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,r){for(var n=[],a=void 0!==r;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&E(e).is(r))break;n.push(e)}return n},p=function(e,t){for(var r=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&r.push(e);return r},w=E.expr.match.needsContext;function M(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var S=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,r,n){return y(r)?E.grep(e,function(e,t){return!!r.call(e,t,e)!==n}):r.nodeType?E.grep(e,function(e){return e===r!==n}):"string"!=typeof r?E.grep(e,function(e){return-1<a.call(r,e)!==n}):E.filter(r,e,n)}E.filter=function(e,t,r){var n=t[0];return r&&(e=":not("+e+")"),1===t.length&&1===n.nodeType?E.find.matchesSelector(n,e)?[n]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,r,n=this.length,a=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<n;t++)if(E.contains(a[t],this))return!0}));for(r=this.pushStack([]),t=0;t<n;t++)E.find(e,a[t],r);return 1<n?E.uniqueSort(r):r},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&w.test(e)?E(e):e||[],!1).length}});var C,D=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,r){var n,a;if(!e)return this;if(r=r||C,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==r.ready?r.ready(e):e(E):E.makeArray(e,this);if(!(n="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:D.exec(e))||!n[1]&&t)return!t||t.jquery?(t||r).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:k,!0)),S.test(n[1])&&E.isPlainObject(t))for(n in t)y(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(a=k.getElementById(n[2]))&&(this[0]=a,this.length=1),this}).prototype=E.fn,C=E(k);var O=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}E.fn.extend({has:function(e){var t=E(e,this),r=t.length;return this.filter(function(){for(var e=0;e<r;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var r,n=0,a=this.length,i=[],o="string"!=typeof e&&E(e);if(!w.test(e))for(;n<a;n++)for(r=this[n];r&&r!==t;r=r.parentNode)if(r.nodeType<11&&(o?-1<o.index(r):1===r.nodeType&&E.find.matchesSelector(r,e))){i.push(r);break}return this.pushStack(1<i.length?E.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?a.call(E(e),this[0]):a.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,r){return h(e,"parentNode",r)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,r){return h(e,"nextSibling",r)},prevUntil:function(e,t,r){return h(e,"previousSibling",r)},siblings:function(e){return p((e.parentNode||{}).firstChild,e)},children:function(e){return p(e.firstChild)},contents:function(e){return null!=e.contentDocument&&n(e.contentDocument)?e.contentDocument:(M(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(n,a){E.fn[n]=function(e,t){var r=E.map(this,a,e);return"Until"!==n.slice(-5)&&(t=e),t&&"string"==typeof t&&(r=E.filter(t,r)),1<this.length&&(N[n]||E.uniqueSort(r),O.test(n)&&r.reverse()),this.pushStack(r)}});var j=/[^\x20\t\r\n\f]+/g;function z(e){return e}function R(e){throw e}function L(e,t,r,n){var a;try{e&&y(a=e.promise)?a.call(e).done(t).fail(r):e&&y(a=e.then)?a.call(e,t,r):t.apply(void 0,[e].slice(n))}catch(e){r.apply(void 0,[e])}}E.Callbacks=function(n){var e,r;n="string"==typeof n?(e=n,r={},E.each(e.match(j)||[],function(e,t){r[t]=!0}),r):E.extend({},n);var a,t,i,o,s=[],c=[],u=-1,l=function(){for(o=o||n.once,i=a=!0;c.length;u=-1)for(t=c.shift();++u<s.length;)!1===s[u].apply(t[0],t[1])&&n.stopOnFalse&&(u=s.length,t=!1);n.memory||(t=!1),a=!1,o&&(s=t?[]:"")},f={add:function(){return s&&(t&&!a&&(u=s.length-1,c.push(t)),function r(e){E.each(e,function(e,t){y(t)?n.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==A(t)&&r(t)})}(arguments),t&&!a&&l()),this},remove:function(){return E.each(arguments,function(e,t){for(var r;-1<(r=E.inArray(t,s,r));)s.splice(r,1),r<=u&&u--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return o=c=[],s=t="",this},disabled:function(){return!s},lock:function(){return o=c=[],t||a||(s=t=""),this},locked:function(){return!!o},fireWith:function(e,t){return o||(t=[e,(t=t||[]).slice?t.slice():t],c.push(t),a||l()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},E.extend({Deferred:function(e){var i=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],a="pending",o={state:function(){return a},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var a=arguments;return E.Deferred(function(n){E.each(i,function(e,t){var r=y(a[t[4]])&&a[t[4]];s[t[1]](function(){var e=r&&r.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[t[0]+"With"](this,r?[e]:arguments)})}),a=null}).promise()},then:function(t,r,n){var c=0;function u(a,i,o,s){return function(){var r=this,n=arguments,e=function(){var e,t;if(!(a<c)){if((e=o.apply(r,n))===i.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,y(t)?s?t.call(e,u(c,i,z,s),u(c,i,R,s)):(c++,t.call(e,u(c,i,z,s),u(c,i,R,s),u(c,i,z,i.notifyWith))):(o!==z&&(r=void 0,n=[e]),(s||i.resolveWith)(r,n))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),c<=a+1&&(o!==R&&(r=void 0,n=[e]),i.rejectWith(r,n))}};a?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),x.setTimeout(t))}}return E.Deferred(function(e){i[0][3].add(u(0,e,y(n)?n:z,e.notifyWith)),i[1][3].add(u(0,e,y(t)?t:z)),i[2][3].add(u(0,e,y(r)?r:R))}).promise()},promise:function(e){return null!=e?E.extend(e,o):o}},s={};return E.each(i,function(e,t){var r=t[2],n=t[5];o[t[1]]=r.add,n&&r.add(function(){a=n},i[3-e][2].disable,i[3-e][3].disable,i[0][2].lock,i[0][3].lock),r.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=r.fireWith}),o.promise(s),e&&e.call(s,s),s},when:function(e){var r=arguments.length,t=r,n=Array(t),a=s.call(arguments),i=E.Deferred(),o=function(t){return function(e){n[t]=this,a[t]=1<arguments.length?s.call(arguments):e,--r||i.resolveWith(n,a)}};if(r<=1&&(L(e,i.done(o(t)).resolve,i.reject,!r),"pending"===i.state()||y(a[t]&&a[t].then)))return i.then();for(;t--;)L(a[t],o(t),i.reject);return i.promise()}});var Y=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){x.console&&x.console.warn&&e&&Y.test(e.name)&&x.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){x.setTimeout(function(){throw e})};var W=E.Deferred();function I(){k.removeEventListener("DOMContentLoaded",I),x.removeEventListener("load",I),E.ready()}E.fn.ready=function(e){return W.then(e).catch(function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||W.resolveWith(k,[E])}}),E.ready.then=W.then,"complete"===k.readyState||"loading"!==k.readyState&&!k.documentElement.doScroll?x.setTimeout(E.ready):(k.addEventListener("DOMContentLoaded",I),x.addEventListener("load",I));var B=function(e,t,r,n,a,i,o){var s=0,c=e.length,u=null==r;if("object"===A(r))for(s in a=!0,r)B(e,t,s,r[s],!0,i,o);else if(void 0!==n&&(a=!0,y(n)||(o=!0),u&&(t=o?(t.call(e,n),null):(u=t,function(e,t,r){return u.call(E(e),r)})),t))for(;s<c;s++)t(e[s],r,o?n:n.call(e[s],s,t(e[s],r)));return a?e:u?t.call(e):c?t(e[0],r):i},q=/^-ms-/,H=/-([a-z])/g;function F(e,t){return t.toUpperCase()}function G(e){return e.replace(q,"ms-").replace(H,F)}var U=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function $(){this.expando=E.expando+$.uid++}$.uid=1,$.prototype={cache:function(e){var t=e[this.expando];return t||(t={},U(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,r){var n,a=this.cache(e);if("string"==typeof t)a[G(t)]=r;else for(n in t)a[G(n)]=t[n];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,r){return void 0===t||t&&"string"==typeof t&&void 0===r?this.get(e,t):(this.set(e,t,r),void 0!==r?r:t)},remove:function(e,t){var r,n=e[this.expando];if(void 0!==n){if(void 0!==t){r=(t=Array.isArray(t)?t.map(G):(t=G(t))in n?[t]:t.match(j)||[]).length;for(;r--;)delete n[t[r]]}(void 0===t||E.isEmptyObject(n))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var V=new $,K=new $,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function X(e,t,r){var n,a;if(void 0===r&&1===e.nodeType)if(n="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(r=e.getAttribute(n))){try{r="true"===(a=r)||"false"!==a&&("null"===a?null:a===+a+""?+a:J.test(a)?JSON.parse(a):a)}catch(e){}K.set(e,t,r)}else r=void 0;return r}E.extend({hasData:function(e){return K.hasData(e)||V.hasData(e)},data:function(e,t,r){return K.access(e,t,r)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,r){return V.access(e,t,r)},_removeData:function(e,t){V.remove(e,t)}}),E.fn.extend({data:function(r,e){var t,n,a,i=this[0],o=i&&i.attributes;if(void 0!==r)return"object"==typeof r?this.each(function(){K.set(this,r)}):B(this,function(e){var t;if(i&&void 0===e)return void 0!==(t=K.get(i,r))?t:void 0!==(t=X(i,r))?t:void 0;this.each(function(){K.set(this,r,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(a=K.get(i),1===i.nodeType&&!V.get(i,"hasDataAttrs"))){for(t=o.length;t--;)o[t]&&0===(n=o[t].name).indexOf("data-")&&(n=G(n.slice(5)),X(i,n,a[n]));V.set(i,"hasDataAttrs",!0)}return a},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),E.extend({queue:function(e,t,r){var n;if(e)return t=(t||"fx")+"queue",n=V.get(e,t),r&&(!n||Array.isArray(r)?n=V.access(e,t,E.makeArray(r)):n.push(r)),n||[]},dequeue:function(e,t){t=t||"fx";var r=E.queue(e,t),n=r.length,a=r.shift(),i=E._queueHooks(e,t);"inprogress"===a&&(a=r.shift(),n--),a&&("fx"===t&&r.unshift("inprogress"),delete i.stop,a.call(e,function(){E.dequeue(e,t)},i)),!n&&i&&i.empty.fire()},_queueHooks:function(e,t){var r=t+"queueHooks";return V.get(e,r)||V.access(e,r,{empty:E.Callbacks("once memory").add(function(){V.remove(e,[t+"queue",r])})})}}),E.fn.extend({queue:function(t,r){var e=2;return"string"!=typeof t&&(r=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===r?this:this.each(function(){var e=E.queue(this,t,r);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var r,n=1,a=E.Deferred(),i=this,o=this.length,s=function(){--n||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)(r=V.get(i[o],e+"queueHooks"))&&r.empty&&(n++,r.empty.add(s));return s(),a.promise(t)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ee=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),te=["Top","Right","Bottom","Left"],re=k.documentElement,ne=function(e){return E.contains(e.ownerDocument,e)},ae={composed:!0};re.getRootNode&&(ne=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var ie=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ne(e)&&"none"===E.css(e,"display")};function oe(e,t,r,n){var a,i,o=20,s=n?function(){return n.cur()}:function(){return E.css(e,t,"")},c=s(),u=r&&r[3]||(E.cssNumber[t]?"":"px"),l=e.nodeType&&(E.cssNumber[t]||"px"!==u&&+c)&&ee.exec(E.css(e,t));if(l&&l[3]!==u){for(c/=2,u=u||l[3],l=+c||1;o--;)E.style(e,t,l+u),(1-i)*(1-(i=s()/c||.5))<=0&&(o=0),l/=i;l*=2,E.style(e,t,l+u),r=r||[]}return r&&(l=+l||+c||0,a=r[1]?l+(r[1]+1)*r[2]:+r[2],n&&(n.unit=u,n.start=l,n.end=a)),a}var se={};function ce(e,t){for(var r,n,a,i,o,s,c,u=[],l=0,f=e.length;l<f;l++)(n=e[l]).style&&(r=n.style.display,t?("none"===r&&(u[l]=V.get(n,"display")||null,u[l]||(n.style.display="")),""===n.style.display&&ie(n)&&(u[l]=(c=o=i=void 0,o=(a=n).ownerDocument,s=a.nodeName,(c=se[s])||(i=o.body.appendChild(o.createElement(s)),c=E.css(i,"display"),i.parentNode.removeChild(i),"none"===c&&(c="block"),se[s]=c)))):"none"!==r&&(u[l]="none",V.set(n,"display",r)));for(l=0;l<f;l++)null!=u[l]&&(e[l].style.display=u[l]);return e}E.fn.extend({show:function(){return ce(this,!0)},hide:function(){return ce(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ie(this)?E(this).show():E(this).hide()})}});var ue,le,fe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ue=k.createDocumentFragment().appendChild(k.createElement("div")),(le=k.createElement("input")).setAttribute("type","radio"),le.setAttribute("checked","checked"),le.setAttribute("name","t"),ue.appendChild(le),v.checkClone=ue.cloneNode(!0).cloneNode(!0).lastChild.checked,ue.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ue.cloneNode(!0).lastChild.defaultValue,ue.innerHTML="<option></option>",v.option=!!ue.lastChild;var pe={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function me(e,t){var r;return r=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&M(e,t)?E.merge([e],r):r}function ge(e,t){for(var r=0,n=e.length;r<n;r++)V.set(e[r],"globalEval",!t||V.get(t[r],"globalEval"))}pe.tbody=pe.tfoot=pe.colgroup=pe.caption=pe.thead,pe.th=pe.td,v.option||(pe.optgroup=pe.option=[1,"<select multiple='multiple'>","</select>"]);var ve=/<|&#?\w+;/;function ye(e,t,r,n,a){for(var i,o,s,c,u,l,f=t.createDocumentFragment(),d=[],h=0,p=e.length;h<p;h++)if((i=e[h])||0===i)if("object"===A(i))E.merge(d,i.nodeType?[i]:i);else if(ve.test(i)){for(o=o||f.appendChild(t.createElement("div")),s=(de.exec(i)||["",""])[1].toLowerCase(),c=pe[s]||pe._default,o.innerHTML=c[1]+E.htmlPrefilter(i)+c[2],l=c[0];l--;)o=o.lastChild;E.merge(d,o.childNodes),(o=f.firstChild).textContent=""}else d.push(t.createTextNode(i));for(f.textContent="",h=0;i=d[h++];)if(n&&-1<E.inArray(i,n))a&&a.push(i);else if(u=ne(i),o=me(f.appendChild(i),"script"),u&&ge(o),r)for(l=0;i=o[l++];)he.test(i.type||"")&&r.push(i);return f}var _e=/^([^.]*)(?:\.(.+)|)/;function be(){return!0}function Ae(){return!1}function we(e,t){return e===function(){try{return k.activeElement}catch(e){}}()==("focus"===t)}function xe(e,t,r,n,a,i){var o,s;if("object"==typeof t){for(s in"string"!=typeof r&&(n=n||r,r=void 0),t)xe(e,s,r,n,t[s],i);return e}if(null==n&&null==a?(a=r,n=r=void 0):null==a&&("string"==typeof r?(a=n,n=void 0):(a=n,n=r,r=void 0)),!1===a)a=Ae;else if(!a)return e;return 1===i&&(o=a,(a=function(e){return E().off(e),o.apply(this,arguments)}).guid=o.guid||(o.guid=E.guid++)),e.each(function(){E.event.add(this,t,a,n,r)})}function ke(e,a,i){i?(V.set(e,a,!1),E.event.add(e,a,{namespace:!1,handler:function(e){var t,r,n=V.get(this,a);if(1&e.isTrigger&&this[a]){if(n.length)(E.event.special[a]||{}).delegateType&&e.stopPropagation();else if(n=s.call(arguments),V.set(this,a,n),t=i(this,a),this[a](),n!==(r=V.get(this,a))||t?V.set(this,a,!1):r={},n!==r)return e.stopImmediatePropagation(),e.preventDefault(),r&&r.value}else n.length&&(V.set(this,a,{value:E.event.trigger(E.extend(n[0],E.Event.prototype),n.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===V.get(e,a)&&E.event.add(e,a,be)}E.event={global:{},add:function(t,e,r,n,a){var i,o,s,c,u,l,f,d,h,p,m,g=V.get(t);if(U(t))for(r.handler&&(r=(i=r).handler,a=i.selector),a&&E.find.matchesSelector(re,a),r.guid||(r.guid=E.guid++),(c=g.events)||(c=g.events=Object.create(null)),(o=g.handle)||(o=g.handle=function(e){return void 0!==E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(j)||[""]).length;u--;)h=m=(s=_e.exec(e[u])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=E.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=E.event.special[h]||{},l=E.extend({type:h,origType:m,data:n,handler:r,guid:r.guid,selector:a,needsContext:a&&E.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=c[h])||((d=c[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,n,p,o)||t.addEventListener&&t.addEventListener(h,o)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=r.guid)),a?d.splice(d.delegateCount++,0,l):d.push(l),E.event.global[h]=!0)},remove:function(e,t,r,n,a){var i,o,s,c,u,l,f,d,h,p,m,g=V.hasData(e)&&V.get(e);if(g&&(c=g.events)){for(u=(t=(t||"").match(j)||[""]).length;u--;)if(h=m=(s=_e.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=E.event.special[h]||{},d=c[h=(n?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)l=d[i],!a&&m!==l.origType||r&&r.guid!==l.guid||s&&!s.test(l.namespace)||n&&n!==l.selector&&("**"!==n||!l.selector)||(d.splice(i,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||E.removeEvent(e,h,g.handle),delete c[h])}else for(h in c)E.event.remove(e,h+t[u],r,n,!0);E.isEmptyObject(c)&&V.remove(e,"handle events")}},dispatch:function(e){var t,r,n,a,i,o,s=new Array(arguments.length),c=E.event.fix(e),u=(V.get(this,"events")||Object.create(null))[c.type]||[],l=E.event.special[c.type]||{};for(s[0]=c,t=1;t<arguments.length;t++)s[t]=arguments[t];if(c.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,c)){for(o=E.event.handlers.call(this,c,u),t=0;(a=o[t++])&&!c.isPropagationStopped();)for(c.currentTarget=a.elem,r=0;(i=a.handlers[r++])&&!c.isImmediatePropagationStopped();)c.rnamespace&&!1!==i.namespace&&!c.rnamespace.test(i.namespace)||(c.handleObj=i,c.data=i.data,void 0!==(n=((E.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,s))&&!1===(c.result=n)&&(c.preventDefault(),c.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,c),c.result}},handlers:function(e,t){var r,n,a,i,o,s=[],c=t.delegateCount,u=e.target;if(c&&u.nodeType&&!("click"===e.type&&1<=e.button))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(i=[],o={},r=0;r<c;r++)void 0===o[a=(n=t[r]).selector+" "]&&(o[a]=n.needsContext?-1<E(a,this).index(u):E.find(a,this,null,[u]).length),o[a]&&i.push(n);i.length&&s.push({elem:u,handlers:i})}return u=this,c<t.length&&s.push({elem:u,handlers:t.slice(c)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:y(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return fe.test(t.type)&&t.click&&M(t,"input")&&ke(t,"click",be),!1},trigger:function(e){var t=this||e;return fe.test(t.type)&&t.click&&M(t,"input")&&ke(t,"click"),!0},_default:function(e){var t=e.target;return fe.test(t.type)&&t.click&&M(t,"input")&&V.get(t,"click")||M(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,r){e.removeEventListener&&e.removeEventListener(t,r)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?be:Ae,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Ae,isPropagationStopped:Ae,isImmediatePropagationStopped:Ae,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=be,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=be,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=be,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(e,t){E.event.special[e]={setup:function(){return ke(this,e,we),!1},trigger:function(){return ke(this,e),!0},_default:function(){return!0},delegateType:t}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,a){E.event.special[e]={delegateType:a,bindType:a,handle:function(e){var t,r=e.relatedTarget,n=e.handleObj;return r&&(r===this||E.contains(this,r))||(e.type=n.origType,t=n.handler.apply(this,arguments),e.type=a),t}}}),E.fn.extend({on:function(e,t,r,n){return xe(this,e,t,r,n)},one:function(e,t,r,n){return xe(this,e,t,r,n,1)},off:function(e,t,r){var n,a;if(e&&e.preventDefault&&e.handleObj)return n=e.handleObj,E(e.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler),this;if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(r=t,t=void 0),!1===r&&(r=Ae),this.each(function(){E.event.remove(this,e,r,t)});for(a in e)this.off(a,t,e[a]);return this}});var Ee=/<script|<style|<link/i,Me=/checked\s*(?:[^=]|=\s*.checked.)/i,Se=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Te(e,t){return M(e,"table")&&M(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function Ce(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function De(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var r,n,a,i,o,s;if(1===t.nodeType){if(V.hasData(e)&&(s=V.get(e).events))for(a in V.remove(t,"handle events"),s)for(r=0,n=s[a].length;r<n;r++)E.event.add(t,a,s[a][r]);K.hasData(e)&&(i=K.access(e),o=E.extend({},i),K.set(t,o))}}function Ne(r,n,a,i){n=m(n);var e,t,o,s,c,u,l=0,f=r.length,d=f-1,h=n[0],p=y(h);if(p||1<f&&"string"==typeof h&&!v.checkClone&&Me.test(h))return r.each(function(e){var t=r.eq(e);p&&(n[0]=h.call(this,e,t.html())),Ne(t,n,a,i)});if(f&&(t=(e=ye(n,r[0].ownerDocument,!1,r,i)).firstChild,1===e.childNodes.length&&(e=t),t||i)){for(s=(o=E.map(me(e,"script"),Ce)).length;l<f;l++)c=e,l!==d&&(c=E.clone(c,!0,!0),s&&E.merge(o,me(c,"script"))),a.call(r[l],c,l);if(s)for(u=o[o.length-1].ownerDocument,E.map(o,De),l=0;l<s;l++)c=o[l],he.test(c.type||"")&&!V.access(c,"globalEval")&&E.contains(u,c)&&(c.src&&"module"!==(c.type||"").toLowerCase()?E._evalUrl&&!c.noModule&&E._evalUrl(c.src,{nonce:c.nonce||c.getAttribute("nonce")},u):b(c.textContent.replace(Se,""),c,u))}return r}function Pe(e,t,r){for(var n,a=t?E.filter(t,e):e,i=0;null!=(n=a[i]);i++)r||1!==n.nodeType||E.cleanData(me(n)),n.parentNode&&(r&&ne(n)&&ge(me(n,"script")),n.parentNode.removeChild(n));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,r){var n,a,i,o,s,c,u,l=e.cloneNode(!0),f=ne(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(o=me(l),n=0,a=(i=me(e)).length;n<a;n++)s=i[n],"input"===(u=(c=o[n]).nodeName.toLowerCase())&&fe.test(s.type)?c.checked=s.checked:"input"!==u&&"textarea"!==u||(c.defaultValue=s.defaultValue);if(t)if(r)for(i=i||me(e),o=o||me(l),n=0,a=i.length;n<a;n++)Oe(i[n],o[n]);else Oe(e,l);return 0<(o=me(l,"script")).length&&ge(o,!f&&me(e,"script")),l},cleanData:function(e){for(var t,r,n,a=E.event.special,i=0;void 0!==(r=e[i]);i++)if(U(r)){if(t=r[V.expando]){if(t.events)for(n in t.events)a[n]?E.event.remove(r,n):E.removeEvent(r,n,t.handle);r[V.expando]=void 0}r[K.expando]&&(r[K.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Pe(this,e,!0)},remove:function(e){return Pe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ne(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Te(this,e).appendChild(e)})},prepend:function(){return Ne(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Te(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ne(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ne(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(me(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},r=0,n=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ee.test(e)&&!pe[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;r<n;r++)1===(t=this[r]||{}).nodeType&&(E.cleanData(me(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var r=[];return Ne(this,arguments,function(e){var t=this.parentNode;E.inArray(this,r)<0&&(E.cleanData(me(this)),t&&t.replaceChild(e,this))},r)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,o){E.fn[e]=function(e){for(var t,r=[],n=E(e),a=n.length-1,i=0;i<=a;i++)t=i===a?this:this.clone(!0),E(n[i])[o](t),c.apply(r,t.get());return this.pushStack(r)}});var je=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),ze=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=x),t.getComputedStyle(e)},Re=function(e,t,r){var n,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in n=r.call(e),t)e.style[a]=i[a];return n},Le=new RegExp(te.join("|"),"i");function Ye(e,t,r){var n,a,i,o,s=e.style;return(r=r||ze(e))&&(""!==(o=r.getPropertyValue(t)||r[t])||ne(e)||(o=E.style(e,t)),!v.pixelBoxStyles()&&je.test(o)&&Le.test(t)&&(n=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=r.width,s.width=n,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function We(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){c.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(c).appendChild(u);var e=x.getComputedStyle(u);r="1%"!==e.top,s=12===t(e.marginLeft),u.style.right="60%",i=36===t(e.right),n=36===t(e.width),u.style.position="absolute",a=12===t(u.offsetWidth/3),re.removeChild(c),u=null}}function t(e){return Math.round(parseFloat(e))}var r,n,a,i,o,s,c=k.createElement("div"),u=k.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===u.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),n},pixelBoxStyles:function(){return e(),i},pixelPosition:function(){return e(),r},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),a},reliableTrDimensions:function(){var e,t,r,n;return null==o&&(e=k.createElement("table"),t=k.createElement("tr"),r=k.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",r.style.height="9px",r.style.display="block",re.appendChild(e).appendChild(t).appendChild(r),n=x.getComputedStyle(t),o=parseInt(n.height,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),o}}))}();var Ie=["Webkit","Moz","ms"],Be=k.createElement("div").style,qe={};function He(e){return E.cssProps[e]||qe[e]||(e in Be?e:qe[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),r=Ie.length;r--;)if((e=Ie[r]+t)in Be)return e}(e)||e)}var Fe=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},$e={letterSpacing:"0",fontWeight:"400"};function Ve(e,t,r){var n=ee.exec(t);return n?Math.max(0,n[2]-(r||0))+(n[3]||"px"):t}function Ke(e,t,r,n,a,i){var o="width"===t?1:0,s=0,c=0;if(r===(n?"border":"content"))return 0;for(;o<4;o+=2)"margin"===r&&(c+=E.css(e,r+te[o],!0,a)),n?("content"===r&&(c-=E.css(e,"padding"+te[o],!0,a)),"margin"!==r&&(c-=E.css(e,"border"+te[o]+"Width",!0,a))):(c+=E.css(e,"padding"+te[o],!0,a),"padding"!==r?c+=E.css(e,"border"+te[o]+"Width",!0,a):s+=E.css(e,"border"+te[o]+"Width",!0,a));return!n&&0<=i&&(c+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-c-s-.5))||0),c}function Je(e,t,r){var n=ze(e),a=(!v.boxSizingReliable()||r)&&"border-box"===E.css(e,"boxSizing",!1,n),i=a,o=Ye(e,t,n),s="offset"+t[0].toUpperCase()+t.slice(1);if(je.test(o)){if(!r)return o;o="auto"}return(!v.boxSizingReliable()&&a||!v.reliableTrDimensions()&&M(e,"tr")||"auto"===o||!parseFloat(o)&&"inline"===E.css(e,"display",!1,n))&&e.getClientRects().length&&(a="border-box"===E.css(e,"boxSizing",!1,n),(i=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+Ke(e,t,r||(a?"border":"content"),i,n,o)+"px"}function Ze(e,t,r,n,a){return new Ze.prototype.init(e,t,r,n,a)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var r=Ye(e,"opacity");return""===r?"1":r}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,r,n){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=G(t),c=Ge.test(t),u=e.style;if(c||(t=He(s)),o=E.cssHooks[t]||E.cssHooks[s],void 0===r)return o&&"get"in o&&void 0!==(a=o.get(e,!1,n))?a:u[t];"string"==(i=typeof r)&&(a=ee.exec(r))&&a[1]&&(r=oe(e,t,a),i="number"),null!=r&&r==r&&("number"!==i||c||(r+=a&&a[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==r||0!==t.indexOf("background")||(u[t]="inherit"),o&&"set"in o&&void 0===(r=o.set(e,r,n))||(c?u.setProperty(t,r):u[t]=r))}},css:function(e,t,r,n){var a,i,o,s=G(t);return Ge.test(t)||(t=He(s)),(o=E.cssHooks[t]||E.cssHooks[s])&&"get"in o&&(a=o.get(e,!0,r)),void 0===a&&(a=Ye(e,t,n)),"normal"===a&&t in $e&&(a=$e[t]),""===r||r?(i=parseFloat(a),!0===r||isFinite(i)?i||0:a):a}}),E.each(["height","width"],function(e,c){E.cssHooks[c]={get:function(e,t,r){if(t)return!Fe.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,c,r):Re(e,Ue,function(){return Je(e,c,r)})},set:function(e,t,r){var n,a=ze(e),i=!v.scrollboxSize()&&"absolute"===a.position,o=(i||r)&&"border-box"===E.css(e,"boxSizing",!1,a),s=r?Ke(e,c,r,o,a):0;return o&&i&&(s-=Math.ceil(e["offset"+c[0].toUpperCase()+c.slice(1)]-parseFloat(a[c])-Ke(e,c,"border",!1,a)-.5)),s&&(n=ee.exec(t))&&"px"!==(n[3]||"px")&&(e.style[c]=t,t=E.css(e,c)),Ve(0,t,s)}}}),E.cssHooks.marginLeft=We(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ye(e,"marginLeft"))||e.getBoundingClientRect().left-Re(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(a,i){E.cssHooks[a+i]={expand:function(e){for(var t=0,r={},n="string"==typeof e?e.split(" "):[e];t<4;t++)r[a+te[t]+i]=n[t]||n[t-2]||n[0];return r}},"margin"!==a&&(E.cssHooks[a+i].set=Ve)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,r){var n,a,i={},o=0;if(Array.isArray(t)){for(n=ze(e),a=t.length;o<a;o++)i[t[o]]=E.css(e,t[o],!1,n);return i}return void 0!==r?E.style(e,t,r):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=Ze).prototype={constructor:Ze,init:function(e,t,r,n,a,i){this.elem=e,this.prop=r,this.easing=a||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=n,this.unit=i||(E.cssNumber[r]?"":"px")},cur:function(){var e=Ze.propHooks[this.prop];return e&&e.get?e.get(this):Ze.propHooks._default.get(this)},run:function(e){var t,r=Ze.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),r&&r.set?r.set(this):Ze.propHooks._default.set(this),this}}).init.prototype=Ze.prototype,(Ze.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[He(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ze.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=Ze.prototype.init,E.fx.step={};var Xe,Qe,et,tt,rt=/^(?:toggle|show|hide)$/,nt=/queueHooks$/;function at(){Qe&&(!1===k.hidden&&x.requestAnimationFrame?x.requestAnimationFrame(at):x.setTimeout(at,E.fx.interval),E.fx.tick())}function it(){return x.setTimeout(function(){Xe=void 0}),Xe=Date.now()}function ot(e,t){var r,n=0,a={height:e};for(t=t?1:0;n<4;n+=2-t)a["margin"+(r=te[n])]=a["padding"+r]=e;return t&&(a.opacity=a.width=e),a}function st(e,t,r){for(var n,a=(ct.tweeners[t]||[]).concat(ct.tweeners["*"]),i=0,o=a.length;i<o;i++)if(n=a[i].call(r,t,e))return n}function ct(i,e,t){var r,o,n=0,a=ct.prefilters.length,s=E.Deferred().always(function(){delete c.elem}),c=function(){if(o)return!1;for(var e=Xe||it(),t=Math.max(0,u.startTime+u.duration-e),r=1-(t/u.duration||0),n=0,a=u.tweens.length;n<a;n++)u.tweens[n].run(r);return s.notifyWith(i,[u,r,t]),r<1&&a?t:(a||s.notifyWith(i,[u,1,0]),s.resolveWith(i,[u]),!1)},u=s.promise({elem:i,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:Xe||it(),duration:t.duration,tweens:[],createTween:function(e,t){var r=E.Tween(i,u.opts,e,t,u.opts.specialEasing[e]||u.opts.easing);return u.tweens.push(r),r},stop:function(e){var t=0,r=e?u.tweens.length:0;if(o)return this;for(o=!0;t<r;t++)u.tweens[t].run(1);return e?(s.notifyWith(i,[u,1,0]),s.resolveWith(i,[u,e])):s.rejectWith(i,[u,e]),this}}),l=u.props;for(function(e,t){var r,n,a,i,o;for(r in e)if(a=t[n=G(r)],i=e[r],Array.isArray(i)&&(a=i[1],i=e[r]=i[0]),r!==n&&(e[n]=i,delete e[r]),(o=E.cssHooks[n])&&"expand"in o)for(r in i=o.expand(i),delete e[n],i)r in e||(e[r]=i[r],t[r]=a);else t[n]=a}(l,u.opts.specialEasing);n<a;n++)if(r=ct.prefilters[n].call(u,i,l,u.opts))return y(r.stop)&&(E._queueHooks(u.elem,u.opts.queue).stop=r.stop.bind(r)),r;return E.map(l,st,u),y(u.opts.start)&&u.opts.start.call(i,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),E.fx.timer(E.extend(c,{elem:i,anim:u,queue:u.opts.queue})),u}E.Animation=E.extend(ct,{tweeners:{"*":[function(e,t){var r=this.createTween(e,t);return oe(r.elem,e,ee.exec(t),r),r}]},tweener:function(e,t){for(var r,n=0,a=(e=y(e)?(t=e,["*"]):e.match(j)).length;n<a;n++)r=e[n],ct.tweeners[r]=ct.tweeners[r]||[],ct.tweeners[r].unshift(t)},prefilters:[function(e,t,r){var n,a,i,o,s,c,u,l,f="width"in t||"height"in t,d=this,h={},p=e.style,m=e.nodeType&&ie(e),g=V.get(e,"fxshow");for(n in r.queue||(null==(o=E._queueHooks(e,"fx")).unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,d.always(function(){d.always(function(){o.unqueued--,E.queue(e,"fx").length||o.empty.fire()})})),t)if(a=t[n],rt.test(a)){if(delete t[n],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!g||void 0===g[n])continue;m=!0}h[n]=g&&g[n]||E.style(e,n)}if((c=!E.isEmptyObject(t))||!E.isEmptyObject(h))for(n in f&&1===e.nodeType&&(r.overflow=[p.overflow,p.overflowX,p.overflowY],null==(u=g&&g.display)&&(u=V.get(e,"display")),"none"===(l=E.css(e,"display"))&&(u?l=u:(ce([e],!0),u=e.style.display||u,l=E.css(e,"display"),ce([e]))),("inline"===l||"inline-block"===l&&null!=u)&&"none"===E.css(e,"float")&&(c||(d.done(function(){p.display=u}),null==u&&(l=p.display,u="none"===l?"":l)),p.display="inline-block")),r.overflow&&(p.overflow="hidden",d.always(function(){p.overflow=r.overflow[0],p.overflowX=r.overflow[1],p.overflowY=r.overflow[2]})),c=!1,h)c||(g?"hidden"in g&&(m=g.hidden):g=V.access(e,"fxshow",{display:u}),i&&(g.hidden=!m),m&&ce([e],!0),d.done(function(){for(n in m||ce([e]),V.remove(e,"fxshow"),h)E.style(e,n,h[n])})),c=st(m?g[n]:0,n,d),n in g||(g[n]=c.start,m&&(c.end=c.start,c.start=0))}],prefilter:function(e,t){t?ct.prefilters.unshift(e):ct.prefilters.push(e)}}),E.speed=function(e,t,r){var n=e&&"object"==typeof e?E.extend({},e):{complete:r||!r&&t||y(e)&&e,duration:e,easing:r&&t||t&&!y(t)&&t};return E.fx.off?n.duration=0:"number"!=typeof n.duration&&(n.duration in E.fx.speeds?n.duration=E.fx.speeds[n.duration]:n.duration=E.fx.speeds._default),null!=n.queue&&!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){y(n.old)&&n.old.call(this),n.queue&&E.dequeue(this,n.queue)},n},E.fn.extend({fadeTo:function(e,t,r,n){return this.filter(ie).css("opacity",0).show().end().animate({opacity:t},e,r,n)},animate:function(t,e,r,n){var a=E.isEmptyObject(t),i=E.speed(e,r,n),o=function(){var e=ct(this,E.extend({},t),i);(a||V.get(this,"finish"))&&e.stop(!0)};return o.finish=o,a||!1===i.queue?this.each(o):this.queue(i.queue,o)},stop:function(a,e,i){var o=function(e){var t=e.stop;delete e.stop,t(i)};return"string"!=typeof a&&(i=e,e=a,a=void 0),e&&this.queue(a||"fx",[]),this.each(function(){var e=!0,t=null!=a&&a+"queueHooks",r=E.timers,n=V.get(this);if(t)n[t]&&n[t].stop&&o(n[t]);else for(t in n)n[t]&&n[t].stop&&nt.test(t)&&o(n[t]);for(t=r.length;t--;)r[t].elem!==this||null!=a&&r[t].queue!==a||(r[t].anim.stop(i),e=!1,r.splice(t,1));!e&&i||E.dequeue(this,a)})},finish:function(o){return!1!==o&&(o=o||"fx"),this.each(function(){var e,t=V.get(this),r=t[o+"queue"],n=t[o+"queueHooks"],a=E.timers,i=r?r.length:0;for(t.finish=!0,E.queue(this,o,[]),n&&n.stop&&n.stop.call(this,!0),e=a.length;e--;)a[e].elem===this&&a[e].queue===o&&(a[e].anim.stop(!0),a.splice(e,1));for(e=0;e<i;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,n){var a=E.fn[n];E.fn[n]=function(e,t,r){return null==e||"boolean"==typeof e?a.apply(this,arguments):this.animate(ot(n,!0),e,t,r)}}),E.each({slideDown:ot("show"),slideUp:ot("hide"),slideToggle:ot("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,n){E.fn[e]=function(e,t,r){return this.animate(n,e,t,r)}}),E.timers=[],E.fx.tick=function(){var e,t=0,r=E.timers;for(Xe=Date.now();t<r.length;t++)(e=r[t])()||r[t]!==e||r.splice(t--,1);r.length||E.fx.stop(),Xe=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){Qe||(Qe=!0,at())},E.fx.stop=function(){Qe=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(n,e){return n=E.fx&&E.fx.speeds[n]||n,e=e||"fx",this.queue(e,function(e,t){var r=x.setTimeout(e,n);t.stop=function(){x.clearTimeout(r)}})},et=k.createElement("input"),tt=k.createElement("select").appendChild(k.createElement("option")),et.type="checkbox",v.checkOn=""!==et.value,v.optSelected=tt.selected,(et=k.createElement("input")).value="t",et.type="radio",v.radioValue="t"===et.value;var ut,lt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,r){var n,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?E.prop(e,t,r):(1===i&&E.isXMLDoc(e)||(a=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?ut:void 0)),void 0!==r?null===r?void E.removeAttr(e,t):a&&"set"in a&&void 0!==(n=a.set(e,r,t))?n:(e.setAttribute(t,r+""),r):a&&"get"in a&&null!==(n=a.get(e,t))?n:null==(n=E.find.attr(e,t))?void 0:n)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&M(e,"input")){var r=e.value;return e.setAttribute("type",t),r&&(e.value=r),t}}}},removeAttr:function(e,t){var r,n=0,a=t&&t.match(j);if(a&&1===e.nodeType)for(;r=a[n++];)e.removeAttribute(r)}}),ut={set:function(e,t,r){return!1===t?E.removeAttr(e,r):e.setAttribute(r,r),r}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var o=lt[t]||E.find.attr;lt[t]=function(e,t,r){var n,a,i=t.toLowerCase();return r||(a=lt[i],lt[i]=n,n=null!=o(e,t,r)?i:null,lt[i]=a),n}});var ft=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(j)||[]).join(" ")}function pt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(j)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,r){var n,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&E.isXMLDoc(e)||(t=E.propFix[t]||t,a=E.propHooks[t]),void 0!==r?a&&"set"in a&&void 0!==(n=a.set(e,r,t))?n:e[t]=r:a&&"get"in a&&null!==(n=a.get(e,t))?n:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ft.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,r,n,a,i,o,s,c=0;if(y(t))return this.each(function(e){E(this).addClass(t.call(this,e,pt(this)))});if((e=mt(t)).length)for(;r=this[c++];)if(a=pt(r),n=1===r.nodeType&&" "+ht(a)+" "){for(o=0;i=e[o++];)n.indexOf(" "+i+" ")<0&&(n+=i+" ");a!==(s=ht(n))&&r.setAttribute("class",s)}return this},removeClass:function(t){var e,r,n,a,i,o,s,c=0;if(y(t))return this.each(function(e){E(this).removeClass(t.call(this,e,pt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)for(;r=this[c++];)if(a=pt(r),n=1===r.nodeType&&" "+ht(a)+" "){for(o=0;i=e[o++];)for(;-1<n.indexOf(" "+i+" ");)n=n.replace(" "+i+" "," ");a!==(s=ht(n))&&r.setAttribute("class",s)}return this},toggleClass:function(a,t){var i=typeof a,o="string"===i||Array.isArray(a);return"boolean"==typeof t&&o?t?this.addClass(a):this.removeClass(a):y(a)?this.each(function(e){E(this).toggleClass(a.call(this,e,pt(this),t),t)}):this.each(function(){var e,t,r,n;if(o)for(t=0,r=E(this),n=mt(a);e=n[t++];)r.hasClass(e)?r.removeClass(e):r.addClass(e);else void 0!==a&&"boolean"!==i||((e=pt(this))&&V.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===a?"":V.get(this,"__className__")||""))})},hasClass:function(e){var t,r,n=0;for(t=" "+e+" ";r=this[n++];)if(1===r.nodeType&&-1<(" "+ht(pt(r))+" ").indexOf(t))return!0;return!1}});var gt=/\r/g;E.fn.extend({val:function(r){var n,e,a,t=this[0];return arguments.length?(a=y(r),this.each(function(e){var t;1===this.nodeType&&(null==(t=a?r.call(this,e,E(this).val()):r)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(n=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&void 0!==n.set(this,t,"value")||(this.value=t))})):t?(n=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in n&&void 0!==(e=n.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(gt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:ht(E.text(e))}},select:{get:function(e){var t,r,n,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],c=o?i+1:a.length;for(n=i<0?c:o?i:0;n<c;n++)if(((r=a[n]).selected||n===i)&&!r.disabled&&(!r.parentNode.disabled||!M(r.parentNode,"optgroup"))){if(t=E(r).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var r,n,a=e.options,i=E.makeArray(t),o=a.length;o--;)((n=a[o]).selected=-1<E.inArray(E.valHooks.option.get(n),i))&&(r=!0);return r||(e.selectedIndex=-1),i}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in x;var vt=/^(?:focusinfocus|focusoutblur)$/,yt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,r,n){var a,i,o,s,c,u,l,f,d=[r||k],h=g.call(e,"type")?e.type:e,p=g.call(e,"namespace")?e.namespace.split("."):[];if(i=f=o=r=r||k,3!==r.nodeType&&8!==r.nodeType&&!vt.test(h+E.event.triggered)&&(-1<h.indexOf(".")&&(h=(p=h.split(".")).shift(),p.sort()),c=h.indexOf(":")<0&&"on"+h,(e=e[E.expando]?e:new E.Event(h,"object"==typeof e&&e)).isTrigger=n?2:3,e.namespace=p.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:E.makeArray(t,[e]),l=E.event.special[h]||{},n||!l.trigger||!1!==l.trigger.apply(r,t))){if(!n&&!l.noBubble&&!_(r)){for(s=l.delegateType||h,vt.test(s+h)||(i=i.parentNode);i;i=i.parentNode)d.push(i),o=i;o===(r.ownerDocument||k)&&d.push(o.defaultView||o.parentWindow||x)}for(a=0;(i=d[a++])&&!e.isPropagationStopped();)f=i,e.type=1<a?s:l.bindType||h,(u=(V.get(i,"events")||Object.create(null))[e.type]&&V.get(i,"handle"))&&u.apply(i,t),(u=c&&i[c])&&u.apply&&U(i)&&(e.result=u.apply(i,t),!1===e.result&&e.preventDefault());return e.type=h,n||e.isDefaultPrevented()||l._default&&!1!==l._default.apply(d.pop(),t)||!U(r)||c&&y(r[h])&&!_(r)&&((o=r[c])&&(r[c]=null),E.event.triggered=h,e.isPropagationStopped()&&f.addEventListener(h,yt),r[h](),e.isPropagationStopped()&&f.removeEventListener(h,yt),E.event.triggered=void 0,o&&(r[c]=o)),e.result}},simulate:function(e,t,r){var n=E.extend(new E.Event,r,{type:e,isSimulated:!0});E.event.trigger(n,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var r=this[0];if(r)return E.event.trigger(e,t,r,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(r,n){var a=function(e){E.event.simulate(n,e.target,E.event.fix(e))};E.event.special[n]={setup:function(){var e=this.ownerDocument||this.document||this,t=V.access(e,n);t||e.addEventListener(r,a,!0),V.access(e,n,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=V.access(e,n)-1;t?V.access(e,n,t):(e.removeEventListener(r,a,!0),V.remove(e,n))}}});var _t=x.location,bt={guid:Date.now()},At=/\?/;E.parseXML=function(e){var t,r;if(!e||"string"!=typeof e)return null;try{t=(new x.DOMParser).parseFromString(e,"text/xml")}catch(e){}return r=t&&t.getElementsByTagName("parsererror")[0],t&&!r||E.error("Invalid XML: "+(r?E.map(r.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var wt=/\[\]$/,xt=/\r?\n/g,kt=/^(?:submit|button|image|reset|file)$/i,Et=/^(?:input|select|textarea|keygen)/i;function Mt(r,e,n,a){var t;if(Array.isArray(e))E.each(e,function(e,t){n||wt.test(r)?a(r,t):Mt(r+"["+("object"==typeof t&&null!=t?e:"")+"]",t,n,a)});else if(n||"object"!==A(e))a(r,e);else for(t in e)Mt(r+"["+t+"]",e[t],n,a)}E.param=function(e,t){var r,n=[],a=function(e,t){var r=y(t)?t():t;n[n.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==r?"":r)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){a(this.name,this.value)});else for(r in e)Mt(r,e[r],t,a);return n.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Et.test(this.nodeName)&&!kt.test(e)&&(this.checked||!fe.test(e))}).map(function(e,t){var r=E(this).val();return null==r?null:Array.isArray(r)?E.map(r,function(e){return{name:t.name,value:e.replace(xt,"\r\n")}}):{name:t.name,value:r.replace(xt,"\r\n")}}).get()}});var St=/%20/g,Tt=/#.*$/,Ct=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Nt=/^\/\//,Pt={},jt={},zt="*/".concat("*"),Rt=k.createElement("a");function Lt(i){return function(e,t){"string"!=typeof e&&(t=e,e="*");var r,n=0,a=e.toLowerCase().match(j)||[];if(y(t))for(;r=a[n++];)"+"===r[0]?(r=r.slice(1)||"*",(i[r]=i[r]||[]).unshift(t)):(i[r]=i[r]||[]).push(t)}}function Yt(t,a,i,o){var s={},c=t===jt;function u(e){var n;return s[e]=!0,E.each(t[e]||[],function(e,t){var r=t(a,i,o);return"string"!=typeof r||c||s[r]?c?!(n=r):void 0:(a.dataTypes.unshift(r),u(r),!1)}),n}return u(a.dataTypes[0])||!s["*"]&&u("*")}function Wt(e,t){var r,n,a=E.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((a[r]?e:n||(n={}))[r]=t[r]);return n&&E.extend(!0,e,n),e}Rt.href=_t.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:_t.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(_t.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Wt(Wt(e,E.ajaxSettings),t):Wt(E.ajaxSettings,e)},ajaxPrefilter:Lt(Pt),ajaxTransport:Lt(jt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var l,f,d,r,h,n,p,m,a,i,g=E.ajaxSetup({},t),v=g.context||g,y=g.context&&(v.nodeType||v.jquery)?E(v):E.event,_=E.Deferred(),b=E.Callbacks("once memory"),A=g.statusCode||{},o={},s={},c="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(p){if(!r)for(r={};t=Dt.exec(d);)r[t[1].toLowerCase()+" "]=(r[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=r[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return p?d:null},setRequestHeader:function(e,t){return null==p&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,o[e]=t),this},overrideMimeType:function(e){return null==p&&(g.mimeType=e),this},statusCode:function(e){var t;if(e)if(p)w.always(e[w.status]);else for(t in e)A[t]=[A[t],e[t]];return this},abort:function(e){var t=e||c;return l&&l.abort(t),u(0,t),this}};if(_.promise(w),g.url=((e||g.url||_t.href)+"").replace(Nt,_t.protocol+"//"),g.type=t.method||t.type||g.method||g.type,g.dataTypes=(g.dataType||"*").toLowerCase().match(j)||[""],null==g.crossDomain){n=k.createElement("a");try{n.href=g.url,n.href=n.href,g.crossDomain=Rt.protocol+"//"+Rt.host!=n.protocol+"//"+n.host}catch(e){g.crossDomain=!0}}if(g.data&&g.processData&&"string"!=typeof g.data&&(g.data=E.param(g.data,g.traditional)),Yt(Pt,g,t,w),p)return w;for(a in(m=E.event&&g.global)&&0==E.active++&&E.event.trigger("ajaxStart"),g.type=g.type.toUpperCase(),g.hasContent=!Ot.test(g.type),f=g.url.replace(Tt,""),g.hasContent?g.data&&g.processData&&0===(g.contentType||"").indexOf("application/x-www-form-urlencoded")&&(g.data=g.data.replace(St,"+")):(i=g.url.slice(f.length),g.data&&(g.processData||"string"==typeof g.data)&&(f+=(At.test(f)?"&":"?")+g.data,delete g.data),!1===g.cache&&(f=f.replace(Ct,"$1"),i=(At.test(f)?"&":"?")+"_="+bt.guid+++i),g.url=f+i),g.ifModified&&(E.lastModified[f]&&w.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&w.setRequestHeader("If-None-Match",E.etag[f])),(g.data&&g.hasContent&&!1!==g.contentType||t.contentType)&&w.setRequestHeader("Content-Type",g.contentType),w.setRequestHeader("Accept",g.dataTypes[0]&&g.accepts[g.dataTypes[0]]?g.accepts[g.dataTypes[0]]+("*"!==g.dataTypes[0]?", "+zt+"; q=0.01":""):g.accepts["*"]),g.headers)w.setRequestHeader(a,g.headers[a]);if(g.beforeSend&&(!1===g.beforeSend.call(v,w,g)||p))return w.abort();if(c="abort",b.add(g.complete),w.done(g.success),w.fail(g.error),l=Yt(jt,g,t,w)){if(w.readyState=1,m&&y.trigger("ajaxSend",[w,g]),p)return w;g.async&&0<g.timeout&&(h=x.setTimeout(function(){w.abort("timeout")},g.timeout));try{p=!1,l.send(o,u)}catch(e){if(p)throw e;u(-1,e)}}else u(-1,"No Transport");function u(e,t,r,n){var a,i,o,s,c,u=t;p||(p=!0,h&&x.clearTimeout(h),l=void 0,d=n||"",w.readyState=0<e?4:0,a=200<=e&&e<300||304===e,r&&(s=function(e,t,r){for(var n,a,i,o,s=e.contents,c=e.dataTypes;"*"===c[0];)c.shift(),void 0===n&&(n=e.mimeType||t.getResponseHeader("Content-Type"));if(n)for(a in s)if(s[a]&&s[a].test(n)){c.unshift(a);break}if(c[0]in r)i=c[0];else{for(a in r){if(!c[0]||e.converters[a+" "+c[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==c[0]&&c.unshift(i),r[i]}(g,w,r)),!a&&-1<E.inArray("script",g.dataTypes)&&E.inArray("json",g.dataTypes)<0&&(g.converters["text script"]=function(){}),s=function(e,t,r,n){var a,i,o,s,c,u={},l=e.dataTypes.slice();if(l[1])for(o in e.converters)u[o.toLowerCase()]=e.converters[o];for(i=l.shift();i;)if(e.responseFields[i]&&(r[e.responseFields[i]]=t),!c&&n&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=i,i=l.shift())if("*"===i)i=c;else if("*"!==c&&c!==i){if(!(o=u[c+" "+i]||u["* "+i]))for(a in u)if((s=a.split(" "))[1]===i&&(o=u[c+" "+s[0]]||u["* "+s[0]])){!0===o?o=u[a]:!0!==u[a]&&(i=s[0],l.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+c+" to "+i}}}return{state:"success",data:t}}(g,s,w,a),a?(g.ifModified&&((c=w.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=c),(c=w.getResponseHeader("etag"))&&(E.etag[f]=c)),204===e||"HEAD"===g.type?u="nocontent":304===e?u="notmodified":(u=s.state,i=s.data,a=!(o=s.error))):(o=u,!e&&u||(u="error",e<0&&(e=0))),w.status=e,w.statusText=(t||u)+"",a?_.resolveWith(v,[i,u,w]):_.rejectWith(v,[w,u,o]),w.statusCode(A),A=void 0,m&&y.trigger(a?"ajaxSuccess":"ajaxError",[w,g,a?i:o]),b.fireWith(v,[w,u]),m&&(y.trigger("ajaxComplete",[w,g]),--E.active||E.event.trigger("ajaxStop")))}return w},getJSON:function(e,t,r){return E.get(e,t,r,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,a){E[a]=function(e,t,r,n){return y(t)&&(n=n||r,r=t,t=void 0),E.ajax(E.extend({url:e,type:a,dataType:n,data:t,success:r},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,r){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,r)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(r){return y(r)?this.each(function(e){E(this).wrapInner(r.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(r):e.append(r)})},wrap:function(t){var r=y(t);return this.each(function(e){E(this).wrapAll(r?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new x.XMLHttpRequest}catch(e){}};var It={0:200,1223:204},Bt=E.ajaxSettings.xhr();v.cors=!!Bt&&"withCredentials"in Bt,v.ajax=Bt=!!Bt,E.ajaxTransport(function(a){var i,o;if(v.cors||Bt&&!a.crossDomain)return{send:function(e,t){var r,n=a.xhr();if(n.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(r in a.xhrFields)n[r]=a.xhrFields[r];for(r in a.mimeType&&n.overrideMimeType&&n.overrideMimeType(a.mimeType),a.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)n.setRequestHeader(r,e[r]);i=function(e){return function(){i&&(i=o=n.onload=n.onerror=n.onabort=n.ontimeout=n.onreadystatechange=null,"abort"===e?n.abort():"error"===e?"number"!=typeof n.status?t(0,"error"):t(n.status,n.statusText):t(It[n.status]||n.status,n.statusText,"text"!==(n.responseType||"text")||"string"!=typeof n.responseText?{binary:n.response}:{text:n.responseText},n.getAllResponseHeaders()))}},n.onload=i(),o=n.onerror=n.ontimeout=i("error"),void 0!==n.onabort?n.onabort=o:n.onreadystatechange=function(){4===n.readyState&&x.setTimeout(function(){i&&o()})},i=i("abort");try{n.send(a.hasContent&&a.data||null)}catch(e){if(i)throw e}},abort:function(){i&&i()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(r){var n,a;if(r.crossDomain||r.scriptAttrs)return{send:function(e,t){n=E("<script>").attr(r.scriptAttrs||{}).prop({charset:r.scriptCharset,src:r.url}).on("load error",a=function(e){n.remove(),a=null,e&&t("error"===e.type?404:200,e.type)}),k.head.appendChild(n[0])},abort:function(){a&&a()}}});var qt,Ht=[],Ft=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ht.pop()||E.expando+"_"+bt.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,r){var n,a,i,o=!1!==e.jsonp&&(Ft.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ft.test(e.data)&&"data");if(o||"jsonp"===e.dataTypes[0])return n=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,o?e[o]=e[o].replace(Ft,"$1"+n):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+n),e.converters["script json"]=function(){return i||E.error(n+" was not called"),i[0]},e.dataTypes[0]="json",a=x[n],x[n]=function(){i=arguments},r.always(function(){void 0===a?E(x).removeProp(n):x[n]=a,e[n]&&(e.jsonpCallback=t.jsonpCallback,Ht.push(n)),i&&y(a)&&a(i[0]),i=a=void 0}),"script"}),v.createHTMLDocument=((qt=k.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===qt.childNodes.length),E.parseHTML=function(e,t,r){return"string"!=typeof e?[]:("boolean"==typeof t&&(r=t,t=!1),t||(v.createHTMLDocument?((n=(t=k.implementation.createHTMLDocument("")).createElement("base")).href=k.location.href,t.head.appendChild(n)):t=k),i=!r&&[],(a=S.exec(e))?[t.createElement(a[1])]:(a=ye([e],t,i),i&&i.length&&E(i).remove(),E.merge([],a.childNodes)));var n,a,i},E.fn.load=function(e,t,r){var n,a,i,o=this,s=e.indexOf(" ");return-1<s&&(n=ht(e.slice(s)),e=e.slice(0,s)),y(t)?(r=t,t=void 0):t&&"object"==typeof t&&(a="POST"),0<o.length&&E.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done(function(e){i=arguments,o.html(n?E("<div>").append(E.parseHTML(e)).find(n):e)}).always(r&&function(e,t){o.each(function(){r.apply(this,i||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,r){var n,a,i,o,s,c,u=E.css(e,"position"),l=E(e),f={};"static"===u&&(e.style.position="relative"),s=l.offset(),i=E.css(e,"top"),c=E.css(e,"left"),a=("absolute"===u||"fixed"===u)&&-1<(i+c).indexOf("auto")?(o=(n=l.position()).top,n.left):(o=parseFloat(i)||0,parseFloat(c)||0),y(t)&&(t=t.call(e,r,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):l.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,r,n=this[0];return n?n.getClientRects().length?(e=n.getBoundingClientRect(),r=n.ownerDocument.defaultView,{top:e.top+r.pageYOffset,left:e.left+r.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,r,n=this[0],a={top:0,left:0};if("fixed"===E.css(n,"position"))t=n.getBoundingClientRect();else{for(t=this.offset(),r=n.ownerDocument,e=n.offsetParent||r.documentElement;e&&(e===r.body||e===r.documentElement)&&"static"===E.css(e,"position");)e=e.parentNode;e&&e!==n&&1===e.nodeType&&((a=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),a.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-E.css(n,"marginTop",!0),left:t.left-a.left-E.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===E.css(e,"position");)e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,a){var i="pageYOffset"===a;E.fn[t]=function(e){return B(this,function(e,t,r){var n;if(_(e)?n=e:9===e.nodeType&&(n=e.defaultView),void 0===r)return n?n[a]:e[t];n?n.scrollTo(i?n.pageXOffset:r,i?r:n.pageYOffset):e[t]=r},t,e,arguments.length)}}),E.each(["top","left"],function(e,r){E.cssHooks[r]=We(v.pixelPosition,function(e,t){if(t)return t=Ye(e,r),je.test(t)?E(e).position()[r]+"px":t})}),E.each({Height:"height",Width:"width"},function(o,s){E.each({padding:"inner"+o,content:s,"":"outer"+o},function(n,i){E.fn[i]=function(e,t){var r=arguments.length&&(n||"boolean"!=typeof e),a=n||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,r){var n;return _(e)?0===i.indexOf("outer")?e["inner"+o]:e.document.documentElement["client"+o]:9===e.nodeType?(n=e.documentElement,Math.max(e.body["scroll"+o],n["scroll"+o],e.body["offset"+o],n["offset"+o],n["client"+o])):void 0===r?E.css(e,t,a):E.style(e,t,r,a)},s,r?e:void 0,r)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,r){return this.on(e,null,t,r)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,r,n){return this.on(t,e,r,n)},undelegate:function(e,t,r){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",r)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,r){E.fn[r]=function(e,t){return 0<arguments.length?this.on(r,null,e,t):this.trigger(r)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var r,n,a;if("string"==typeof t&&(r=e[t],t=e,e=r),y(e))return n=s.call(arguments,2),(a=function(){return e.apply(t||this,n.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,a},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=M,E.isFunction=y,E.isWindow=_,E.camelCase=G,E.type=A,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"")};var Ut=x.jQuery,$t=x.$;return E.noConflict=function(e){return x.$===E&&(x.$=$t),e&&x.jQuery===E&&(x.jQuery=Ut),E},void 0===e&&(x.jQuery=x.$=E),E},e.exports=t.document?r(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return r(e)}});Tn.noConflict();var Cn=function(e,t,r){return(!(3<arguments.length&&void 0!==arguments[3])||arguments[3])&&(t&&"string"==typeof t?t=Mn.find(t):t||(t=Mn)),new Tn.fn.init(e,t,r)};Cn.fn=Cn.prototype=Tn.fn,Tn.extend(Cn,Tn);var Dn=function(e){return e.find('script, style, link[rel="stylesheet"]').remove(),e};Cn.cloneHtml=function(){return Dn(Cn("html",null,null,!1).clone()).children().wrap("<div />").wrap("<div />")},Cn.root=function(){return Cn("*").first()},Cn.browser=!0;var On=function(e){var t=e.get(0);return!(!t||!t.tagName)&&"container"===t.tagName.toLowerCase()};function Nn(e,t){return Array(t+1).join(e)}Cn.html=function(e){if(e)return On(e)||On(e.children("container"))?e.children("container").html()||e.html():Cn("<div>").append(e.eq(0).clone()).html();var t=Dn(Cn("body",null,null,!1).clone()),r=Dn(Cn("head",null,null,!1).clone());return Mn&&0<Mn.length?Mn.children().html():Cn("<container />").append(Cn("<container>".concat(r.html(),"</container>"))).append(Cn("<container>".concat(t.html(),"</container>"))).wrap("<container />").parent().html()},Cn.load=function(e){var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2];return e=e?Cn("<container />").html(e):Cn.cloneHtml(),Mn=Mn||Cn('<div class="'.concat("mercury-parsing-container",'" style="display:none;" />')),(e=Dn(e)).find("*").contents().each(function(){this.nodeType===Node.COMMENT_NODE&&Cn(this).remove()}),Mn.html(e),t?{$:Cn,html:e.html()}:Cn};var Pn=["ADDRESS","ARTICLE","ASIDE","AUDIO","BLOCKQUOTE","BODY","CANVAS","CENTER","DD","DIR","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","FRAMESET","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","HTML","ISINDEX","LI","MAIN","MENU","NAV","NOFRAMES","NOSCRIPT","OL","OUTPUT","P","PRE","SECTION","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","UL"];function jn(e){return Yn(e,Pn)}var zn=["AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR"];function Rn(e){return Yn(e,zn)}var Ln=["A","TABLE","THEAD","TBODY","TFOOT","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"];function Yn(e,t){return 0<=t.indexOf(e.nodeName)}function Wn(t,e){return t.getElementsByTagName&&e.some(function(e){return t.getElementsByTagName(e).length})}var In={};function Bn(e){return e?e.replace(/(\n+\s*)+/g,"\n"):""}function qn(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function Hn(e,t,r){for(var n=0;n<e.length;n++){var a=e[n];if(Fn(a,t,r))return a}}function Fn(e,t,r){var n=e.filter;if("string"==typeof n){if(n===t.nodeName.toLowerCase())return!0}else if(Array.isArray(n)){if(-1<n.indexOf(t.nodeName.toLowerCase()))return!0}else{if("function"!=typeof n)throw new TypeError("`filter` needs to be a string, array, or function");if(n.call(e,t,r))return!0}}function Gn(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function Un(e,t,r){return e&&e.parentNode===t||r(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}In.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},In.lineBreak={filter:"br",replacement:function(e,t,r){return r.br+"\n"}},In.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,t,r){var n=Number(t.nodeName.charAt(1));return"setext"===r.headingStyle&&n<3?"\n\n"+e+"\n"+Nn(1===n?"=":"-",e.length)+"\n\n":"\n\n"+Nn("#",n)+" "+e+"\n\n"}},In.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},In.list={filter:["ul","ol"],replacement:function(e,t){var r=t.parentNode;return"LI"===r.nodeName&&r.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},In.listItem={filter:"li",replacement:function(e,t,r){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n ");var n=r.bulletListMarker+" ",a=t.parentNode;if("OL"===a.nodeName){var i=a.getAttribute("start"),o=Array.prototype.indexOf.call(a.children,t);n=(i?Number(i)+o:o+1)+". "}return n+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},In.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,r){return"\n\n "+t.firstChild.textContent.replace(/\n/g,"\n ")+"\n\n"}},In.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,r){for(var n,a=((t.firstChild.getAttribute("class")||"").match(/language-(\S+)/)||[null,""])[1],i=t.firstChild.textContent,o=r.fence.charAt(0),s=3,c=new RegExp("^"+o+"{3,}","gm");n=c.exec(i);)n[0].length>=s&&(s=n[0].length+1);var u=Nn(o,s);return"\n\n"+u+a+"\n"+i.replace(/\n$/,"")+"\n"+u+"\n\n"}},In.horizontalRule={filter:"hr",replacement:function(e,t,r){return"\n\n"+r.hr+"\n\n"}},In.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){var r=t.getAttribute("href"),n=Bn(t.getAttribute("title"));return n&&(n=' "'+n+'"'),"["+e+"]("+r+n+")"}},In.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,r){var n,a,i=t.getAttribute("href"),o=Bn(t.getAttribute("title"));switch(o&&(o=' "'+o+'"'),r.linkReferenceStyle){case"collapsed":n="["+e+"][]",a="["+e+"]: "+i+o;break;case"shortcut":n="["+e+"]",a="["+e+"]: "+i+o;break;default:var s=this.references.length+1;n="["+e+"]["+s+"]",a="["+s+"]: "+i+o}return this.references.push(a),n},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},In.emphasis={filter:["em","i"],replacement:function(e,t,r){return e.trim()?r.emDelimiter+e+r.emDelimiter:""}},In.strong={filter:["strong","b"],replacement:function(e,t,r){return e.trim()?r.strongDelimiter+e+r.strongDelimiter:""}},In.code={filter:function(e){var t=e.previousSibling||e.nextSibling,r="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!r},replacement:function(e){if(!e)return"";e=e.replace(/\r?\n|\r/g," ");for(var t=/^`|^ .*?[^ ].* $|`$/.test(e)?" ":"",r="`",n=e.match(/`+/gm)||[];-1!==n.indexOf(r);)r+="`";return r+t+e+t+r}},In.image={filter:"img",replacement:function(e,t){var r=Bn(t.getAttribute("alt")),n=t.getAttribute("src")||"",a=Bn(t.getAttribute("title"));return n?"!["+r+"]("+n+(a?' "'+a+'"':"")+")":""}},qn.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=Hn(this.array,e,this.options))?t:(t=Hn(this._keep,e,this.options))?t:(t=Hn(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t<this.array.length;t++)e(this.array[t],t)}};var $n="undefined"!=typeof window?window:{};var Vn,Kn,Jn=function(){var e=$n.DOMParser,t=!1;try{(new e).parseFromString("","text/html")&&(t=!0)}catch(e){}return t}()?$n.DOMParser:((Vn=function(){}).prototype.parseFromString=function(){var t=!1;try{document.implementation.createHTMLDocument("").open()}catch(e){window.ActiveXObject&&(t=!0)}return t}()?function(e){var t=new window.ActiveXObject("htmlfile");return t.designMode="on",t.open(),t.write(e),t.close(),t}:function(e){var t=document.implementation.createHTMLDocument("");return t.open(),t.write(e),t.close(),t},Vn);function Zn(e,t){var r;"string"==typeof e?r=(Kn=Kn||new Jn).parseFromString('<x-turndown id="turndown-root">'+e+"</x-turndown>","text/html").getElementById("turndown-root"):r=e.cloneNode(!0);return function(e){var t=e.element,r=e.isBlock,n=e.isVoid,a=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!a(t)){for(var i=null,o=!1,s=null,c=Un(s,t,a);c!==t;){if(3===c.nodeType||4===c.nodeType){var u=c.data.replace(/[ \r\n\t]+/g," ");if(i&&!/ $/.test(i.data)||o||" "!==u[0]||(u=u.substr(1)),!u){c=Gn(c);continue}c.data=u,i=c}else{if(1!==c.nodeType){c=Gn(c);continue}r(c)||"BR"===c.nodeName?(i&&(i.data=i.data.replace(/ $/,"")),i=null,o=!1):n(c)||a(c)?o=!(i=null):i&&(o=!1)}var l=Un(s,c,a);s=c,c=l}i&&(i.data=i.data.replace(/ $/,""),i.data||Gn(i))}}({element:r,isBlock:jn,isVoid:Rn,isPre:t.preformattedCode?Xn:null}),r}function Xn(e){return"PRE"===e.nodeName||"CODE"===e.nodeName}function Qn(e,t){var r;return e.isBlock=jn(e),e.isCode="CODE"===e.nodeName||e.parentNode.isCode,e.isBlank=!Rn(r=e)&&!Yn(r,Ln)&&/^\s*$/i.test(r.textContent)&&!Wn(r,zn)&&!Wn(r,Ln),e.flankingWhitespace=function(e,t){if(e.isBlock||t.preformattedCode&&e.isCode)return{leading:"",trailing:""};var r=(n=e.textContent,a=n.match(/^(([ \t\r\n]*)(\s*))[\s\S]*?((\s*?)([ \t\r\n]*))$/),{leading:a[1],leadingAscii:a[2],leadingNonAscii:a[3],trailing:a[4],trailingNonAscii:a[5],trailingAscii:a[6]});var n,a;r.leadingAscii&&ea("left",e,t)&&(r.leading=r.leadingNonAscii);r.trailingAscii&&ea("right",e,t)&&(r.trailing=r.trailingNonAscii);return{leading:r.leading,trailing:r.trailing}}(e,t),e}function ea(e,t,r){var n,a,i;return a="left"===e?(n=t.previousSibling,/ $/):(n=t.nextSibling,/^ /),n&&(3===n.nodeType?i=a.test(n.nodeValue):r.preformattedCode&&"CODE"===n.nodeName?i=!1:1!==n.nodeType||jn(n)||(i=a.test(n.textContent))),i}var ta=Array.prototype.reduce,ra=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function na(e){if(!(this instanceof na))return new na(e);var t={rules:In,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",preformattedCode:!1,blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}return e}({},t,e),this.rules=new qn(this.options)}function aa(e){var n=this;return ta.call(e.childNodes,function(e,t){var r="";return 3===(t=new Qn(t,n.options)).nodeType?r=t.isCode?t.nodeValue:n.escape(t.nodeValue):1===t.nodeType&&(r=function(e){var t=this.rules.forNode(e),r=aa.call(this,e),n=e.flankingWhitespace;(n.leading||n.trailing)&&(r=r.trim());return n.leading+t.replacement(r,e,this.options)+n.trailing}.call(n,t)),ia(e,r)},"")}function ia(e,t){var r=function(e){for(var t=e.length;0<t&&"\n"===e[t-1];)t--;return e.substring(0,t)}(e),n=t.replace(/^\n*/,""),a=Math.max(e.length-r.length,t.length-n.length);return r+"\n\n".substring(0,a)+n}na.prototype={turndown:function(e){if(null==(t=e)||"string"!=typeof t&&(!t.nodeType||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType))throw new TypeError(e+" is not a string, or an element/document/fragment node.");var t;if(""===e)return"";var r=aa.call(this,new Zn(e,this.options));return function(t){var r=this;return this.rules.forEach(function(e){"function"==typeof e.append&&(t=ia(t,e.append(r.options)))}),t.replace(/^[\t\r\n]+/,"").replace(/[\t\r\n\s]+$/,"")}.call(this,r)},use:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)this.use(e[t]);else{if("function"!=typeof e)throw new TypeError("plugin must be a Function or an Array of Functions");e(this)}return this},addRule:function(e,t){return this.rules.add(e,t),this},keep:function(e){return this.rules.keep(e),this},remove:function(e){return this.rules.remove(e),this},escape:function(e){return ra.reduce(function(e,t){return e.replace(t[0],t[1])},e)}};var oa=function(){return!1},sa=function(e){return e},ca=/\s{2,}(?![^<>]*<\/(pre|code|textarea)>)/g;function ua(e){return e.replace(ca," ").trim()}var la="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",fa="["+la+"]",da=RegExp("^"+fa+fa+"*"),ha=RegExp(fa+fa+"*$"),pa=function(e,t,r){var n={},a=g(function(){return!!la[e]()||"​…"!="​…"[e]()}),i=n[e]=a?t(ma):la[e];r&&(n[r]=i),R(R.P+R.F*a,"String",n)},ma=pa.trim=function(e,t){return e=String(c(e)),1&t&&(e=e.replace(da,"")),2&t&&(e=e.replace(ha,"")),e},ga=pa,va=y.parseInt,ya=ga.trim,_a=/^[-+]?0[xX]/,ba=8!==va(la+"08")||22!==va(la+"0x16")?function(e,t){var r=ya(String(e),3);return va(r,t>>>0||(_a.test(r)?16:10))}:va;R(R.G+R.F*(parseInt!=ba),{parseInt:ba});var Aa=S.parseInt,wa=new RegExp("(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})","i"),xa=/[a-z]/i,ka=/^[a-z]+$/i,Ea=/^[0-9]+$/i,Ma=/charset=([\w-]+)\b/;function Sa(e){return e.split("#")[0].replace(/\/$/,"")}R(R.S,"Array",{isArray:ge});var Ta=S.Array.isArray;var Ca=function(e){if(Ta(e))return e},Da=S.getIterator=function(e){var t=Vt(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return D(t.call(e))};var Oa=function(e,t){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=Da(e);!(n=(o=s.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){a=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}return r};var Na=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var Pa=function(e,t){return Ca(e)||Oa(e,t)||Na()};function ja(e,t){var r=t||Sn.parse(e),n=r.protocol,a=r.host,i=r.path,d=!1,o=i.split("/").reverse().reduce(function(e,t,r){var n,a,i,o,s=t;if(s.includes(".")){var c=s.split("."),u=Pa(c,2),l=u[0],f=u[1];ka.test(f)&&(s=l)}return wa.test(s)&&r<2&&(s=s.replace(wa,"")),0===r&&(d=xa.test(s)),n=s,i=d,o=!0,(a=r)<2&&Ea.test(n)&&n.length<3&&(o=!0),0===a&&"index"===n.toLowerCase()&&(o=!1),a<2&&n.length<3&&!i&&(o=!1),o&&e.push(s),e},[]);return"".concat(n,"//").concat(a).concat(o.reverse().join("/"))}var za=new RegExp(".( |$)");function Ra(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:10;return e.trim().split(/\s+/).slice(0,t).join(" ")}function La(e){var t="utf-8",r=Ma.exec(e);null!==r&&(e=Pa(r,2)[1]);return oa(e)&&(t=e),t}var Ya=function(i){var o=0;return i=i.toString(),function(){var e=i.indexOf("\r\n",o),t=i.indexOf("\n",o),r=i.indexOf("\r",o),n=[e,t,r].sort(function(e,t){return t<e?1:e<t?-1:0}).filter(function(e){return-1!==e})[0];if(void 0!==n)return s(n,n===e?2:1);var a=i.length;return a===o?null:s(a,0)};function s(e,t){var r=i.substr(o,e-o);return o=e+t,r}},Wa=/^[A-Z_]+(\/\d\.\d)? /,Ia=/^([A-Z_]+) (.+) [A-Z]+\/(\d)\.(\d)$/,Ba=/^[A-Z]+\/(\d)\.(\d) (\d{3}) (.*)$/,qa=function(e,t){return r=function(e){e&&e._header&&(e=e._header);return e&&"function"==typeof e.toString?e.toString().trim():""}(e),n=t,s=(o=r).indexOf("\r\n"),i=-1===s?o:o.slice(0,s),n&&Wa.test(i)?Ha(r):null!==(a=i.match(Ia))?{method:a[1],url:a[2],version:{major:parseInt(a[3],10),minor:parseInt(a[4],10)},headers:Ha(r)}:null!==(a=i.match(Ba))?{version:{major:parseInt(a[1],10),minor:parseInt(a[2],10)},statusCode:parseInt(a[3],10),statusMessage:a[4],headers:Ha(r)}:Ha(r);var r,n,a,i,o,s};function Ha(e){var t,r,n,a={},i=Ya(e),o=i();for(Wa.test(o)&&(o=i());o;)o=(" "!==o[0]&&"\t"!==o[0]?(r&&Fa(r,n,a),t=o.indexOf(":"),r=o.substr(0,t),n=o.substr(t+1).trim()):n+=" "+o.trim(),i());return r&&Fa(r,n,a),a}function Fa(e,t,r){switch(e=e.toLowerCase()){case"set-cookie":void 0!==r[e]?r[e].push(t):r[e]=[t];break;case"content-type":case"content-length":case"user-agent":case"referer":case"host":case"authorization":case"proxy-authorization":case"if-modified-since":case"if-unmodified-since":case"from":case"location":case"max-forwards":case"retry-after":case"etag":case"last-modified":case"server":case"age":case"expires":void 0===r[e]&&(r[e]=t);break;default:"string"==typeof r[e]?r[e]+=", "+t:r[e]=t}}var Ga=XMLHttpRequest;if(!Ga)throw new Error("missing XMLHttpRequest");Ua.log={trace:Va,debug:Va,info:Va,warn:Va,error:Va};function Ua(e,t){if("function"!=typeof t)throw new Error("Bad callback given: "+t);if(!e)throw new Error("No options given");var r=e.onResponse;if((e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e))).onResponse=r,e.verbose&&(Ua.log=function(){var e,t,r={},n=["trace","debug","info","warn","error"];for(t=0;t<n.length;t++)r[e=n[t]]=Va,"undefined"!=typeof console&&console&&console[e]&&(r[e]=Ka(console,e));return r}()),e.url&&(e.uri=e.url,delete e.url),!e.uri&&""!==e.uri)throw new Error("options.uri is a required argument");if("string"!=typeof e.uri)throw new Error("options.uri must be a string");for(var n=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],a=0;a<n.length;a++)if(e[n[a]])throw new Error("options."+n[a]+" is not supported");if(e.callback=t,e.method=e.method||"GET",e.headers=e.headers||{},e.body=e.body||null,e.timeout=e.timeout||Ua.DEFAULT_TIMEOUT,e.headers.host)throw new Error("Options.headers.host is not supported");e.json&&(e.headers.accept=e.headers.accept||"application/json","GET"!==e.method&&(e.headers["content-type"]="application/json"),"boolean"!=typeof e.json?e.body=JSON.stringify(e.json):"string"!=typeof e.body&&(e.body=JSON.stringify(e.body)));var i=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.join("&")};if(e.qs){var o="string"==typeof e.qs?e.qs:i(e.qs);-1!==e.uri.indexOf("?")?e.uri=e.uri+"&"+o:e.uri=e.uri+"?"+o}if(e.form){if("string"==typeof e.form)throw"form name unsupported";if("POST"===e.method){var s=(e.encoding||"application/x-www-form-urlencoded").toLowerCase();switch(e.headers["content-type"]=s){case"application/x-www-form-urlencoded":e.body=i(e.form).replace(/%20/g,"+");break;case"multipart/form-data":var c=function(e){var t={};t.boundry="-------------------------------"+Math.floor(1e9*Math.random());var r=[];for(var n in e)e.hasOwnProperty(n)&&r.push("--"+t.boundry+'\nContent-Disposition: form-data; name="'+n+'"\n\n'+e[n]+"\n");return r.push("--"+t.boundry+"--"),t.body=r.join(""),t.length=t.body.length,t.type="multipart/form-data; boundary="+t.boundry,t}(e.form);e.body=c.body,e.headers["content-type"]=c.type;break;default:throw new Error("unsupported encoding:"+s)}}}return e.onResponse=e.onResponse||Va,!0===e.onResponse&&(e.onResponse=t,e.callback=Va),!e.headers.authorization&&e.auth&&(e.headers.authorization="Basic "+function(e){var t,r,n,a,i,o,s,c,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,f=0,d="",h=[];if(!e)return e;for(;t=e.charCodeAt(l++),r=e.charCodeAt(l++),n=e.charCodeAt(l++),a=(c=t<<16|r<<8|n)>>18&63,i=c>>12&63,o=c>>6&63,s=63&c,h[f++]=u.charAt(a)+u.charAt(i)+u.charAt(o)+u.charAt(s),l<e.length;);switch(d=h.join(""),e.length%3){case 1:d=d.slice(0,-2)+"==";break;case 2:d=d.slice(0,-1)+"="}return d}(e.auth.username+":"+e.auth.password)),function(r){var n=new Ga,a=!1,t=function(e){var t,r=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;try{t=location.href}catch(e){(t=document.createElement("a")).href="",t=t.href}var n=r.exec(t.toLowerCase())||[],a=r.exec(e.toLowerCase());return!(!a||a[1]==n[1]&&a[2]==n[2]&&(a[3]||("http:"===a[1]?80:443))==(n[3]||("http:"===n[1]?80:443)))}(r.uri),e="withCredentials"in n;if($a+=1,n.seq_id=$a,n.id=$a+": "+r.method+" "+r.uri,n._id=n.id,t&&!e){var i=new Error("Browser does not support cross-origin request: "+r.uri);return i.cors="unsupported",r.callback(i,n)}n.timeoutTimer=setTimeout(function(){a=!0;var e=new Error("ETIMEDOUT");return e.code="ETIMEDOUT",e.duration=r.timeout,Ua.log.error("Timeout",{id:n._id,milliseconds:r.timeout}),r.callback(e,n)},r.timeout);var o={response:!1,loading:!1,end:!1};n.onreadystatechange=function(e){if(a)return Ua.log.debug("Ignoring timed out state change",{state:n.readyState,id:n.id});if(Ua.log.debug("State change",{state:n.readyState,id:n.id,timed_out:a}),n.readyState===Ga.OPENED)for(var t in Ua.log.debug("Request started",{id:n.id}),r.headers)n.setRequestHeader(t,r.headers[t]);else n.readyState===Ga.HEADERS_RECEIVED?s():n.readyState===Ga.LOADING?(s(),c()):n.readyState===Ga.DONE&&(s(),c(),function(){if(!o.end){if(o.end=!0,Ua.log.debug("Request done",{id:n.id}),n.body=n.responseText,n.headers=qa(n.getAllResponseHeaders()),r.json)try{n.body=JSON.parse(n.responseText)}catch(e){return r.callback(e,n)}r.callback(null,n,n.body)}}())},n.open(r.method,r.uri,!0),t&&(n.withCredentials=!!r.withCredentials);return n.send(r.body),n;function s(){if(!o.response){if(o.response=!0,Ua.log.debug("Got response",{id:n.id,status:n.status}),clearTimeout(n.timeoutTimer),n.statusCode=n.status,t&&0==n.statusCode){var e=new Error("CORS request rejected: "+r.uri);return e.cors="rejected",o.loading=!0,o.end=!0,r.callback(e,n)}r.onResponse(null,n)}}function c(){o.loading||(o.loading=!0,Ua.log.debug("Response body loading",{id:n.id}))}}(e)}var $a=0;Ua.withCredentials=!1,Ua.DEFAULT_TIMEOUT=18e4,Ua.defaults=function(a,e){var t=function(n){return function(e,t){for(var r in e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e)),a)void 0===e[r]&&(e[r]=a[r]);return n(e,t)}},r=t(Ua);return r.get=t(Ua.get),r.post=t(Ua.post),r.put=t(Ua.put),r.head=t(Ua.head),r};function Va(){}function Ka(r,n){return function(e,t){"object"==typeof t&&(e+=" "+JSON.stringify(t));return r[n].call(r,e)}}["get","put","post","head"].forEach(function(e){var r=e.toUpperCase();Ua[e.toLowerCase()]=function(e){"string"==typeof e?e={method:r,uri:e}:(e=JSON.parse(JSON.stringify(e))).method=r;var t=[e].concat(Array.prototype.slice.apply(arguments,[1]));return Ua.apply(this,t)}}),Ua.couch=function(e,a){return"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,a=a||Va,Ua(e,function(e,t,r){if(e)return a(e,t,r);if((t.statusCode<200||299<t.statusCode)&&r.error){for(var n in e=new Error("CouchDB error: "+(r.error.reason||r.error.error)),r)e[n]=r[n];return a(e,t,r)}return a(e,t,r)})};var Ja=Ua,Za=Cn.browser?{}:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},Xa=1e4,Qa=new RegExp("^(".concat(["audio/mpeg","image/gif","image/jpeg","image/jpg"].join("|"),")$"),"i"),ei=5242880;function ti(e){return new Kr(function(n,a){Ja(e,function(e,t,r){e?a(e):n({body:r,response:t})})})}function ri(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(e.statusMessage&&"OK"!==e.statusMessage||200!==e.statusCode){if(!e.statusCode)throw new Error("Unable to fetch content. Original exception was ".concat(e.error));if(!t)throw new Error("Resource returned a response status code of ".concat(e.statusCode," and resource was instructed to reject non-200 status codes."))}var r=e.headers,n=r["content-type"],a=r["content-length"];if(Qa.test(n))throw new Error("Content-type for this resource was ".concat(n," and is not allowed."));if(ei<a)throw new Error("Content for this resource was too large. Maximum content length is ".concat(ei,"."));return!0}function ni(e,t){return ai.apply(this,arguments)}function ai(){return(ai=Zr(M.mark(function e(t,r){var n,a,i,o,s,c=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=2<c.length&&void 0!==c[2]?c[2]:{},r=r||Sn.parse(encodeURI(t)),a=pt({url:r.href,headers:pt({},Za,n),timeout:Xa,jar:!0,encoding:null,gzip:!0,followAllRedirects:!0},"undefined"!=typeof window?{}:{followRedirect:!0}),e.next=5,ti(a);case 5:return i=e.sent,o=i.response,s=i.body,e.prev=8,ri(o),e.abrupt("return",{body:s,response:o});case 13:return e.prev=13,e.t0=e.catch(8),e.abrupt("return",{error:!0,message:e.t0.message});case 16:case"end":return e.stop()}},e,this,[[8,13]])}))).apply(this,arguments)}function ii(a,i,o){return a("meta[".concat(i,"]")).each(function(e,t){var r=a(t),n=r.attr(i);r.attr(o,n),r.removeAttr(i)}),a}var oi=y.Reflect,si=oi&&oi.ownKeys||function(e){var t=Me.f(D(e)),r=me.f;return r?t.concat(r(e)):t};R(R.S,"Reflect",{ownKeys:si});var ci=S.Reflect.ownKeys,ui=new RegExp("transparent|spacer|blank","i"),li="mercury-parser-keep",fi=['iframe[src^="https://www.youtube.com"]','iframe[src^="https://www.youtube-nocookie.com"]','iframe[src^="http://www.youtube.com"]','iframe[src^="https://player.vimeo"]','iframe[src^="http://player.vimeo"]','iframe[src^="https://www.redditmedia.com"]'],di=["title","script","noscript","link","style","hr","embed","iframe","object"],hi=new RegExp("^(".concat(["src","srcset","sizes","type","href","class","id","alt","xlink:href","width","height"].join("|"),")$"),"i"),pi=["ul","ol","table","div","button","form"].join(","),mi=["h2","h3","h4","h5","h6"].join(","),gi=["a","blockquote","dl","div","img","p","pre","table"].join(","),vi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),yi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),_i="meta[name=generator][value^=WordPress]",bi=new RegExp("pag(e|ing|inat)","i"),Ai=new RegExp("^(".concat(["article","aside","blockquote","body","br","button","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","map","object","ol","output","p","pre","progress","section","table","tbody","textarea","tfoot","th","thead","tr","ul","video"].join("|"),")$"),"i"),wi=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","header","hidden","loader","login","menu","meta","nav","outbrain","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","taboola","tools"].join("|"),xi=new RegExp(wi,"i"),ki=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"].join("|"),Ei=new RegExp(ki,"i");function Mi(a){var i=!1;return a("br").each(function(e,t){var r=a(t),n=r.next().get(0);n&&"br"===n.tagName.toLowerCase()?(i=!0,r.remove()):i&&function(e,t){var r=2<arguments.length&&void 0!==arguments[2]&&arguments[2],n=t(e);if(r){for(var a=e.nextSibling,i=t("<p></p>");a&&(!a.tagName||!Ai.test(a.tagName));){var o=a,s=o.nextSibling;t(a).appendTo(i),a=s}return n.replaceWith(i),n.remove()}}(t,a,!(i=!1))}),a}function Si(e){var n,a;return e=Mi(e),(n=e)("div").each(function(e,t){var r=n(t);0===r.children(gi).length&&Ti(r,n,"p")}),(a=e=n)("span").each(function(e,t){var r=a(t);0===r.parents("p, div, li, figcaption").length&&Ti(r,a,"p")}),e=a}function Ti(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"p",n=e.get(0);if(!n)return t;var a,i=ns(n)||{},o=ci(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join(" ");return a=t.browser?"noscript"===n.tagName.toLowerCase()?e.text():e.html():e.contents(),e.replaceWith("<".concat(r," ").concat(o,">").concat(a,"</").concat(r,">")),t}function Ci(e,s){return e.find("img").each(function(e,t){var r,n,a,i,o=s(t);n=Aa((r=o).attr("height"),10),a=Aa(r.attr("width"),10)||20,(n||20)<10||a<10?r.remove():n&&r.removeAttr("height"),i=o,ui.test(i.attr("src"))&&i.remove()}),s}var Di=function(e){if(Ta(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}},Oi=function(e,t,r){t in e?N.f(e,t,w(0,r)):e[t]=r};R(R.S+R.F*!Cr(function(e){}),"Array",{from:function(e){var t,r,n,a,i=ut(e),o="function"==typeof this?this:Array,s=arguments.length,c=1<s?arguments[1]:void 0,u=void 0!==c,l=0,f=Vt(i);if(u&&(c=C(c,2<s?arguments[2]:void 0,2)),null==f||o==Array&&Ut(f))for(r=new o(t=ie(i.length));l<t;l++)Oi(r,l,u?c(i[l],l):i[l]);else for(a=f.call(i),r=new o;!(n=a.next()).done;l++)Oi(r,l,u?Ht(a,c,[n.value,l],!0):n.value);return r.length=l,r}});var Ni=S.Array.from,Pi=V("iterator"),ji=S.isIterable=function(e){var t=Object(e);return void 0!==t[Pi]||"@@iterator"in t||vt.hasOwnProperty(Bt(t))};var zi=function(e){if(ji(Object(e))||"[object Arguments]"===Object.prototype.toString.call(e))return Ni(e)};var Ri=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")};var Li=function(e){return Di(e)||zi(e)||Ri()};function Yi(e,t){return e.find("*").each(function(e,t){var r=ns(t);!function(t,r){if(t.attribs)t.attribs=r;else if(t.attributes){for(;0<t.attributes.length;)t.removeAttribute(t.attributes[0].name);ci(r).forEach(function(e){t.setAttribute(e,r[e])})}}(t,ci(r).reduce(function(e,t){return hi.test(t)?pt({},e,ht({},t,r[t])):e},{}))}),t(".".concat(li),e).removeClass(li),e}var Wi=new RegExp("^(".concat(["br","b","i","label","hr","area","base","basefont","input","img","link","meta"].join("|"),")$"),"i"),Ii=[[".hentry",".entry-content"],["entry",".entry-content"],[".entry",".entry_content"],[".post",".postbody"],[".post",".post_body"],[".post",".post-body"]],Bi=new RegExp(["figure","photo","image","caption"].join("|"),"i"),qi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),Hi=new RegExp("entry-content-asset","i"),Fi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),Gi=new RegExp("^(p|li|span|pre)$","i"),Ui=new RegExp("^(td|blockquote|ol|ul|dl)$","i"),$i=new RegExp("^(address|form)$","i");function Vi(e){var t=e.attr("class"),r=e.attr("id"),n=0;return r&&(qi.test(r)&&(n+=25),Fi.test(r)&&(n-=25)),t&&(0===n&&(qi.test(t)&&(n+=25),Fi.test(t)&&(n-=25)),Bi.test(t)&&(n+=10),Hi.test(t)&&(n+=25)),n}var Ki=y.parseFloat,Ji=ga.trim,Zi=1/Ki(la+"-0")!=-1/0?function(e){var t=Ji(String(e),3),r=Ki(t);return 0===r&&"-"==t.charAt(0)?-0:r}:Ki;R(R.G+R.F*(parseFloat!=Zi),{parseFloat:Zi});var Xi=S.parseFloat;function Qi(e){return Xi(e.attr("score"))||null}function eo(e){return(e.match(/,/g)||[]).length}var to=new RegExp("^(p|pre)$","i");function ro(e){var t=1,r=e.text().trim(),n=r.length;return n<25?0:(t+=eo(r),t+=function(e){var t,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"p",n=e/50;return 0<n?(t=to.test(r)?n-2:n-1.25,Math.min(Math.max(t,0),3)):0}(n),":"===r.slice(-1)&&(t-=1),t)}function no(e,t,r){return e.attr("score",r),e}function ao(e,t,r){try{no(e,0,io(e,t)+r)}catch(e){}return e}function io(e,t){var r,n,a,i=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],o=Qi(e);return o||(o=oo(e),i&&(o+=Vi(e)),r=t,n=o,(a=e.parent())&&ao(a,r,.25*n),o)}function oo(e){var t=e.get(0).tagName;return Gi.test(t)?ro(e):"div"===t.toLowerCase()?5:Ui.test(t)?3:$i.test(t)?-3:"th"===t.toLowerCase()?-5:0}function so(e,t,r){var n,a;e&&(a=t,(n=e).get(0)&&"span"===n.get(0).tagName&&Ti(n,a,"div"),ao(e,t,r))}function co(i,o){return i("p, pre").not("[score]").each(function(e,t){var r=i(t),n=(r=no(r,0,io(r,i,o))).parent(),a=oo(r);so(n,i,a),n&&so(n.parent(),i,a/2)}),i}function uo(u,l,f){if(!u.parent().length)return u;var d=Math.max(10,.25*l),h=f("<div></div>");return u.parent().children().each(function(e,t){var r=f(t);if(Wi.test(t.tagName))return null;var n,a=Qi(r);if(a)if(r.get(0)===u.get(0))h.append(r);else{var i=0,o=Vo(r);if(o<.05&&(i+=20),.5<=o&&(i-=20),r.attr("class")===u.attr("class")&&(i+=.2*l),d<=a+i)return h.append(r);if("p"===t.tagName){var s=r.text(),c=$o(s);if(80<c&&o<.25)return h.append(r);if(c<=80&&0===o&&(n=s,za.test(n)))return h.append(r)}}return null}),1===h.children().length&&h.children().first().get(0)===u.get(0)?u:h}function lo(e,a){return a(pi,e).each(function(e,t){var r=a(t);if(!(r.hasClass(li)||0<r.find(".".concat(li)).length)){var n=Qi(r);n||no(r,0,n=io(r,a)),n<0?r.remove():function(e,t,r){if(!e.hasClass("entry-content-asset")){var n=ua(e.text());if(eo(n)<10){if(t("p",e).length/3<t("input",e).length)return e.remove();var a=n.length,i=t("img",e).length;if(a<25&&0===i)return e.remove();var o=Vo(e);if(r<25&&.2<o&&75<a)return e.remove();if(25<=r&&.5<o){var s=e.get(0).tagName.toLowerCase();if("ol"===s||"ul"===s){var c=e.prev();if(c&&":"===ua(c.text()).slice(-1))return}return e.remove()}0<t("script",e).length&&a<150&&e.remove()}}}(r,a,n)}}),a}var fo,ho,po,mo,go,vo,yo,_o,bo,Ao,wo,xo,ko,Eo,Mo,So,To,Co,Do,Oo,No,Po=function(e,t){if(!l(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},jo=N.f,zo=U.fastKey,Ro=v?"_s":"size",Lo=function(e,t){var r,n=zo(t);if("F"!==n)return e._i[n];for(r=e._f;r;r=r.n)if(r.k==t)return r},Yo={getConstructor:function(e,i,r,n){var a=e(function(e,t){qt(e,a,i,"_i"),e._t=i,e._i=ke(null),e._f=void 0,e._l=void 0,e[Ro]=0,null!=t&&Kt(t,r,e[n],e)});return br(a.prototype,{clear:function(){for(var e=Po(this,i),t=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete t[r.i];e._f=e._l=void 0,e[Ro]=0},delete:function(e){var t=Po(this,i),r=Lo(t,e);if(r){var n=r.n,a=r.p;delete t._i[r.i],r.r=!0,a&&(a.n=n),n&&(n.p=a),t._f==r&&(t._f=n),t._l==r&&(t._l=a),t[Ro]--}return!!r},forEach:function(e){Po(this,i);for(var t,r=C(e,1<arguments.length?arguments[1]:void 0,3);t=t?t.n:this._f;)for(r(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!Lo(Po(this,i),e)}}),v&&jo(a.prototype,"size",{get:function(){return Po(this,i)[Ro]}}),a},def:function(e,t,r){var n,a,i=Lo(e,t);return i?i.v=r:(e._l=i={i:a=zo(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=i),n&&(n.n=i),e[Ro]++,"F"!==a&&(e._i[a]=i)),e},getEntry:Lo,setStrong:function(e,r,t){St(e,r,function(e,t){this._t=Po(e,r),this._k=t,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Ct(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Ct(1))},t?"entries":"values",!t,!0),wr(r)}},Wo=V("species"),Io=function(e,t){return ge(r=e)&&("function"!=typeof(n=r.constructor)||n!==Array&&!ge(n.prototype)||(n=void 0),l(n)&&null===(n=n[Wo])&&(n=void 0)),new(void 0===n?Array:n)(t);var r,n},Bo=N.f,qo=(po=1==(fo=0),mo=2==fo,go=3==fo,vo=4==fo,yo=6==fo,_o=5==fo||yo,bo=ho||Io,function(e,t,r){for(var n,a,i=ut(e),o=d(i),s=C(t,r,3),c=ie(o.length),u=0,l=po?bo(e,c):mo?bo(e,0):void 0;u<c;u++)if((_o||u in o)&&(a=s(n=o[u],u,i),fo))if(po)l[u]=a;else if(a)switch(fo){case 3:return!0;case 5:return n;case 6:return u;case 2:l.push(n)}else if(vo)return!1;return yo?-1:go||vo?vo:l});wo=function(e){return function(){return e(this,0<arguments.length?arguments[0]:void 0)}},xo={add:function(e){return Yo.def(Po(this,"Set"),e=0===e?0:e,e)}},ko=Yo,So=y[Ao="Set"],Co=Eo?"set":"add",Do=(To=So)&&To.prototype,Oo={},v&&"function"==typeof To&&(Mo||Do.forEach&&!g(function(){(new To).entries().next()}))?(To=wo(function(e,t){qt(e,To,Ao,"_c"),e._c=new So,null!=t&&Kt(t,Eo,e[Co],e)}),qo("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(n){var a="add"==n||"set"==n;n in Do&&(!Mo||"clear"!=n)&&P(To.prototype,n,function(e,t){if(qt(this,To,n),!a&&Mo&&!l(e))return"get"==n&&void 0;var r=this._c[n](0===e?0:e,t);return a?this:r})}),Mo||Bo(To.prototype,"size",{get:function(){return this._c.size}})):(To=ko.getConstructor(wo,Ao,Eo,Co),br(To.prototype,xo),U.NEED=!0),Z(To,Ao),Oo[Ao]=To,R(R.G+R.W+R.F,Oo),Mo||ko.setStrong(To,Ao,Eo);R(R.P+R.R,"Set",{toJSON:(No="Set",function(){if(Bt(this)!=No)throw TypeError(No+"#toJSON isn't generic");return Kt(this,!(t=[]),t.push,t,e),t;var e,t})});var Ho;Ho="Set",R(R.S,Ho,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}});var Fo;Fo="Set",R(R.S,Fo,{from:function(e){var t,r,n,a,i=arguments[1];return T(this),(t=void 0!==i)&&T(i),null==e?new this:(r=[],t?(n=0,a=C(i,arguments[2],2),Kt(e,!1,function(e){r.push(a(e,n++))})):Kt(e,!1,r.push,r),new this(r))}});var Go=S.Set;function Uo(e,r,n){var i;return["href","src"].forEach(function(e){return a=n,i=e,o=(t=r)("base").attr("href"),void t("[".concat(i,"]")).each(function(e,t){var r=ns(t)[i];if(r){var n=Sn.resolve(o||a,r);as(t,i,n)}});var t,a,i,o}),i=n,r("[srcset]",e).each(function(e,t){var r=ns(t).srcset;if(r){var n=r.match(/(?:\s*)(\S+(?:\s*[\d.]+[wx])?)(?:\s*,\s*)?/g);if(!n)return;var a=n.map(function(e){var t=e.trim().replace(/,$/,"").split(/\s+/);return t[0]=Sn.resolve(i,t[0]),t.join(" ")});as(t,"srcset",Li(new Go(a)).join(", "))}}),e}function $o(e){return e.trim().replace(/\s+/g," ").length}function Vo(e){var t=$o(e.text()),r=$o(e.find("a").text());return 0<t?r/t:0===t&&0<r?1:0}var Ko=X.f("iterator");ee("asyncIterator"),ee("observable");var Jo=S.Symbol,Zo=e(function(t){function r(e){return(r="function"==typeof Jo&&"symbol"==typeof Ko?function(e){return typeof e}:function(e){return e&&"function"==typeof Jo&&e.constructor===Jo&&e!==Jo.prototype?"symbol":typeof e})(e)}function n(e){return"function"==typeof Jo&&"symbol"===r(Ko)?t.exports=n=function(e){return r(e)}:t.exports=n=function(e){return e&&"function"==typeof Jo&&e.constructor===Jo&&e!==Jo.prototype?"symbol":r(e)},n(e)}t.exports=n});function Xo(n,e,t){var a=!(3<arguments.length&&void 0!==arguments[3])||arguments[3],r=e.filter(function(e){return-1!==t.indexOf(e)}),i=!0,o=!1,s=void 0;try{for(var c,u=function(){var e=c.value,t=n("meta[".concat("name",'="').concat(e,'"]')).map(function(e,t){return n(t).attr("value")}).toArray().filter(function(e){return""!==e});if(1===t.length){var r;if(a)r=ts(t[0],n);else r=Pa(t,1)[0];return{v:r}}},l=Da(r);!(i=(c=l.next()).done);i=!0){var f=u();if("object"===Zo(f))return f.v}}catch(e){o=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(o)throw s}}return null}function Qo(e,t){return!(e.children().length>t)&&void 0===e.parents().toArray().find(function(e){var t=ns(e),r=t.class,n=t.id,a="".concat(r," ").concat(n);return a.includes("comment")})}function es(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:1,n=!(3<arguments.length&&void 0!==arguments[3])||arguments[3],a=!0,i=!1,o=void 0;try{for(var s,c=Da(t);!(a=(s=c.next()).done);a=!0){var u=e(s.value);if(1===u.length){var l=e(u[0]);if(Qo(l,r)){var f=void 0;if(f=n?l.text():l.html())return f}}}}catch(e){i=!0,o=e}finally{try{a||null==c.return||c.return()}finally{if(i)throw o}}return null}function ts(e,t){var r=t("<span>".concat(e,"</span>")).text();return""===r?e:r}function rs(e){return 100<=e.text().trim().length}function ns(e){var t=e.attribs,n=e.attributes;return t||!n?t:ci(n).reduce(function(e,t){var r=n[t];return r.name&&r.value&&(e[r.name]=r.value),e},{})}function as(e,t,r){return e.attribs?e.attribs[t]=r:e.attributes&&e.setAttribute(t,r),e}var is=new RegExp("https?://","i"),os=".(png|gif|jpe?g)",ss=new RegExp("".concat(os),"i"),cs=new RegExp("".concat(os,"(\\?\\S+)?(\\s*[\\d.]+[wx])"),"i"),us=["script","style","form"].join(",");function ls(i){return i("img").each(function(e,n){var a=ns(n);ci(a).forEach(function(e){var t=a[e];if("srcset"!==e&&is.test(t)&&cs.test(t))i(n).attr("srcset",t);else if("src"!==e&&"srcset"!==e&&is.test(t)&&ss.test(t)){var r=function(e){try{var t=JSON.parse(e).src;if("string"==typeof t)return t}catch(e){return!1}return!1}(t);r?i(n).attr("src",r):i(n).attr("src",t)}})}),i}function fs(e,t){return"comment"===t.type}function ds(e){var t;return e(us).remove(),(t=e).root().find("*").contents().filter(fs).remove(),e=t}var hs,ps={create:(hs=Zr(M.mark(function e(t,r,n){var a,i,o=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(a=3<o.length&&void 0!==o[3]?o[3]:{},!r){e.next=6;break}i={body:r,response:{statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}},alreadyDecoded:!0},e.next=9;break;case 6:return e.next=8,ni(t,n,a);case 8:i=e.sent;case 9:if(i.error)return i.failed=!0,e.abrupt("return",i);e.next=12;break;case 12:return e.abrupt("return",this.generateDoc(i));case 13:case"end":return e.stop()}},e,this)})),function(e,t,r){return hs.apply(this,arguments)}),generateDoc:function(e){var t=e.body,r=e.response,n=e.alreadyDecoded,a=void 0!==n&&n,i=r.headers["content-type"],o=void 0===i?"":i;if(!o.includes("html")&&!o.includes("text"))throw new Error("Content does not appear to be text.");var s=this.encodeDoc({content:t,contentType:o,alreadyDecoded:a});if(0===s.root().children().length)throw new Error("No children, likely a bad parse.");return s=ds(s=ls(s=ii(ii(s,"content","value"),"property","name")))},encodeDoc:function(e){var t=e.content,r=e.contentType,n=e.alreadyDecoded;if(void 0!==n&&n)return Cn.load(t);var a=La(r),i=sa(t,a),o=Cn.load(i),s=o(Cn.browser?"meta[http-equiv=content-type]":"meta[http-equiv=content-type i]").attr("content")||o("meta[charset]").attr("charset"),c=La(s);return s&&c!==a&&(i=sa(t,c),o=Cn.load(i)),o}},ms=M.mark(gs);function gs(){var t,r,n=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t=0<n.length&&void 0!==n[0]?n[0]:1,r=1<n.length&&void 0!==n[1]?n[1]:1;case 2:if(t<=r)return e.next=5,t+=1;e.next=7;break;case 5:e.next=2;break;case 7:case"end":return e.stop()}},ms,this)}var vs=Object.assign,ys=!vs||g(function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach(function(e){t[e]=e}),7!=vs({},e)[r]||Object.keys(vs({},t)).join("")!=n})?function(e,t){for(var r=ut(e),n=arguments.length,a=1,i=me.f,o=h.f;a<n;)for(var s,c=d(arguments[a++]),u=i?pe(c).concat(i(c)):pe(c),l=u.length,f=0;f<l;)o.call(c,s=u[f++])&&(r[s]=c[s]);return r}:vs;R(R.S+R.F,"Object",{assign:ys});var _s=S.Object.assign,bs=function(r,e){return e.reduce(function(e,t){return e[t]=r,e},{})};function As(e){return e.supportedDomains?bs(e,[e.domain].concat(Li(e.supportedDomains))):bs(e,[e.domain])}var ws={};function xs(e){return e&&e.domain?(_s(ws,As(e)),ws):{error:!0,message:"Unable to add custom extractor. Invalid parameters."}}var ks={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},Es={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var r=t.browser?t(e.text()):e.children();return 1===r.length&&void 0!==r.get(0)&&"img"===r.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},Ms={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var r=JSON.parse(e.attr("data-props")).sources[0].src,n=t("<img />").attr("src",r);e.replaceWith(n)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ss={domain:"medium.com",title:{selectors:["h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:["article"],transforms:{"section span:first-of-type":function(e){var t=e.html();1===t.length&&/^[a-zA-Z()]+$/.test(t)&&e.replaceWith(t)},iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,r=decodeURIComponent(e.attr("data-thumbnail")),n=e.parents("figure");if(t.test(r)){var a=r.match(t),i=Pa(a,2),o=(i[0],i[1]);e.attr("src","https://www.youtube.com/embed/".concat(o));var s=n.find("figcaption");n.empty().append([e,s])}else n.remove()},figure:function(e){if(!(0<e.find("iframe").length)){var t=e.find("img").slice(-1)[0],r=e.find("figcaption");e.empty().append([t,r])}},img:function(e){Aa(e.attr("width"),10)<100&&e.remove()}},clean:["span a","svg"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ts={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".pane-node-body"],transforms:{".pane-node-body":function(e,t){var r=Pa(Ts.lead_image_url.selectors[0],2),n=r[0],a=r[1],i=t(n).attr(a);i&&e.prepend('<img src="'.concat(i,'" />'))}},clean:[]}},Cs={domain:"genius.com",title:{selectors:["h1"]},author:{selectors:["h2 a"]},date_published:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.release_date}]]},dek:{selectors:[]},lead_image_url:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.album.cover_art_url}]]},content:{selectors:[".lyrics"],transforms:{},clean:[]}},Ds={domain:"wired.jp",title:{selectors:["h1.post-title"]},author:{selectors:['p[itemprop="author"]']},date_published:{selectors:[["time","datetime"]]},dek:{selectors:[".post-intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.article-detail"],transforms:{"img[data-original]":function(e){var t=e.attr("data-original"),r=e.attr("src"),n=Sn.resolve(r,t);e.attr("src",n)}},clean:[".post-category","time","h1.post-title",".social-area-syncer"]}},Os={domain:"www.abendblatt.de",title:{selectors:["h2.article__header__headline"]},author:{selectors:["span.author-info__name-text"]},date_published:{selectors:[["time.article__header__date","datetime"]]},dek:{selectors:["span[itemprop='description']"]},lead_image_url:{selectors:[["meta[name='og:image']","value"]]},content:{selectors:["div.article__body"],transforms:{p:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",r=0,n=e.text();r<n.length;r+=1){var a=n.charCodeAt(r);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":33<a&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null},div:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",r=0,n=e.text();r<n.length;r+=1){var a=n.charCodeAt(r);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":33<a&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null}},clean:[]}},Ns=Object.freeze({BloggerExtractor:ks,NYMagExtractor:Es,WikipediaExtractor:{domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},TwitterExtractor:{domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var r=e.find(".tweet"),n=t('<div id="TWEETS_GO_HERE"></div>');n.append(r),e.replaceWith(n)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},NYTimesExtractor:{domain:"www.nytimes.com",title:{selectors:["h1.g-headline",'h1[itemprop="headline"]',"h1.headline","h1 .balancedHeadline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline",['meta[name="byl"]',"value"]]},content:{selectors:["div.g-blocks",'section[name="articleBody"]',"article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src");t=t.replace("{{size}}",640),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},TheAtlanticExtractor:{domain:"www.theatlantic.com",title:{selectors:["h1",".c-article-header__hed"]},author:{selectors:[['meta[name="author"]',"value"],".c-byline__author"]},content:{selectors:["article",".article-body"],transforms:[],clean:[".partner-box",".callout",".c-article-writer__image",".c-article-writer__content",".c-letters-cta__text",".c-footer__logo",".c-recirculation-link",".twitter-tweet"]},dek:{selectors:[['meta[name="description"]',"value"]]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]]},lead_image_url:{selectors:[['img[itemprop="url"]',"src"]]},next_page_url:null,excerpt:null},NewYorkerExtractor:{domain:"www.newyorker.com",title:{selectors:['h1[class^="content-header"]','h1[class^="ArticleHeader__hed"]',['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"],'div[class^="ArticleContributors"] a[rel="author"]','article header div[class*="Byline__multipleContributors"]']},content:{selectors:["article.article.main-content",'main[class^="Layout__content"]'],transforms:[],clean:['footer[class^="ArticleFooter__footer"]']},date_published:{selectors:["time.content-header__publish-date",['meta[name="pubdate"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:["div.content-header__dek",'h2[class^="ArticleHeader__dek"]']},next_page_url:null,excerpt:null},WiredExtractor:{domain:"www.wired.com",title:{selectors:["h1.content-header__hed","h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"],'a[rel="author"]']},content:{selectors:["article.article.main-content","article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo"]},date_published:{selectors:["time.content-header__publish-date",['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},MSNExtractor:{domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},YahooExtractor:{domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},BuzzfeedExtractor:{domain:"www.buzzfeed.com",title:{selectors:['h1[id="post-title"]']},author:{selectors:['a[data-action="user/username"]',"byline__author"]},content:{selectors:[[".longform_custom_header_media","#buzz_sub_buzz"],"#buzz_sub_buzz"],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print"]},date_published:{selectors:[".buzz-datetime"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},WikiaExtractor:{domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},LittleThingsExtractor:{domain:"www.littlethings.com",title:{selectors:["h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},PoliticoExtractor:{domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[['div[itemprop="author"] meta[itemprop="name"]',"value"],".story-meta__authors .vcard",".story-main-content .byline .vcard"]},content:{selectors:[[".story-text"],".story-main-content",".story-core"],transforms:[],clean:["figcaption",".story-meta",".ad"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"],[".story-meta__details time[datetime]","datetime"],[".story-main-content .timestamp time[datetime]","datetime"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]}},DeadspinExtractor:{domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com","avclub.com","clickhole.com","splinternews.com","theonion.com","theroot.com","thetakeout.com","theinventory.com"],title:{selectors:["h1.headline"]},author:{selectors:[".author"]},content:{selectors:[".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/".concat(t))}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},BroadwayWorldExtractor:{domain:"www.broadwayworld.com",title:{selectors:["h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},ApartmentTherapyExtractor:Ms,MediumExtractor:Ss,WwwTmzComExtractor:{domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},WwwWashingtonpostComExtractor:{domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-author-name"]},date_published:{selectors:[['.author-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return 0<e.has("img,iframe,video").length?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},WwwHuffingtonpostComExtractor:{domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},NewrepublicComExtractor:{domain:"newrepublic.com",title:{selectors:["h1.article-headline",".minutes-primary h1.minute-title"]},author:{selectors:["div.author-list",".minutes-primary h3.minute-byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-cover","div.content-body"],[".minute-image",".minutes-primary div.content-body"]],transforms:{},clean:["aside"]}},MoneyCnnComExtractor:{domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},WwwThevergeComExtractor:{domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},WwwCnnComExtractor:{domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[".metadata__byline__author"]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){return e.html()?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},WwwAolComExtractor:{domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},WwwYoutubeComExtractor:{domain:"www.youtube.com",title:{selectors:[".watch-title","h1.watch-title-container"]},author:{selectors:[".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:[["#player-api","#eow-description"]],transforms:{"#player-api":function(e,t){var r=t('meta[itemProp="videoId"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'.concat(r,'" frameborder="0" allowfullscreen></iframe>'))}},clean:[]}},WwwTheguardianComExtractor:{domain:"www.theguardian.com",title:{selectors:[".content__headline"]},author:{selectors:["p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},WwwSbnationComExtractor:{domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},WwwBloombergComExtractor:{domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title","h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author"]},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},WwwBustleComExtractor:{domain:"www.bustle.com",title:{selectors:["h1.post-page__title"]},author:{selectors:["div.content-meta__author"]},date_published:{selectors:[["time.content-meta__published-date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-page__body"],transforms:{},clean:[]}},WwwNprOrgExtractor:{domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},WwwRecodeNetExtractor:{domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},QzComExtractor:{domain:"qz.com",title:{selectors:["article header h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[name="twitter:image"]',"content"]]},content:{selectors:["#article-content"],transforms:{},clean:[]}},WwwDmagazineComExtractor:{domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago",format:"MMMM D, YYYY h:mm a"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},WwwReutersComExtractor:{domain:"www.reuters.com",title:{selectors:["h1.article-headline"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-text"],transforms:{".article-subtitle":"h4"},clean:["#article-byline .author"]}},MashableComExtractor:{domain:"mashable.com",title:{selectors:["h1.title"]},author:{selectors:["span.author_name a"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},WwwChicagotribuneComExtractor:{domain:"www.chicagotribune.com",title:{selectors:["h1.trb_ar_hl_t"]},author:{selectors:["span.trb_ar_by_nm_au"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.trb_ar_page"],transforms:{},clean:[]}},WwwVoxComExtractor:{domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},NewsNationalgeographicComExtractor:{domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var r=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");r&&e.prepend(t('<img class="__image-lead__" src="'.concat(r,'"/>')))}},clean:[".pull-quote.pull-quote--large"]}},WwwNationalgeographicComExtractor:{domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var r=e.children().first();if(r.hasClass("imageGroup")){var n=r.find(".media--medium__container").children().first(),a=n.data("platform-image1-path"),i=n.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n <img src="'.concat(a,'"/>\n <img src="').concat(i,'"/>\n </div>')))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'.concat(o,'"/>')))}}},clean:[".pull-quote.pull-quote--small"]}},WwwLatimesComExtractor:{domain:"www.latimes.com",title:{selectors:[".trb_ar_hl"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},PagesixComExtractor:{domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:["h1 a"]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},ThefederalistpapersOrgExtractor:{domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:["main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[["p[style]"]]}},WwwCbssportsComExtractor:{domain:"www.cbssports.com",title:{selectors:[".article-headline"]},author:{selectors:[".author-name"]},date_published:{selectors:[[".date-original-reading-time time","datetime"]],timezone:"UTC"},dek:{selectors:[".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwMsnbcComExtractor:Ts,WwwThepoliticalinsiderComExtractor:{domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},WwwMentalflossComExtractor:{domain:"www.mentalfloss.com",title:{selectors:["h1.title",".title-group",".inner"]},author:{selectors:[".field-name-field-enhanced-authors"]},date_published:{selectors:[".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.field.field-name-body"],transforms:{},clean:[]}},AbcnewsGoComExtractor:{domain:"abcnews.go.com",title:{selectors:[".article-header h1"]},author:{selectors:[".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-copy"],transforms:{},clean:[]}},WwwNydailynewsComExtractor:{domain:"www.nydailynews.com",title:{selectors:["h1#ra-headline"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},WwwCnbcComExtractor:{domain:"www.cnbc.com",title:{selectors:["h1.title","h1.ArticleHeader-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story","div.ArticleBody-articleBody"],transforms:{},clean:[]}},WwwPopsugarComExtractor:{domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ObserverComExtractor:{domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},PeopleComExtractor:{domain:"people.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author.url.fn"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__inner"],transforms:{},clean:[]}},WwwUsmagazineComExtractor:{domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:["time.article-published-date"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body-inner"],transforms:{},clean:[".module-related"]}},WwwRollingstoneComExtractor:{domain:"www.rollingstone.com",title:{selectors:["h1.content-title"]},author:{selectors:["a.content-author.tracked-offpage"]},date_published:{selectors:["time.content-published-date"],timezone:"America/New_York"},dek:{selectors:[".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".module-related"]}},twofortysevensportsComExtractor:{domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.body.article"],transforms:{},clean:[]}},UproxxComExtractor:{domain:"uproxx.com",title:{selectors:["div.post-top h1"]},author:{selectors:[".post-top .authorname"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},WwwEonlineComExtractor:{domain:"www.eonline.com",title:{selectors:["h1.article__title"]},author:{selectors:[".entry-meta__author a"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},WwwMiamiheraldComExtractor:{domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},WwwRefinery29ComExtractor:{domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},WwwMacrumorsComExtractor:{domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:[".author-url"]},date_published:{selectors:[".article .byline"],format:"dddd MMMM D, YYYY h:mm A zz",timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwAndroidcentralComExtractor:{domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".meta-by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[[".image-large","src"]]},content:{selectors:[".article-body"],transforms:{},clean:[".intro","blockquote"]}},WwwSiComExtractor:{domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},dek:{selectors:[".quick-hit ul"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},WwwRawstoryComExtractor:{domain:"www.rawstory.com",title:{selectors:[".blog-title"]},author:{selectors:[".blog-author a:first-of-type"]},date_published:{selectors:[".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog-content"],transforms:{},clean:[]}},WwwCnetComExtractor:{domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},WwwTodayComExtractor:{domain:"www.today.com",title:{selectors:["h1.entry-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-container"],transforms:{},clean:[".label-comment"]}},WwwAlComExtractor:{domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwThepennyhoarderComExtractor:{domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text"],transforms:{},clean:[]}},WwwWesternjournalismComExtractor:{domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},FusionNetExtractor:{domain:"fusion.net",title:{selectors:[".post-title",".single-title",".headline"]},author:{selectors:[".show-for-medium .byline"]},date_published:{selectors:[["time.local-time","datetime"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-featured-media",".article-content"],".article-content"],transforms:{".fusion-youtube-oembed":"figure"},clean:[]}},WwwAmericanowComExtractor:{domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},ScienceflyComExtractor:{domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},HellogigglesComExtractor:{domain:"hellogiggles.com",title:{selectors:[".title"]},author:{selectors:[".author-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},ThoughtcatalogComExtractor:{domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark"]}},WwwInquisitrComExtractor:{domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},WwwNbcnewsComExtractor:{domain:"www.nbcnews.com",title:{selectors:["div.article-hed h1"]},author:{selectors:["span.byline_author"]},date_published:{selectors:[[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body"],transforms:{},clean:[]}},FortuneComExtractor:{domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},WwwLinkedinComExtractor:{domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},ObamawhitehouseArchivesGovExtractor:{domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},WwwOpposingviewsComExtractor:{domain:"www.opposingviews.com",title:{selectors:["h1.title"]},author:{selectors:["div.date span span a"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[".show-for-small-only"]}},WwwProspectmagazineCoUkExtractor:{domain:"www.prospectmagazine.co.uk",title:{selectors:[".page-title"]},author:{selectors:[".aside_author .title"]},date_published:{selectors:[".post-info"],timezone:"Europe/London"},dek:{selectors:[".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article .post_content"],transforms:{},clean:[]}},ForwardComExtractor:{domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".donate-box",".message",".subtitle"]}},WwwQdailyComExtractor:{domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},GothamistComExtractor:{domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".author"]},date_published:{selectors:["abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},WwwFoolComExtractor:{domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:["header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'.concat(t,'"/></figure>'))},".caption":"figcaption"},clean:["#pitch"]}},WwwSlateComExtractor:{domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},IciRadioCanadaCaExtractor:{domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],format:"YYYY-MM-DD|HH[h]mm",timezone:"America/New_York"},dek:{selectors:[".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},WwwFortinetComExtractor:{domain:"www.fortinet.com",title:{selectors:["h1"]},author:{selectors:[".b15-blog-meta__author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}}}},WwwFastcompanyComExtractor:{domain:"www.fastcompany.com",title:{selectors:["h1"]},author:{selectors:[".post__by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".post__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post__article"]}},BlisterreviewComExtractor:{domain:"blisterreview.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:["span.author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.entry-date","datetime"],['meta[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[itemprop="image"]',"content"],['meta[name="twitter:image"]',"content"],["img.attachment-large","src"]]},content:{selectors:[[".elementor-section-wrap",".elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text"]],transforms:{figcaption:"p"},clean:[".comments-area"]}},NewsMynaviJpExtractor:{domain:"news.mynavi.jp",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["main div.article-author a.article-author__name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main article div"],transforms:{img:function(e){var t=e.attr("data-original");""!==t&&e.attr("src",t)}},clean:[]}},ClinicaltrialsGovExtractor:{domain:"clinicaltrials.gov",title:{selectors:["h1.tr-solo_record"]},author:{selectors:["div#sponsor.tr-info-text"]},date_published:{selectors:['div:has(> span.term[data-term="Last Update Posted"])']},content:{selectors:["div#tab-body"],transforms:{},clean:[".usa-alert> img"]}},GithubComExtractor:{domain:"github.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[]},date_published:{selectors:[['span[itemprop="dateModified"] relative-time',"datetime"]]},dek:{selectors:['span[itemprop="about"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#readme article"]],transforms:{},clean:[]}},WwwRedditComExtractor:{domain:"www.reddit.com",title:{selectors:['div[data-test-id="post-content"] h2']},author:{selectors:['div[data-test-id="post-content"] a[href*="user/"]']},date_published:{selectors:['div[data-test-id="post-content"] a[data-click-id="timestamp"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[['div[data-test-id="post-content"] p'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])','div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])'],'div[data-test-id="post-content"]'],transforms:{'div[role="img"]':function(e){var t=e.find("img"),r=e.css("background-image");return 1===t.length&&r?(t.attr("src",r.match(/\((.*?)\)/)[1].replace(/('|")/g,"")),t):e}},clean:[".icon"]}},OtrsComExtractor:{domain:"otrs.com",title:{selectors:["#main article h1"]},author:{selectors:["div.dateplusauthor a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main article"],defaultCleaner:!1,transforms:{},clean:["div.dateplusauthor","div.gr-12.push-6.footershare","#atftbx","div.category-modul"]}},WwwOssnewsJpExtractor:{domain:"www.ossnews.jp",title:{selectors:["#alpha-block h1.hxnewstitle"]},author:null,date_published:{selectors:["p.fs12"],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#alpha-block .section:has(h1.hxnewstitle)"],defaultCleaner:!1,transforms:{},clean:[]}},BuzzapJpExtractor:{domain:"buzzap.jp",title:{selectors:["h1.entry-title"]},author:null,date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ctiframe"],defaultCleaner:!1,transforms:{},clean:[]}},WwwAsahiComExtractor:{domain:"www.asahi.com",title:{selectors:[".ArticleTitle h1"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#MainInner div.ArticleBody"],defaultCleaner:!1,transforms:{},clean:["div.AdMod","div.LoginSelectArea"]}},WwwSanwaCoJpExtractor:{domain:"www.sanwa.co.jp",title:{selectors:["#newsContent h1"]},author:null,date_published:{selectors:["p.date"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#newsContent"],defaultCleaner:!1,transforms:{},clean:["#smartphone","div.sns_box","div.contentFoot"]}},WwwElecomCoJpExtractor:{domain:"www.elecom.co.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["p.section-last"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["td.TableMain2"],defaultCleaner:!1,transforms:{table:function(e){e.attr("width","auto")}},clean:[]}},ScanNetsecurityNeJpExtractor:{domain:"scan.netsecurity.ne.jp",title:{selectors:["header.arti-header h1.head"]},author:null,date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["header.arti-header p.arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.arti-content.arti-content--thumbnail"],defaultCleaner:!1,transforms:{},clean:["aside.arti-giga"]}},JvndbJvnJpExtractor:{domain:"jvndb.jvn.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["div.modifytxt:nth-child(2)"],format:"YYYY/MM/DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#news-list"],defaultCleaner:!1,transforms:{},clean:[]}},GeniusComExtractor:Cs,WwwJnsaOrgExtractor:{domain:"www.jnsa.org",title:{selectors:["#wgtitle h2"]},author:null,date_published:null,dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main_area"],transforms:{},clean:["#pankuzu","#side"]}},PhpspotOrgExtractor:{domain:"phpspot.org",title:{selectors:["h3.hl"]},author:null,date_published:{selectors:["h4.hl"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["div.entrybody"],defaultCleaner:!1,transforms:{},clean:[]}},WwwInfoqComExtractor:{domain:"www.infoq.com",title:{selectors:["h1.heading"]},author:{selectors:["div.widget.article__authors"]},date_published:{selectors:[".article__readTime.date"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__data"],defaultCleaner:!1,transforms:{},clean:[]}},WwwMoongiftJpExtractor:{domain:"www.moongift.jp",title:{selectors:["h1.title a"]},author:null,date_published:{selectors:["ul.meta li:not(.social):first-of-type"],timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main"],transforms:{},clean:["ul.mg_service.cf"]}},WwwItmediaCoJpExtractor:{domain:"www.itmedia.co.jp",supportedDomains:["www.atmarkit.co.jp","techtarget.itmedia.co.jp","nlab.itmedia.co.jp"],title:{selectors:["#cmsTitle h1"]},author:{selectors:["#byline"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["#cmsAbstract h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#cmsBody"],defaultCleaner:!1,transforms:{},clean:["#snsSharebox"]}},WwwPublickey1JpExtractor:{domain:"www.publickey1.jp",title:{selectors:["h1"]},author:{selectors:["#subcol p:has(img)"]},date_published:{selectors:["div.pubdate"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincol"],defaultCleaner:!1,transforms:{},clean:["#breadcrumbs","div.sbm","div.ad_footer"]}},TakagihiromitsuJpExtractor:{domain:"takagi-hiromitsu.jp",title:{selectors:["h3"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[http-equiv="Last-Modified"]',"value"]]},dek:null,lead_image_url:null,content:{selectors:["div.body"],defaultCleaner:!1,transforms:{},clean:[]}},BookwalkerJpExtractor:{domain:"bookwalker.jp",title:{selectors:["h1.main-heading"]},author:{selectors:["div.authors"]},date_published:{selectors:[".work-info .work-detail:first-of-type .work-detail-contents:last-of-type"],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["div.main-info","div.main-cover-inner"]],defaultCleaner:!1,transforms:{},clean:["span.label.label--trial","dt.info-head.info-head--coin","dd.info-contents.info-contents--coin","div.info-notice.fn-toggleClass"]}},WwwYomiuriCoJpExtractor:{domain:"www.yomiuri.co.jp",title:{selectors:["h1.title-article.c-article-title"]},author:null,date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main-contents"],transforms:{},clean:[]}},JapanCnetComExtractor:{domain:"japan.cnet.com",title:{selectors:[".leaf-headline-ttl"]},author:{selectors:[".writer"]},date_published:{selectors:[".date"],format:"YYYY年MM月DD日 HH時mm分",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},DeadlineComExtractor:{domain:"deadline.com",title:{selectors:["h1"]},author:{selectors:["section.author h3"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item"],transforms:{".embed-twitter":function(e){var t=e.html();e.replaceWith(t)}},clean:[]}},WwwGizmodoJpExtractor:{domain:"www.gizmodo.jp",title:{selectors:["h1.p-post-title"]},author:{selectors:["li.p-post-AssistAuthor"]},date_published:{selectors:[["li.p-post-AssistTime time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.p-post"],transforms:{"img.p-post-thumbnailImage":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["h1.p-post-title","ul.p-post-Assist"]}},GetnewsJpExtractor:{domain:"getnews.jp",title:{selectors:["article h1"]},author:{selectors:["span.prof"]},date_published:{selectors:[["ul.cattag-top time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.post-bodycopy"],transforms:{},clean:[]}},WwwLifehackerJpExtractor:{domain:"www.lifehacker.jp",title:{selectors:["h1.lh-summary-title"]},author:{selectors:["p.lh-entryDetailInner--credit"]},date_published:{selectors:[["div.lh-entryDetail-header time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.lh-entryDetail-body"],transforms:{"img.lazyload":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["p.lh-entryDetailInner--credit"]}},SectIijAdJpExtractor:{domain:"sect.iij.ad.jp",title:{selectors:["h3"]},author:{selectors:["dl.entrydate dd"]},date_published:{selectors:["dl.entrydate dd"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article"],transforms:{},clean:["dl.entrydate"]}},WwwOreillyCoJpExtractor:{domain:"www.oreilly.co.jp",title:{selectors:["h3"]},author:{selectors:['li[itemprop="author"]']},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],defaultCleaner:!1,transforms:{},clean:[".social-tools"]}},WwwIpaGoJpExtractor:{domain:"www.ipa.go.jp",title:{selectors:["h1"]},author:null,date_published:{selectors:["p.ipar_text_right"],format:"YYYY年M月D日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#ipar_main"],defaultCleaner:!1,transforms:{},clean:["p.ipar_text_right"]}},WeeklyAsciiJpExtractor:{domain:"weekly.ascii.jp",title:{selectors:['h1[itemprop="headline"]']},author:{selectors:["p.author"]},date_published:{selectors:[['meta[name="odate"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article"],transforms:{},clean:[]}},TechlogIijAdJpExtractor:{domain:"techlog.iij.ad.jp",title:{selectors:["h1.entry-title"]},author:{selectors:['a[rel="author"]']},date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],defaultCleaner:!1,transforms:{},clean:[]}},WiredJpExtractor:Ds,JapanZdnetComExtractor:{domain:"japan.zdnet.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="cXenseParse:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},WwwRbbtodayComExtractor:{domain:"www.rbbtoday.com",title:{selectors:["h1"]},author:{selectors:[".writer.writer-name"]},date_published:{selectors:[["header time","datetime"]]},dek:{selectors:[".arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".arti-content"],transforms:{},clean:[".arti-giga"]}},WwwLemondeFrExtractor:{domain:"www.lemonde.fr",title:{selectors:["h1.article__title"]},author:{selectors:[".author__name"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},dek:{selectors:[".article__desc"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__content"],transforms:{},clean:[]}},WwwPhoronixComExtractor:{domain:"www.phoronix.com",title:{selectors:["article header"]},author:{selectors:[".author a:first-child"]},date_published:{selectors:[".author"],format:"D MMMM YYYY at hh:mm",timezone:"America/New_York"},dek:null,lead_image_url:null,content:{selectors:[".content"],transforms:{},clean:[]}},PitchforkComExtractor:{domain:"pitchfork.com",title:{selectors:["title"]},author:{selectors:[".authors-detail__display-name"]},date_published:{selectors:[[".pub-date","datetime"]]},dek:{selectors:[".review-detail__abstract"]},lead_image_url:{selectors:[[".single-album-tombstone__art img","src"]]},content:{selectors:[".review-detail__text"]},extend:{score:{selectors:[".score"]}}},BiorxivOrgExtractor:{domain:"biorxiv.org",title:{selectors:["h1#page-title"]},author:{selectors:["div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors"]},content:{selectors:["div#abstract-1"],transforms:{},clean:[]}},EpaperZeitDeExtractor:{domain:"epaper.zeit.de",title:{selectors:["p.title"]},author:{selectors:[".article__author"]},date_published:null,excerpt:{selectors:["subtitle"]},lead_image_url:null,content:{selectors:[".article"],transforms:{"p.title":"h1",".article__author":"p",byline:"p",linkbox:"p"},clean:["image-credits","box[type=citation]"]}},WwwLadbibleComExtractor:{domain:"www.ladbible.com",title:{selectors:["h1"]},author:{selectors:["[class*=Byline]"]},date_published:{selectors:["time"],timezone:"Europe/London"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["[class*=ArticleContainer]"],clean:["time","source",'a[href^="https://www.ladbible.com/"]',"picture","[class*=StyledCardBlock]"]}},TimesofindiaIndiatimesComExtractor:{domain:"timesofindia.indiatimes.com",title:{selectors:["h1"]},extend:{reporter:{selectors:["div.byline"],transforms:{}}},date_published:{selectors:[".byline"],format:"MMM D, YYYY, HH:mm z",timezone:"Asia/Kolkata"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.contentwrapper:has(section)"],defaultCleaner:!1,clean:["section","h1",".byline",".img_cptn"]}},MaTtiasBeExtractor:{domain:"ma.ttias.be",title:{selectors:[['meta[name="twitter:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},content:{selectors:[[".content"]],transforms:{h2:function(e){return e.attr("id",null),"h3"},h1:function(e){e.attr("id",null),e.after("<p></p>")},ul:function(e){e.attr("class","entry-content-asset")}}}},PastebinComExtractor:{domain:"pastebin.com",title:{selectors:["h1"]},author:{selectors:[".paste_box_line2 .t_us + a"]},date_published:{selectors:[".paste_box_line2 .t_da + span"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#selectable .text"],transforms:{ol:"div",li:"p"},clean:[]}},WwwAbendblattDeExtractor:Os,WwwGrueneDeExtractor:{domain:"www.gruene.de",title:{selectors:["header h1"]},author:null,date_published:null,dek:null,lead_image_url:{selectors:[['meta[property="og:image"]',"content"]]},content:{selectors:[["section header","section h2","section p","section ol"]],transforms:{},clean:["figcaption","p[class]"]}},WwwEngadgetComExtractor:{domain:"www.engadget.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:['a.th-meta[data-ylk*="subsec:author"]']},date_published:{selectors:[]},dek:{selectors:['div[class*="o-title_mark"] div']},lead_image_url:{selectors:[]},content:{selectors:[["#page_body figure:not(div.article-text figure)","div.article-text"]],transforms:{},clean:[]}},ArstechnicaComExtractor:{domain:"arstechnica.com",title:{selectors:["title"]},author:{selectors:['*[rel="author"] *[itemprop="name"]']},date_published:{selectors:[[".byline time","datetime"]]},dek:{selectors:['h2[itemprop="description"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{h2:function(e){e.before("<p></p>")}},clean:["figcaption .enlarge-link","figcaption .sep","figure.video",".gallery","aside",".sidebar"]}},WwwNdtvComExtractor:{domain:"www.ndtv.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:['span[itemprop="author"] span[itemprop="name"]']},date_published:{selectors:[['span[itemprop="dateModified"]',"content"]]},dek:{selectors:["h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{".place_cont":function(e){if(!e.parents("p").length){var t=e.next("p");t&&(e.remove(),t.prepend(e))}}},clean:[".highlghts_Wdgt",".ins_instory_dv_caption","input","._world-wrapper .mt20"]}},SpektrumExtractor:{domain:"www.spektrum.de",title:{selectors:[".content__title"]},author:{selectors:[".content__author__info__name"]},date_published:{selectors:[".content__meta__date"],timezone:"Europe/Berlin"},dek:{selectors:[".content__intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],".image__article__top img"]},content:{selectors:["article.content"],clean:[".breadcrumbs",".hide-for-print","aside","header h2",".image__article__top",".content__author",".copyright",".callout-box"]}},PostlightComExtractor:{domain:"postlight.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.single-hero__abstract"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main.post"],transforms:{},clean:["section.pl-post-link","aside","section.insights_featured_case_studies"]}},WwwInvestmentexecutiveComExtractor:{domain:"www.investmentexecutive.com",title:{selectors:["h1"]},author:{selectors:['div[itemprop="author"]']},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-body"],clean:[".hidden"]}},WwwCbcCaExtractor:{domain:"www.cbc.ca",title:{selectors:["h1"]},author:{selectors:[".authorText",".bylineDetails"]},date_published:{selectors:[[".timeStamp[datetime]","datetime"]]},dek:{selectors:[".deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".story"],transforms:{},clean:[]}}}),Ps=lt(Ns).reduce(function(e,t){var r=Ns[t];return pt({},e,As(r))},{}),js=e(function(e,t){(function(){var n="‎",a="‏",m="ltr",g="rtl",i="bidi",o="",v={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};function e(e){if(void 0===e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return o;if(-1<e.indexOf(n)&&-1<e.indexOf(a))return i;if(-1<e.indexOf(n))return m;if(-1<e.indexOf(a))return g;var t=s(e,g),r=s(e,m);return t&&r?i:r?m:t?g:o}function s(e,t){var r,n,a,i,o,s,c,u,l,f,d,h=!1,p=!1;for(o=-1<e.search(/[0-9]/),e=e.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),r=0;r<e.length;r++){for(a in n=e.charAt(r),i=!1,v)v.hasOwnProperty(a)&&(s=n,c=v[a][0],u=v[a][1],void 0,l=s.charCodeAt(0),f=parseInt(c,16),d=parseInt(u,16),f<l&&l<d&&(i=h=!0));!1===i&&(p=!0)}return t===g?h:t===m?p||!h&&o:void 0}t.getDirection=e,t.patch=function(){String.prototype.getDirection=function(){return e(this.valueOf())}}}).call(this)}),zs=(js.getDirection,js.patch,/^\s*(posted |written )?by\s*:?\s*(.*)/i),Rs=new RegExp("http(s)?://","i"),Ls=/^\d{13}$/i,Ys=/^\d{10}$/i,Ws=/^\s*published\s*:?\s*(.*)/i,Is=/(.*\d)(am|pm)(.*)/i,Bs=/\.m\./i,qs=/^\s*(just|right)?\s*now\s*/i,Hs=["seconds?","minutes?","hours?","days?","weeks?","months?","years?"].join("|"),Fs=new RegExp("(\\d+)\\s+(".concat(Hs,")\\s+ago"),"i"),Gs=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].join("|"),Us=new RegExp("(".concat("[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",")|(").concat("[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",")|(").concat("-[0-9]{3,4}$",")|([0-9]{1,4})|(").concat(Gs,")"),"ig"),$s=/-\d{3,4}$/,Vs=/(: | - | \| )/g,Ks=new RegExp(".com$|.net$|.org$|.co.uk$","g");function Js(e){return ua(e.replace(zs,"$2").trim())}var Zs=e(function(e){!function(e){e.exports.is_uri=f,e.exports.is_http_uri=t,e.exports.is_https_uri=r,e.exports.is_web_uri=n,e.exports.isUri=f,e.exports.isHttpUri=t,e.exports.isHttpsUri=r,e.exports.isWebUri=n;var l=function(e){return e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/)};function f(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var t,r,n,a,i,o="",s="";if(o=(t=l(e))[1],r=t[2],n=t[3],a=t[4],i=t[5],o&&o.length&&0<=n.length){if(r&&r.length){if(0!==n.length&&!/^\//.test(n))return}else if(/^\/\//.test(n))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(o.toLowerCase()))return s+=o+":",r&&r.length&&(s+="//"+r),s+=n,a&&a.length&&(s+="?"+a),i&&i.length&&(s+="#"+i),s}}}function t(e,t){if(f(e)){var r,n,a,i,o="",s="",c="",u="";if(o=(r=l(e))[1],s=r[2],n=r[3],a=r[4],i=r[5],o){if(t){if("https"!=o.toLowerCase())return}else if("http"!=o.toLowerCase())return;if(s)return/:(\d+)$/.test(s)&&(c=s.match(/:(\d+)$/)[0],s=s.replace(/:\d+$/,"")),u+=o+":",u+="//"+s,c&&(u+=c),u+=n,a&&a.length&&(u+="?"+a),i&&i.length&&(u+="#"+i),u}}}function r(e){return t(e,!0)}function n(e){return t(e)||r(e)}}(e)});function Xs(e){return e=e.trim(),Zs.isWebUri(e)?e:null}var Qs=e(function(tn,e){tn.exports=function(){var e,a;function _(){return e.apply(null,arguments)}function l(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function f(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function y(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function d(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(y(e,t))return!1;return!0}function o(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function p(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function i(e,t){var r,n=[],a=e.length;for(r=0;r<a;++r)n.push(t(e[r],r));return n}function u(e,t){for(var r in t)y(t,r)&&(e[r]=t[r]);return y(t,"toString")&&(e.toString=t.toString),y(t,"valueOf")&&(e.valueOf=t.valueOf),e}function m(e,t,r,n){return Dt(e,t,r,n,!0).utc()}function b(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function g(e){if(null==e._isValid){var t=b(e),r=a.call(t.parsedDateParts,function(e){return null!=e}),n=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r);if(e._strict&&(n=n&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return n;e._isValid=n}return e._isValid}function s(e){var t=m(NaN);return null!=e?u(b(t),e):b(t).userInvalidated=!0,t}a=Array.prototype.some?Array.prototype.some:function(e){var t,r=Object(this),n=r.length>>>0;for(t=0;t<n;t++)if(t in r&&e.call(this,r[t],t,r))return!0;return!1};var c=_.momentProperties=[],t=!1;function v(e,t){var r,n,a,i=c.length;if(o(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),o(t._i)||(e._i=t._i),o(t._f)||(e._f=t._f),o(t._l)||(e._l=t._l),o(t._strict)||(e._strict=t._strict),o(t._tzm)||(e._tzm=t._tzm),o(t._isUTC)||(e._isUTC=t._isUTC),o(t._offset)||(e._offset=t._offset),o(t._pf)||(e._pf=b(t)),o(t._locale)||(e._locale=t._locale),0<i)for(r=0;r<i;r++)n=c[r],o(a=t[n])||(e[n]=a);return e}function A(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,_.updateOffset(this),t=!1)}function w(e){return e instanceof A||null!=e&&null!=e._isAMomentObject}function x(e){!1===_.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function r(i,o){var s=!0;return u(function(){if(null!=_.deprecationHandler&&_.deprecationHandler(null,i),s){var e,t,r,n=[],a=arguments.length;for(t=0;t<a;t++){if(e="","object"==typeof arguments[t]){for(r in e+="\n["+t+"] ",arguments[0])y(arguments[0],r)&&(e+=r+": "+arguments[0][r]+", ");e=e.slice(0,-2)}else e=arguments[t];n.push(e)}x(i+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),s=!1}return o.apply(this,arguments)},o)}var n,k={};function E(e,t){null!=_.deprecationHandler&&_.deprecationHandler(e,t),k[e]||(x(t),k[e]=!0)}function M(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function S(e,t){var r,n=u({},e);for(r in t)y(t,r)&&(f(e[r])&&f(t[r])?(n[r]={},u(n[r],e[r]),u(n[r],t[r])):null!=t[r]?n[r]=t[r]:delete n[r]);for(r in e)y(e,r)&&!y(t,r)&&f(e[r])&&(n[r]=u({},n[r]));return n}function T(e){null!=e&&this.set(e)}function C(e,t,r){var n=""+Math.abs(e),a=t-n.length,i=0<=e;return(i?r?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+n}_.suppressDeprecationWarnings=!1,_.deprecationHandler=null,n=Object.keys?Object.keys:function(e){var t,r=[];for(t in e)y(e,t)&&r.push(t);return r};var D=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,O=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,N={},P={};function j(e,t,r,n){var a=n;"string"==typeof n&&(a=function(){return this[n]()}),e&&(P[e]=a),t&&(P[t[0]]=function(){return C(a.apply(this,arguments),t[1],t[2])}),r&&(P[r]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function z(e,t){return e.isValid()?(t=R(t,e.localeData()),N[t]=N[t]||function(n){var e,a,t,i=n.match(D);for(e=0,a=i.length;e<a;e++)P[i[e]]?i[e]=P[i[e]]:i[e]=(t=i[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(e){var t,r="";for(t=0;t<a;t++)r+=M(i[t])?i[t].call(e,n):i[t];return r}}(t),N[t](e)):e.localeData().invalidDate()}function R(e,t){var r=5;function n(e){return t.longDateFormat(e)||e}for(O.lastIndex=0;0<=r&&O.test(e);)e=e.replace(O,n),O.lastIndex=0,r-=1;return e}var L={};function Y(e,t){var r=e.toLowerCase();L[r]=L[r+"s"]=L[t]=e}function W(e){return"string"==typeof e?L[e]||L[e.toLowerCase()]:void 0}function I(e){var t,r,n={};for(r in e)y(e,r)&&(t=W(r))&&(n[t]=e[r]);return n}var B={};function q(e,t){B[e]=t}function H(e){return e%4==0&&e%100!=0||e%400==0}function F(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function G(e){var t=+e,r=0;return 0!==t&&isFinite(t)&&(r=F(t)),r}function U(t,r){return function(e){return null!=e?(V(this,t,e),_.updateOffset(this,r),this):$(this,t)}}function $(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function V(e,t,r){e.isValid()&&!isNaN(r)&&("FullYear"===t&&H(e.year())&&1===e.month()&&29===e.date()?(r=G(r),e._d["set"+(e._isUTC?"UTC":"")+t](r,e.month(),Te(r,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](r))}var K,J=/\d/,Z=/\d\d/,X=/\d{3}/,Q=/\d{4}/,ee=/[+-]?\d{6}/,te=/\d\d?/,re=/\d\d\d\d?/,ne=/\d\d\d\d\d\d?/,ae=/\d{1,3}/,ie=/\d{1,4}/,oe=/[+-]?\d{1,6}/,se=/\d+/,ce=/[+-]?\d+/,ue=/Z|[+-]\d\d:?\d\d/gi,le=/Z|[+-]\d\d(?::?\d\d)?/gi,fe=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function de(e,r,n){K[e]=M(r)?r:function(e,t){return e&&n?n:r}}function he(e,t){return y(K,e)?K[e](t._strict,t._locale):new RegExp(pe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,r,n,a){return t||r||n||a})))}function pe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}K={};var me={};function ge(e,r){var t,n,a=r;for("string"==typeof e&&(e=[e]),h(r)&&(a=function(e,t){t[r]=G(e)}),n=e.length,t=0;t<n;t++)me[e[t]]=a}function ve(e,a){ge(e,function(e,t,r,n){r._w=r._w||{},a(e,r._w,r,n)})}var ye,_e=0,be=1,Ae=2,we=3,xe=4,ke=5,Ee=6,Me=7,Se=8;function Te(e,t){if(isNaN(e)||isNaN(t))return NaN;var r,n=(t%(r=12)+r)%r;return e+=(t-n)/12,1===n?H(e)?29:28:31-n%7%2}ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},j("M",["MM",2],"Mo",function(){return this.month()+1}),j("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),j("MMMM",0,0,function(e){return this.localeData().months(this,e)}),Y("month","M"),q("month",8),de("M",te),de("MM",te,Z),de("MMM",function(e,t){return t.monthsShortRegex(e)}),de("MMMM",function(e,t){return t.monthsRegex(e)}),ge(["M","MM"],function(e,t){t[be]=G(e)-1}),ge(["MMM","MMMM"],function(e,t,r,n){var a=r._locale.monthsParse(e,n,r._strict);null!=a?t[be]=a:b(r).invalidMonth=e});var Ce="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),De="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Oe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ne=fe,Pe=fe;function je(e,t,r){var n,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)i=m([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(i,"").toLocaleLowerCase();return r?"MMM"===t?-1!==(a=ye.call(this._shortMonthsParse,o))?a:null:-1!==(a=ye.call(this._longMonthsParse,o))?a:null:"MMM"===t?-1!==(a=ye.call(this._shortMonthsParse,o))?a:-1!==(a=ye.call(this._longMonthsParse,o))?a:null:-1!==(a=ye.call(this._longMonthsParse,o))?a:-1!==(a=ye.call(this._shortMonthsParse,o))?a:null}function ze(e,t){var r;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=G(t);else if(!h(t=e.localeData().monthsParse(t)))return e;return r=Math.min(e.date(),Te(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,r),e}function Re(e){return null!=e?(ze(this,e),_.updateOffset(this,!0),this):$(this,"Month")}function Le(){function e(e,t){return t.length-e.length}var t,r,n=[],a=[],i=[];for(t=0;t<12;t++)r=m([2e3,t]),n.push(this.monthsShort(r,"")),a.push(this.months(r,"")),i.push(this.months(r,"")),i.push(this.monthsShort(r,""));for(n.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)n[t]=pe(n[t]),a[t]=pe(a[t]);for(t=0;t<24;t++)i[t]=pe(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Ye(e){return H(e)?366:365}j("Y",0,0,function(){var e=this.year();return e<=9999?C(e,4):"+"+e}),j(0,["YY",2],0,function(){return this.year()%100}),j(0,["YYYY",4],0,"year"),j(0,["YYYYY",5],0,"year"),j(0,["YYYYYY",6,!0],0,"year"),Y("year","y"),q("year",1),de("Y",ce),de("YY",te,Z),de("YYYY",ie,Q),de("YYYYY",oe,ee),de("YYYYYY",oe,ee),ge(["YYYYY","YYYYYY"],_e),ge("YYYY",function(e,t){t[_e]=2===e.length?_.parseTwoDigitYear(e):G(e)}),ge("YY",function(e,t){t[_e]=_.parseTwoDigitYear(e)}),ge("Y",function(e,t){t[_e]=parseInt(e,10)}),_.parseTwoDigitYear=function(e){return G(e)+(68<G(e)?1900:2e3)};var We=U("FullYear",!0);function Ie(e){var t,r;return e<100&&0<=e?((r=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Be(e,t,r){var n=7+t-r,a=(7+Ie(e,0,n).getUTCDay()-t)%7;return-a+n-1}function qe(e,t,r,n,a){var i,o,s=(7+r-n)%7,c=Be(e,n,a),u=1+7*(t-1)+s+c;return o=u<=0?Ye(i=e-1)+u:u>Ye(e)?(i=e+1,u-Ye(e)):(i=e,u),{year:i,dayOfYear:o}}function He(e,t,r){var n,a,i=Be(e.year(),t,r),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?(a=e.year()-1,n=o+Fe(a,t,r)):o>Fe(e.year(),t,r)?(n=o-Fe(e.year(),t,r),a=e.year()+1):(a=e.year(),n=o),{week:n,year:a}}function Fe(e,t,r){var n=Be(e,t,r),a=Be(e+1,t,r);return(Ye(e)-n+a)/7}function Ge(e,t){return e.slice(t,7).concat(e.slice(0,t))}j("w",["ww",2],"wo","week"),j("W",["WW",2],"Wo","isoWeek"),Y("week","w"),Y("isoWeek","W"),q("week",5),q("isoWeek",5),de("w",te),de("ww",te,Z),de("W",te),de("WW",te,Z),ve(["w","ww","W","WW"],function(e,t,r,n){t[n.substr(0,1)]=G(e)}),j("d",0,"do","day"),j("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),j("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),j("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),j("e",0,0,"weekday"),j("E",0,0,"isoWeekday"),Y("day","d"),Y("weekday","e"),Y("isoWeekday","E"),q("day",11),q("weekday",11),q("isoWeekday",11),de("d",te),de("e",te),de("E",te),de("dd",function(e,t){return t.weekdaysMinRegex(e)}),de("ddd",function(e,t){return t.weekdaysShortRegex(e)}),de("dddd",function(e,t){return t.weekdaysRegex(e)}),ve(["dd","ddd","dddd"],function(e,t,r,n){var a=r._locale.weekdaysParse(e,n,r._strict);null!=a?t.d=a:b(r).invalidWeekday=e}),ve(["d","e","E"],function(e,t,r,n){t[n]=G(e)});var Ue="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),$e="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ve="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=fe,Je=fe,Ze=fe;function Xe(e,t,r){var n,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)i=m([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(i,"").toLocaleLowerCase();return r?"dddd"===t?-1!==(a=ye.call(this._weekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:null:"dddd"===t?-1!==(a=ye.call(this._weekdaysParse,o))?a:-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:-1!==(a=ye.call(this._weekdaysParse,o))?a:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:null:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:-1!==(a=ye.call(this._weekdaysParse,o))?a:-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:null}function Qe(){function e(e,t){return t.length-e.length}var t,r,n,a,i,o=[],s=[],c=[],u=[];for(t=0;t<7;t++)r=m([2e3,1]).day(t),n=pe(this.weekdaysMin(r,"")),a=pe(this.weekdaysShort(r,"")),i=pe(this.weekdays(r,"")),o.push(n),s.push(a),c.push(i),u.push(n),u.push(a),u.push(i);o.sort(e),s.sort(e),c.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function et(){return this.hours()%12||12}function tt(e,t){j(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}j("H",["HH",2],0,"hour"),j("h",["hh",2],0,et),j("k",["kk",2],0,function(){return this.hours()||24}),j("hmm",0,0,function(){return""+et.apply(this)+C(this.minutes(),2)}),j("hmmss",0,0,function(){return""+et.apply(this)+C(this.minutes(),2)+C(this.seconds(),2)}),j("Hmm",0,0,function(){return""+this.hours()+C(this.minutes(),2)}),j("Hmmss",0,0,function(){return""+this.hours()+C(this.minutes(),2)+C(this.seconds(),2)}),tt("a",!0),tt("A",!1),Y("hour","h"),q("hour",13),de("a",rt),de("A",rt),de("H",te),de("h",te),de("k",te),de("HH",te,Z),de("hh",te,Z),de("kk",te,Z),de("hmm",re),de("hmmss",ne),de("Hmm",re),de("Hmmss",ne),ge(["H","HH"],we),ge(["k","kk"],function(e,t,r){var n=G(e);t[we]=24===n?0:n}),ge(["a","A"],function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e}),ge(["h","hh"],function(e,t,r){t[we]=G(e),b(r).bigHour=!0}),ge("hmm",function(e,t,r){var n=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n)),b(r).bigHour=!0}),ge("hmmss",function(e,t,r){var n=e.length-4,a=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n,2)),t[ke]=G(e.substr(a)),b(r).bigHour=!0}),ge("Hmm",function(e,t,r){var n=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n))}),ge("Hmmss",function(e,t,r){var n=e.length-4,a=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n,2)),t[ke]=G(e.substr(a))});var nt,at=U("Hours",!0),it={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ce,monthsShort:De,week:{dow:0,doy:6},weekdays:Ue,weekdaysMin:Ve,weekdaysShort:$e,meridiemParse:/[ap]\.?m?\.?/i},ot={},st={};function ct(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r<n;r+=1)if(e[r]!==t[r])return r;return n}function ut(e){return e?e.toLowerCase().replace("_","-"):e}function lt(t){var e=null;if(void 0===ot[t]&&tn&&tn.exports&&null!=t.match("^[^/\\\\]*$"))try{e=nt._abbr,rn(),ft(e)}catch(e){ot[t]=null}return ot[t]}function ft(e,t){var r;return e&&((r=o(t)?ht(e):dt(e,t))?nt=r:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function dt(e,t){if(null===t)return delete ot[e],null;var r,n=it;if(t.abbr=e,null!=ot[e])E("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=ot[e]._config;else if(null!=t.parentLocale)if(null!=ot[t.parentLocale])n=ot[t.parentLocale]._config;else{if(null==(r=lt(t.parentLocale)))return st[t.parentLocale]||(st[t.parentLocale]=[]),st[t.parentLocale].push({name:e,config:t}),null;n=r._config}return ot[e]=new T(S(n,t)),st[e]&&st[e].forEach(function(e){dt(e.name,e.config)}),ft(e),ot[e]}function ht(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!l(e)){if(t=lt(e))return t;e=[e]}return function(e){for(var t,r,n,a,i=0;i<e.length;){for(a=ut(e[i]).split("-"),t=a.length,r=(r=ut(e[i+1]))?r.split("-"):null;0<t;){if(n=lt(a.slice(0,t).join("-")))return n;if(r&&r.length>=t&&ct(a,r)>=t-1)break;t--}i++}return nt}(e)}function pt(e){var t,r=e._a;return r&&-2===b(e).overflow&&(t=r[be]<0||11<r[be]?be:r[Ae]<1||r[Ae]>Te(r[_e],r[be])?Ae:r[we]<0||24<r[we]||24===r[we]&&(0!==r[xe]||0!==r[ke]||0!==r[Ee])?we:r[xe]<0||59<r[xe]?xe:r[ke]<0||59<r[ke]?ke:r[Ee]<0||999<r[Ee]?Ee:-1,b(e)._overflowDayOfYear&&(t<_e||Ae<t)&&(t=Ae),b(e)._overflowWeeks&&-1===t&&(t=Me),b(e)._overflowWeekday&&-1===t&&(t=Se),b(e).overflow=t),e}var mt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,gt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vt=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],_t=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],bt=/^\/?Date\((-?\d+)/i,At=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,wt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function xt(e){var t,r,n,a,i,o,s=e._i,c=mt.exec(s)||gt.exec(s),u=yt.length,l=_t.length;if(c){for(b(e).iso=!0,t=0,r=u;t<r;t++)if(yt[t][1].exec(c[1])){a=yt[t][0],n=!1!==yt[t][2];break}if(null==a)return void(e._isValid=!1);if(c[3]){for(t=0,r=l;t<r;t++)if(_t[t][1].exec(c[3])){i=(c[2]||" ")+_t[t][0];break}if(null==i)return void(e._isValid=!1)}if(!n&&null!=i)return void(e._isValid=!1);if(c[4]){if(!vt.exec(c[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),Tt(e)}else e._isValid=!1}function kt(e,t,r,n,a,i){var o,s,c=[(o=e,s=parseInt(o,10),s<=49?2e3+s:s<=999?1900+s:s),De.indexOf(t),parseInt(r,10),parseInt(n,10),parseInt(a,10)];return i&&c.push(parseInt(i,10)),c}function Et(e){var t,r=At.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(t=kt(r[4],r[3],r[2],r[5],r[6],r[7]),!function(e,t,r){if(e){var n=$e.indexOf(e),a=new Date(t[0],t[1],t[2]).getDay();if(n!==a)return b(r).weekdayMismatch=!0,r._isValid=!1}return!0}(r[1],t,e))return;e._a=t,e._tzm=function(e,t,r){if(e)return wt[e];if(t)return 0;var n=parseInt(r,10),a=n%100,i=(n-a)/100;return 60*i+a}(r[8],r[9],r[10]),e._d=Ie.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),b(e).rfc2822=!0}else e._isValid=!1}function Mt(e,t,r){return null!=e?e:null!=t?t:r}function St(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y=[];if(!e._d){for(g=e,v=void 0,v=new Date(_.now()),n=g._useUTC?[v.getUTCFullYear(),v.getUTCMonth(),v.getUTCDate()]:[v.getFullYear(),v.getMonth(),v.getDate()],e._w&&null==e._a[Ae]&&null==e._a[be]&&(m=p=h=d=f=l=u=c=s=void 0,null!=(s=(o=e)._w).GG||null!=s.W||null!=s.E?(f=1,d=4,c=Mt(s.GG,o._a[_e],He(Ot(),1,4).year),u=Mt(s.W,1),((l=Mt(s.E,1))<1||7<l)&&(p=!0)):(f=o._locale._week.dow,d=o._locale._week.doy,m=He(Ot(),f,d),c=Mt(s.gg,o._a[_e],m.year),u=Mt(s.w,m.week),null!=s.d?((l=s.d)<0||6<l)&&(p=!0):null!=s.e?(l=s.e+f,(s.e<0||6<s.e)&&(p=!0)):l=f),u<1||u>Fe(c,f,d)?b(o)._overflowWeeks=!0:null!=p?b(o)._overflowWeekday=!0:(h=qe(c,u,l,f,d),o._a[_e]=h.year,o._dayOfYear=h.dayOfYear)),null!=e._dayOfYear&&(i=Mt(e._a[_e],n[_e]),(e._dayOfYear>Ye(i)||0===e._dayOfYear)&&(b(e)._overflowDayOfYear=!0),r=Ie(i,0,e._dayOfYear),e._a[be]=r.getUTCMonth(),e._a[Ae]=r.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=y[t]=n[t];for(;t<7;t++)e._a[t]=y[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[we]&&0===e._a[xe]&&0===e._a[ke]&&0===e._a[Ee]&&(e._nextDay=!0,e._a[we]=0),e._d=(e._useUTC?Ie:function(e,t,r,n,a,i,o){var s;return e<100&&0<=e?(s=new Date(e+400,t,r,n,a,i,o),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,r,n,a,i,o),s}).apply(null,y),a=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[we]=24),e._w&&void 0!==e._w.d&&e._w.d!==a&&(b(e).weekdayMismatch=!0)}}function Tt(e){if(e._f!==_.ISO_8601)if(e._f!==_.RFC_2822){e._a=[],b(e).empty=!0;var t,r,n,a,i,o,s,c=""+e._i,u=c.length,l=0;for(n=R(e._f,e._locale).match(D)||[],s=n.length,t=0;t<s;t++)a=n[t],(r=(c.match(he(a,e))||[])[0])&&(0<(i=c.substr(0,c.indexOf(r))).length&&b(e).unusedInput.push(i),c=c.slice(c.indexOf(r)+r.length),l+=r.length),P[a]?(r?b(e).empty=!1:b(e).unusedTokens.push(a),m=a,v=e,null!=(g=r)&&y(me,m)&&me[m](g,v._a,v,m)):e._strict&&!r&&b(e).unusedTokens.push(a);b(e).charsLeftOver=u-l,0<c.length&&b(e).unusedInput.push(c),e._a[we]<=12&&!0===b(e).bigHour&&0<e._a[we]&&(b(e).bigHour=void 0),b(e).parsedDateParts=e._a.slice(0),b(e).meridiem=e._meridiem,e._a[we]=(f=e._locale,d=e._a[we],null==(h=e._meridiem)?d:null!=f.meridiemHour?f.meridiemHour(d,h):(null!=f.isPM&&((p=f.isPM(h))&&d<12&&(d+=12),p||12!==d||(d=0)),d)),null!==(o=b(e).era)&&(e._a[_e]=e._locale.erasConvertYear(o,e._a[_e])),St(e),pt(e)}else Et(e);else xt(e);var f,d,h,p,m,g,v}function Ct(e){var t,r,n=e._i,a=e._f;return e._locale=e._locale||ht(e._l),null===n||void 0===a&&""===n?s({nullInput:!0}):("string"==typeof n&&(e._i=n=e._locale.preparse(n)),w(n)?new A(pt(n)):(p(n)?e._d=n:l(a)?function(e){var t,r,n,a,i,o,s=!1,c=e._f.length;if(0===c)return b(e).invalidFormat=!0,e._d=new Date(NaN);for(a=0;a<c;a++)i=0,o=!1,t=v({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],Tt(t),g(t)&&(o=!0),i+=b(t).charsLeftOver,i+=10*b(t).unusedTokens.length,b(t).score=i,s?i<n&&(n=i,r=t):(null==n||i<n||o)&&(n=i,r=t,o&&(s=!0));u(e,r||t)}(e):a?Tt(e):o(r=(t=e)._i)?t._d=new Date(_.now()):p(r)?t._d=new Date(r.valueOf()):"string"==typeof r?function(e){var t=bt.exec(e._i);if(null!==t)return e._d=new Date(+t[1]);xt(e),!1===e._isValid&&(delete e._isValid,Et(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:_.createFromInputFallback(e)))}(t):l(r)?(t._a=i(r.slice(0),function(e){return parseInt(e,10)}),St(t)):f(r)?function(e){if(!e._d){var t=I(e._i),r=void 0===t.day?t.date:t.day;e._a=i([t.year,t.month,r,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),St(e)}}(t):h(r)?t._d=new Date(r):_.createFromInputFallback(t),g(e)||(e._d=null),e))}function Dt(e,t,r,n,a){var i,o={};return!0!==t&&!1!==t||(n=t,t=void 0),!0!==r&&!1!==r||(n=r,r=void 0),(f(e)&&d(e)||l(e)&&0===e.length)&&(e=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=a,o._l=r,o._i=e,o._f=t,o._strict=n,(i=new A(pt(Ct(o))))._nextDay&&(i.add(1,"d"),i._nextDay=void 0),i}function Ot(e,t,r,n){return Dt(e,t,r,n,!1)}_.createFromInputFallback=r("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),_.ISO_8601=function(){},_.RFC_2822=function(){};var Nt=r("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ot.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:s()}),Pt=r("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ot.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:s()});function jt(e,t){var r,n;if(1===t.length&&l(t[0])&&(t=t[0]),!t.length)return Ot();for(r=t[0],n=1;n<t.length;++n)t[n].isValid()&&!t[n][e](r)||(r=t[n]);return r}var zt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Rt(e){var t=I(e),r=t.year||0,n=t.quarter||0,a=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,s=t.hour||0,c=t.minute||0,u=t.second||0,l=t.millisecond||0;this._isValid=function(e){var t,r,n=!1,a=zt.length;for(t in e)if(y(e,t)&&(-1===ye.call(zt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(r=0;r<a;++r)if(e[zt[r]]){if(n)return!1;parseFloat(e[zt[r]])!==G(e[zt[r]])&&(n=!0)}return!0}(t),this._milliseconds=+l+1e3*u+6e4*c+1e3*s*60*60,this._days=+o+7*i,this._months=+a+3*n+12*r,this._data={},this._locale=ht(),this._bubble()}function Lt(e){return e instanceof Rt}function Yt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Wt(e,t,r){var n,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(n=0;n<a;n++)(r&&e[n]!==t[n]||!r&&G(e[n])!==G(t[n]))&&o++;return o+i}function It(e,r){j(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+C(~~(e/60),2)+r+C(~~e%60,2)})}It("Z",":"),It("ZZ",""),de("Z",le),de("ZZ",le),ge(["Z","ZZ"],function(e,t,r){r._useUTC=!0,r._tzm=qt(le,e)});var Bt=/([\+\-]|\d\d)/gi;function qt(e,t){var r,n,a,i=(t||"").match(e);return null===i?null:(r=i[i.length-1]||[],n=(r+"").match(Bt)||["-",0,0],0===(a=60*n[1]+G(n[2]))?0:"+"===n[0]?a:-a)}function Ht(e,t){var r,n;return t._isUTC?(r=t.clone(),n=(w(e)||p(e)?e.valueOf():Ot(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+n),_.updateOffset(r,!1),r):Ot(e).local()}function Ft(e){return-Math.round(e._d.getTimezoneOffset())}function Gt(){return!!this.isValid()&&this._isUTC&&0===this._offset}_.updateOffset=function(){};var Ut=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,$t=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Vt(e,t){var r,n,a,i,o,s,c=e,u=null;return Lt(e)?c={ms:e._milliseconds,d:e._days,M:e._months}:h(e)||!isNaN(+e)?(c={},t?c[t]=+e:c.milliseconds=+e):(u=Ut.exec(e))?(r="-"===u[1]?-1:1,c={y:0,d:G(u[Ae])*r,h:G(u[we])*r,m:G(u[xe])*r,s:G(u[ke])*r,ms:G(Yt(1e3*u[Ee]))*r}):(u=$t.exec(e))?(r="-"===u[1]?-1:1,c={y:Kt(u[2],r),M:Kt(u[3],r),w:Kt(u[4],r),d:Kt(u[5],r),h:Kt(u[6],r),m:Kt(u[7],r),s:Kt(u[8],r)}):null==c?c={}:"object"==typeof c&&("from"in c||"to"in c)&&(i=Ot(c.from),o=Ot(c.to),a=i.isValid()&&o.isValid()?(o=Ht(o,i),i.isBefore(o)?s=Jt(i,o):((s=Jt(o,i)).milliseconds=-s.milliseconds,s.months=-s.months),s):{milliseconds:0,months:0},(c={}).ms=a.milliseconds,c.M=a.months),n=new Rt(c),Lt(e)&&y(e,"_locale")&&(n._locale=e._locale),Lt(e)&&y(e,"_isValid")&&(n._isValid=e._isValid),n}function Kt(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function Jt(e,t){var r={};return r.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function Zt(n,a){return function(e,t){var r;return null===t||isNaN(+t)||(E(a,"moment()."+a+"(period, number) is deprecated. Please use moment()."+a+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=e,e=t,t=r),Xt(this,Vt(e,t),n),this}}function Xt(e,t,r,n){var a=t._milliseconds,i=Yt(t._days),o=Yt(t._months);e.isValid()&&(n=null==n||n,o&&ze(e,$(e,"Month")+o*r),i&&V(e,"Date",$(e,"Date")+i*r),a&&e._d.setTime(e._d.valueOf()+a*r),n&&_.updateOffset(e,i||o))}Vt.fn=Rt.prototype,Vt.invalid=function(){return Vt(NaN)};var Qt=Zt(1,"add"),er=Zt(-1,"subtract");function tr(e){return"string"==typeof e||e instanceof String}function rr(e,t){if(e.date()<t.date())return-rr(t,e);var r,n,a=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(a,"months");return n=t-i<0?(r=e.clone().add(a-1,"months"),(t-i)/(i-r)):(r=e.clone().add(a+1,"months"),(t-i)/(r-i)),-(a+n)||0}function nr(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ht(e))&&(this._locale=t),this)}_.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",_.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ar=r("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function ir(){return this._locale}var or=126227808e5;function sr(e,t){return(e%t+t)%t}function cr(e,t,r){return e<100&&0<=e?new Date(e+400,t,r)-or:new Date(e,t,r).valueOf()}function ur(e,t,r){return e<100&&0<=e?Date.UTC(e+400,t,r)-or:Date.UTC(e,t,r)}function lr(e,t){return t.erasAbbrRegex(e)}function fr(){var e,t,r=[],n=[],a=[],i=[],o=this.eras();for(e=0,t=o.length;e<t;++e)n.push(pe(o[e].name)),r.push(pe(o[e].abbr)),a.push(pe(o[e].narrow)),i.push(pe(o[e].name)),i.push(pe(o[e].abbr)),i.push(pe(o[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+n.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+r.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function dr(e,t){j(0,[e,e.length],0,t)}function hr(e,t,r,n,a){var i;return null==e?He(this,n,a).year:((i=Fe(e,n,a))<t&&(t=i),function(e,t,r,n,a){var i=qe(e,t,r,n,a),o=Ie(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,e,t,r,n,a))}j("N",0,0,"eraAbbr"),j("NN",0,0,"eraAbbr"),j("NNN",0,0,"eraAbbr"),j("NNNN",0,0,"eraName"),j("NNNNN",0,0,"eraNarrow"),j("y",["y",1],"yo","eraYear"),j("y",["yy",2],0,"eraYear"),j("y",["yyy",3],0,"eraYear"),j("y",["yyyy",4],0,"eraYear"),de("N",lr),de("NN",lr),de("NNN",lr),de("NNNN",function(e,t){return t.erasNameRegex(e)}),de("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),ge(["N","NN","NNN","NNNN","NNNNN"],function(e,t,r,n){var a=r._locale.erasParse(e,n,r._strict);a?b(r).era=a:b(r).invalidEra=e}),de("y",se),de("yy",se),de("yyy",se),de("yyyy",se),de("yo",function(e,t){return t._eraYearOrdinalRegex||se}),ge(["y","yy","yyy","yyyy"],_e),ge(["yo"],function(e,t,r,n){var a;r._locale._eraYearOrdinalRegex&&(a=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[_e]=r._locale.eraYearOrdinalParse(e,a):t[_e]=parseInt(e,10)}),j(0,["gg",2],0,function(){return this.weekYear()%100}),j(0,["GG",2],0,function(){return this.isoWeekYear()%100}),dr("gggg","weekYear"),dr("ggggg","weekYear"),dr("GGGG","isoWeekYear"),dr("GGGGG","isoWeekYear"),Y("weekYear","gg"),Y("isoWeekYear","GG"),q("weekYear",1),q("isoWeekYear",1),de("G",ce),de("g",ce),de("GG",te,Z),de("gg",te,Z),de("GGGG",ie,Q),de("gggg",ie,Q),de("GGGGG",oe,ee),de("ggggg",oe,ee),ve(["gggg","ggggg","GGGG","GGGGG"],function(e,t,r,n){t[n.substr(0,2)]=G(e)}),ve(["gg","GG"],function(e,t,r,n){t[n]=_.parseTwoDigitYear(e)}),j("Q",0,"Qo","quarter"),Y("quarter","Q"),q("quarter",7),de("Q",J),ge("Q",function(e,t){t[be]=3*(G(e)-1)}),j("D",["DD",2],"Do","date"),Y("date","D"),q("date",9),de("D",te),de("DD",te,Z),de("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ge(["D","DD"],Ae),ge("Do",function(e,t){t[Ae]=G(e.match(te)[0])});var pr=U("Date",!0);j("DDD",["DDDD",3],"DDDo","dayOfYear"),Y("dayOfYear","DDD"),q("dayOfYear",4),de("DDD",ae),de("DDDD",X),ge(["DDD","DDDD"],function(e,t,r){r._dayOfYear=G(e)}),j("m",["mm",2],0,"minute"),Y("minute","m"),q("minute",14),de("m",te),de("mm",te,Z),ge(["m","mm"],xe);var mr=U("Minutes",!1);j("s",["ss",2],0,"second"),Y("second","s"),q("second",15),de("s",te),de("ss",te,Z),ge(["s","ss"],ke);var gr,vr,yr=U("Seconds",!1);for(j("S",0,0,function(){return~~(this.millisecond()/100)}),j(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),j(0,["SSS",3],0,"millisecond"),j(0,["SSSS",4],0,function(){return 10*this.millisecond()}),j(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),j(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),j(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),j(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),j(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),Y("millisecond","ms"),q("millisecond",16),de("S",ae,J),de("SS",ae,Z),de("SSS",ae,X),gr="SSSS";gr.length<=9;gr+="S")de(gr,se);function _r(e,t){t[Ee]=G(1e3*("0."+e))}for(gr="S";gr.length<=9;gr+="S")ge(gr,_r);vr=U("Milliseconds",!1),j("z",0,0,"zoneAbbr"),j("zz",0,0,"zoneName");var br=A.prototype;function Ar(e){return e}br.add=Qt,br.calendar=function(e,t){var r,n,a,i;1===arguments.length&&(arguments[0]?w(i=arguments[0])||p(i)||tr(i)||h(i)||(n=l(r=i),a=!1,n&&(a=0===r.filter(function(e){return!h(e)&&tr(r)}).length),n&&a)||function(e){var t,r,n=f(e)&&!d(e),a=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],o=i.length;for(t=0;t<o;t+=1)r=i[t],a=a||y(e,r);return n&&a}(i)||null==i?(e=arguments[0],t=void 0):function(e){var t,r,n=f(e)&&!d(e),a=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)r=i[t],a=a||y(e,r);return n&&a}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var o=e||Ot(),s=Ht(o,this).startOf("day"),c=_.calendarFormat(this,s)||"sameElse",u=t&&(M(t[c])?t[c].call(this,o):t[c]);return this.format(u||this.localeData().calendar(c,this,Ot(o)))},br.clone=function(){return new A(this)},br.diff=function(e,t,r){var n,a,i;if(!this.isValid())return NaN;if(!(n=Ht(e,this)).isValid())return NaN;switch(a=6e4*(n.utcOffset()-this.utcOffset()),t=W(t)){case"year":i=rr(this,n)/12;break;case"month":i=rr(this,n);break;case"quarter":i=rr(this,n)/3;break;case"second":i=(this-n)/1e3;break;case"minute":i=(this-n)/6e4;break;case"hour":i=(this-n)/36e5;break;case"day":i=(this-n-a)/864e5;break;case"week":i=(this-n-a)/6048e5;break;default:i=this-n}return r?i:F(i)},br.endOf=function(e){var t,r;if(void 0===(e=W(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ur:cr,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-sr(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-sr(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-sr(t,1e3)-1}return this._d.setTime(t),_.updateOffset(this,!0),this},br.format=function(e){e||(e=this.isUtc()?_.defaultFormatUtc:_.defaultFormat);var t=z(this,e);return this.localeData().postformat(t)},br.from=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Ot(e).isValid())?Vt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},br.fromNow=function(e){return this.from(Ot(),e)},br.to=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Ot(e).isValid())?Vt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},br.toNow=function(e){return this.to(Ot(),e)},br.get=function(e){return M(this[e=W(e)])?this[e]():this},br.invalidAt=function(){return b(this).overflow},br.isAfter=function(e,t){var r=w(e)?e:Ot(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=W(t)||"millisecond")?this.valueOf()>r.valueOf():r.valueOf()<this.clone().startOf(t).valueOf())},br.isBefore=function(e,t){var r=w(e)?e:Ot(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=W(t)||"millisecond")?this.valueOf()<r.valueOf():this.clone().endOf(t).valueOf()<r.valueOf())},br.isBetween=function(e,t,r,n){var a=w(e)?e:Ot(e),i=w(t)?t:Ot(t);return!!(this.isValid()&&a.isValid()&&i.isValid())&&("("===(n=n||"()")[0]?this.isAfter(a,r):!this.isBefore(a,r))&&(")"===n[1]?this.isBefore(i,r):!this.isAfter(i,r))},br.isSame=function(e,t){var r,n=w(e)?e:Ot(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=W(t)||"millisecond")?this.valueOf()===n.valueOf():(r=n.valueOf(),this.clone().startOf(t).valueOf()<=r&&r<=this.clone().endOf(t).valueOf()))},br.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},br.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},br.isValid=function(){return g(this)},br.lang=ar,br.locale=nr,br.localeData=ir,br.max=Pt,br.min=Nt,br.parsingFlags=function(){return u({},b(this))},br.set=function(e,t){if("object"==typeof e){var r,n=function(e){var t,r=[];for(t in e)y(e,t)&&r.push({unit:t,priority:B[t]});return r.sort(function(e,t){return e.priority-t.priority}),r}(e=I(e)),a=n.length;for(r=0;r<a;r++)this[n[r].unit](e[n[r].unit])}else if(M(this[e=W(e)]))return this[e](t);return this},br.startOf=function(e){var t,r;if(void 0===(e=W(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ur:cr,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=sr(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=sr(t,6e4);break;case"second":t=this._d.valueOf(),t-=sr(t,1e3)}return this._d.setTime(t),_.updateOffset(this,!0),this},br.subtract=er,br.toArray=function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]},br.toObject=function(){return{years:this.year(),months:this.month(),date:this.date(),hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()}},br.toDate=function(){return new Date(this.valueOf())},br.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,r=t?this.clone().utc():this;return r.year()<0||9999<r.year()?z(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):M(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",z(r,"Z")):z(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},br.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,r,n="moment",a="";return this.isLocal()||(n=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),e="["+n+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r=a+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+r)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(br[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),br.toJSON=function(){return this.isValid()?this.toISOString():null},br.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},br.unix=function(){return Math.floor(this.valueOf()/1e3)},br.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},br.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},br.eraName=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].name;if(n[e].until<=r&&r<=n[e].since)return n[e].name}return""},br.eraNarrow=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].narrow;if(n[e].until<=r&&r<=n[e].since)return n[e].narrow}return""},br.eraAbbr=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].abbr;if(n[e].until<=r&&r<=n[e].since)return n[e].abbr}return""},br.eraYear=function(){var e,t,r,n,a=this.localeData().eras();for(e=0,t=a.length;e<t;++e)if(r=a[e].since<=a[e].until?1:-1,n=this.clone().startOf("day").valueOf(),a[e].since<=n&&n<=a[e].until||a[e].until<=n&&n<=a[e].since)return(this.year()-_(a[e].since).year())*r+a[e].offset;return this.year()},br.year=We,br.isLeapYear=function(){return H(this.year())},br.weekYear=function(e){return hr.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},br.isoWeekYear=function(e){return hr.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},br.quarter=br.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},br.month=Re,br.daysInMonth=function(){return Te(this.year(),this.month())},br.week=br.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},br.isoWeek=br.isoWeeks=function(e){var t=He(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},br.weeksInYear=function(){var e=this.localeData()._week;return Fe(this.year(),e.dow,e.doy)},br.weeksInWeekYear=function(){var e=this.localeData()._week;return Fe(this.weekYear(),e.dow,e.doy)},br.isoWeeksInYear=function(){return Fe(this.year(),1,4)},br.isoWeeksInISOWeekYear=function(){return Fe(this.isoWeekYear(),1,4)},br.date=pr,br.day=br.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,r,n=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,r=this.localeData(),e="string"==typeof t?isNaN(t)?"number"!=typeof(t=r.weekdaysParse(t))?null:t:parseInt(t,10):t,this.add(e-n,"d")):n},br.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},br.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var t,r,n=(t=e,r=this.localeData(),"string"!=typeof t?isNaN(t)?null:t:r.weekdaysParse(t)%7||7);return this.day(this.day()%7?n:n-7)},br.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},br.hour=br.hours=at,br.minute=br.minutes=mr,br.second=br.seconds=yr,br.millisecond=br.milliseconds=vr,br.utcOffset=function(e,t,r){var n,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?a:Ft(this);if("string"==typeof e){if(null===(e=qt(le,e)))return this}else Math.abs(e)<16&&!r&&(e*=60);return!this._isUTC&&t&&(n=Ft(this)),this._offset=e,this._isUTC=!0,null!=n&&this.add(n,"m"),a!==e&&(!t||this._changeInProgress?Xt(this,Vt(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,_.updateOffset(this,!0),this._changeInProgress=null)),this},br.utc=function(e){return this.utcOffset(0,e)},br.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ft(this),"m")),this},br.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=qt(ue,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},br.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Ot(e).utcOffset():0,(this.utcOffset()-e)%60==0)},br.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},br.isLocal=function(){return!!this.isValid()&&!this._isUTC},br.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},br.isUtc=Gt,br.isUTC=Gt,br.zoneAbbr=function(){return this._isUTC?"UTC":""},br.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},br.dates=r("dates accessor is deprecated. Use date instead.",pr),br.months=r("months accessor is deprecated. Use month instead",Re),br.years=r("years accessor is deprecated. Use year instead",We),br.zone=r("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),br.isDSTShifted=r("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=Ct(t))._a?(e=t._isUTC?m(t._a):Ot(t._a),this._isDSTShifted=this.isValid()&&0<Wt(t._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});var wr=T.prototype;function xr(e,t,r,n){var a=ht(),i=m().set(n,t);return a[r](i,e)}function kr(e,t,r){if(h(e)&&(t=e,e=void 0),e=e||"",null!=t)return xr(e,t,r,"month");var n,a=[];for(n=0;n<12;n++)a[n]=xr(e,n,r,"month");return a}function Er(e,t,r,n){"boolean"==typeof e?h(t)&&(r=t,t=void 0):(t=e,e=!1,h(r=t)&&(r=t,t=void 0)),t=t||"";var a,i=ht(),o=e?i._week.dow:0,s=[];if(null!=r)return xr(t,(r+o)%7,n,"day");for(a=0;a<7;a++)s[a]=xr(t,(a+o)%7,n,"day");return s}wr.calendar=function(e,t,r){var n=this._calendar[e]||this._calendar.sameElse;return M(n)?n.call(t,r):n},wr.longDateFormat=function(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return!t&&r?(this._longDateFormat[e]=r.match(D).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e]):t},wr.invalidDate=function(){return this._invalidDate},wr.ordinal=function(e){return this._ordinal.replace("%d",e)},wr.preparse=Ar,wr.postformat=Ar,wr.relativeTime=function(e,t,r,n){var a=this._relativeTime[r];return M(a)?a(e,t,r,n):a.replace(/%d/i,e)},wr.pastFuture=function(e,t){var r=this._relativeTime[0<e?"future":"past"];return M(r)?r(t):r.replace(/%s/i,t)},wr.set=function(e){var t,r;for(r in e)y(e,r)&&(M(t=e[r])?this[r]=t:this["_"+r]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},wr.eras=function(e,t){var r,n,a,i=this._eras||ht("en")._eras;for(r=0,n=i.length;r<n;++r){switch(typeof i[r].since){case"string":a=_(i[r].since).startOf("day"),i[r].since=a.valueOf()}switch(typeof i[r].until){case"undefined":i[r].until=1/0;break;case"string":a=_(i[r].until).startOf("day").valueOf(),i[r].until=a.valueOf()}}return i},wr.erasParse=function(e,t,r){var n,a,i,o,s,c=this.eras();for(e=e.toUpperCase(),n=0,a=c.length;n<a;++n)if(i=c[n].name.toUpperCase(),o=c[n].abbr.toUpperCase(),s=c[n].narrow.toUpperCase(),r)switch(t){case"N":case"NN":case"NNN":if(o===e)return c[n];break;case"NNNN":if(i===e)return c[n];break;case"NNNNN":if(s===e)return c[n]}else if(0<=[i,o,s].indexOf(e))return c[n]},wr.erasConvertYear=function(e,t){var r=e.since<=e.until?1:-1;return void 0===t?_(e.since).year():_(e.since).year()+(t-e.offset)*r},wr.erasAbbrRegex=function(e){return y(this,"_erasAbbrRegex")||fr.call(this),e?this._erasAbbrRegex:this._erasRegex},wr.erasNameRegex=function(e){return y(this,"_erasNameRegex")||fr.call(this),e?this._erasNameRegex:this._erasRegex},wr.erasNarrowRegex=function(e){return y(this,"_erasNarrowRegex")||fr.call(this),e?this._erasNarrowRegex:this._erasRegex},wr.months=function(e,t){return e?l(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Oe).test(t)?"format":"standalone"][e.month()]:l(this._months)?this._months:this._months.standalone},wr.monthsShort=function(e,t){return e?l(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Oe.test(t)?"format":"standalone"][e.month()]:l(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},wr.monthsParse=function(e,t,r){var n,a,i;if(this._monthsParseExact)return je.call(this,e,t,r);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(a=m([2e3,n]),r&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),r||this._monthsParse[n]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[n]=new RegExp(i.replace(".",""),"i")),r&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(r&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!r&&this._monthsParse[n].test(e))return n}},wr.monthsRegex=function(e){return this._monthsParseExact?(y(this,"_monthsRegex")||Le.call(this),e?this._monthsStrictRegex:this._monthsRegex):(y(this,"_monthsRegex")||(this._monthsRegex=Pe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},wr.monthsShortRegex=function(e){return this._monthsParseExact?(y(this,"_monthsRegex")||Le.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(y(this,"_monthsShortRegex")||(this._monthsShortRegex=Ne),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},wr.week=function(e){return He(e,this._week.dow,this._week.doy).week},wr.firstDayOfYear=function(){return this._week.doy},wr.firstDayOfWeek=function(){return this._week.dow},wr.weekdays=function(e,t){var r=l(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ge(r,this._week.dow):e?r[e.day()]:r},wr.weekdaysMin=function(e){return!0===e?Ge(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},wr.weekdaysShort=function(e){return!0===e?Ge(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},wr.weekdaysParse=function(e,t,r){var n,a,i;if(this._weekdaysParseExact)return Xe.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(a=m([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[n]=new RegExp(i.replace(".",""),"i")),r&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(r&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(r&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}},wr.weekdaysRegex=function(e){return this._weekdaysParseExact?(y(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(y(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},wr.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(y(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(y(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Je),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},wr.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(y(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(y(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},wr.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},wr.meridiem=function(e,t,r){return 11<e?r?"pm":"PM":r?"am":"AM"},ft("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,r=1===G(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th";return e+r}}),_.lang=r("moment.lang is deprecated. Use moment.locale instead.",ft),_.langData=r("moment.langData is deprecated. Use moment.localeData instead.",ht);var Mr=Math.abs;function Sr(e,t,r,n){var a=Vt(t,r);return e._milliseconds+=n*a._milliseconds,e._days+=n*a._days,e._months+=n*a._months,e._bubble()}function Tr(e){return e<0?Math.floor(e):Math.ceil(e)}function Cr(e){return 4800*e/146097}function Dr(e){return 146097*e/4800}function Or(e){return function(){return this.as(e)}}var Nr=Or("ms"),Pr=Or("s"),jr=Or("m"),zr=Or("h"),Rr=Or("d"),Lr=Or("w"),Yr=Or("M"),Wr=Or("Q"),Ir=Or("y");function Br(e){return function(){return this.isValid()?this._data[e]:NaN}}var qr=Br("milliseconds"),Hr=Br("seconds"),Fr=Br("minutes"),Gr=Br("hours"),Ur=Br("days"),$r=Br("months"),Vr=Br("years"),Kr=Math.round,Jr={ss:44,s:45,m:45,h:22,d:26,w:null,M:11},Zr=Math.abs;function Xr(e){return(0<e)-(e<0)||+e}function Qr(){if(!this.isValid())return this.localeData().invalidDate();var e,t,r,n,a,i,o,s,c=Zr(this._milliseconds)/1e3,u=Zr(this._days),l=Zr(this._months),f=this.asSeconds();return f?(e=F(c/60),t=F(e/60),c%=60,e%=60,r=F(l/12),l%=12,n=c?c.toFixed(3).replace(/\.?0+$/,""):"",a=f<0?"-":"",i=Xr(this._months)!==Xr(f)?"-":"",o=Xr(this._days)!==Xr(f)?"-":"",s=Xr(this._milliseconds)!==Xr(f)?"-":"",a+"P"+(r?i+r+"Y":"")+(l?i+l+"M":"")+(u?o+u+"D":"")+(t||e||c?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(c?s+n+"S":"")):"P0D"}var en=Rt.prototype;return en.isValid=function(){return this._isValid},en.abs=function(){var e=this._data;return this._milliseconds=Mr(this._milliseconds),this._days=Mr(this._days),this._months=Mr(this._months),e.milliseconds=Mr(e.milliseconds),e.seconds=Mr(e.seconds),e.minutes=Mr(e.minutes),e.hours=Mr(e.hours),e.months=Mr(e.months),e.years=Mr(e.years),this},en.add=function(e,t){return Sr(this,e,t,1)},en.subtract=function(e,t){return Sr(this,e,t,-1)},en.as=function(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if("month"===(e=W(e))||"quarter"===e||"year"===e)switch(t=this._days+n/864e5,r=this._months+Cr(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round(Dr(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}},en.asMilliseconds=Nr,en.asSeconds=Pr,en.asMinutes=jr,en.asHours=zr,en.asDays=Rr,en.asWeeks=Lr,en.asMonths=Yr,en.asQuarters=Wr,en.asYears=Ir,en.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*G(this._months/12):NaN},en._bubble=function(){var e,t,r,n,a,i=this._milliseconds,o=this._days,s=this._months,c=this._data;return 0<=i&&0<=o&&0<=s||i<=0&&o<=0&&s<=0||(i+=864e5*Tr(Dr(s)+o),s=o=0),c.milliseconds=i%1e3,e=F(i/1e3),c.seconds=e%60,t=F(e/60),c.minutes=t%60,r=F(t/60),c.hours=r%24,o+=F(r/24),a=F(Cr(o)),s+=a,o-=Tr(Dr(a)),n=F(s/12),s%=12,c.days=o,c.months=s,c.years=n,this},en.clone=function(){return Vt(this)},en.get=function(e){return e=W(e),this.isValid()?this[e+"s"]():NaN},en.milliseconds=qr,en.seconds=Hr,en.minutes=Fr,en.hours=Gr,en.days=Ur,en.weeks=function(){return F(this.days()/7)},en.months=$r,en.years=Vr,en.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v=!1,y=Jr;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(v=e),"object"==typeof t&&(y=Object.assign({},Jr,t),null!=t.s&&null==t.ss&&(y.ss=t.s-1)),r=this.localeData(),i=!v,o=y,s=r,c=Vt(a=this).abs(),u=Kr(c.as("s")),l=Kr(c.as("m")),f=Kr(c.as("h")),d=Kr(c.as("d")),h=Kr(c.as("M")),p=Kr(c.as("w")),m=Kr(c.as("y")),g=u<=o.ss&&["s",u]||u<o.s&&["ss",u]||l<=1&&["m"]||l<o.m&&["mm",l]||f<=1&&["h"]||f<o.h&&["hh",f]||d<=1&&["d"]||d<o.d&&["dd",d],null!=o.w&&(g=g||p<=1&&["w"]||p<o.w&&["ww",p]),(g=g||h<=1&&["M"]||h<o.M&&["MM",h]||m<=1&&["y"]||["yy",m])[2]=i,g[3]=0<+a,g[4]=s,n=function(e,t,r,n,a){return a.relativeTime(t||1,!!r,e,n)}.apply(null,g),v&&(n=r.pastFuture(+this,n)),r.postformat(n)},en.toISOString=Qr,en.toString=Qr,en.toJSON=Qr,en.locale=nr,en.localeData=ir,en.toIsoString=r("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qr),en.lang=ar,j("X",0,0,"unix"),j("x",0,0,"valueOf"),de("x",ce),de("X",/[+-]?\d+(\.\d{1,3})?/),ge("X",function(e,t,r){r._d=new Date(1e3*parseFloat(e))}),ge("x",function(e,t,r){r._d=new Date(G(e))}),_.version="2.29.4",e=Ot,_.fn=br,_.min=function(){return jt("isBefore",[].slice.call(arguments,0))},_.max=function(){return jt("isAfter",[].slice.call(arguments,0))},_.now=function(){return Date.now?Date.now():+new Date},_.utc=m,_.unix=function(e){return Ot(1e3*e)},_.months=function(e,t){return kr(e,t,"months")},_.isDate=p,_.locale=ft,_.invalid=s,_.duration=Vt,_.isMoment=w,_.weekdays=function(e,t,r){return Er(e,t,r,"weekdays")},_.parseZone=function(){return Ot.apply(null,arguments).parseZone()},_.localeData=ht,_.isDuration=Lt,_.monthsShort=function(e,t){return kr(e,t,"monthsShort")},_.weekdaysMin=function(e,t,r){return Er(e,t,r,"weekdaysMin")},_.defineLocale=dt,_.updateLocale=function(e,t){if(null!=t){var r,n,a=it;null!=ot[e]&&null!=ot[e].parentLocale?ot[e].set(S(ot[e]._config,t)):(null!=(n=lt(e))&&(a=n._config),t=S(a,t),null==n&&(t.abbr=e),(r=new T(t)).parentLocale=ot[e],ot[e]=r),ft(e)}else null!=ot[e]&&(null!=ot[e].parentLocale?(ot[e]=ot[e].parentLocale,e===ft()&&ft(e)):null!=ot[e]&&delete ot[e]);return ot[e]},_.locales=function(){return n(ot)},_.weekdaysShort=function(e,t,r){return Er(e,t,r,"weekdaysShort")},_.normalizeUnits=W,_.relativeTimeRounding=function(e){return void 0!==e?"function"==typeof e&&(Kr=e,!0):Kr},_.relativeTimeThreshold=function(e,t){return void 0!==Jr[e]&&(void 0===t?Jr[e]:(Jr[e]=t,"s"===e&&(Jr.ss=t-1),!0))},_.calendarFormat=function(e,t){var r=e.diff(t,"days",!0);return r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse"},_.prototype=br,_.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},_}()}),ec=e(function(e){var t,r;t=this,r=function(i){void 0===i.version&&i.default&&(i=i.default);var t,o={},s={},c={},u={},l={};i&&"string"==typeof i.version||T("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var e=i.version.split("."),r=+e[0],n=+e[1];function f(e){return 96<e?e-87:64<e?e-29:e-48}function a(e){var t=0,r=e.split("."),n=r[0],a=r[1]||"",i=1,o=0,s=1;for(45===e.charCodeAt(0)&&(s=-(t=1));t<n.length;t++)o=60*o+f(n.charCodeAt(t));for(t=0;t<a.length;t++)i/=60,o+=f(a.charCodeAt(t))*i;return o*s}function d(e){for(var t=0;t<e.length;t++)e[t]=a(e[t])}function h(e,t){var r,n=[];for(r=0;r<t.length;r++)n[r]=e[t[r]];return n}function p(e){var t=e.split("|"),r=t[2].split(" "),n=t[3].split(""),a=t[4].split(" ");return d(r),d(n),d(a),function(e,t){for(var r=0;r<t;r++)e[r]=Math.round((e[r-1]||0)+6e4*e[r]);e[t-1]=1/0}(a,n.length),{name:t[0],abbrs:h(t[1].split(" "),n),offsets:h(r,n),untils:a,population:0|t[5]}}function m(e){e&&this._set(p(e))}function g(e,t){this.name=e,this.zones=t}function v(e){var t=e.toTimeString(),r=t.match(/\([a-z ]+\)/i);"GMT"===(r=r&&r[0]?(r=r[0].match(/[A-Z]/g))?r.join(""):void 0:(r=t.match(/[A-Z]{3,5}/g))?r[0]:void 0)&&(r=void 0),this.at=+e,this.abbr=r,this.offset=e.getTimezoneOffset()}function y(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function _(e,t){for(var r,n;n=6e4*((t.at-e.at)/12e4|0);)(r=new v(new Date(e.at+n))).offset===e.offset?e=r:t=r;return e}function b(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:e.zone.population!==t.zone.population?t.zone.population-e.zone.population:t.zone.name.localeCompare(e.zone.name)}function A(e,t){var r,n;for(d(t),r=0;r<t.length;r++)n=t[r],l[n]=l[n]||{},l[n][e]=!0}function w(e){return(e||"").toLowerCase().replace(/\//g,"_")}function x(e){var t,r,n,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)a=w(r=(n=e[t].split("|"))[0]),o[a]=e[t],u[a]=r,A(a,n[2].split(" "))}function k(e,t){e=w(e);var r,n=o[e];return n instanceof m?n:"string"==typeof n?(n=new m(n),o[e]=n):s[e]&&t!==k&&(r=k(s[e],k))?((n=o[e]=new m)._set(r),n.name=u[e],n):null}function E(e){var t,r,n,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)n=w((r=e[t].split("|"))[0]),a=w(r[1]),s[n]=a,u[n]=r[0],s[a]=n,u[a]=r[1]}function M(e){x(e.zones),E(e.links),function(e){var t,r,n,a;if(e&&e.length)for(t=0;t<e.length;t++)r=(a=e[t].split("|"))[0].toUpperCase(),n=a[1].split(" "),c[r]=new g(r,n)}(e.countries),C.dataVersion=e.version}function S(e){var t="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||t)}function T(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function C(e){var t=Array.prototype.slice.call(arguments,0,-1),r=arguments[arguments.length-1],n=k(r),a=i.utc.apply(null,t);return n&&!i.isMoment(e)&&S(a)&&a.add(n.parse(a),"minutes"),a.tz(r),a}(r<2||2==r&&n<6)&&T("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+i.version+". See momentjs.com"),m.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,r=+e,n=this.untils;for(t=0;t<n.length;t++)if(r<n[t])return t},countries:function(){var t=this.name;return Object.keys(c).filter(function(e){return-1!==c[e].zones.indexOf(t)})},parse:function(e){var t,r,n,a,i=+e,o=this.offsets,s=this.untils,c=s.length-1;for(a=0;a<c;a++)if(t=o[a],r=o[a+1],n=o[a?a-1:a],t<r&&C.moveAmbiguousForward?t=r:n<t&&C.moveInvalidForward&&(t=n),i<s[a]-6e4*t)return o[a];return o[c]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return T("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},y.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},C.version="0.5.36",C.dataVersion="",C._zones=o,C._links=s,C._names=u,C._countries=c,C.add=x,C.link=E,C.load=M,C.zone=k,C.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,T("moment.tz.zoneExists('"+t+"') has been deprecated in favor of !moment.tz.zone('"+t+"')")),!!k(t)},C.guess=function(e){return t&&!e||(t=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&3<e.length){var t=u[w(e)];if(t)return t;T("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var r,n,a,i=function(){var e,t,r,n=(new Date).getFullYear()-2,a=new v(new Date(n,0,1)),i=[a];for(r=1;r<48;r++)(t=new v(new Date(n,r,1))).offset!==a.offset&&(e=_(a,t),i.push(e),i.push(new v(new Date(e.at+6e4)))),a=t;for(r=0;r<4;r++)i.push(new v(new Date(n+r,0,1))),i.push(new v(new Date(n+r,6,1)));return i}(),o=i.length,s=function(e){var t,r,n,a=e.length,i={},o=[];for(t=0;t<a;t++)for(r in n=l[e[t].offset]||{})n.hasOwnProperty(r)&&(i[r]=!0);for(t in i)i.hasOwnProperty(t)&&o.push(u[t]);return o}(i),c=[];for(n=0;n<s.length;n++){for(r=new y(k(s[n]),o),a=0;a<o;a++)r.scoreOffsetAt(i[a]);c.push(r)}return c.sort(b),0<c.length?c[0].zone.name:void 0}()),t},C.names=function(){var e,t=[];for(e in u)u.hasOwnProperty(e)&&(o[e]||o[s[e]])&&u[e]&&t.push(u[e]);return t.sort()},C.Zone=m,C.unpack=p,C.unpackBase60=a,C.needsOffset=S,C.moveInvalidForward=!0,C.moveAmbiguousForward=!1,C.countries=function(){return Object.keys(c)},C.zonesForCountry=function(e,t){if(r=(r=e).toUpperCase(),!(e=c[r]||null))return null;var r,n=e.zones.sort();return t?n.map(function(e){return{name:e,offset:k(e).utcOffset(new Date)}}):n};var D,O=i.fn;function N(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function P(e){return function(){return this._z=null,e.apply(this,arguments)}}i.tz=C,i.defaultZone=null,i.updateOffset=function(e,t){var r,n=i.defaultZone;if(void 0===e._z&&(n&&S(e)&&!e._isUTC&&(e._d=i.utc(e._a)._d,e.utc().add(n.parse(e),"minutes")),e._z=n),e._z)if(r=e._z.utcOffset(e),Math.abs(r)<16&&(r/=60),void 0!==e.utcOffset){var a=e._z;e.utcOffset(-r,t),e._z=a}else e.zone(r,t)},O.tz=function(e,t){if(e){if("string"!=typeof e)throw new Error("Time zone name must be a string, got "+e+" ["+typeof e+"]");return this._z=k(e),this._z?i.updateOffset(this,t):T("Moment Timezone has no data for "+e+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},O.zoneName=N(O.zoneName),O.zoneAbbr=N(O.zoneAbbr),O.utc=P(O.utc),O.local=P(O.local),O.utcOffset=(D=O.utcOffset,function(){return 0<arguments.length&&(this._z=null),D.apply(this,arguments)}),i.tz.setDefault=function(e){return(r<2||2==r&&n<9)&&T("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+i.version+"."),i.defaultZone=e?k(e):null,i};var j=i.momentProperties;return"[object Array]"===Object.prototype.toString.call(j)?(j.push("_z"),j.push("_a")):j&&(j._z=null),M({version:"2022c",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Juba|EAT CAT|-30 -20|01|24nx0|","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5","America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Kuala_Lumpur|+08|-80|0||71e5","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1q00|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PST|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5","Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0||","Pacific/Guadalcanal|+11|-b0|0||11e4","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0||","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0||","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0||","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UTC|UTC|0|0||","Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Volgograd|+04 +03|-40 -30|0101|1N7y0 9Jd0 5gn0|10e5","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 4q00|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Godthab|America/Nuuk","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Whitehorse|America/Dawson","America/Whitehorse|Canada/Yukon","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qostanay","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Brunei","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Etc/GMT-8","Asia/Kuala_Lumpur|Singapore","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Antarctica/Macquarie","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Kyiv","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Ulyanovsk|Europe/Astrakhan","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Fakaofo|Pacific/Kanton","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"],countries:["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv Europe/Uzhgorod Europe/Zaporozhye","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Honolulu Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}),i},e.exports?e.exports=r(Qs):r(t.moment)}),tc=function(e,t){var r=e.toString();function n(n){return function(e,t,r){return n+t+(r[0].toUpperCase()===r[0]?"A":"a")}}if((t=t||{}).preferredOrder=t.preferredOrder||Bc,(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=r.replace(Wc,"x")).replace(Ic,"X")).replace(Yc,"[$1]")).replace(rc,"dddd")).replace(nc,"ddd")).replace(ac,"dd")).replace(sc,"Do")).replace(ic,"MMMM")).replace(oc,"MMM")).replace(cc,function(e,t,r,n,a,i){var o,s=1===Math.min(r.length,a.length,i.length),c=4===Math.max(r.length,a.length,i.length),u="string"==typeof e.preferredOrder?e.preferredOrder:e.preferredOrder[n];return r=parseInt(r,10),a=parseInt(a,10),i=parseInt(i,10),o=[r,a,i],u=u.toUpperCase(),31<r?(o[0]=c?"YYYY":"YY",o[1]=s?"M":"MM",o[2]=s?"D":"DD"):12<a?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o[2]=c?"YYYY":"YY"):31<i?(o[2]=c?"YYYY":"YY","M"===u[0]&&r<13?(o[0]=s?"M":"MM",o[1]=s?"D":"DD"):(o[0]=s?"D":"DD",o[1]=s?"M":"MM")):(o[u.indexOf("D")]=s?"D":"DD",o[u.indexOf("M")]=s?"M":"MM",o[u.indexOf("Y")]=c?"YYYY":"YY"),o.join(n)}.bind(null,t))).replace(uc,"Z")).replace(vc,"HH:mm:ss.SSS")).replace(yc,"HH:mm:ss.SS")).replace(_c,"HH:mm:ss.S")).replace(fc,n("hh:mm:ss"))).replace(pc,n("h:mm:ss"))).replace(dc,n("hh:mm"))).replace(mc,n("h:mm"))).replace(hc,n("hh"))).replace(gc,n("h"))).replace(bc,"HH:mm:ss")).replace(xc,"H:mm:ss.SSS")).replace(kc,"H:mm:ss.SS")).replace(Ec,"H:mm:ss.S")).replace(wc,"H:mm:ss")).replace(Ac,"HH:mm")).replace(Mc,"H:mm")).replace(Sc,"YYYY")).replace(Oc,"D/M")).replace(Nc,"D/MM")).replace(Pc,"DD/M")).replace(jc,"DD/MM")).replace(zc,"M/YY")).replace(Rc,"MM/YY")).match(Lc)){r=(r=r.replace(/0\d.\d{2}|\d{2}.\d{2}/,"H.mm")).replace(/\d{1}.\d{2}/,"h.mm")}(r=(r=(r=r.replace(Tc,"DD")).replace(Cc,"D")).replace(Dc,"YY")).length<1&&(r=void 0);return r},rc=new RegExp(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].join("|"),"i"),nc=new RegExp(["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].join("|"),"i"),ac=new RegExp("\\b("+["Su","Mo","Tu","We","Th","Fr","Sa"].join("|")+")\\b","i"),ic=new RegExp(["January","February","March","April","May","June","July","August","September","October","November","December"].join("|"),"i"),oc=new RegExp(["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].join("|"),"i"),sc=/(\d+)(st|nd|rd|th)\b/i,cc=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,uc=/((\+|-)\d\d:?\d\d)$/,lc="("+["AM?","PM?"].join("|")+")",fc=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+lc,"i"),dc=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+lc,"i"),hc=new RegExp("0\\d(\\s*)"+lc,"i"),pc=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+lc,"i"),mc=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+lc,"i"),gc=new RegExp("\\d{1,2}(\\s*)"+lc,"i"),vc=/\d{2}:\d{2}:\d{2}\.\d{3}/,yc=/\d{2}:\d{2}:\d{2}\.\d{2}/,_c=/\d{2}:\d{2}:\d{2}\.\d{1}/,bc=/0\d:\d{2}:\d{2}/,Ac=/0\d:\d{2}/,wc=/\d{1,2}:\d{2}:\d{2}/,xc=/\d{1,2}:\d{2}:\d{2}\.\d{3}/,kc=/\d{1,2}:\d{2}:\d{2}\.\d{2}/,Ec=/\d{1,2}:\d{2}:\d{2}\.\d{1}/,Mc=/\d{1,2}:\d{2}/,Sc=/\d{4}/,Tc=/0\d/,Cc=/\d{1,2}/,Dc=/\d{2}/,Oc=/^([1-9])\/([1-9]|0[1-9])$/,Nc=/^([1-9])\/(1[012])$/,Pc=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,jc=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,zc=/^([1-9])\/([1-9][0-9])$/,Rc=/^(0[1-9]|1[012])\/([1-9][0-9])$/,Lc=/([/][M]|[M][/]|[MM]|[MMMM])/,Yc=/\b(at)\b/i,Wc=/\d{13}/,Ic=/\d{10}/,Bc={"/":"MDY",".":"DMY","-":"YMD"};var qc=tc;function Hc(e,t,r){if($s.test(e))return ec(new Date(e));if(Fs.test(e)){var n=Fs.exec(e);return ec().subtract(n[1],n[2])}return qs.test(e)?ec():t?ec.tz(e,r||qc(e),t):ec(e,r||qc(e))}function Fc(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=t.timezone,n=t.format;if(Ls.test(e))return new Date(Aa(e,10)).toISOString();if(Ys.test(e))return new Date(1e3*Aa(e,10)).toISOString();var a=Hc(e,r,n);return a.isValid()||(a=Hc(e=(e.match(Us)||[]).join(" ").replace(Bs,"m").replace(Is,"$1 $2 $3").replace(Ws,"$1").trim(),r,n)),a.isValid()?a.toISOString():null}function Gc(e,t){var r,n,a,i,o,s,c=t.$,u=(t.cleanConditionally,t.title),l=void 0===u?"":u,f=t.url,d=void 0===f?"":f,h=t.defaultCleaner,p=void 0===h||h;return r=Ti((r=Ti((r=c)("html"),r,"div"))("body"),r,"div"),p&&Ci(e,c),Uo(e,c,d),function(e,t,r){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:[];if(0===n.length&&(n=fi),r){var a=Sn.parse(r),i=a.protocol,o=a.hostname;n=[].concat(Li(n),['iframe[src^="'.concat(i,"//").concat(o,'"]')])}t(n.join(","),e).addClass(li)}(e,c,d),function(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:[];0===r.length&&(r=di),t(r.join(","),e).not(".".concat(li)).remove()}(e,c),(a=(n=c)("h1",e)).length<3?a.each(function(e,t){return n(t).remove()}):a.each(function(e,t){Ti(n(t),n,"h2")}),function(n,a){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"";a(mi,n).each(function(e,t){var r=a(t);return 0===a(r,n).prevAll("p").length?r.remove():ua(a(t).text())===i?r.remove():Vi(a(t))<0?r.remove():r})}(e,c,l),p&&lo(e,c),i=c,e.find("p").each(function(e,t){var r=i(t);0===r.find("iframe, img").length&&""===r.text().trim()&&r.remove()}),s=c,Yi((o=e).parent().length?o.parent():o,s),e}function Uc(e,t){var r=t.url,n=t.$;if(Vs.test(e)&&(e=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"",r=e.split(Vs);if(1===r.length)return e;var n=function(e,t){if(6<=e.length){var r=e.reduce(function(e,t){return e[t]=e[t]?e[t]+1:1,e},{}),n=ci(r).reduce(function(e,t){return e[1]<r[t]?[t,r[t]]:e},[0,0]),a=Pa(n,2),i=a[0],o=a[1];2<=o&&i.length<=4&&(e=t.split(i));var s=[e[0],e.slice(-1)],c=s.reduce(function(e,t){return e.length>t.length?e:t},"");return 10<c.length?c:t}return null}(r,e);return n||(n=function(e,t){var r=Sn.parse(t).host.replace(Ks,""),n=e[0].toLowerCase().replace(" ","");if(.4<Jc.levenshtein(n,r)&&5<n.length)return e.slice(2).join("");var a=e.slice(-1)[0].toLowerCase().replace(" ","");return.4<Jc.levenshtein(a,r)&&5<=a.length?e.slice(0,-2).join(""):null}(r,t))||e}(e,r)),150<e.length){var a=n("h1");1===a.length&&(e=a.text())}return ua(ts(e,n).trim())}"undefined"!=typeof window&&window.moment&&(window.moment.parseFormat=tc);var $c=e(function(I,B){(function(){var to,ro="Expected a function",no="__lodash_hash_undefined__",ao="__lodash_placeholder__",io=9007199254740991,oo=NaN,so=4294967295,co=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],uo="[object Arguments]",lo="[object Array]",fo="[object Boolean]",ho="[object Date]",po="[object Error]",mo="[object Function]",go="[object GeneratorFunction]",vo="[object Map]",yo="[object Number]",_o="[object Object]",bo="[object Promise]",Ao="[object RegExp]",wo="[object Set]",xo="[object String]",ko="[object Symbol]",Eo="[object WeakMap]",Mo="[object ArrayBuffer]",So="[object DataView]",To="[object Float32Array]",Co="[object Float64Array]",Do="[object Int8Array]",Oo="[object Int16Array]",No="[object Int32Array]",Po="[object Uint8Array]",jo="[object Uint8ClampedArray]",zo="[object Uint16Array]",Ro="[object Uint32Array]",Lo=/\b__p \+= '';/g,Yo=/\b(__p \+=) '' \+/g,Wo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Io=/&(?:amp|lt|gt|quot|#39);/g,Bo=/[&<>"']/g,qo=RegExp(Io.source),Ho=RegExp(Bo.source),Fo=/<%-([\s\S]+?)%>/g,Go=/<%([\s\S]+?)%>/g,Uo=/<%=([\s\S]+?)%>/g,$o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Vo=/^\w*$/,Ko=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Jo=/[\\^$.*+?()[\]{}|]/g,Zo=RegExp(Jo.source),Xo=/^\s+/,r=/\s/,Qo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,es=/\{\n\/\* \[wrapped with (.+)\] \*/,ts=/,? & /,rs=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ns=/[()=,{}\[\]\/\s]/,as=/\\(\\)?/g,is=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,os=/\w*$/,ss=/^[-+]0x[0-9a-f]+$/i,cs=/^0b[01]+$/i,us=/^\[object .+?Constructor\]$/,ls=/^0o[0-7]+$/i,fs=/^(?:0|[1-9]\d*)$/,ds=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,hs=/($^)/,ps=/['\n\r\u2028\u2029\\]/g,e="\\ud800-\\udfff",t="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",n="\\u2700-\\u27bf",a="a-z\\xdf-\\xf6\\xf8-\\xff",i="A-Z\\xc0-\\xd6\\xd8-\\xde",o="\\ufe0e\\ufe0f",s="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",c="["+e+"]",u="["+s+"]",l="["+t+"]",f="\\d+",d="["+n+"]",h="["+a+"]",p="[^"+e+s+f+n+a+i+"]",m="\\ud83c[\\udffb-\\udfff]",g="[^"+e+"]",v="(?:\\ud83c[\\udde6-\\uddff]){2}",y="[\\ud800-\\udbff][\\udc00-\\udfff]",_="["+i+"]",b="(?:"+h+"|"+p+")",A="(?:"+_+"|"+p+")",w="(?:['’](?:d|ll|m|re|s|t|ve))?",x="(?:['’](?:D|LL|M|RE|S|T|VE))?",k="(?:"+l+"|"+m+")"+"?",E="["+o+"]?",M=E+k+("(?:\\u200d(?:"+[g,v,y].join("|")+")"+E+k+")*"),S="(?:"+[d,v,y].join("|")+")"+M,T="(?:"+[g+l+"?",l,v,y,c].join("|")+")",ms=RegExp("['’]","g"),gs=RegExp(l,"g"),C=RegExp(m+"(?="+m+")|"+T+M,"g"),vs=RegExp([_+"?"+h+"+"+w+"(?="+[u,_,"$"].join("|")+")",A+"+"+x+"(?="+[u,_+b,"$"].join("|")+")",_+"?"+b+"+"+w,_+"+"+x,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",f,S].join("|"),"g"),D=RegExp("[\\u200d"+e+t+o+"]"),ys=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,_s=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],bs=-1,As={};As[To]=As[Co]=As[Do]=As[Oo]=As[No]=As[Po]=As[jo]=As[zo]=As[Ro]=!0,As[uo]=As[lo]=As[Mo]=As[fo]=As[So]=As[ho]=As[po]=As[mo]=As[vo]=As[yo]=As[_o]=As[Ao]=As[wo]=As[xo]=As[Eo]=!1;var ws={};ws[uo]=ws[lo]=ws[Mo]=ws[So]=ws[fo]=ws[ho]=ws[To]=ws[Co]=ws[Do]=ws[Oo]=ws[No]=ws[vo]=ws[yo]=ws[_o]=ws[Ao]=ws[wo]=ws[xo]=ws[ko]=ws[Po]=ws[jo]=ws[zo]=ws[Ro]=!0,ws[po]=ws[mo]=ws[Eo]=!1;var O={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},xs=parseFloat,ks=parseInt,N="object"==typeof Xr&&Xr&&Xr.Object===Object&&Xr,P="object"==typeof self&&self&&self.Object===Object&&self,Es=N||P||Function("return this")(),j=B&&!B.nodeType&&B,z=j&&I&&!I.nodeType&&I,Ms=z&&z.exports===j,R=Ms&&N.process,L=function(){try{var e=z&&z.require&&z.require("util").types;return e||R&&R.binding&&R.binding("util")}catch(e){}}(),Ss=L&&L.isArrayBuffer,Ts=L&&L.isDate,Cs=L&&L.isMap,Ds=L&&L.isRegExp,Os=L&&L.isSet,Ns=L&&L.isTypedArray;function Ps(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function js(e,t,r,n){for(var a=-1,i=null==e?0:e.length;++a<i;){var o=e[a];t(n,o,r(o),e)}return n}function zs(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e}function Rs(e,t){for(var r=null==e?0:e.length;r--&&!1!==t(e[r],r,e););return e}function Ls(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(!t(e[r],r,e))return!1;return!0}function Ys(e,t){for(var r=-1,n=null==e?0:e.length,a=0,i=[];++r<n;){var o=e[r];t(o,r,e)&&(i[a++]=o)}return i}function Ws(e,t){return!!(null==e?0:e.length)&&-1<Vs(e,t,0)}function Is(e,t,r){for(var n=-1,a=null==e?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}function Bs(e,t){for(var r=-1,n=null==e?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}function qs(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}function Hs(e,t,r,n){var a=-1,i=null==e?0:e.length;for(n&&i&&(r=e[++a]);++a<i;)r=t(r,e[a],a,e);return r}function Fs(e,t,r,n){var a=null==e?0:e.length;for(n&&a&&(r=e[--a]);a--;)r=t(r,e[a],a,e);return r}function Gs(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var Y=Xs("length");function Us(e,n,t){var a;return t(e,function(e,t,r){if(n(e,t,r))return a=t,!1}),a}function $s(e,t,r,n){for(var a=e.length,i=r+(n?1:-1);n?i--:++i<a;)if(t(e[i],i,e))return i;return-1}function Vs(e,t,r){return t==t?function(e,t,r){var n=r-1,a=e.length;for(;++n<a;)if(e[n]===t)return n;return-1}(e,t,r):$s(e,Js,r)}function Ks(e,t,r,n){for(var a=r-1,i=e.length;++a<i;)if(n(e[a],t))return a;return-1}function Js(e){return e!=e}function Zs(e,t){var r=null==e?0:e.length;return r?ec(e,t)/r:oo}function Xs(t){return function(e){return null==e?to:e[t]}}function W(t){return function(e){return null==t?to:t[e]}}function Qs(e,n,a,i,t){return t(e,function(e,t,r){a=i?(i=!1,e):n(a,e,t,r)}),a}function ec(e,t){for(var r,n=-1,a=e.length;++n<a;){var i=t(e[n]);i!==to&&(r=r===to?i:r+i)}return r}function tc(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}function rc(e){return e?e.slice(0,yc(e)+1).replace(Xo,""):e}function nc(t){return function(e){return t(e)}}function ac(t,e){return Bs(e,function(e){return t[e]})}function ic(e,t){return e.has(t)}function oc(e,t){for(var r=-1,n=e.length;++r<n&&-1<Vs(t,e[r],0););return r}function sc(e,t){for(var r=e.length;r--&&-1<Vs(t,e[r],0););return r}var cc=W({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n",ſ:"s"}),uc=W({"&":"&","<":"<",">":">",'"':""","'":"'"});function lc(e){return"\\"+O[e]}function fc(e){return D.test(e)}function dc(e){var r=-1,n=Array(e.size);return e.forEach(function(e,t){n[++r]=[t,e]}),n}function hc(t,r){return function(e){return t(r(e))}}function pc(e,t){for(var r=-1,n=e.length,a=0,i=[];++r<n;){var o=e[r];o!==t&&o!==ao||(e[r]=ao,i[a++]=r)}return i}function mc(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}function gc(e){return fc(e)?function(e){var t=C.lastIndex=0;for(;C.test(e);)++t;return t}(e):Y(e)}function vc(e){return fc(e)?e.match(C)||[]:e.split("")}function yc(e){for(var t=e.length;t--&&r.test(e.charAt(t)););return t}var _c=W({"&":"&","<":"<",">":">",""":'"',"'":"'"});var bc=function e(t){var r,T=(t=null==t?Es:bc.defaults(Es.Object(),t,bc.pick(Es,_s))).Array,n=t.Date,g=t.Error,v=t.Function,a=t.Math,k=t.Object,y=t.RegExp,l=t.String,C=t.TypeError,i=T.prototype,o=v.prototype,f=k.prototype,s=t["__core-js_shared__"],c=o.toString,E=f.hasOwnProperty,u=0,d=(r=/[^.]+$/.exec(s&&s.keys&&s.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",h=f.toString,p=c.call(k),m=Es._,_=y("^"+c.call(E).replace(Jo,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),b=Ms?t.Buffer:to,A=t.Symbol,w=t.Uint8Array,x=b?b.allocUnsafe:to,M=hc(k.getPrototypeOf,k),S=k.create,D=f.propertyIsEnumerable,O=i.splice,N=A?A.isConcatSpreadable:to,P=A?A.iterator:to,j=A?A.toStringTag:to,z=function(){try{var e=Wr(k,"defineProperty");return e({},"",{}),e}catch(e){}}(),R=t.clearTimeout!==Es.clearTimeout&&t.clearTimeout,L=n&&n.now!==Es.Date.now&&n.now,Y=t.setTimeout!==Es.setTimeout&&t.setTimeout,W=a.ceil,I=a.floor,B=k.getOwnPropertySymbols,q=b?b.isBuffer:to,H=t.isFinite,F=i.join,G=hc(k.keys,k),U=a.max,$=a.min,V=n.now,K=t.parseInt,J=a.random,Z=i.reverse,X=Wr(t,"DataView"),Q=Wr(t,"Map"),ee=Wr(t,"Promise"),te=Wr(t,"Set"),re=Wr(t,"WeakMap"),ne=Wr(k,"create"),ae=re&&new re,ie={},oe=pn(X),se=pn(Q),ce=pn(ee),ue=pn(te),le=pn(re),fe=A?A.prototype:to,de=fe?fe.valueOf:to,he=fe?fe.toString:to;function pe(e){if(Oa(e)&&!ba(e)&&!(e instanceof ye)){if(e instanceof ve)return e;if(E.call(e,"__wrapped__"))return mn(e)}return new ve(e)}var me=function(){function r(){}return function(e){if(!Da(e))return{};if(S)return S(e);r.prototype=e;var t=new r;return r.prototype=to,t}}();function ge(){}function ve(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=to}function ye(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=so,this.__views__=[]}function _e(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function be(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function Ae(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function we(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Ae;++t<r;)this.add(e[t])}function xe(e){var t=this.__data__=new be(e);this.size=t.size}function ke(e,t){var r=ba(e),n=!r&&_a(e),a=!r&&!n&&ka(e),i=!r&&!n&&!a&&Wa(e),o=r||n||a||i,s=o?tc(e.length,l):[],c=s.length;for(var u in e)!t&&!E.call(e,u)||o&&("length"==u||a&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Ur(u,c))||s.push(u);return s}function Ee(e){var t=e.length;return t?e[wt(0,t-1)]:to}function Me(e,t){return un(nr(e),ze(t,0,e.length))}function Se(e){return un(nr(e))}function Te(e,t,r){(r===to||ga(e[t],r))&&(r!==to||t in e)||Pe(e,t,r)}function Ce(e,t,r){var n=e[t];E.call(e,t)&&ga(n,r)&&(r!==to||t in e)||Pe(e,t,r)}function De(e,t){for(var r=e.length;r--;)if(ga(e[r][0],t))return r;return-1}function Oe(e,n,a,i){return Ie(e,function(e,t,r){n(i,e,a(e),r)}),i}function Ne(e,t){return e&&ar(t,si(t),e)}function Pe(e,t,r){"__proto__"==t&&z?z(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}function je(e,t){for(var r=-1,n=t.length,a=T(n),i=null==e;++r<n;)a[r]=i?to:ri(e,t[r]);return a}function ze(e,t,r){return e==e&&(r!==to&&(e=e<=r?e:r),t!==to&&(e=t<=e?e:t)),e}function Re(r,n,a,e,t,i){var o,s=1&n,c=2&n,u=4&n;if(a&&(o=t?a(r,e,t,i):a(r)),o!==to)return o;if(!Da(r))return r;var l,f,d,h,p,m,g,v,y,_=ba(r);if(_){if(v=(g=r).length,y=new g.constructor(v),v&&"string"==typeof g[0]&&E.call(g,"index")&&(y.index=g.index,y.input=g.input),o=y,!s)return nr(r,o)}else{var b=qr(r),A=b==mo||b==go;if(ka(r))return Zt(r,s);if(b==_o||b==uo||A&&!t){if(o=c||A?{}:Fr(r),!s)return c?(m=d=r,h=(p=o)&&ar(m,ci(m),p),ar(d,Br(d),h)):(f=Ne(o,l=r),ar(l,Ir(l),f))}else{if(!ws[b])return t?r:{};o=function(e,t,r){var n,a,i,o,s,c=e.constructor;switch(t){case Mo:return Xt(e);case fo:case ho:return new c(+e);case So:return o=e,s=r?Xt(o.buffer):o.buffer,new o.constructor(s,o.byteOffset,o.byteLength);case To:case Co:case Do:case Oo:case No:case Po:case jo:case zo:case Ro:return Qt(e,r);case vo:return new c;case yo:case xo:return new c(e);case Ao:return(i=new(a=e).constructor(a.source,os.exec(a))).lastIndex=a.lastIndex,i;case wo:return new c;case ko:return n=e,de?k(de.call(n)):{}}}(r,b,s)}}i||(i=new xe);var w=i.get(r);if(w)return w;i.set(r,o),Ra(r)?r.forEach(function(e){o.add(Re(e,n,a,e,r,i))}):Na(r)&&r.forEach(function(e,t){o.set(t,Re(e,n,a,t,r,i))});var x=_?to:(u?c?Nr:Or:c?ci:si)(r);return zs(x||r,function(e,t){x&&(e=r[t=e]),Ce(o,t,Re(e,n,a,t,r,i))}),o}function Le(e,t,r){var n=r.length;if(null==e)return!n;for(e=k(e);n--;){var a=r[n],i=t[a],o=e[a];if(o===to&&!(a in e)||!i(o))return!1}return!0}function Ye(e,t,r){if("function"!=typeof e)throw new C(ro);return an(function(){e.apply(to,r)},t)}function We(e,t,r,n){var a=-1,i=Ws,o=!0,s=e.length,c=[],u=t.length;if(!s)return c;r&&(t=Bs(t,nc(r))),n?(i=Is,o=!1):200<=t.length&&(i=ic,o=!1,t=new we(t));e:for(;++a<s;){var l=e[a],f=null==r?l:r(l);if(l=n||0!==l?l:0,o&&f==f){for(var d=u;d--;)if(t[d]===f)continue e;c.push(l)}else i(t,f,n)||c.push(l)}return c}pe.templateSettings={escape:Fo,evaluate:Go,interpolate:Uo,variable:"",imports:{_:pe}},(pe.prototype=ge.prototype).constructor=pe,(ve.prototype=me(ge.prototype)).constructor=ve,(ye.prototype=me(ge.prototype)).constructor=ye,_e.prototype.clear=function(){this.__data__=ne?ne(null):{},this.size=0},_e.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},_e.prototype.get=function(e){var t=this.__data__;if(ne){var r=t[e];return r===no?to:r}return E.call(t,e)?t[e]:to},_e.prototype.has=function(e){var t=this.__data__;return ne?t[e]!==to:E.call(t,e)},_e.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=ne&&t===to?no:t,this},be.prototype.clear=function(){this.__data__=[],this.size=0},be.prototype.delete=function(e){var t=this.__data__,r=De(t,e);return!(r<0||(r==t.length-1?t.pop():O.call(t,r,1),--this.size,0))},be.prototype.get=function(e){var t=this.__data__,r=De(t,e);return r<0?to:t[r][1]},be.prototype.has=function(e){return-1<De(this.__data__,e)},be.prototype.set=function(e,t){var r=this.__data__,n=De(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},Ae.prototype.clear=function(){this.size=0,this.__data__={hash:new _e,map:new(Q||be),string:new _e}},Ae.prototype.delete=function(e){var t=Lr(this,e).delete(e);return this.size-=t?1:0,t},Ae.prototype.get=function(e){return Lr(this,e).get(e)},Ae.prototype.has=function(e){return Lr(this,e).has(e)},Ae.prototype.set=function(e,t){var r=Lr(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},we.prototype.add=we.prototype.push=function(e){return this.__data__.set(e,no),this},we.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.clear=function(){this.__data__=new be,this.size=0},xe.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},xe.prototype.get=function(e){return this.__data__.get(e)},xe.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.set=function(e,t){var r=this.__data__;if(r instanceof be){var n=r.__data__;if(!Q||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ae(n)}return r.set(e,t),this.size=r.size,this};var Ie=sr(Ve),Be=sr(Ke,!0);function qe(e,n){var a=!0;return Ie(e,function(e,t,r){return a=!!n(e,t,r)}),a}function He(e,t,r){for(var n=-1,a=e.length;++n<a;){var i=e[n],o=t(i);if(null!=o&&(s===to?o==o&&!Ya(o):r(o,s)))var s=o,c=i}return c}function Fe(e,n){var a=[];return Ie(e,function(e,t,r){n(e,t,r)&&a.push(e)}),a}function Ge(e,t,r,n,a){var i=-1,o=e.length;for(r||(r=Gr),a||(a=[]);++i<o;){var s=e[i];0<t&&r(s)?1<t?Ge(s,t-1,r,n,a):qs(a,s):n||(a[a.length]=s)}return a}var Ue=cr(),$e=cr(!0);function Ve(e,t){return e&&Ue(e,t,si)}function Ke(e,t){return e&&$e(e,t,si)}function Je(t,e){return Ys(e,function(e){return Sa(t[e])})}function Ze(e,t){for(var r=0,n=(t=$t(t,e)).length;null!=e&&r<n;)e=e[hn(t[r++])];return r&&r==n?e:to}function Xe(e,t,r){var n=t(e);return ba(e)?n:qs(n,r(e))}function Qe(e){return null==e?e===to?"[object Undefined]":"[object Null]":j&&j in k(e)?function(e){var t=E.call(e,j),r=e[j];try{e[j]=to;var n=!0}catch(e){}var a=h.call(e);return n&&(t?e[j]=r:delete e[j]),a}(e):(t=e,h.call(t));var t}function et(e,t){return t<e}function tt(e,t){return null!=e&&E.call(e,t)}function rt(e,t){return null!=e&&t in k(e)}function nt(e,t,r){for(var n=r?Is:Ws,a=e[0].length,i=e.length,o=i,s=T(i),c=1/0,u=[];o--;){var l=e[o];o&&t&&(l=Bs(l,nc(t))),c=$(l.length,c),s[o]=!r&&(t||120<=a&&120<=l.length)?new we(o&&l):to}l=e[0];var f=-1,d=s[0];e:for(;++f<a&&u.length<c;){var h=l[f],p=t?t(h):h;if(h=r||0!==h?h:0,!(d?ic(d,p):n(u,p,r))){for(o=i;--o;){var m=s[o];if(!(m?ic(m,p):n(e[o],p,r)))continue e}d&&d.push(p),u.push(h)}}return u}function at(e,t,r){var n=null==(e=tn(e,t=$t(t,e)))?e:e[hn(Mn(t))];return null==n?to:Ps(n,e,r)}function it(e){return Oa(e)&&Qe(e)==uo}function ot(e,t,r,n,a){return e===t||(null==e||null==t||!Oa(e)&&!Oa(t)?e!=e&&t!=t:function(e,t,r,n,a,i){var o=ba(e),s=ba(t),c=o?lo:qr(e),u=s?lo:qr(t),l=(c=c==uo?_o:c)==_o,f=(u=u==uo?_o:u)==_o,d=c==u;if(d&&ka(e)){if(!ka(t))return!1;l=!(o=!0)}if(d&&!l)return i||(i=new xe),o||Wa(e)?Cr(e,t,r,n,a,i):function(e,t,r,n,a,i,o){switch(r){case So:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Mo:return!(e.byteLength!=t.byteLength||!i(new w(e),new w(t)));case fo:case ho:case yo:return ga(+e,+t);case po:return e.name==t.name&&e.message==t.message;case Ao:case xo:return e==t+"";case vo:var s=dc;case wo:var c=1&n;if(s||(s=mc),e.size!=t.size&&!c)return!1;var u=o.get(e);if(u)return u==t;n|=2,o.set(e,t);var l=Cr(s(e),s(t),n,a,i,o);return o.delete(e),l;case ko:if(de)return de.call(e)==de.call(t)}return!1}(e,t,c,r,n,a,i);if(!(1&r)){var h=l&&E.call(e,"__wrapped__"),p=f&&E.call(t,"__wrapped__");if(h||p){var m=h?e.value():e,g=p?t.value():t;return i||(i=new xe),a(m,g,r,n,i)}}return!!d&&(i||(i=new xe),function(e,t,r,n,a,i){var o=1&r,s=Or(e),c=s.length,u=Or(t).length;if(c!=u&&!o)return!1;for(var l=c;l--;){var f=s[l];if(!(o?f in t:E.call(t,f)))return!1}var d=i.get(e),h=i.get(t);if(d&&h)return d==t&&h==e;var p=!0;i.set(e,t),i.set(t,e);for(var m=o;++l<c;){f=s[l];var g=e[f],v=t[f];if(n)var y=o?n(v,g,f,t,e,i):n(g,v,f,e,t,i);if(!(y===to?g===v||a(g,v,r,n,i):y)){p=!1;break}m||(m="constructor"==f)}if(p&&!m){var _=e.constructor,b=t.constructor;_!=b&&"constructor"in e&&"constructor"in t&&!("function"==typeof _&&_ instanceof _&&"function"==typeof b&&b instanceof b)&&(p=!1)}return i.delete(e),i.delete(t),p}(e,t,r,n,a,i))}(e,t,r,n,ot,a))}function st(e,t,r,n){var a=r.length,i=a,o=!n;if(null==e)return!i;for(e=k(e);a--;){var s=r[a];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<i;){var c=(s=r[a])[0],u=e[c],l=s[1];if(o&&s[2]){if(u===to&&!(c in e))return!1}else{var f=new xe;if(n)var d=n(u,l,c,e,t,f);if(!(d===to?ot(l,u,3,n,f):d))return!1}}return!0}function ct(e){return!(!Da(e)||(t=e,d&&d in t))&&(Sa(e)?_:us).test(pn(e));var t}function ut(e){return"function"==typeof e?e:null==e?Pi:"object"==typeof e?ba(e)?mt(e[0],e[1]):pt(e):qi(e)}function lt(e){if(!Zr(e))return G(e);var t=[];for(var r in k(e))E.call(e,r)&&"constructor"!=r&&t.push(r);return t}function ft(e){if(!Da(e))return function(e){var t=[];if(null!=e)for(var r in k(e))t.push(r);return t}(e);var t=Zr(e),r=[];for(var n in e)("constructor"!=n||!t&&E.call(e,n))&&r.push(n);return r}function dt(e,t){return e<t}function ht(e,n){var a=-1,i=wa(e)?T(e.length):[];return Ie(e,function(e,t,r){i[++a]=n(e,t,r)}),i}function pt(t){var r=Yr(t);return 1==r.length&&r[0][2]?Qr(r[0][0],r[0][1]):function(e){return e===t||st(e,t,r)}}function mt(r,n){return Vr(r)&&Xr(n)?Qr(hn(r),n):function(e){var t=ri(e,r);return t===to&&t===n?ni(e,r):ot(n,t,3)}}function gt(n,a,i,o,s){n!==a&&Ue(a,function(e,t){if(s||(s=new xe),Da(e))!function(e,t,r,n,a,i,o){var s=rn(e,r),c=rn(t,r),u=o.get(c);if(u)return Te(e,r,u);var l=i?i(s,c,r+"",e,t,o):to,f=l===to;if(f){var d=ba(c),h=!d&&ka(c),p=!d&&!h&&Wa(c);l=c,d||h||p?l=ba(s)?s:xa(s)?nr(s):h?Zt(c,!(f=!1)):p?Qt(c,!(f=!1)):[]:ja(c)||_a(c)?_a(l=s)?l=$a(s):Da(s)&&!Sa(s)||(l=Fr(c)):f=!1}f&&(o.set(c,l),a(l,c,n,i,o),o.delete(c)),Te(e,r,l)}(n,a,t,i,gt,o,s);else{var r=o?o(rn(n,t),e,t+"",n,a,s):to;r===to&&(r=e),Te(n,t,r)}},ci)}function vt(e,t){var r=e.length;if(r)return Ur(t+=t<0?r:0,r)?e[t]:to}function yt(e,n,r){n=n.length?Bs(n,function(t){return ba(t)?function(e){return Ze(e,1===t.length?t[0]:t)}:t}):[Pi];var a=-1;return n=Bs(n,nc(Rr())),function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}(ht(e,function(t,e,r){return{criteria:Bs(n,function(e){return e(t)}),index:++a,value:t}}),function(e,t){return function(e,t,r){for(var n=-1,a=e.criteria,i=t.criteria,o=a.length,s=r.length;++n<o;){var c=er(a[n],i[n]);if(c){if(s<=n)return c;var u=r[n];return c*("desc"==u?-1:1)}}return e.index-t.index}(e,t,r)})}function _t(e,t,r){for(var n=-1,a=t.length,i={};++n<a;){var o=t[n],s=Ze(e,o);r(s,o)&&St(i,$t(o,e),s)}return i}function bt(e,t,r,n){var a=n?Ks:Vs,i=-1,o=t.length,s=e;for(e===t&&(t=nr(t)),r&&(s=Bs(e,nc(r)));++i<o;)for(var c=0,u=t[i],l=r?r(u):u;-1<(c=a(s,l,c,n));)s!==e&&O.call(s,c,1),O.call(e,c,1);return e}function At(e,t){for(var r=e?t.length:0,n=r-1;r--;){var a=t[r];if(r==n||a!==i){var i=a;Ur(a)?O.call(e,a,1):Wt(e,a)}}return e}function wt(e,t){return e+I(J()*(t-e+1))}function xt(e,t){var r="";if(!e||t<1||io<t)return r;for(;t%2&&(r+=e),(t=I(t/2))&&(e+=e),t;);return r}function kt(e,t){return on(en(e,t,Pi),e+"")}function Et(e){return Ee(gi(e))}function Mt(e,t){var r=gi(e);return un(r,ze(t,0,r.length))}function St(e,t,r,n){if(!Da(e))return e;for(var a=-1,i=(t=$t(t,e)).length,o=i-1,s=e;null!=s&&++a<i;){var c=hn(t[a]),u=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(a!=o){var l=s[c];(u=n?n(l,c,s):to)===to&&(u=Da(l)?l:Ur(t[a+1])?[]:{})}Ce(s,c,u),s=s[c]}return e}var Tt=ae?function(e,t){return ae.set(e,t),e}:Pi,Ct=z?function(e,t){return z(e,"toString",{configurable:!0,enumerable:!1,value:Di(t),writable:!0})}:Pi;function Dt(e){return un(gi(e))}function Ot(e,t,r){var n=-1,a=e.length;t<0&&(t=a<-t?0:a+t),(r=a<r?a:r)<0&&(r+=a),a=r<t?0:r-t>>>0,t>>>=0;for(var i=T(a);++n<a;)i[n]=e[n+t];return i}function Nt(e,n){var a;return Ie(e,function(e,t,r){return!(a=n(e,t,r))}),!!a}function Pt(e,t,r){var n=0,a=null==e?n:e.length;if("number"==typeof t&&t==t&&a<=2147483647){for(;n<a;){var i=n+a>>>1,o=e[i];null!==o&&!Ya(o)&&(r?o<=t:o<t)?n=i+1:a=i}return a}return jt(e,t,Pi,r)}function jt(e,t,r,n){var a=0,i=null==e?0:e.length;if(0===i)return 0;for(var o=(t=r(t))!=t,s=null===t,c=Ya(t),u=t===to;a<i;){var l=I((a+i)/2),f=r(e[l]),d=f!==to,h=null===f,p=f==f,m=Ya(f);if(o)var g=n||p;else g=u?p&&(n||d):s?p&&d&&(n||!h):c?p&&d&&!h&&(n||!m):!h&&!m&&(n?f<=t:f<t);g?a=l+1:i=l}return $(i,4294967294)}function zt(e,t){for(var r=-1,n=e.length,a=0,i=[];++r<n;){var o=e[r],s=t?t(o):o;if(!r||!ga(s,c)){var c=s;i[a++]=0===o?0:o}}return i}function Rt(e){return"number"==typeof e?e:Ya(e)?oo:+e}function Lt(e){if("string"==typeof e)return e;if(ba(e))return Bs(e,Lt)+"";if(Ya(e))return he?he.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Yt(e,t,r){var n=-1,a=Ws,i=e.length,o=!0,s=[],c=s;if(r)o=!1,a=Is;else if(200<=i){var u=t?null:xr(e);if(u)return mc(u);o=!1,a=ic,c=new we}else c=t?[]:s;e:for(;++n<i;){var l=e[n],f=t?t(l):l;if(l=r||0!==l?l:0,o&&f==f){for(var d=c.length;d--;)if(c[d]===f)continue e;t&&c.push(f),s.push(l)}else a(c,f,r)||(c!==s&&c.push(f),s.push(l))}return s}function Wt(e,t){return null==(e=tn(e,t=$t(t,e)))||delete e[hn(Mn(t))]}function It(e,t,r,n){return St(e,t,r(Ze(e,t)),n)}function Bt(e,t,r,n){for(var a=e.length,i=n?a:-1;(n?i--:++i<a)&&t(e[i],i,e););return r?Ot(e,n?0:i,n?i+1:a):Ot(e,n?i+1:0,n?a:i)}function qt(e,t){var r=e;return r instanceof ye&&(r=r.value()),Hs(t,function(e,t){return t.func.apply(t.thisArg,qs([e],t.args))},r)}function Ht(e,t,r){var n=e.length;if(n<2)return n?Yt(e[0]):[];for(var a=-1,i=T(n);++a<n;)for(var o=e[a],s=-1;++s<n;)s!=a&&(i[a]=We(i[a]||o,e[s],t,r));return Yt(Ge(i,1),t,r)}function Ft(e,t,r){for(var n=-1,a=e.length,i=t.length,o={};++n<a;){var s=n<i?t[n]:to;r(o,e[n],s)}return o}function Gt(e){return xa(e)?e:[]}function Ut(e){return"function"==typeof e?e:Pi}function $t(e,t){return ba(e)?e:Vr(e,t)?[e]:dn(Va(e))}var Vt=kt;function Kt(e,t,r){var n=e.length;return r=r===to?n:r,!t&&n<=r?e:Ot(e,t,r)}var Jt=R||function(e){return Es.clearTimeout(e)};function Zt(e,t){if(t)return e.slice();var r=e.length,n=x?x(r):new e.constructor(r);return e.copy(n),n}function Xt(e){var t=new e.constructor(e.byteLength);return new w(t).set(new w(e)),t}function Qt(e,t){var r=t?Xt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function er(e,t){if(e!==t){var r=e!==to,n=null===e,a=e==e,i=Ya(e),o=t!==to,s=null===t,c=t==t,u=Ya(t);if(!s&&!u&&!i&&t<e||i&&o&&c&&!s&&!u||n&&o&&c||!r&&c||!a)return 1;if(!n&&!i&&!u&&e<t||u&&r&&a&&!n&&!i||s&&r&&a||!o&&a||!c)return-1}return 0}function tr(e,t,r,n){for(var a=-1,i=e.length,o=r.length,s=-1,c=t.length,u=U(i-o,0),l=T(c+u),f=!n;++s<c;)l[s]=t[s];for(;++a<o;)(f||a<i)&&(l[r[a]]=e[a]);for(;u--;)l[s++]=e[a++];return l}function rr(e,t,r,n){for(var a=-1,i=e.length,o=-1,s=r.length,c=-1,u=t.length,l=U(i-s,0),f=T(l+u),d=!n;++a<l;)f[a]=e[a];for(var h=a;++c<u;)f[h+c]=t[c];for(;++o<s;)(d||a<i)&&(f[h+r[o]]=e[a++]);return f}function nr(e,t){var r=-1,n=e.length;for(t||(t=T(n));++r<n;)t[r]=e[r];return t}function ar(e,t,r,n){var a=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var s=t[i],c=n?n(r[s],e[s],s,r,e):to;c===to&&(c=e[s]),a?Pe(r,s,c):Ce(r,s,c)}return r}function ir(a,i){return function(e,t){var r=ba(e)?js:Oe,n=i?i():{};return r(e,a,Rr(t,2),n)}}function or(s){return kt(function(e,t){var r=-1,n=t.length,a=1<n?t[n-1]:to,i=2<n?t[2]:to;for(a=3<s.length&&"function"==typeof a?(n--,a):to,i&&$r(t[0],t[1],i)&&(a=n<3?to:a,n=1),e=k(e);++r<n;){var o=t[r];o&&s(e,o,r,a)}return e})}function sr(i,o){return function(e,t){if(null==e)return e;if(!wa(e))return i(e,t);for(var r=e.length,n=o?r:-1,a=k(e);(o?n--:++n<r)&&!1!==t(a[n],n,a););return e}}function cr(c){return function(e,t,r){for(var n=-1,a=k(e),i=r(e),o=i.length;o--;){var s=i[c?o:++n];if(!1===t(a[s],s,a))break}return e}}function ur(a){return function(e){var t=fc(e=Va(e))?vc(e):to,r=t?t[0]:e.charAt(0),n=t?Kt(t,1).join(""):e.slice(1);return r[a]()+n}}function lr(t){return function(e){return Hs(Si(_i(e).replace(ms,"")),t,"")}}function fr(n){return function(){var e=arguments;switch(e.length){case 0:return new n;case 1:return new n(e[0]);case 2:return new n(e[0],e[1]);case 3:return new n(e[0],e[1],e[2]);case 4:return new n(e[0],e[1],e[2],e[3]);case 5:return new n(e[0],e[1],e[2],e[3],e[4]);case 6:return new n(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new n(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var t=me(n.prototype),r=n.apply(t,e);return Da(r)?r:t}}function dr(o){return function(e,t,r){var n=k(e);if(!wa(e)){var a=Rr(t,3);e=si(e),t=function(e){return a(n[e],e,n)}}var i=o(e,t,r);return-1<i?n[a?e[i]:i]:to}}function hr(c){return Dr(function(a){var i=a.length,e=i,t=ve.prototype.thru;for(c&&a.reverse();e--;){var r=a[e];if("function"!=typeof r)throw new C(ro);if(t&&!o&&"wrapper"==jr(r))var o=new ve([],!0)}for(e=o?e:i;++e<i;){var n=jr(r=a[e]),s="wrapper"==n?Pr(r):to;o=s&&Kr(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?o[jr(s[0])].apply(o,s[3]):1==r.length&&Kr(r)?o[n]():o.thru(r)}return function(){var e=arguments,t=e[0];if(o&&1==e.length&&ba(t))return o.plant(t).value();for(var r=0,n=i?a[r].apply(this,e):t;++r<i;)n=a[r].call(this,n);return n}})}function pr(u,l,f,d,h,p,m,g,v,y){var _=128&l,b=1&l,A=2&l,w=24&l,x=512&l,k=A?to:fr(u);return function e(){for(var t=arguments.length,r=T(t),n=t;n--;)r[n]=arguments[n];if(w)var a=zr(e),i=function(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}(r,a);if(d&&(r=tr(r,d,h,w)),p&&(r=rr(r,p,m,w)),t-=i,w&&t<y){var o=pc(r,a);return Ar(u,l,pr,e.placeholder,f,r,o,g,v,y-t)}var s=b?f:this,c=A?s[u]:u;return t=r.length,g?r=function(e,t){for(var r=e.length,n=$(t.length,r),a=nr(e);n--;){var i=t[n];e[n]=Ur(i,r)?a[i]:to}return e}(r,g):x&&1<t&&r.reverse(),_&&v<t&&(r.length=v),this&&this!==Es&&this instanceof e&&(c=k||fr(c)),c.apply(s,r)}}function mr(o,s){return function(e,t){return r=e,n=o,a=s(t),i={},Ve(r,function(e,t,r){n(i,a(e),t,r)}),i;var r,n,a,i}}function gr(n,a){return function(e,t){var r;if(e===to&&t===to)return a;if(e!==to&&(r=e),t!==to){if(r===to)return t;t="string"==typeof e||"string"==typeof t?(e=Lt(e),Lt(t)):(e=Rt(e),Rt(t)),r=n(e,t)}return r}}function vr(n){return Dr(function(e){return e=Bs(e,nc(Rr())),kt(function(t){var r=this;return n(e,function(e){return Ps(e,r,t)})})})}function yr(e,t){var r=(t=t===to?" ":Lt(t)).length;if(r<2)return r?xt(t,e):t;var n=xt(t,W(e/gc(t)));return fc(t)?Kt(vc(n),0,e).join(""):n.slice(0,e)}function _r(n){return function(e,t,r){return r&&"number"!=typeof r&&$r(e,t,r)&&(t=r=to),e=Ha(e),t===to?(t=e,e=0):t=Ha(t),function(e,t,r,n){for(var a=-1,i=U(W((t-e)/(r||1)),0),o=T(i);i--;)o[n?i:++a]=e,e+=r;return o}(e,t,r=r===to?e<t?1:-1:Ha(r),n)}}function br(r){return function(e,t){return"string"==typeof e&&"string"==typeof t||(e=Ua(e),t=Ua(t)),r(e,t)}}function Ar(e,t,r,n,a,i,o,s,c,u){var l=8&t;t|=l?32:64,4&(t&=~(l?64:32))||(t&=-4);var f=[e,t,a,l?i:to,l?o:to,l?to:i,l?to:o,s,c,u],d=r.apply(to,f);return Kr(e)&&nn(d,f),d.placeholder=n,sn(d,e,t)}function wr(e){var n=a[e];return function(e,t){if(e=Ua(e),(t=null==t?0:$(Fa(t),292))&&H(e)){var r=(Va(e)+"e").split("e");return+((r=(Va(n(r[0]+"e"+(+r[1]+t)))+"e").split("e"))[0]+"e"+(+r[1]-t))}return n(e)}}var xr=te&&1/mc(new te([,-0]))[1]==1/0?function(e){return new te(e)}:Yi;function kr(o){return function(e){var t,r,n,a,i=qr(e);return i==vo?dc(e):i==wo?(t=e,r=-1,n=Array(t.size),t.forEach(function(e){n[++r]=[e,e]}),n):Bs(o(a=e),function(e){return[e,a[e]]})}}function Er(e,t,r,n,a,i,o,s){var c=2&t;if(!c&&"function"!=typeof e)throw new C(ro);var u=n?n.length:0;if(u||(t&=-97,n=a=to),o=o===to?o:U(Fa(o),0),s=s===to?s:Fa(s),u-=a?a.length:0,64&t){var l=n,f=a;n=a=to}var d,h,p,m,g,v,y,_,b,A,w,x,k,E=c?to:Pr(e),M=[e,t,r,n,a,l,f,i,o,s];if(E&&function(e,t){var r=e[1],n=t[1],a=r|n,i=a<131,o=128==n&&8==r||128==n&&256==r&&e[7].length<=t[8]||384==n&&t[7].length<=t[8]&&8==r;if(i||o){1&n&&(e[2]=t[2],a|=1&r?0:4);var s=t[3];if(s){var c=e[3];e[3]=c?tr(c,s,t[4]):s,e[4]=c?pc(e[3],ao):t[4]}(s=t[5])&&(c=e[5],e[5]=c?rr(c,s,t[6]):s,e[6]=c?pc(e[5],ao):t[6]),(s=t[7])&&(e[7]=s),128&n&&(e[8]=null==e[8]?t[8]:$(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=a}}(M,E),e=M[0],t=M[1],r=M[2],n=M[3],a=M[4],!(s=M[9]=M[9]===to?c?0:e.length:U(M[9]-u,0))&&24&t&&(t&=-25),t&&1!=t)S=8==t||16==t?(y=t,_=s,b=fr(v=e),function e(){for(var t=arguments.length,r=T(t),n=t,a=zr(e);n--;)r[n]=arguments[n];var i=t<3&&r[0]!==a&&r[t-1]!==a?[]:pc(r,a);return(t-=i.length)<_?Ar(v,y,pr,e.placeholder,to,r,i,to,to,_-t):Ps(this&&this!==Es&&this instanceof e?b:v,this,r)}):32!=t&&33!=t||a.length?pr.apply(to,M):(h=r,p=n,m=1&t,g=fr(d=e),function e(){for(var t=-1,r=arguments.length,n=-1,a=p.length,i=T(a+r),o=this&&this!==Es&&this instanceof e?g:d;++n<a;)i[n]=p[n];for(;r--;)i[n++]=arguments[++t];return Ps(o,m?h:this,i)});else var S=(w=r,x=1&t,k=fr(A=e),function e(){return(this&&this!==Es&&this instanceof e?k:A).apply(x?w:this,arguments)});return sn((E?Tt:nn)(S,M),e,t)}function Mr(e,t,r,n){return e===to||ga(e,f[r])&&!E.call(n,r)?t:e}function Sr(e,t,r,n,a,i){return Da(e)&&Da(t)&&(i.set(t,e),gt(e,t,to,Sr,i),i.delete(t)),e}function Tr(e){return ja(e)?to:e}function Cr(e,t,r,n,a,i){var o=1&r,s=e.length,c=t.length;if(s!=c&&!(o&&s<c))return!1;var u=i.get(e),l=i.get(t);if(u&&l)return u==t&&l==e;var f=-1,d=!0,h=2&r?new we:to;for(i.set(e,t),i.set(t,e);++f<s;){var p=e[f],m=t[f];if(n)var g=o?n(m,p,f,t,e,i):n(p,m,f,e,t,i);if(g!==to){if(g)continue;d=!1;break}if(h){if(!Gs(t,function(e,t){if(!ic(h,t)&&(p===e||a(p,e,r,n,i)))return h.push(t)})){d=!1;break}}else if(p!==m&&!a(p,m,r,n,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function Dr(e){return on(en(e,to,An),e+"")}function Or(e){return Xe(e,si,Ir)}function Nr(e){return Xe(e,ci,Br)}var Pr=ae?function(e){return ae.get(e)}:Yi;function jr(e){for(var t=e.name+"",r=ie[t],n=E.call(ie,t)?r.length:0;n--;){var a=r[n],i=a.func;if(null==i||i==e)return a.name}return t}function zr(e){return(E.call(pe,"placeholder")?pe:e).placeholder}function Rr(){var e=pe.iteratee||ji;return e=e===ji?ut:e,arguments.length?e(arguments[0],arguments[1]):e}function Lr(e,t){var r,n,a=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?a["string"==typeof t?"string":"hash"]:a.map}function Yr(e){for(var t=si(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,Xr(a)]}return t}function Wr(e,t){var r,n,a=(n=t,null==(r=e)?to:r[n]);return ct(a)?a:to}var Ir=B?function(t){return null==t?[]:(t=k(t),Ys(B(t),function(e){return D.call(t,e)}))}:Gi,Br=B?function(e){for(var t=[];e;)qs(t,Ir(e)),e=M(e);return t}:Gi,qr=Qe;function Hr(e,t,r){for(var n=-1,a=(t=$t(t,e)).length,i=!1;++n<a;){var o=hn(t[n]);if(!(i=null!=e&&r(e,o)))break;e=e[o]}return i||++n!=a?i:!!(a=null==e?0:e.length)&&Ca(a)&&Ur(o,a)&&(ba(e)||_a(e))}function Fr(e){return"function"!=typeof e.constructor||Zr(e)?{}:me(M(e))}function Gr(e){return ba(e)||_a(e)||!!(N&&e&&e[N])}function Ur(e,t){var r=typeof e;return!!(t=null==t?io:t)&&("number"==r||"symbol"!=r&&fs.test(e))&&-1<e&&e%1==0&&e<t}function $r(e,t,r){if(!Da(r))return!1;var n=typeof t;return!!("number"==n?wa(r)&&Ur(t,r.length):"string"==n&&t in r)&&ga(r[t],e)}function Vr(e,t){if(ba(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!Ya(e))||Vo.test(e)||!$o.test(e)||null!=t&&e in k(t)}function Kr(e){var t=jr(e),r=pe[t];if("function"!=typeof r||!(t in ye.prototype))return!1;if(e===r)return!0;var n=Pr(r);return!!n&&e===n[0]}(X&&qr(new X(new ArrayBuffer(1)))!=So||Q&&qr(new Q)!=vo||ee&&qr(ee.resolve())!=bo||te&&qr(new te)!=wo||re&&qr(new re)!=Eo)&&(qr=function(e){var t=Qe(e),r=t==_o?e.constructor:to,n=r?pn(r):"";if(n)switch(n){case oe:return So;case se:return vo;case ce:return bo;case ue:return wo;case le:return Eo}return t});var Jr=s?Sa:Ui;function Zr(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||f)}function Xr(e){return e==e&&!Da(e)}function Qr(t,r){return function(e){return null!=e&&e[t]===r&&(r!==to||t in k(e))}}function en(i,o,s){return o=U(o===to?i.length-1:o,0),function(){for(var e=arguments,t=-1,r=U(e.length-o,0),n=T(r);++t<r;)n[t]=e[o+t];t=-1;for(var a=T(o+1);++t<o;)a[t]=e[t];return a[o]=s(n),Ps(i,this,a)}}function tn(e,t){return t.length<2?e:Ze(e,Ot(t,0,-1))}function rn(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var nn=cn(Tt),an=Y||function(e,t){return Es.setTimeout(e,t)},on=cn(Ct);function sn(e,t,r){var n,a,i,o=t+"";return on(e,function(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(1<r?"& ":"")+t[n],t=t.join(2<r?", ":" "),e.replace(Qo,"{\n/* [wrapped with "+t+"] */\n")}(o,(i=o.match(es),n=i?i[1].split(ts):[],a=r,zs(co,function(e){var t="_."+e[0];a&e[1]&&!Ws(n,t)&&n.push(t)}),n.sort())))}function cn(r){var n=0,a=0;return function(){var e=V(),t=16-(e-a);if(a=e,0<t){if(800<=++n)return arguments[0]}else n=0;return r.apply(to,arguments)}}function un(e,t){var r=-1,n=e.length,a=n-1;for(t=t===to?n:t;++r<t;){var i=wt(r,a),o=e[i];e[i]=e[r],e[r]=o}return e.length=t,e}var ln,fn,dn=(fn=(ln=la(function(e){var a=[];return 46===e.charCodeAt(0)&&a.push(""),e.replace(Ko,function(e,t,r,n){a.push(r?n.replace(as,"$1"):t||e)}),a},function(e){return 500===fn.size&&fn.clear(),e})).cache,ln);function hn(e){if("string"==typeof e||Ya(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function pn(e){if(null!=e){try{return c.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function mn(e){if(e instanceof ye)return e.clone();var t=new ve(e.__wrapped__,e.__chain__);return t.__actions__=nr(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var gn=kt(function(e,t){return xa(e)?We(e,Ge(t,1,xa,!0)):[]}),vn=kt(function(e,t){var r=Mn(t);return xa(r)&&(r=to),xa(e)?We(e,Ge(t,1,xa,!0),Rr(r,2)):[]}),yn=kt(function(e,t){var r=Mn(t);return xa(r)&&(r=to),xa(e)?We(e,Ge(t,1,xa,!0),to,r):[]});function _n(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:Fa(r);return a<0&&(a=U(n+a,0)),$s(e,Rr(t,3),a)}function bn(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=n-1;return r!==to&&(a=Fa(r),a=r<0?U(n+a,0):$(a,n-1)),$s(e,Rr(t,3),a,!0)}function An(e){return null!=e&&e.length?Ge(e,1):[]}function wn(e){return e&&e.length?e[0]:to}var xn=kt(function(e){var t=Bs(e,Gt);return t.length&&t[0]===e[0]?nt(t):[]}),kn=kt(function(e){var t=Mn(e),r=Bs(e,Gt);return t===Mn(r)?t=to:r.pop(),r.length&&r[0]===e[0]?nt(r,Rr(t,2)):[]}),En=kt(function(e){var t=Mn(e),r=Bs(e,Gt);return(t="function"==typeof t?t:to)&&r.pop(),r.length&&r[0]===e[0]?nt(r,to,t):[]});function Mn(e){var t=null==e?0:e.length;return t?e[t-1]:to}var Sn=kt(Tn);function Tn(e,t){return e&&e.length&&t&&t.length?bt(e,t):e}var Cn=Dr(function(e,t){var r=null==e?0:e.length,n=je(e,t);return At(e,Bs(t,function(e){return Ur(e,r)?+e:e}).sort(er)),n});function Dn(e){return null==e?e:Z.call(e)}var On=kt(function(e){return Yt(Ge(e,1,xa,!0))}),Nn=kt(function(e){var t=Mn(e);return xa(t)&&(t=to),Yt(Ge(e,1,xa,!0),Rr(t,2))}),Pn=kt(function(e){var t=Mn(e);return t="function"==typeof t?t:to,Yt(Ge(e,1,xa,!0),to,t)});function jn(t){if(!t||!t.length)return[];var r=0;return t=Ys(t,function(e){if(xa(e))return r=U(e.length,r),!0}),tc(r,function(e){return Bs(t,Xs(e))})}function zn(e,t){if(!e||!e.length)return[];var r=jn(e);return null==t?r:Bs(r,function(e){return Ps(t,to,e)})}var Rn=kt(function(e,t){return xa(e)?We(e,t):[]}),Ln=kt(function(e){return Ht(Ys(e,xa))}),Yn=kt(function(e){var t=Mn(e);return xa(t)&&(t=to),Ht(Ys(e,xa),Rr(t,2))}),Wn=kt(function(e){var t=Mn(e);return t="function"==typeof t?t:to,Ht(Ys(e,xa),to,t)}),In=kt(jn);var Bn=kt(function(e){var t=e.length,r=1<t?e[t-1]:to;return zn(e,r="function"==typeof r?(e.pop(),r):to)});function qn(e){var t=pe(e);return t.__chain__=!0,t}function Hn(e,t){return t(e)}var Fn=Dr(function(t){var r=t.length,e=r?t[0]:0,n=this.__wrapped__,a=function(e){return je(e,t)};return!(1<r||this.__actions__.length)&&n instanceof ye&&Ur(e)?((n=n.slice(e,+e+(r?1:0))).__actions__.push({func:Hn,args:[a],thisArg:to}),new ve(n,this.__chain__).thru(function(e){return r&&!e.length&&e.push(to),e})):this.thru(a)});var Gn=ir(function(e,t,r){E.call(e,r)?++e[r]:Pe(e,r,1)});var Un=dr(_n),$n=dr(bn);function Vn(e,t){return(ba(e)?zs:Ie)(e,Rr(t,3))}function Kn(e,t){return(ba(e)?Rs:Be)(e,Rr(t,3))}var Jn=ir(function(e,t,r){E.call(e,r)?e[r].push(t):Pe(e,r,[t])});var Zn=kt(function(e,t,r){var n=-1,a="function"==typeof t,i=wa(e)?T(e.length):[];return Ie(e,function(e){i[++n]=a?Ps(t,e,r):at(e,t,r)}),i}),Xn=ir(function(e,t,r){Pe(e,r,t)});function Qn(e,t){return(ba(e)?Bs:ht)(e,Rr(t,3))}var ea=ir(function(e,t,r){e[r?0:1].push(t)},function(){return[[],[]]});var ta=kt(function(e,t){if(null==e)return[];var r=t.length;return 1<r&&$r(e,t[0],t[1])?t=[]:2<r&&$r(t[0],t[1],t[2])&&(t=[t[0]]),yt(e,Ge(t,1),[])}),ra=L||function(){return Es.Date.now()};function na(e,t,r){return t=r?to:t,t=e&&null==t?e.length:t,Er(e,128,to,to,to,to,t)}function aa(e,t){var r;if("function"!=typeof t)throw new C(ro);return e=Fa(e),function(){return 0<--e&&(r=t.apply(this,arguments)),e<=1&&(t=to),r}}var ia=kt(function(e,t,r){var n=1;if(r.length){var a=pc(r,zr(ia));n|=32}return Er(e,n,t,r,a)}),oa=kt(function(e,t,r){var n=3;if(r.length){var a=pc(r,zr(oa));n|=32}return Er(t,n,e,r,a)});function sa(n,a,e){var i,o,s,c,u,l,f=0,d=!1,h=!1,t=!0;if("function"!=typeof n)throw new C(ro);function p(e){var t=i,r=o;return i=o=to,f=e,c=n.apply(r,t)}function m(e){var t=e-l;return l===to||a<=t||t<0||h&&s<=e-f}function g(){var e,t,r=ra();if(m(r))return v(r);u=an(g,(t=a-((e=r)-l),h?$(t,s-(e-f)):t))}function v(e){return u=to,t&&i?p(e):(i=o=to,c)}function r(){var e,t=ra(),r=m(t);if(i=arguments,o=this,l=t,r){if(u===to)return f=e=l,u=an(g,a),d?p(e):c;if(h)return Jt(u),u=an(g,a),p(l)}return u===to&&(u=an(g,a)),c}return a=Ua(a)||0,Da(e)&&(d=!!e.leading,s=(h="maxWait"in e)?U(Ua(e.maxWait)||0,a):s,t="trailing"in e?!!e.trailing:t),r.cancel=function(){u!==to&&Jt(u),f=0,i=l=o=u=to},r.flush=function(){return u===to?c:v(ra())},r}var ca=kt(function(e,t){return Ye(e,1,t)}),ua=kt(function(e,t,r){return Ye(e,Ua(t)||0,r)});function la(a,i){if("function"!=typeof a||null!=i&&"function"!=typeof i)throw new C(ro);var o=function(){var e=arguments,t=i?i.apply(this,e):e[0],r=o.cache;if(r.has(t))return r.get(t);var n=a.apply(this,e);return o.cache=r.set(t,n)||r,n};return o.cache=new(la.Cache||Ae),o}function fa(t){if("function"!=typeof t)throw new C(ro);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}la.Cache=Ae;var da=Vt(function(n,a){var i=(a=1==a.length&&ba(a[0])?Bs(a[0],nc(Rr())):Bs(Ge(a,1),nc(Rr()))).length;return kt(function(e){for(var t=-1,r=$(e.length,i);++t<r;)e[t]=a[t].call(this,e[t]);return Ps(n,this,e)})}),ha=kt(function(e,t){var r=pc(t,zr(ha));return Er(e,32,to,t,r)}),pa=kt(function(e,t){var r=pc(t,zr(pa));return Er(e,64,to,t,r)}),ma=Dr(function(e,t){return Er(e,256,to,to,to,t)});function ga(e,t){return e===t||e!=e&&t!=t}var va=br(et),ya=br(function(e,t){return t<=e}),_a=it(function(){return arguments}())?it:function(e){return Oa(e)&&E.call(e,"callee")&&!D.call(e,"callee")},ba=T.isArray,Aa=Ss?nc(Ss):function(e){return Oa(e)&&Qe(e)==Mo};function wa(e){return null!=e&&Ca(e.length)&&!Sa(e)}function xa(e){return Oa(e)&&wa(e)}var ka=q||Ui,Ea=Ts?nc(Ts):function(e){return Oa(e)&&Qe(e)==ho};function Ma(e){if(!Oa(e))return!1;var t=Qe(e);return t==po||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!ja(e)}function Sa(e){if(!Da(e))return!1;var t=Qe(e);return t==mo||t==go||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ta(e){return"number"==typeof e&&e==Fa(e)}function Ca(e){return"number"==typeof e&&-1<e&&e%1==0&&e<=io}function Da(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Oa(e){return null!=e&&"object"==typeof e}var Na=Cs?nc(Cs):function(e){return Oa(e)&&qr(e)==vo};function Pa(e){return"number"==typeof e||Oa(e)&&Qe(e)==yo}function ja(e){if(!Oa(e)||Qe(e)!=_o)return!1;var t=M(e);if(null===t)return!0;var r=E.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&c.call(r)==p}var za=Ds?nc(Ds):function(e){return Oa(e)&&Qe(e)==Ao};var Ra=Os?nc(Os):function(e){return Oa(e)&&qr(e)==wo};function La(e){return"string"==typeof e||!ba(e)&&Oa(e)&&Qe(e)==xo}function Ya(e){return"symbol"==typeof e||Oa(e)&&Qe(e)==ko}var Wa=Ns?nc(Ns):function(e){return Oa(e)&&Ca(e.length)&&!!As[Qe(e)]};var Ia=br(dt),Ba=br(function(e,t){return e<=t});function qa(e){if(!e)return[];if(wa(e))return La(e)?vc(e):nr(e);if(P&&e[P])return function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}(e[P]());var t=qr(e);return(t==vo?dc:t==wo?mc:gi)(e)}function Ha(e){return e?(e=Ua(e))!==1/0&&e!==-1/0?e==e?e:0:17976931348623157e292*(e<0?-1:1):0===e?e:0}function Fa(e){var t=Ha(e),r=t%1;return t==t?r?t-r:t:0}function Ga(e){return e?ze(Fa(e),0,so):0}function Ua(e){if("number"==typeof e)return e;if(Ya(e))return oo;if(Da(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Da(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=rc(e);var r=cs.test(e);return r||ls.test(e)?ks(e.slice(2),r?2:8):ss.test(e)?oo:+e}function $a(e){return ar(e,ci(e))}function Va(e){return null==e?"":Lt(e)}var Ka=or(function(e,t){if(Zr(t)||wa(t))ar(t,si(t),e);else for(var r in t)E.call(t,r)&&Ce(e,r,t[r])}),Ja=or(function(e,t){ar(t,ci(t),e)}),Za=or(function(e,t,r,n){ar(t,ci(t),e,n)}),Xa=or(function(e,t,r,n){ar(t,si(t),e,n)}),Qa=Dr(je);var ei=kt(function(e,t){e=k(e);var r=-1,n=t.length,a=2<n?t[2]:to;for(a&&$r(t[0],t[1],a)&&(n=1);++r<n;)for(var i=t[r],o=ci(i),s=-1,c=o.length;++s<c;){var u=o[s],l=e[u];(l===to||ga(l,f[u])&&!E.call(e,u))&&(e[u]=i[u])}return e}),ti=kt(function(e){return e.push(to,Sr),Ps(li,to,e)});function ri(e,t,r){var n=null==e?to:Ze(e,t);return n===to?r:n}function ni(e,t){return null!=e&&Hr(e,t,rt)}var ai=mr(function(e,t,r){null!=t&&"function"!=typeof t.toString&&(t=h.call(t)),e[t]=r},Di(Pi)),ii=mr(function(e,t,r){null!=t&&"function"!=typeof t.toString&&(t=h.call(t)),E.call(e,t)?e[t].push(r):e[t]=[r]},Rr),oi=kt(at);function si(e){return wa(e)?ke(e):lt(e)}function ci(e){return wa(e)?ke(e,!0):ft(e)}var ui=or(function(e,t,r){gt(e,t,r)}),li=or(function(e,t,r,n){gt(e,t,r,n)}),fi=Dr(function(t,e){var r={};if(null==t)return r;var n=!1;e=Bs(e,function(e){return e=$t(e,t),n||(n=1<e.length),e}),ar(t,Nr(t),r),n&&(r=Re(r,7,Tr));for(var a=e.length;a--;)Wt(r,e[a]);return r});var di=Dr(function(e,t){return null==e?{}:_t(r=e,t,function(e,t){return ni(r,t)});var r});function hi(e,r){if(null==e)return{};var t=Bs(Nr(e),function(e){return[e]});return r=Rr(r),_t(e,t,function(e,t){return r(e,t[0])})}var pi=kr(si),mi=kr(ci);function gi(e){return null==e?[]:ac(e,si(e))}var vi=lr(function(e,t,r){return t=t.toLowerCase(),e+(r?yi(t):t)});function yi(e){return Mi(Va(e).toLowerCase())}function _i(e){return(e=Va(e))&&e.replace(ds,cc).replace(gs,"")}var bi=lr(function(e,t,r){return e+(r?"-":"")+t.toLowerCase()}),Ai=lr(function(e,t,r){return e+(r?" ":"")+t.toLowerCase()}),wi=ur("toLowerCase");var xi=lr(function(e,t,r){return e+(r?"_":"")+t.toLowerCase()});var ki=lr(function(e,t,r){return e+(r?" ":"")+Mi(t)});var Ei=lr(function(e,t,r){return e+(r?" ":"")+t.toUpperCase()}),Mi=ur("toUpperCase");function Si(e,t,r){return e=Va(e),(t=r?to:t)===to?(n=e,ys.test(n)?e.match(vs)||[]:e.match(rs)||[]):e.match(t)||[];var n}var Ti=kt(function(e,t){try{return Ps(e,to,t)}catch(e){return Ma(e)?e:new g(e)}}),Ci=Dr(function(t,e){return zs(e,function(e){e=hn(e),Pe(t,e,ia(t[e],t))}),t});function Di(e){return function(){return e}}var Oi=hr(),Ni=hr(!0);function Pi(e){return e}function ji(e){return ut("function"==typeof e?e:Re(e,1))}var zi=kt(function(t,r){return function(e){return at(e,t,r)}}),Ri=kt(function(t,r){return function(e){return at(t,e,r)}});function Li(n,t,e){var r=si(t),a=Je(t,r);null!=e||Da(t)&&(a.length||!r.length)||(e=t,t=n,n=this,a=Je(t,si(t)));var i=!(Da(e)&&"chain"in e&&!e.chain),o=Sa(n);return zs(a,function(e){var r=t[e];n[e]=r,o&&(n.prototype[e]=function(){var e=this.__chain__;if(i||e){var t=n(this.__wrapped__);return(t.__actions__=nr(this.__actions__)).push({func:r,args:arguments,thisArg:n}),t.__chain__=e,t}return r.apply(n,qs([this.value()],arguments))})}),n}function Yi(){}var Wi=vr(Bs),Ii=vr(Ls),Bi=vr(Gs);function qi(e){return Vr(e)?Xs(hn(e)):(t=e,function(e){return Ze(e,t)});var t}var Hi=_r(),Fi=_r(!0);function Gi(){return[]}function Ui(){return!1}var $i=gr(function(e,t){return e+t},0),Vi=wr("ceil"),Ki=gr(function(e,t){return e/t},1),Ji=wr("floor");var Zi,Xi=gr(function(e,t){return e*t},1),Qi=wr("round"),eo=gr(function(e,t){return e-t},0);return pe.after=function(e,t){if("function"!=typeof t)throw new C(ro);return e=Fa(e),function(){if(--e<1)return t.apply(this,arguments)}},pe.ary=na,pe.assign=Ka,pe.assignIn=Ja,pe.assignInWith=Za,pe.assignWith=Xa,pe.at=Qa,pe.before=aa,pe.bind=ia,pe.bindAll=Ci,pe.bindKey=oa,pe.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ba(e)?e:[e]},pe.chain=qn,pe.chunk=function(e,t,r){t=(r?$r(e,t,r):t===to)?1:U(Fa(t),0);var n=null==e?0:e.length;if(!n||t<1)return[];for(var a=0,i=0,o=T(W(n/t));a<n;)o[i++]=Ot(e,a,a+=t);return o},pe.compact=function(e){for(var t=-1,r=null==e?0:e.length,n=0,a=[];++t<r;){var i=e[t];i&&(a[n++]=i)}return a},pe.concat=function(){var e=arguments.length;if(!e)return[];for(var t=T(e-1),r=arguments[0],n=e;n--;)t[n-1]=arguments[n];return qs(ba(r)?nr(r):[r],Ge(t,1))},pe.cond=function(n){var a=null==n?0:n.length,t=Rr();return n=a?Bs(n,function(e){if("function"!=typeof e[1])throw new C(ro);return[t(e[0]),e[1]]}):[],kt(function(e){for(var t=-1;++t<a;){var r=n[t];if(Ps(r[0],this,e))return Ps(r[1],this,e)}})},pe.conforms=function(e){return t=Re(e,1),r=si(t),function(e){return Le(e,t,r)};var t,r},pe.constant=Di,pe.countBy=Gn,pe.create=function(e,t){var r=me(e);return null==t?r:Ne(r,t)},pe.curry=function e(t,r,n){var a=Er(t,8,to,to,to,to,to,r=n?to:r);return a.placeholder=e.placeholder,a},pe.curryRight=function e(t,r,n){var a=Er(t,16,to,to,to,to,to,r=n?to:r);return a.placeholder=e.placeholder,a},pe.debounce=sa,pe.defaults=ei,pe.defaultsDeep=ti,pe.defer=ca,pe.delay=ua,pe.difference=gn,pe.differenceBy=vn,pe.differenceWith=yn,pe.drop=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,(t=r||t===to?1:Fa(t))<0?0:t,n):[]},pe.dropRight=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,0,(t=n-(t=r||t===to?1:Fa(t)))<0?0:t):[]},pe.dropRightWhile=function(e,t){return e&&e.length?Bt(e,Rr(t,3),!0,!0):[]},pe.dropWhile=function(e,t){return e&&e.length?Bt(e,Rr(t,3),!0):[]},pe.fill=function(e,t,r,n){var a=null==e?0:e.length;return a?(r&&"number"!=typeof r&&$r(e,t,r)&&(r=0,n=a),function(e,t,r,n){var a=e.length;for((r=Fa(r))<0&&(r=a<-r?0:a+r),(n=n===to||a<n?a:Fa(n))<0&&(n+=a),n=n<r?0:Ga(n);r<n;)e[r++]=t;return e}(e,t,r,n)):[]},pe.filter=function(e,t){return(ba(e)?Ys:Fe)(e,Rr(t,3))},pe.flatMap=function(e,t){return Ge(Qn(e,t),1)},pe.flatMapDeep=function(e,t){return Ge(Qn(e,t),1/0)},pe.flatMapDepth=function(e,t,r){return r=r===to?1:Fa(r),Ge(Qn(e,t),r)},pe.flatten=An,pe.flattenDeep=function(e){return null!=e&&e.length?Ge(e,1/0):[]},pe.flattenDepth=function(e,t){return null!=e&&e.length?Ge(e,t=t===to?1:Fa(t)):[]},pe.flip=function(e){return Er(e,512)},pe.flow=Oi,pe.flowRight=Ni,pe.fromPairs=function(e){for(var t=-1,r=null==e?0:e.length,n={};++t<r;){var a=e[t];n[a[0]]=a[1]}return n},pe.functions=function(e){return null==e?[]:Je(e,si(e))},pe.functionsIn=function(e){return null==e?[]:Je(e,ci(e))},pe.groupBy=Jn,pe.initial=function(e){return null!=e&&e.length?Ot(e,0,-1):[]},pe.intersection=xn,pe.intersectionBy=kn,pe.intersectionWith=En,pe.invert=ai,pe.invertBy=ii,pe.invokeMap=Zn,pe.iteratee=ji,pe.keyBy=Xn,pe.keys=si,pe.keysIn=ci,pe.map=Qn,pe.mapKeys=function(e,n){var a={};return n=Rr(n,3),Ve(e,function(e,t,r){Pe(a,n(e,t,r),e)}),a},pe.mapValues=function(e,n){var a={};return n=Rr(n,3),Ve(e,function(e,t,r){Pe(a,t,n(e,t,r))}),a},pe.matches=function(e){return pt(Re(e,1))},pe.matchesProperty=function(e,t){return mt(e,Re(t,1))},pe.memoize=la,pe.merge=ui,pe.mergeWith=li,pe.method=zi,pe.methodOf=Ri,pe.mixin=Li,pe.negate=fa,pe.nthArg=function(t){return t=Fa(t),kt(function(e){return vt(e,t)})},pe.omit=fi,pe.omitBy=function(e,t){return hi(e,fa(Rr(t)))},pe.once=function(e){return aa(2,e)},pe.orderBy=function(e,t,r,n){return null==e?[]:(ba(t)||(t=null==t?[]:[t]),ba(r=n?to:r)||(r=null==r?[]:[r]),yt(e,t,r))},pe.over=Wi,pe.overArgs=da,pe.overEvery=Ii,pe.overSome=Bi,pe.partial=ha,pe.partialRight=pa,pe.partition=ea,pe.pick=di,pe.pickBy=hi,pe.property=qi,pe.propertyOf=function(t){return function(e){return null==t?to:Ze(t,e)}},pe.pull=Sn,pe.pullAll=Tn,pe.pullAllBy=function(e,t,r){return e&&e.length&&t&&t.length?bt(e,t,Rr(r,2)):e},pe.pullAllWith=function(e,t,r){return e&&e.length&&t&&t.length?bt(e,t,to,r):e},pe.pullAt=Cn,pe.range=Hi,pe.rangeRight=Fi,pe.rearg=ma,pe.reject=function(e,t){return(ba(e)?Ys:Fe)(e,fa(Rr(t,3)))},pe.remove=function(e,t){var r=[];if(!e||!e.length)return r;var n=-1,a=[],i=e.length;for(t=Rr(t,3);++n<i;){var o=e[n];t(o,n,e)&&(r.push(o),a.push(n))}return At(e,a),r},pe.rest=function(e,t){if("function"!=typeof e)throw new C(ro);return kt(e,t=t===to?t:Fa(t))},pe.reverse=Dn,pe.sampleSize=function(e,t,r){return t=(r?$r(e,t,r):t===to)?1:Fa(t),(ba(e)?Me:Mt)(e,t)},pe.set=function(e,t,r){return null==e?e:St(e,t,r)},pe.setWith=function(e,t,r,n){return n="function"==typeof n?n:to,null==e?e:St(e,t,r,n)},pe.shuffle=function(e){return(ba(e)?Se:Dt)(e)},pe.slice=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,t,r=r&&"number"!=typeof r&&$r(e,t,r)?(t=0,n):(t=null==t?0:Fa(t),r===to?n:Fa(r))):[]},pe.sortBy=ta,pe.sortedUniq=function(e){return e&&e.length?zt(e):[]},pe.sortedUniqBy=function(e,t){return e&&e.length?zt(e,Rr(t,2)):[]},pe.split=function(e,t,r){return r&&"number"!=typeof r&&$r(e,t,r)&&(t=r=to),(r=r===to?so:r>>>0)?(e=Va(e))&&("string"==typeof t||null!=t&&!za(t))&&!(t=Lt(t))&&fc(e)?Kt(vc(e),0,r):e.split(t,r):[]},pe.spread=function(n,a){if("function"!=typeof n)throw new C(ro);return a=null==a?0:U(Fa(a),0),kt(function(e){var t=e[a],r=Kt(e,0,a);return t&&qs(r,t),Ps(n,this,r)})},pe.tail=function(e){var t=null==e?0:e.length;return t?Ot(e,1,t):[]},pe.take=function(e,t,r){return e&&e.length?Ot(e,0,(t=r||t===to?1:Fa(t))<0?0:t):[]},pe.takeRight=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,(t=n-(t=r||t===to?1:Fa(t)))<0?0:t,n):[]},pe.takeRightWhile=function(e,t){return e&&e.length?Bt(e,Rr(t,3),!1,!0):[]},pe.takeWhile=function(e,t){return e&&e.length?Bt(e,Rr(t,3)):[]},pe.tap=function(e,t){return t(e),e},pe.throttle=function(e,t,r){var n=!0,a=!0;if("function"!=typeof e)throw new C(ro);return Da(r)&&(n="leading"in r?!!r.leading:n,a="trailing"in r?!!r.trailing:a),sa(e,t,{leading:n,maxWait:t,trailing:a})},pe.thru=Hn,pe.toArray=qa,pe.toPairs=pi,pe.toPairsIn=mi,pe.toPath=function(e){return ba(e)?Bs(e,hn):Ya(e)?[e]:nr(dn(Va(e)))},pe.toPlainObject=$a,pe.transform=function(e,n,a){var t=ba(e),r=t||ka(e)||Wa(e);if(n=Rr(n,4),null==a){var i=e&&e.constructor;a=r?t?new i:[]:Da(e)&&Sa(i)?me(M(e)):{}}return(r?zs:Ve)(e,function(e,t,r){return n(a,e,t,r)}),a},pe.unary=function(e){return na(e,1)},pe.union=On,pe.unionBy=Nn,pe.unionWith=Pn,pe.uniq=function(e){return e&&e.length?Yt(e):[]},pe.uniqBy=function(e,t){return e&&e.length?Yt(e,Rr(t,2)):[]},pe.uniqWith=function(e,t){return t="function"==typeof t?t:to,e&&e.length?Yt(e,to,t):[]},pe.unset=function(e,t){return null==e||Wt(e,t)},pe.unzip=jn,pe.unzipWith=zn,pe.update=function(e,t,r){return null==e?e:It(e,t,Ut(r))},pe.updateWith=function(e,t,r,n){return n="function"==typeof n?n:to,null==e?e:It(e,t,Ut(r),n)},pe.values=gi,pe.valuesIn=function(e){return null==e?[]:ac(e,ci(e))},pe.without=Rn,pe.words=Si,pe.wrap=function(e,t){return ha(Ut(t),e)},pe.xor=Ln,pe.xorBy=Yn,pe.xorWith=Wn,pe.zip=In,pe.zipObject=function(e,t){return Ft(e||[],t||[],Ce)},pe.zipObjectDeep=function(e,t){return Ft(e||[],t||[],St)},pe.zipWith=Bn,pe.entries=pi,pe.entriesIn=mi,pe.extend=Ja,pe.extendWith=Za,Li(pe,pe),pe.add=$i,pe.attempt=Ti,pe.camelCase=vi,pe.capitalize=yi,pe.ceil=Vi,pe.clamp=function(e,t,r){return r===to&&(r=t,t=to),r!==to&&(r=(r=Ua(r))==r?r:0),t!==to&&(t=(t=Ua(t))==t?t:0),ze(Ua(e),t,r)},pe.clone=function(e){return Re(e,4)},pe.cloneDeep=function(e){return Re(e,5)},pe.cloneDeepWith=function(e,t){return Re(e,5,t="function"==typeof t?t:to)},pe.cloneWith=function(e,t){return Re(e,4,t="function"==typeof t?t:to)},pe.conformsTo=function(e,t){return null==t||Le(e,t,si(t))},pe.deburr=_i,pe.defaultTo=function(e,t){return null==e||e!=e?t:e},pe.divide=Ki,pe.endsWith=function(e,t,r){e=Va(e),t=Lt(t);var n=e.length,a=r=r===to?n:ze(Fa(r),0,n);return 0<=(r-=t.length)&&e.slice(r,a)==t},pe.eq=ga,pe.escape=function(e){return(e=Va(e))&&Ho.test(e)?e.replace(Bo,uc):e},pe.escapeRegExp=function(e){return(e=Va(e))&&Zo.test(e)?e.replace(Jo,"\\$&"):e},pe.every=function(e,t,r){var n=ba(e)?Ls:qe;return r&&$r(e,t,r)&&(t=to),n(e,Rr(t,3))},pe.find=Un,pe.findIndex=_n,pe.findKey=function(e,t){return Us(e,Rr(t,3),Ve)},pe.findLast=$n,pe.findLastIndex=bn,pe.findLastKey=function(e,t){return Us(e,Rr(t,3),Ke)},pe.floor=Ji,pe.forEach=Vn,pe.forEachRight=Kn,pe.forIn=function(e,t){return null==e?e:Ue(e,Rr(t,3),ci)},pe.forInRight=function(e,t){return null==e?e:$e(e,Rr(t,3),ci)},pe.forOwn=function(e,t){return e&&Ve(e,Rr(t,3))},pe.forOwnRight=function(e,t){return e&&Ke(e,Rr(t,3))},pe.get=ri,pe.gt=va,pe.gte=ya,pe.has=function(e,t){return null!=e&&Hr(e,t,tt)},pe.hasIn=ni,pe.head=wn,pe.identity=Pi,pe.includes=function(e,t,r,n){e=wa(e)?e:gi(e),r=r&&!n?Fa(r):0;var a=e.length;return r<0&&(r=U(a+r,0)),La(e)?r<=a&&-1<e.indexOf(t,r):!!a&&-1<Vs(e,t,r)},pe.indexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:Fa(r);return a<0&&(a=U(n+a,0)),Vs(e,t,a)},pe.inRange=function(e,t,r){return t=Ha(t),r===to?(r=t,t=0):r=Ha(r),e=Ua(e),(n=e)>=$(a=t,i=r)&&n<U(a,i);var n,a,i},pe.invoke=oi,pe.isArguments=_a,pe.isArray=ba,pe.isArrayBuffer=Aa,pe.isArrayLike=wa,pe.isArrayLikeObject=xa,pe.isBoolean=function(e){return!0===e||!1===e||Oa(e)&&Qe(e)==fo},pe.isBuffer=ka,pe.isDate=Ea,pe.isElement=function(e){return Oa(e)&&1===e.nodeType&&!ja(e)},pe.isEmpty=function(e){if(null==e)return!0;if(wa(e)&&(ba(e)||"string"==typeof e||"function"==typeof e.splice||ka(e)||Wa(e)||_a(e)))return!e.length;var t=qr(e);if(t==vo||t==wo)return!e.size;if(Zr(e))return!lt(e).length;for(var r in e)if(E.call(e,r))return!1;return!0},pe.isEqual=function(e,t){return ot(e,t)},pe.isEqualWith=function(e,t,r){var n=(r="function"==typeof r?r:to)?r(e,t):to;return n===to?ot(e,t,to,r):!!n},pe.isError=Ma,pe.isFinite=function(e){return"number"==typeof e&&H(e)},pe.isFunction=Sa,pe.isInteger=Ta,pe.isLength=Ca,pe.isMap=Na,pe.isMatch=function(e,t){return e===t||st(e,t,Yr(t))},pe.isMatchWith=function(e,t,r){return r="function"==typeof r?r:to,st(e,t,Yr(t),r)},pe.isNaN=function(e){return Pa(e)&&e!=+e},pe.isNative=function(e){if(Jr(e))throw new g("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return ct(e)},pe.isNil=function(e){return null==e},pe.isNull=function(e){return null===e},pe.isNumber=Pa,pe.isObject=Da,pe.isObjectLike=Oa,pe.isPlainObject=ja,pe.isRegExp=za,pe.isSafeInteger=function(e){return Ta(e)&&-io<=e&&e<=io},pe.isSet=Ra,pe.isString=La,pe.isSymbol=Ya,pe.isTypedArray=Wa,pe.isUndefined=function(e){return e===to},pe.isWeakMap=function(e){return Oa(e)&&qr(e)==Eo},pe.isWeakSet=function(e){return Oa(e)&&"[object WeakSet]"==Qe(e)},pe.join=function(e,t){return null==e?"":F.call(e,t)},pe.kebabCase=bi,pe.last=Mn,pe.lastIndexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=n;return r!==to&&(a=(a=Fa(r))<0?U(n+a,0):$(a,n-1)),t==t?function(e,t,r){for(var n=r+1;n--;)if(e[n]===t)return n;return n}(e,t,a):$s(e,Js,a,!0)},pe.lowerCase=Ai,pe.lowerFirst=wi,pe.lt=Ia,pe.lte=Ba,pe.max=function(e){return e&&e.length?He(e,Pi,et):to},pe.maxBy=function(e,t){return e&&e.length?He(e,Rr(t,2),et):to},pe.mean=function(e){return Zs(e,Pi)},pe.meanBy=function(e,t){return Zs(e,Rr(t,2))},pe.min=function(e){return e&&e.length?He(e,Pi,dt):to},pe.minBy=function(e,t){return e&&e.length?He(e,Rr(t,2),dt):to},pe.stubArray=Gi,pe.stubFalse=Ui,pe.stubObject=function(){return{}},pe.stubString=function(){return""},pe.stubTrue=function(){return!0},pe.multiply=Xi,pe.nth=function(e,t){return e&&e.length?vt(e,Fa(t)):to},pe.noConflict=function(){return Es._===this&&(Es._=m),this},pe.noop=Yi,pe.now=ra,pe.pad=function(e,t,r){e=Va(e);var n=(t=Fa(t))?gc(e):0;if(!t||t<=n)return e;var a=(t-n)/2;return yr(I(a),r)+e+yr(W(a),r)},pe.padEnd=function(e,t,r){e=Va(e);var n=(t=Fa(t))?gc(e):0;return t&&n<t?e+yr(t-n,r):e},pe.padStart=function(e,t,r){e=Va(e);var n=(t=Fa(t))?gc(e):0;return t&&n<t?yr(t-n,r)+e:e},pe.parseInt=function(e,t,r){return r||null==t?t=0:t&&(t=+t),K(Va(e).replace(Xo,""),t||0)},pe.random=function(e,t,r){if(r&&"boolean"!=typeof r&&$r(e,t,r)&&(t=r=to),r===to&&("boolean"==typeof t?(r=t,t=to):"boolean"==typeof e&&(r=e,e=to)),e===to&&t===to?(e=0,t=1):(e=Ha(e),t===to?(t=e,e=0):t=Ha(t)),t<e){var n=e;e=t,t=n}if(r||e%1||t%1){var a=J();return $(e+a*(t-e+xs("1e-"+((a+"").length-1))),t)}return wt(e,t)},pe.reduce=function(e,t,r){var n=ba(e)?Hs:Qs,a=arguments.length<3;return n(e,Rr(t,4),r,a,Ie)},pe.reduceRight=function(e,t,r){var n=ba(e)?Fs:Qs,a=arguments.length<3;return n(e,Rr(t,4),r,a,Be)},pe.repeat=function(e,t,r){return t=(r?$r(e,t,r):t===to)?1:Fa(t),xt(Va(e),t)},pe.replace=function(){var e=arguments,t=Va(e[0]);return e.length<3?t:t.replace(e[1],e[2])},pe.result=function(e,t,r){var n=-1,a=(t=$t(t,e)).length;for(a||(a=1,e=to);++n<a;){var i=null==e?to:e[hn(t[n])];i===to&&(n=a,i=r),e=Sa(i)?i.call(e):i}return e},pe.round=Qi,pe.runInContext=e,pe.sample=function(e){return(ba(e)?Ee:Et)(e)},pe.size=function(e){if(null==e)return 0;if(wa(e))return La(e)?gc(e):e.length;var t=qr(e);return t==vo||t==wo?e.size:lt(e).length},pe.snakeCase=xi,pe.some=function(e,t,r){var n=ba(e)?Gs:Nt;return r&&$r(e,t,r)&&(t=to),n(e,Rr(t,3))},pe.sortedIndex=function(e,t){return Pt(e,t)},pe.sortedIndexBy=function(e,t,r){return jt(e,t,Rr(r,2))},pe.sortedIndexOf=function(e,t){var r=null==e?0:e.length;if(r){var n=Pt(e,t);if(n<r&&ga(e[n],t))return n}return-1},pe.sortedLastIndex=function(e,t){return Pt(e,t,!0)},pe.sortedLastIndexBy=function(e,t,r){return jt(e,t,Rr(r,2),!0)},pe.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var r=Pt(e,t,!0)-1;if(ga(e[r],t))return r}return-1},pe.startCase=ki,pe.startsWith=function(e,t,r){return e=Va(e),r=null==r?0:ze(Fa(r),0,e.length),t=Lt(t),e.slice(r,r+t.length)==t},pe.subtract=eo,pe.sum=function(e){return e&&e.length?ec(e,Pi):0},pe.sumBy=function(e,t){return e&&e.length?ec(e,Rr(t,2)):0},pe.template=function(o,e,t){var r=pe.templateSettings;t&&$r(o,e,t)&&(e=to),o=Va(o),e=Za({},e,r,Mr);var s,c,n=Za({},e.imports,r.imports,Mr),a=si(n),i=ac(n,a),u=0,l=e.interpolate||hs,f="__p += '",d=y((e.escape||hs).source+"|"+l.source+"|"+(l===Uo?is:hs).source+"|"+(e.evaluate||hs).source+"|$","g"),h="//# sourceURL="+(E.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++bs+"]")+"\n";o.replace(d,function(e,t,r,n,a,i){return r||(r=n),f+=o.slice(u,i).replace(ps,lc),t&&(s=!0,f+="' +\n__e("+t+") +\n'"),a&&(c=!0,f+="';\n"+a+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),u=i+e.length,e}),f+="';\n";var p=E.call(e,"variable")&&e.variable;if(p){if(ns.test(p))throw new g("Invalid `variable` option passed into `_.template`")}else f="with (obj) {\n"+f+"\n}\n";f=(c?f.replace(Lo,""):f).replace(Yo,"$1").replace(Wo,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=Ti(function(){return v(a,h+"return "+f).apply(to,i)});if(m.source=f,Ma(m))throw m;return m},pe.times=function(e,t){if((e=Fa(e))<1||io<e)return[];var r=so,n=$(e,so);t=Rr(t),e-=so;for(var a=tc(n,t);++r<e;)t(r);return a},pe.toFinite=Ha,pe.toInteger=Fa,pe.toLength=Ga,pe.toLower=function(e){return Va(e).toLowerCase()},pe.toNumber=Ua,pe.toSafeInteger=function(e){return e?ze(Fa(e),-io,io):0===e?e:0},pe.toString=Va,pe.toUpper=function(e){return Va(e).toUpperCase()},pe.trim=function(e,t,r){if((e=Va(e))&&(r||t===to))return rc(e);if(!e||!(t=Lt(t)))return e;var n=vc(e),a=vc(t);return Kt(n,oc(n,a),sc(n,a)+1).join("")},pe.trimEnd=function(e,t,r){if((e=Va(e))&&(r||t===to))return e.slice(0,yc(e)+1);if(!e||!(t=Lt(t)))return e;var n=vc(e);return Kt(n,0,sc(n,vc(t))+1).join("")},pe.trimStart=function(e,t,r){if((e=Va(e))&&(r||t===to))return e.replace(Xo,"");if(!e||!(t=Lt(t)))return e;var n=vc(e);return Kt(n,oc(n,vc(t))).join("")},pe.truncate=function(e,t){var r=30,n="...";if(Da(t)){var a="separator"in t?t.separator:a;r="length"in t?Fa(t.length):r,n="omission"in t?Lt(t.omission):n}var i=(e=Va(e)).length;if(fc(e)){var o=vc(e);i=o.length}if(i<=r)return e;var s=r-gc(n);if(s<1)return n;var c=o?Kt(o,0,s).join(""):e.slice(0,s);if(a===to)return c+n;if(o&&(s+=c.length-s),za(a)){if(e.slice(s).search(a)){var u,l=c;for(a.global||(a=y(a.source,Va(os.exec(a))+"g")),a.lastIndex=0;u=a.exec(l);)var f=u.index;c=c.slice(0,f===to?s:f)}}else if(e.indexOf(Lt(a),s)!=s){var d=c.lastIndexOf(a);-1<d&&(c=c.slice(0,d))}return c+n},pe.unescape=function(e){return(e=Va(e))&&qo.test(e)?e.replace(Io,_c):e},pe.uniqueId=function(e){var t=++u;return Va(e)+t},pe.upperCase=Ei,pe.upperFirst=Mi,pe.each=Vn,pe.eachRight=Kn,pe.first=wn,Li(pe,(Zi={},Ve(pe,function(e,t){E.call(pe.prototype,t)||(Zi[t]=e)}),Zi),{chain:!1}),pe.VERSION="4.17.21",zs(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){pe[e].placeholder=pe}),zs(["drop","take"],function(r,n){ye.prototype[r]=function(e){e=e===to?1:U(Fa(e),0);var t=this.__filtered__&&!n?new ye(this):this.clone();return t.__filtered__?t.__takeCount__=$(e,t.__takeCount__):t.__views__.push({size:$(e,so),type:r+(t.__dir__<0?"Right":"")}),t},ye.prototype[r+"Right"]=function(e){return this.reverse()[r](e).reverse()}}),zs(["filter","map","takeWhile"],function(e,t){var r=t+1,n=1==r||3==r;ye.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Rr(e,3),type:r}),t.__filtered__=t.__filtered__||n,t}}),zs(["head","last"],function(e,t){var r="take"+(t?"Right":"");ye.prototype[e]=function(){return this[r](1).value()[0]}}),zs(["initial","tail"],function(e,t){var r="drop"+(t?"":"Right");ye.prototype[e]=function(){return this.__filtered__?new ye(this):this[r](1)}}),ye.prototype.compact=function(){return this.filter(Pi)},ye.prototype.find=function(e){return this.filter(e).head()},ye.prototype.findLast=function(e){return this.reverse().find(e)},ye.prototype.invokeMap=kt(function(t,r){return"function"==typeof t?new ye(this):this.map(function(e){return at(e,t,r)})}),ye.prototype.reject=function(e){return this.filter(fa(Rr(e)))},ye.prototype.slice=function(e,t){e=Fa(e);var r=this;return r.__filtered__&&(0<e||t<0)?new ye(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),t!==to&&(r=(t=Fa(t))<0?r.dropRight(-t):r.take(t-e)),r)},ye.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},ye.prototype.toArray=function(){return this.take(so)},Ve(ye.prototype,function(f,e){var d=/^(?:filter|find|map|reject)|While$/.test(e),h=/^(?:head|last)$/.test(e),p=pe[h?"take"+("last"==e?"Right":""):e],m=h||/^find/.test(e);p&&(pe.prototype[e]=function(){var e=this.__wrapped__,r=h?[1]:arguments,t=e instanceof ye,n=r[0],a=t||ba(e),i=function(e){var t=p.apply(pe,qs([e],r));return h&&o?t[0]:t};a&&d&&"function"==typeof n&&1!=n.length&&(t=a=!1);var o=this.__chain__,s=!!this.__actions__.length,c=m&&!o,u=t&&!s;if(m||!a)return c&&u?f.apply(this,r):(l=this.thru(i),c?h?l.value()[0]:l.value():l);e=u?e:new ye(this);var l=f.apply(e,r);return l.__actions__.push({func:Hn,args:[i],thisArg:to}),new ve(l,o)})}),zs(["pop","push","shift","sort","splice","unshift"],function(e){var r=i[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",a=/^(?:pop|shift)$/.test(e);pe.prototype[e]=function(){var t=arguments;if(!a||this.__chain__)return this[n](function(e){return r.apply(ba(e)?e:[],t)});var e=this.value();return r.apply(ba(e)?e:[],t)}}),Ve(ye.prototype,function(e,t){var r=pe[t];if(r){var n=r.name+"";E.call(ie,n)||(ie[n]=[]),ie[n].push({name:t,func:r})}}),ie[pr(to,2).name]=[{name:"wrapper",func:to}],ye.prototype.clone=function(){var e=new ye(this.__wrapped__);return e.__actions__=nr(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=nr(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=nr(this.__views__),e},ye.prototype.reverse=function(){if(this.__filtered__){var e=new ye(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},ye.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,r=ba(e),n=t<0,a=r?e.length:0,i=function(e,t,r){for(var n=-1,a=r.length;++n<a;){var i=r[n],o=i.size;switch(i.type){case"drop":e+=o;break;case"dropRight":t-=o;break;case"take":t=$(t,e+o);break;case"takeRight":e=U(e,t-o)}}return{start:e,end:t}}(0,a,this.__views__),o=i.start,s=i.end,c=s-o,u=n?s:o-1,l=this.__iteratees__,f=l.length,d=0,h=$(c,this.__takeCount__);if(!r||!n&&a==c&&h==c)return qt(e,this.__actions__);var p=[];e:for(;c--&&d<h;){for(var m=-1,g=e[u+=t];++m<f;){var v=l[m],y=v.iteratee,_=v.type,b=y(g);if(2==_)g=b;else if(!b){if(1==_)continue e;break e}}p[d++]=g}return p},pe.prototype.at=Fn,pe.prototype.chain=function(){return qn(this)},pe.prototype.commit=function(){return new ve(this.value(),this.__chain__)},pe.prototype.next=function(){this.__values__===to&&(this.__values__=qa(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?to:this.__values__[this.__index__++]}},pe.prototype.plant=function(e){for(var t,r=this;r instanceof ge;){var n=mn(r);n.__index__=0,n.__values__=to,t?a.__wrapped__=n:t=n;var a=n;r=r.__wrapped__}return a.__wrapped__=e,t},pe.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof ye){var t=e;return this.__actions__.length&&(t=new ye(this)),(t=t.reverse()).__actions__.push({func:Hn,args:[Dn],thisArg:to}),new ve(t,this.__chain__)}return this.thru(Dn)},pe.prototype.toJSON=pe.prototype.valueOf=pe.prototype.value=function(){return qt(this.__wrapped__,this.__actions__)},pe.prototype.first=pe.prototype.head,P&&(pe.prototype[P]=function(){return this}),pe}();z?((z.exports=bc)._=bc,j._=bc):Es._=bc}).call(this)});function Vc(e){return e.reduce(function(e,t,r,n){return e+t})}function Kc(e){if($c.isArray(e))return e;if("string"==typeof e)return e.split("");throw Error("Parameter must be a string or array.")}var Jc={jarowinkler:function(e,t,r){var n,a;e=Kc(e),t=Kc(t),a=e.length>t.length?(n=e,t):(n=t,e);var i,o,s,c,u=r||.7,l=Math.floor(Math.max(n.length/2-1,0)),f=[],d=[],h=0;for(i=0;i<a.length;i++)for(c=a[i],o=Math.max(i-l,0),s=Math.min(i+l+1,n.length);o<s;o++)if(!d[o]&&c===n[o]){d[f[i]=o]=!0,h++;break}var p,m,g=[],v=[],y=0,_=0;for(m=p=0;p<a.length;p++)-1<f[p]&&(g[m]=a[p],m++);for(m=p=0;p<n.length;p++)d[p]&&(v[m]=n[p],m++);for(i=0;i<g.length;i++)g[i]!==v[i]&&y++;for(i=0;i<a.length&&e[i]===t[i];i++)_++;var b=h;r=y/2;if(b){var A=(b/e.length+b/t.length+(b-r)/b)/3;return A<u?A:A+Math.min(.1,1/n.length)*_*(1-A)}return 0},levenshtein:function(e,t,r){if(e=Kc(e),t=Kc(t),0===e.length)return t.length;if(0===t.length)return e.length;var n,a,i,o,s=r||{d:1,i:1,s:1},c=[],u=[],l=t.length+1;for(n=0;n<l;n++)c[n]=n;for(n=0;n<e.length;n++){for(u[0]=n+1,a=0;a<t.length;a++)i=e[n]===t[a]?0:s.s,u[a+1]=Math.min(u[a]+s.d,c[a+1]+s.i,c[a]+i);for(a=0;a<l;a++)c[a]=u[a]}return((o=Math.max(e.length,t.length))-u[t.length])/o},ngram:function(e,t,r){e=Kc(e),t=Kc(t);var n,a,i,o,s,c,u,l=e.length,f=t.length,d=r||2,h=[],p=[],m=[],g=[],v=[];if(0===l||0===f)return l===f?1:0;if(n=0,l<d||f<d){for(a=0,o=Math.min(l,f);a<o;a++)e[a]===t[a]&&n++;return n/Math.max(l,f)}for(a=0;a<l+d-1;a++)h[a]=a<d-1?0:e[a-d+1];for(a=0;a<=l;a++)p[a]=a;for(i=1;i<=f;i++){if(i<d){for(s=0;s<d-i;s++)v[s]=0;for(s=d-i;s<d;s++)v[s]=t[s-(d-i)]}else v=t.slice(i-d,i);for(m[0]=i,a=1;a<=l;a++){for(c=d,o=n=0;o<d;o++)h[a-1+o]!==v[o]?n++:0===h[a-1+o]&&c--;u=n/c,m[a]=Math.min(Math.min(m[a-1]+1,p[a]+1),p[a-1]+u)}g=p,p=m,m=g}return 1-p[l]/Math.max(l,f)},pearson:function(t,r){var n=[];Object.keys(t).forEach(function(e){r[e]&&n.push(e)});var e=n.length;if(0===e)return 0;var a=Vc(n.map(function(e){return t[e]})),i=Vc(n.map(function(e){return r[e]})),o=Vc(n.map(function(e){return Math.pow(t[e],2)})),s=Vc(n.map(function(e){return Math.pow(r[e],2)})),c=Vc(n.map(function(e){return t[e]*r[e]}))-a*i/e,u=Math.sqrt((o-Math.pow(a,2)/e)*(s-Math.pow(i,2)/e));return 0===u?0:c/u},jaccard:function(e,t){return e=Kc(e),t=Kc(t),$c.intersection(e,t).length/$c.union(e,t).length},tanimoto:function(e,t){e=Kc(e),t=Kc(t);var r=$c.intersection(e,t).length;return r/(e.length+t.length-r)}};var Zc={author:Js,lead_image_url:Xs,dek:function(e,t){var r=t.$,n=t.excerpt;if(1e3<e.length||e.length<5)return null;if(n&&Ra(n,10)===Ra(e,10))return null;var a=ts(e,r);return Rs.test(a)?null:ua(a.trim())},date_published:Fc,content:Gc,title:Uc};function Xc(e,t){var o,a,i,s;return t.stripUnlikelyCandidates&&((o=e)("*").not("a").each(function(e,t){var r=o(t),n=r.attr("class"),a=r.attr("id");if(a||n){var i="".concat(n||""," ").concat(a||"");Ei.test(i)||xi.test(i)&&r.remove()}}),e=o),e=function(a){var e=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];return Ii.forEach(function(e){var t=Pa(e,2),r=t[0],n=t[1];a("".concat(r," ").concat(n)).each(function(e,t){ao(a(t).parent(r),a,80)})}),co(a,e),co(a,e),a}(e=Si(e),t.weightNodes),s=0,(a=e)("[score]").each(function(e,t){if(!Wi.test(t.tagName)){var r=a(t),n=Qi(r);s<n&&(s=n,i=r)}}),i?i=uo(i,s,a):a("body")||a("*").first()}var Qc={defaultOpts:{stripUnlikelyCandidates:!0,weightNodes:!0,cleanConditionally:!0},extract:function(e,t){var r=e.$,n=e.html,a=e.title,i=e.url;t=pt({},this.defaultOpts,t),r=r||Cn.load(n);var o=this.getContentNode(r,a,i,t);if(rs(o))return this.cleanAndReturnNode(o,r);var s=!0,c=!1,u=void 0;try{for(var l,f=Da(ci(t).filter(function(e){return!0===t[e]}));!(s=(l=f.next()).done);s=!0){var d=l.value;if(t[d]=!1,r=Cn.load(n),rs(o=this.getContentNode(r,a,i,t)))break}}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}return this.cleanAndReturnNode(o,r)},getContentNode:function(e,t,r,n){return Gc(Xc(e,n),{$:e,cleanConditionally:n.cleanConditionally,title:t,url:r})},cleanAndReturnNode:function(e,t){return e?ua(t.html(e)):null}},eu=["tweetmeme-title","dc.title","rbtitle","headline","title"],tu=["og:title"],ru=[".hentry .entry-title","h1#articleHeader","h1.articleHeader","h1.article",".instapaper_title","#meebo-title"],nu=["article h1","#entry-title",".entry-title","#entryTitle","#entrytitle",".entryTitle",".entrytitle","#articleTitle",".articleTitle","post post-title","h1.title","h2.article","h1","html head title","title"],au={extract:function(e){var t,r=e.$,n=e.url,a=e.metaCache;return(t=Xo(r,eu,a))?Uc(t,{url:n,$:r}):(t=es(r,ru))?Uc(t,{url:n,$:r}):(t=Xo(r,tu,a))?Uc(t,{url:n,$:r}):(t=es(r,nu))?Uc(t,{url:n,$:r}):""}},iu=["byl","clmst","dc.author","dcsext.author","dc.creator","rbauthors","authors"],ou=[".entry .entry-author",".author.vcard .fn",".author .vcard .fn",".byline.vcard .fn",".byline .vcard .fn",".byline .by .author",".byline .by",".byline .author",".post-author.vcard",".post-author .vcard","a[rel=author]","#by_author",".by_author","#entryAuthor",".entryAuthor",".byline a[href*=author]","#author .authorname",".author .authorname","#author",".author",".articleauthor",".ArticleAuthor",".byline"],su=/^[\n\s]*By/i,cu=[["#byline",su],[".byline",su]],uu={extract:function(e){var t,r=e.$,n=e.metaCache;if((t=Xo(r,iu,n))&&t.length<300)return Js(t);if((t=es(r,ou,2))&&t.length<300)return Js(t);var a=!0,i=!1,o=void 0;try{for(var s,c=Da(cu);!(a=(s=c.next()).done);a=!0){var u=Pa(s.value,2),l=u[0],f=u[1],d=r(l);if(1===d.length){var h=d.text();if(f.test(h))return Js(h)}}}catch(e){i=!0,o=e}finally{try{a||null==c.return||c.return()}finally{if(i)throw o}}return null}},lu=["article:published_time","displaydate","dc.date","dc.date.issued","rbpubdate","publish_date","pub_date","pagedate","pubdate","revision_date","doc_date","date_created","content_create_date","lastmodified","created","date"],fu=[".hentry .dtstamp.published",".hentry .published",".hentry .dtstamp.updated",".hentry .updated",".single .published",".meta .published",".meta .postDate",".entry-date",".byline .date",".postmetadata .date",".article_datetime",".date-header",".story-date",".dateStamp","#story .datetime",".dateline",".pubdate"],du=[new RegExp("/(20\\d{2}/\\d{2}/\\d{2})/","i"),new RegExp("(20\\d{2}-[01]\\d-[0-3]\\d)","i"),new RegExp("/(20\\d{2}/".concat("(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)","/[0-3]\\d)/"),"i")],hu={extract:function(e){var t,r,n,a=e.$,i=e.url,o=e.metaCache;return(t=Xo(a,lu,o,!1))?Fc(t):(t=es(a,fu))?Fc(t):(r=i,(t=(n=du.find(function(e){return e.test(r)}))?n.exec(r)[1]:null)?Fc(t):null)}},pu=["og:image","twitter:image","image_src"],mu=["link[rel=image_src]"],gu=new RegExp(["upload","wp-content","large","photo","wp-image"].join("|"),"i"),vu=new RegExp(["spacer","sprite","blank","throbber","gradient","tile","bg","background","icon","social","header","hdr","advert","spinner","loader","loading","default","rating","share","facebook","twitter","theme","promo","ads","wp-includes"].join("|"),"i"),yu=/\.gif(\?.*)?$/i,_u=/\.jpe?g(\?.*)?$/i;function bu(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}var Au={extract:function(e){var t,u=e.$,r=e.content,n=e.metaCache,a=e.html;u.browser||0!==u("head").length||u("*").first().prepend(a);var i=Xo(u,pu,n,!1);if(i&&(t=Xs(i)))return t;var o=u(r),l=u("img",o).toArray(),f={};l.forEach(function(e,t){var r=u(e),n=r.attr("src");if(n){var a,i,o,s,c=function(e){e=e.trim();var t=0;return gu.test(e)&&(t+=20),vu.test(e)&&(t-=20),yu.test(e)&&(t-=10),_u.test(e)&&(t+=10),t}(n);c+=r.attr("alt")?5:0,c+=function(e){var t=0;1===e.parents("figure").first().length&&(t+=25);var r,n=e.parent();return 1===n.length&&(r=n.parent()),[n,r].forEach(function(e){Bi.test(bu(e))&&(t+=15)}),t}(r),c+=(a=0,i=r.next(),(o=i.get(0))&&"figcaption"===o.tagName.toLowerCase()&&(a+=25),Bi.test(bu(i))&&(a+=15),a),c+=function(e){var t=0,r=Xi(e.attr("width")),n=Xi(e.attr("height")),a=e.attr("src");if(r&&r<=50&&(t-=50),n&&n<=50&&(t-=50),r&&n&&!a.includes("sprite")){var i=r*n;i<5e3?t-=100:t+=Math.round(i/1e3)}return t}(r),c+=(s=t,l.length/2-s),f[n]=c}});var s=ci(f).reduce(function(e,t){return f[t]>e[1]?[t,f[t]]:e},[null,0]),c=Pa(s,2),d=c[0];if(0<c[1]&&(t=Xs(d)))return t;var h=!0,p=!1,m=void 0;try{for(var g,v=Da(mu);!(h=(g=v.next()).done);h=!0){var y=g.value,_=u(y).first(),b=_.attr("src");if(b&&(t=Xs(b)))return t;var A=_.attr("href");if(A&&(t=Xs(A)))return t;var w=_.attr("value");if(w&&(t=Xs(w)))return t}}catch(e){p=!0,m=e}finally{try{h||null==v.return||v.return()}finally{if(p)throw m}}return null}},wu=e(function(t,e){(function(){var e,d,c,h,p,r,u,n,m,g,a,i,o,l,f;c=Math.floor,g=Math.min,d=function(e,t){return e<t?-1:t<e?1:0},m=function(e,t,r,n,a){var i;if(null==r&&(r=0),null==a&&(a=d),r<0)throw new Error("lo must be non-negative");for(null==n&&(n=e.length);r<n;)a(t,e[i=c((r+n)/2)])<0?n=i:r=i+1;return[].splice.apply(e,[r,r-r].concat(t)),t},r=function(e,t,r){return null==r&&(r=d),e.push(t),l(e,0,e.length-1,r)},p=function(e,t){var r,n;return null==t&&(t=d),r=e.pop(),e.length?(n=e[0],e[0]=r,f(e,0,t)):n=r,n},n=function(e,t,r){var n;return null==r&&(r=d),n=e[0],e[0]=t,f(e,0,r),n},u=function(e,t,r){var n;return null==r&&(r=d),e.length&&r(e[0],t)<0&&(t=(n=[e[0],t])[0],e[0]=n[1],f(e,0,r)),t},h=function(r,e){var t,n,a,i,o,s;for(null==e&&(e=d),o=[],n=0,a=(i=function(){s=[];for(var e=0,t=c(r.length/2);0<=t?e<t:t<e;0<=t?e++:e--)s.push(e);return s}.apply(this).reverse()).length;n<a;n++)t=i[n],o.push(f(r,t,e));return o},o=function(e,t,r){var n;if(null==r&&(r=d),-1!==(n=e.indexOf(t)))return l(e,0,n,r),f(e,n,r)},a=function(e,t,r){var n,a,i,o,s;if(null==r&&(r=d),!(a=e.slice(0,t)).length)return a;for(h(a,r),i=0,o=(s=e.slice(t)).length;i<o;i++)n=s[i],u(a,n,r);return a.sort(r).reverse()},i=function(e,t,r){var n,a,i,o,s,c,u,l,f;if(null==r&&(r=d),10*t<=e.length){if(!(i=e.slice(0,t).sort(r)).length)return i;for(a=i[i.length-1],o=0,c=(u=e.slice(t)).length;o<c;o++)r(n=u[o],a)<0&&(m(i,n,0,null,r),i.pop(),a=i[i.length-1]);return i}for(h(e,r),f=[],s=0,l=g(t,e.length);0<=l?s<l:l<s;0<=l?++s:--s)f.push(p(e,r));return f},l=function(e,t,r,n){var a,i,o;for(null==n&&(n=d),a=e[r];t<r&&n(a,i=e[o=r-1>>1])<0;)e[r]=i,r=o;return e[r]=a},f=function(e,t,r){var n,a,i,o,s;for(null==r&&(r=d),a=e.length,i=e[s=t],n=2*t+1;n<a;)(o=n+1)<a&&!(r(e[n],e[o])<0)&&(n=o),e[t]=e[n],n=2*(t=n)+1;return e[t]=i,l(e,s,t,r)},e=function(){function t(e){this.cmp=null!=e?e:d,this.nodes=[]}return t.push=r,t.pop=p,t.replace=n,t.pushpop=u,t.heapify=h,t.updateItem=o,t.nlargest=a,t.nsmallest=i,t.prototype.push=function(e){return r(this.nodes,e,this.cmp)},t.prototype.pop=function(){return p(this.nodes,this.cmp)},t.prototype.peek=function(){return this.nodes[0]},t.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},t.prototype.replace=function(e){return n(this.nodes,e,this.cmp)},t.prototype.pushpop=function(e){return u(this.nodes,e,this.cmp)},t.prototype.heapify=function(){return h(this.nodes,this.cmp)},t.prototype.updateItem=function(e){return o(this.nodes,e,this.cmp)},t.prototype.clear=function(){return this.nodes=[]},t.prototype.empty=function(){return 0===this.nodes.length},t.prototype.size=function(){return this.nodes.length},t.prototype.clone=function(){var e;return(e=new t).nodes=this.nodes.slice(0),e},t.prototype.toArray=function(){return this.nodes.slice(0)},t.prototype.insert=t.prototype.push,t.prototype.top=t.prototype.peek,t.prototype.front=t.prototype.peek,t.prototype.has=t.prototype.contains,t.prototype.copy=t.prototype.clone,t}(),t.exports=e}).call(this)}),xu=e(function(e,l){(function(){var a,h,i,e,ee,t,p,r,g,v,n,o,s,B,M,f,c,q,I,E,u=[].indexOf||function(e){for(var t=0,r=this.length;t<r;t++)if(t in this&&this[t]===e)return t;return-1};p=Math.floor,g=Math.max,v=Math.min,h=wu,f=function(e,t){return t?2*e/t:1},M=function(e,t){var r,n,a,i,o,s;for(o=[e.length,t.length],r=i=0,s=v(n=o[0],a=o[1]);0<=s?i<s:s<i;r=0<=s?++i:--i){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return n-a},E=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},B=function(e){var t,r;for(t=0,r=e.length;t<r;t++)if(e[t])return!0;return!1},ee=function(){function e(e,t,r,n){this.isjunk=e,null==t&&(t=""),null==r&&(r=""),this.autojunk=null==n||n,this.a=this.b=null,this.setSeqs(t,r)}return e.prototype.setSeqs=function(e,t){return this.setSeq1(e),this.setSeq2(t)},e.prototype.setSeq1=function(e){if(e!==this.a)return this.a=e,this.matchingBlocks=this.opcodes=null},e.prototype.setSeq2=function(e){if(e!==this.b)return this.b=e,this.matchingBlocks=this.opcodes=null,this.fullbcount=null,this._chainB()},e.prototype._chainB=function(){var e,t,r,n,a,i,o,s,c,u,l,f,d,h;for(e=this.b,this.b2j=t={},n=u=0,f=e.length;u<f;n=++u)r=e[n],(E(t,r)?t[r]:t[r]=[]).push(n);if(i={},a=this.isjunk)for(l=0,d=(h=Object.keys(t)).length;l<d;l++)a(r=h[l])&&(i[r]=!0,delete t[r]);if(c={},o=e.length,this.autojunk&&200<=o)for(r in s=p(o/100)+1,t)t[r].length>s&&(c[r]=!0,delete t[r]);return this.isbjunk=function(e){return E(i,e)},this.isbpopular=function(e){return E(c,e)}},e.prototype.findLongestMatch=function(e,t,r,n){var a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k;for(a=(_=[this.a,this.b,this.b2j,this.isbjunk])[0],i=_[1],o=_[2],f=_[3],s=(b=[e,r,0])[0],c=b[1],u=b[2],h={},l=g=e;e<=t?g<t:t<g;l=e<=t?++g:--g){for(m={},v=0,y=(A=E(o,a[l])?o[a[l]]:[]).length;v<y;v++)if(!((d=A[v])<r)){if(n<=d)break;u<(p=m[d]=(h[d-1]||0)+1)&&(s=(w=[l-p+1,d-p+1,p])[0],c=w[1],u=w[2])}h=m}for(;e<s&&r<c&&!f(i[c-1])&&a[s-1]===i[c-1];)s=(x=[s-1,c-1,u+1])[0],c=x[1],u=x[2];for(;s+u<t&&c+u<n&&!f(i[c+u])&&a[s+u]===i[c+u];)u++;for(;e<s&&r<c&&f(i[c-1])&&a[s-1]===i[c-1];)s=(k=[s-1,c-1,u+1])[0],c=k[1],u=k[2];for(;s+u<t&&c+u<n&&f(i[c+u])&&a[s+u]===i[c+u];)u++;return[s,c,u]},e.prototype.getMatchingBlocks=function(){var e,t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E;if(this.matchingBlocks)return this.matchingBlocks;for(v=[[0,h=(A=[this.a.length,this.b.length])[0],0,p=A[1]]],m=[];v.length;)t=(w=v.pop())[0],e=w[1],n=w[2],r=w[3],a=(x=y=this.findLongestMatch(t,e,n,r))[0],s=x[1],(l=x[2])&&(m.push(y),t<a&&n<s&&v.push([t,a,n,s]),a+l<e&&s+l<r&&v.push([a+l,e,s+l,r]));for(m.sort(M),i=c=f=0,g=[],_=0,b=m.length;_<b;_++)o=(k=m[_])[0],u=k[1],d=k[2],i+f===o&&c+f===u?f+=d:(f&&g.push([i,c,f]),i=(E=[o,u,d])[0],c=E[1],f=E[2]);return f&&g.push([i,c,f]),g.push([h,p,0]),this.matchingBlocks=g},e.prototype.getOpcodes=function(){var e,t,r,n,a,i,o,s,c,u,l,f;if(this.opcodes)return this.opcodes;for(n=a=0,this.opcodes=t=[],s=0,c=(u=this.getMatchingBlocks()).length;s<c;s++)e=(l=u[s])[0],r=l[1],i=l[2],o="",n<e&&a<r?o="replace":n<e?o="delete":a<r&&(o="insert"),o&&t.push([o,n,e,a,r]),n=(f=[e+i,r+i])[0],a=f[1],i&&t.push(["equal",e,n,r,a]);return t},e.prototype.getGroupedOpcodes=function(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m;for(null==e&&(e=3),(t=this.getOpcodes()).length||(t=[["equal",0,1,0,1]]),"equal"===t[0][0]&&(u=(d=t[0])[0],a=d[1],i=d[2],o=d[3],s=d[4],t[0]=[u,g(a,i-e),i,g(o,s-e),s]),"equal"===t[t.length-1][0]&&(u=(h=t[t.length-1])[0],a=h[1],i=h[2],o=h[3],s=h[4],t[t.length-1]=[u,a,v(i,a+e),o,v(s,o+e)]),c=e+e,n=[],r=[],l=0,f=t.length;l<f;l++)u=(p=t[l])[0],a=p[1],i=p[2],o=p[3],s=p[4],"equal"===u&&c<i-a&&(r.push([u,a,v(i,a+e),o,v(s,o+e)]),n.push(r),r=[],a=(m=[g(a,i-e),g(o,s-e)])[0],o=m[1]),r.push([u,a,i,o,s]);return!r.length||1===r.length&&"equal"===r[0][0]||n.push(r),n},e.prototype.ratio=function(){var e,t,r,n;for(t=e=0,r=(n=this.getMatchingBlocks()).length;t<r;t++)e+=n[t][2];return f(e,this.a.length+this.b.length)},e.prototype.quickRatio=function(){var e,t,r,n,a,i,o,s,c,u,l;if(!this.fullbcount)for(this.fullbcount=r={},i=0,s=(u=this.b).length;i<s;i++)r[t=u[i]]=(r[t]||0)+1;for(r=this.fullbcount,e={},o=n=0,c=(l=this.a).length;o<c;o++)t=l[o],a=E(e,t)?e[t]:r[t]||0,e[t]=a-1,0<a&&n++;return f(n,this.a.length+this.b.length)},e.prototype.realQuickRatio=function(){var e,t,r;return r=[this.a.length,this.b.length],f(v(e=r[0],t=r[1]),e+t)},e}(),r=function(e,t,r,n){var a,i,o,s,c,u,l,f,d;if(null==r&&(r=3),null==n&&(n=.6),!(0<r))throw new Error("n must be > 0: ("+r+")");if(!(0<=n&&n<=1))throw new Error("cutoff must be in [0.0, 1.0]: ("+n+")");for(a=[],(i=new ee).setSeq2(e),s=0,u=t.length;s<u;s++)o=t[s],i.setSeq1(o),i.realQuickRatio()>=n&&i.quickRatio()>=n&&i.ratio()>=n&&a.push([i.ratio(),o]);for(d=[],c=0,l=(a=h.nlargest(a,r,M)).length;c<l;c++)(f=a[c])[0],o=f[1],d.push(o);return d},c=function(e,t){var r,n,a;for(r=(a=[0,e.length])[0],n=a[1];r<n&&e[r]===t;)r++;return r},a=function(){function e(e,t){this.linejunk=e,this.charjunk=t}return e.prototype.compare=function(e,t){var r,n,a,i,o,s,c,u,l,f,d,h,p,m;for(c=[],l=0,d=(p=new ee(this.linejunk,e,t).getOpcodes()).length;l<d;l++){switch(u=(m=p[l])[0],n=m[1],r=m[2],i=m[3],a=m[4],u){case"replace":o=this._fancyReplace(e,n,r,t,i,a);break;case"delete":o=this._dump("-",e,n,r);break;case"insert":o=this._dump("+",t,i,a);break;case"equal":o=this._dump(" ",e,n,r);break;default:throw new Error("unknow tag ("+u+")")}for(f=0,h=o.length;f<h;f++)s=o[f],c.push(s)}return c},e.prototype._dump=function(e,t,r,n){var a,i,o;for(o=[],a=i=r;r<=n?i<n:n<i;a=r<=n?++i:--i)o.push(e+" "+t[a]);return o},e.prototype._plainReplace=function(e,t,r,n,a,i){var o,s,c,u,l,f,d,h,p,m;for(l=i-a<r-t?(o=this._dump("+",n,a,i),this._dump("-",e,t,r)):(o=this._dump("-",e,t,r),this._dump("+",n,a,i)),u=[],f=0,h=(m=[o,l]).length;f<h;f++)for(d=0,p=(s=m[f]).length;d<p;d++)c=s[d],u.push(c);return u},e.prototype._fancyReplace=function(e,t,r,n,a,i){var o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,z,R,L,Y,W,I,B,q,H,F,G,U,$,V,K,J,Z,X,Q;for(d=(B=[.74,.75])[0],_=B[1],y=new ee(this.charjunk),b=(q=[null,null])[0],A=q[1],S=[],x=C=a;a<=i?C<i:i<C;x=a<=i?++C:--C)for(m=n[x],y.setSeq2(m),w=D=t;t<=r?D<r:r<D;w=t<=r?++D:--D)(s=e[w])!==m?(y.setSeq1(s),y.realQuickRatio()>d&&y.quickRatio()>d&&y.ratio()>d&&(d=($=[y.ratio(),w,x])[0],h=$[1],p=$[2])):null===b&&(b=(U=[w,x])[0],A=U[1]);if(d<_){if(null===b){for(O=0,P=(V=this._plainReplace(e,t,r,n,a,i)).length;O<P;O++)M=V[O],S.push(M);return S}h=(K=[b,A,1])[0],p=K[1],d=K[2]}else b=null;for(N=0,j=(J=this._fancyHelper(e,t,h,n,a,p)).length;N<j;N++)M=J[N],S.push(M);if(o=(Z=[e[h],n[p]])[0],f=Z[1],null===b){for(l=v="",y.setSeqs(o,f),Y=0,z=(X=y.getOpcodes()).length;Y<z;Y++)switch(T=(Q=X[Y])[0],c=Q[1],u=Q[2],g=Q[3],k=(H=[u-c,Q[4]-g])[0],E=H[1],T){case"replace":l+=Array(k+1).join("^"),v+=Array(E+1).join("^");break;case"delete":l+=Array(k+1).join("-");break;case"insert":v+=Array(E+1).join("+");break;case"equal":l+=Array(k+1).join(" "),v+=Array(E+1).join(" ");break;default:throw new Error("unknow tag ("+T+")")}for(W=0,R=(F=this._qformat(o,f,l,v)).length;W<R;W++)M=F[W],S.push(M)}else S.push(" "+o);for(I=0,L=(G=this._fancyHelper(e,h+1,r,n,p+1,i)).length;I<L;I++)M=G[I],S.push(M);return S},e.prototype._fancyHelper=function(e,t,r,n,a,i){var o;return o=[],t<r?o=a<i?this._fancyReplace(e,t,r,n,a,i):this._dump("-",e,t,r):a<i&&(o=this._dump("+",n,a,i)),o},e.prototype._qformat=function(e,t,r,n){var a,i;return i=[],a=v(c(e,"\t"),c(t,"\t")),a=v(a,c(r.slice(0,a)," ")),a=v(a,c(n.slice(0,a)," ")),r=r.slice(a).replace(/\s+$/,""),n=n.slice(a).replace(/\s+$/,""),i.push("- "+e),r.length&&i.push("? "+Array(a+1).join("\t")+r+"\n"),i.push("+ "+t),n.length&&i.push("? "+Array(a+1).join("\t")+n+"\n"),i},e}(),e=function(e,t){return null==t&&(t=/^\s*#?\s*$/),t.test(e)},i=function(e,t){return null==t&&(t=" \t"),0<=u.call(t,e)},I=function(e,t){var r,n;return r=e+1,1===(n=t-e)?""+r:(n||r--,r+","+n)},s=function(e,t,r){var n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,z,R,L,Y,W;for(null==(s=(P=null!=r?r:{}).fromfile)&&(s=""),null==(A=P.tofile)&&(A=""),null==(c=P.fromfiledate)&&(c=""),null==(w=P.tofiledate)&&(w=""),null==P.n&&3,null==(v=P.lineterm)&&(v="\n"),y=!(g=[]),x=0,S=(j=new ee(null,e,t).getGroupedOpcodes()).length;x<S;x++)for(u=j[x],y||(y=!0,o=c?"\t"+c:"",b=w?"\t"+w:"",g.push("--- "+s+o+v),g.push("+++ "+A+b+v)),p=(z=[u[0],u[u.length-1]])[1],n=I((i=z[0])[1],p[2]),a=I(i[3],p[4]),g.push("@@ -"+n+" +"+a+" @@"+v),k=0,T=u.length;k<T;k++)if(_=(R=u[k])[0],l=R[1],f=R[2],d=R[3],h=R[4],"equal"!==_){if("replace"===_||"delete"===_)for(M=0,D=(Y=e.slice(l,f)).length;M<D;M++)m=Y[M],g.push("-"+m);if("replace"===_||"insert"===_)for(N=0,O=(W=t.slice(d,h)).length;N<O;N++)m=W[N],g.push("+"+m)}else for(E=0,C=(L=e.slice(l,f)).length;E<C;E++)m=L[E],g.push(" "+m);return g},q=function(e,t){var r,n;return r=e+1,(n=t-e)||r--,n<=1?""+r:r+","+(r+n-1)},t=function(e,t,r){var n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,z,R,L,Y,W,I;for(null==(s=(j=null!=r?r:{}).fromfile)&&(s=""),null==(w=j.tofile)&&(w=""),null==(c=j.fromfiledate)&&(c=""),null==(x=j.tofiledate)&&(x=""),null==j.n&&3,null==(v=j.lineterm)&&(v="\n"),_=!(y={insert:"+ ",delete:"- ",replace:"! ",equal:" "}),g=[],k=0,T=(z=new ee(null,e,t).getGroupedOpcodes()).length;k<T;k++)if(u=z[k],!_){if(_=!0,o=c?"\t"+c:"",A=x?"\t"+x:"",g.push("*** "+s+o+v),g.push("--- "+w+A+v),i=(R=[u[0],u[u.length-1]])[0],p=R[1],g.push("***************"+v),n=q(i[1],p[2]),g.push("*** "+n+" ****"+v),B(function(){var e,t,r,n;for(n=[],e=0,t=u.length;e<t;e++)r=u[e],b=r[0],r[1],r[2],r[3],r[4],n.push("replace"===b||"delete"===b);return n}()))for(E=0,C=u.length;E<C;E++)if(L=u[E],b=L[0],l=L[1],f=L[2],L[3],L[4],"insert"!==b)for(M=0,D=(Y=e.slice(l,f)).length;M<D;M++)m=Y[M],g.push(y[b]+m);if(a=q(i[3],p[4]),g.push("--- "+a+" ----"+v),B(function(){var e,t,r,n;for(n=[],e=0,t=u.length;e<t;e++)r=u[e],b=r[0],r[1],r[2],r[3],r[4],n.push("replace"===b||"insert"===b);return n}()))for(S=0,O=u.length;S<O;S++)if(W=u[S],b=W[0],W[1],W[2],d=W[3],h=W[4],"delete"!==b)for(P=0,N=(I=t.slice(d,h)).length;P<N;P++)m=I[P],g.push(y[b]+m)}return g},n=function(e,t,r,n){return null==n&&(n=i),new a(r,n).compare(e,t)},o=function(e,t){var r,n,a,i,o,s,c;if(!(i={1:"- ",2:"+ "}[t]))throw new Error("unknow delta choice (must be 1 or 2): "+t);for(a=[" ",i],n=[],o=0,s=e.length;o<s;o++)c=(r=e[o]).slice(0,2),0<=u.call(a,c)&&n.push(r.slice(2));return n},l._arrayCmp=M,l.SequenceMatcher=ee,l.getCloseMatches=r,l._countLeading=c,l.Differ=a,l.IS_LINE_JUNK=e,l.IS_CHARACTER_JUNK=i,l._formatRangeUnified=I,l.unifiedDiff=s,l._formatRangeContext=q,l.contextDiff=t,l.ndiff=n,l.restore=o}).call(this)}),ku=(xu._arrayCmp,xu.SequenceMatcher,xu.getCloseMatches,xu._countLeading,xu.Differ,xu.IS_LINE_JUNK,xu.IS_CHARACTER_JUNK,xu._formatRangeUnified,xu.unifiedDiff,xu._formatRangeContext,xu.contextDiff,xu.ndiff,xu.restore,xu);var Eu=/\d/,Mu=new RegExp(["print","archive","comment","discuss","e-mail","email","share","reply","all","login","sign","single","adx","entry-unrelated"].join("|"),"i"),Su=new RegExp("(next|weiter|continue|>([^|]|$)|»([^|]|$))","i"),Tu=new RegExp("(first|last|end)","i"),Cu=new RegExp("(prev|earl|old|new|<|«)","i");function Du(e){var t=e.links,k=e.articleUrl,E=e.baseUrl,M=e.parsedUrl,S=e.$,r=e.previousUrls,T=void 0===r?[]:r;M=M||Sn.parse(k);var C=new RegExp("^".concat(E),"i"),D=0<S(_i).length,n=t.reduce(function(e,t){var r=ns(t);if(!r.href)return e;var n=Sa(r.href),a=S(t),i=a.text();if(!function(t,e,r,n,a,i){if(void 0!==i.find(function(e){return t===e}))return!1;if(!t||t===e||t===r)return!1;var o=n.hostname;if(Sn.parse(t).hostname!==o)return!1;var s=t.replace(r,"");return!(!Eu.test(s)||Mu.test(a)||25<a.length)}(n,k,E,M,i,T))return e;e[n]?e[n].linkText="".concat(e[n].linkText,"|").concat(i):e[n]={score:0,linkText:i,href:n};var o,s,c,u,l,f,d,h,p,m,g,v,y,_,b=e[n],A=(o=a,"".concat(i||o.text()," ").concat(o.attr("class")||""," ").concat(o.attr("id")||"")),w=function(e){var t=e.match(wa);if(!t)return null;var r=Aa(t[6],10);return r<100?r:null}(n),x=(s=n,C.test(s)?0:-25);return x+=(c=A,Su.test(c)?50:0),x+=(u=A,Tu.test(u)&&Su.test(u)?-65:0),x+=(l=A,Cu.test(l)?-200:0),x+=(f=a.parent(),h=d=!1,Ni(gs(p=0,4)).forEach(function(){if(0!==f.length){var e,t="".concat((e=f).attr("class")||""," ").concat(e.attr("id")||"");!d&&bi.test(t)&&(d=!0,p+=25),!h&&yi.test(t)&&Mu.test(t)&&(vi.test(t)||(h=!0,p-=25)),f=f.parent()}}),p),x+=(m=n,Mu.test(m)?-25:0),x+=(g=D,w&&!g?50:0),x+=function(e,t){var r=0;if(Ea.test(e.trim())){var n=Aa(e,10);r=n<2?-30:Math.max(0,10-n),t&&n<=t&&(r-=50)}return r}(i,w),x+=(y=k,_=n,0<(v=x)?v+-250*(1-new ku.SequenceMatcher(null,y,_).ratio()-.2):0),b.score=x,e},{});return 0===ci(n).length?null:n}var Ou={extract:function(e){var t=e.$,r=e.url,n=e.parsedUrl,a=e.previousUrls,i=void 0===a?[]:a;n=n||Sn.parse(r);var o=Sa(r),s=ja(r,n),c=Du({links:t("a[href]").toArray(),articleUrl:o,baseUrl:s,parsedUrl:n,$:t,previousUrls:i});if(!c)return null;var u=ci(c).reduce(function(e,t){var r=c[t];return r.score>e.score?r:e},{score:-100});return 50<=u.score?u.href:null}},Nu=["og:url"];function Pu(e){return{url:e,domain:(t=e,Sn.parse(t).hostname)};var t}var ju={extract:function(e){var t=e.$,r=e.url,n=e.metaCache,a=t("link[rel=canonical]");if(0!==a.length){var i=a.attr("href");if(i)return Pu(i)}var o=Xo(t,Nu,n);return Pu(o||r)}},zu={ellipse:"…",chars:[" ","-"],max:140,truncate:!0};var Ru=function(e,t,r){if("string"!=typeof e||0===e.length)return"";if(0===t)return"";for(var n in r=r||{},zu)null!==r[n]&&void 0!==r[n]||(r[n]=zu[n]);return r.max=t||r.max,function(e,t,r,n,a){if(e.length<t)return e;for(var i=0,o="",s=Math.floor(t/2),c="middle"===a?s:t,u=0,l=e.length;u<l;u++)if(o=e.charAt(u),-1!==n.indexOf(o)&&"middle"!==a&&(i=u),!(u<c))return 0===i?a?e.substring(0,c-1)+r+("middle"===a?e.substring(e.length-s,e.length):""):"":e.substring(0,i)+r;return e}(e,r.max,r.ellipse,r.chars,r.truncate)},Lu=["og:description","twitter:description"];function Yu(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:200;return e=e.replace(/[\s\n]+/g," ").trim(),Ru(e,r,{ellipse:"…"})}var Wu={extract:function(e){var t=e.$,r=e.content,n=e.metaCache,a=Xo(t,Lu,n);if(a)return Yu(ts(a,t));return Yu(t(r.slice(0,1e3)).text(),t,200)}},Iu={extract:function(e){var t=e.content,r=ua(Cn.load(t)("div").first().text()).split(/\s/).length;return 1===r&&(r=t.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim().split(" ").length),r}},Bu={domain:"*",title:au.extract,date_published:hu.extract,author:uu.extract,content:Qc.extract.bind(Qc),lead_image_url:Au.extract,dek:function(){return null},next_page_url:Ou.extract,url_and_domain:ju.extract,excerpt:Wu.extract,word_count:Iu.extract,direction:function(e){var t=e.title;return js.getDirection(t)},extract:function(e){var t=e.html,r=e.$;if(t&&!r){var n=Cn.load(t);e.$=n}var a=this.title(e),i=this.date_published(e),o=this.author(e),s=this.content(pt({},e,{title:a})),c=this.lead_image_url(pt({},e,{content:s})),u=this.dek(pt({},e,{content:s})),l=this.next_page_url(e),f=this.excerpt(pt({},e,{content:s})),d=this.word_count(pt({},e,{content:s})),h=this.direction({title:a}),p=this.url_and_domain(e);return{title:a,author:o,date_published:i||null,dek:u,lead_image_url:c,content:s,next_page_url:l,url:p.url,domain:p.domain,excerpt:f,word_count:d,direction:h}}},qu={'meta[name="al:ios:app_name"][value="Medium"]':Ss,'meta[name="generator"][value="blogger"]':ks};function Hu(e,t,r){var n,a,i=(t=t||Sn.parse(e)).hostname,o=i.split(".").slice(-2).join(".");return ws[i]||ws[o]||Ps[i]||Ps[o]||(n=r,a=ci(qu).find(function(e){return 0<n(e).length}),qu[a])||Bu}function Fu(s){var c=s.$,t=s.type,u=s.extractionOpts,e=s.extractHtml,r=void 0!==e&&e;if(!u)return null;if("string"==typeof u)return u;var a,i,o,n,l=u.selectors,f=u.defaultCleaner,d=void 0===f||f,h=u.allowMultiple,p=(a=c,i=r,o="lead_image_url"===t||h,l.find(function(e){if(Ta(e)){if(i)return e.reduce(function(e,t){return e&&0<a(t).length},!0);var t=Pa(e,2),r=t[0],n=t[1];return(o||!o&&1===a(r).length)&&a(r).attr(n)&&""!==a(r).attr(n).trim()}return(o||!o&&1===a(e).length)&&""!==a(e).text().trim()}));if(!p)return null;function m(e){var t,r,n,a,i,o;return Uo(e,c,s.url||""),t=e,r=c,(n=u.clean)&&r(n.join(","),t).remove(),a=e,i=c,(o=u.transforms)&&ci(o).forEach(function(r){var e=i(r,a),n=o[r];"string"==typeof n?e.each(function(e,t){Ti(i(t),i,o[r])}):"function"==typeof n&&e.each(function(e,t){var r=n(i(t),i);"string"==typeof r&&Ti(i(t),i,r)})}),e}if(r)return function(){var e;if(Ta(p)){e=c(p.join(","));var r=c("<div></div>");e.each(function(e,t){r.append(t)}),e=r}else e=c(p);return e.wrap(c("<div></div>")),e=m(e=e.parent()),Zc[t]&&Zc[t](e,pt({},s,{defaultCleaner:d})),h?e.children().toArray().map(function(e){return c.html(c(e))}):c.html(e)}();if(Ta(p)){var g=Pa(p,3),v=g[0],y=g[1],_=g[2];n=m(c(v)).map(function(e,t){var r=c(t).attr(y).trim();return _?_(r):r})}else n=m(c(p)).map(function(e,t){return c(t).text().trim()});return n=Ta(n.toArray())&&h?n.toArray():n[0],d&&Zc[t]?Zc[t](n,pt({},s,u)):n}function Gu(t,r){var n={};return ci(t).forEach(function(e){n[e]||(n[e]=Fu(pt({},r,{type:e,extractionOpts:t[e]})))}),n}function Uu(e){var t=e.type,r=e.extractor,n=e.fallback,a=void 0===n||n,i=Fu(pt({},e,{extractionOpts:r[t]}));return i||(a?Bu[t](e):null)}var $u,Vu={extract:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Bu,t=1<arguments.length?arguments[1]:void 0,r=t,n=r.contentOnly,a=r.extractedTitle;if("*"===e.domain)return e.extract(t);if(t=pt({},t,{extractor:e}),n)return{content:Uu(pt({},t,{type:"content",extractHtml:!0,title:a}))};var i=Uu(pt({},t,{type:"title"})),o=Uu(pt({},t,{type:"date_published"})),s=Uu(pt({},t,{type:"author"})),c=Uu(pt({},t,{type:"next_page_url"})),u=Uu(pt({},t,{type:"content",extractHtml:!0,title:i})),l=Uu(pt({},t,{type:"lead_image_url",content:u})),f=Uu(pt({},t,{type:"excerpt",content:u})),d=Uu(pt({},t,{type:"dek",content:u,excerpt:f})),h=Uu(pt({},t,{type:"word_count",content:u})),p=Uu(pt({},t,{type:"direction",title:i})),m=Uu(pt({},t,{type:"url_and_domain"}))||{url:null,domain:null},g=m.url,v=m.domain,y={};return e.extend&&(y=Gu(e.extend,t)),pt({title:i,content:u,author:s,date_published:o,lead_image_url:l,dek:d,next_page_url:c,url:g,domain:v,excerpt:f,word_count:h,direction:p},y)}};function Ku(e){return Ju.apply(this,arguments)}function Ju(){return(Ju=Zr(M.mark(function e(t){var r,n,a,i,o,s,c,u,l,f,d,h,p;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:r=t.next_page_url,n=t.html,a=t.$,i=t.metaCache,o=t.result,s=t.Extractor,c=t.title,u=t.url,l=1,f=[Sa(u)];case 3:if(r&&l<26)return l+=1,e.next=7,ps.create(r);e.next=16;break;case 7:a=e.sent,n=a.html(),d={url:r,html:n,$:a,metaCache:i,extractedTitle:c,previousUrls:f},h=Vu.extract(s,d),f.push(r),o=pt({},o,{content:"".concat(o.content,"<hr><h4>Page ").concat(l,"</h4>").concat(h.content)}),r=h.next_page_url,e.next=3;break;case 16:return p=Bu.word_count({content:"<div>".concat(o.content,"</div>")}),e.abrupt("return",pt({},o,{total_pages:l,rendered_pages:l,word_count:p}));case 18:case"end":return e.stop()}},e,this)}))).apply(this,arguments)}return{parse:($u=Zr(M.mark(function e(t){var r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=1<E.length&&void 0!==E[1]?E[1]:{},n=r.html,a=gt(r,["html"]),i=a.fetchAllPages,o=void 0===i||i,s=a.fallback,c=void 0===s||s,u=a.contentType,l=void 0===u?"html":u,f=a.headers,d=void 0===f?{}:f,h=a.extend,p=a.customExtractor,!t&&Cn.browser&&(t=window.location.href,n=n||Cn.html()),m=Sn.parse(t),m.hostname){e.next=6;break}return e.abrupt("return",{error:!0,message:"The url parameter passed does not look like a valid URL. Please check your URL and try again."});case 6:return e.next=8,ps.create(t,n,m,d);case 8:if((g=e.sent).failed)return e.abrupt("return",g);e.next=11;break;case 11:if(p&&xs(p),v=Hu(t,m,g),n||(n=g.html()),y=g("meta").map(function(e,t){return g(t).attr("name")}).toArray(),_={},h&&(_=Gu(h,{$:g,url:t,html:n})),b=Vu.extract(v,{url:t,html:n,$:g,metaCache:y,parsedUrl:m,fallback:c,contentType:l}),w=(A=b).title,x=A.next_page_url,o&&x)return e.next=22,Ku({Extractor:v,next_page_url:x,html:n,$:g,metaCache:y,result:b,title:w,url:t});e.next=25;break;case 22:b=e.sent,e.next=26;break;case 25:b=pt({},b,{total_pages:1,rendered_pages:1});case 26:return"markdown"===l?(k=new na,b.content=k.turndown(b.content)):"text"===l&&(b.content=g.text(g(b.content))),e.abrupt("return",pt({},b,_));case 28:case"end":return e.stop()}},e,this)})),function(e){return $u.apply(this,arguments)}),browser:!!Cn.browser,fetchResource:function(e){return ps.create(e)},addExtractor:function(e){return xs(e)}}}(); +var Mercury=function(){"use strict";function rn(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t=e(function(O){!function(e){var c,t=Object.prototype,u=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",n=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag",o=e.regeneratorRuntime;if(o)O.exports=o;else{(o=e.regeneratorRuntime=O.exports).wrap=y;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},s={};s[a]=function(){return this};var l=Object.getPrototypeOf,g=l&&l(l(C([])));g&&g!==t&&u.call(g,a)&&(s=g);var v=w.prototype=b.prototype=Object.create(s);A.prototype=v.constructor=w,w.constructor=A,w[i]=A.displayName="GeneratorFunction",o.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===A||"GeneratorFunction"===(t.displayName||t.name))},o.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,i in e||(e[i]="GeneratorFunction")),e.prototype=Object.create(v),e},o.awrap=function(e){return{__await:e}},x(k.prototype),k.prototype[n]=function(){return this},o.AsyncIterator=k,o.async=function(e,t,r,n){var a=new k(y(e,t,r,n));return o.isGeneratorFunction(t)?a:a.next().then(function(e){return e.done?e.value:a.next()})},x(v),v[i]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},o.keys=function(r){var n=[];for(var e in r)n.push(e);return n.reverse(),function e(){for(;n.length;){var t=n.pop();if(t in r)return e.value=t,e.done=!1,e}return e.done=!0,e}},o.values=C,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=c,this.done=!1,this.delegate=null,this.method="next",this.arg=c,this.tryEntries.forEach(S),!e)for(var t in this)"t"===t.charAt(0)&&u.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=c)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(r){if(this.done)throw r;var n=this;function e(e,t){return i.type="throw",i.arg=r,n.next=e,t&&(n.method="next",n.arg=c),!!t}for(var t=this.tryEntries.length-1;0<=t;--t){var a=this.tryEntries[t],i=a.completion;if("root"===a.tryLoc)return e("end");if(a.tryLoc<=this.prev){var o=u.call(a,"catchLoc"),s=u.call(a,"finallyLoc");if(o&&s){if(this.prev<a.catchLoc)return e(a.catchLoc,!0);if(this.prev<a.finallyLoc)return e(a.finallyLoc)}else if(o){if(this.prev<a.catchLoc)return e(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return e(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;0<=r;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&u.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var a=n;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,m):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),m},finish:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),S(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;S(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:C(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=c),m}}}function y(e,t,r,n){var i,o,s,c,a=t&&t.prototype instanceof b?t:b,u=Object.create(a.prototype),l=new T(n||[]);return u._invoke=(i=e,o=r,s=l,c=f,function(e,t){if(c===h)throw new Error("Generator is already running");if(c===p){if("throw"===e)throw t;return D()}for(s.method=e,s.arg=t;;){var r=s.delegate;if(r){var n=E(r,s);if(n){if(n===m)continue;return n}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(c===f)throw c=p,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);c=h;var a=_(i,o,s);if("normal"===a.type){if(c=s.done?p:d,a.arg===m)continue;return{value:a.arg,done:s.done}}"throw"===a.type&&(c=p,s.method="throw",s.arg=a.arg)}}),u}function _(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}function b(){}function A(){}function w(){}function x(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function k(c){var t;this._invoke=function(r,n){function e(){return new Promise(function(e,t){!function t(e,r,n,a){var i=_(c[e],c,r);if("throw"!==i.type){var o=i.arg,s=o.value;return s&&"object"==typeof s&&u.call(s,"__await")?Promise.resolve(s.__await).then(function(e){t("next",e,n,a)},function(e){t("throw",e,n,a)}):Promise.resolve(s).then(function(e){o.value=e,n(o)},function(e){return t("throw",e,n,a)})}a(i.arg)}(r,n,e,t)})}return t=t?t.then(e,e):e()}}function E(e,t){var r=e.iterator[t.method];if(r===c){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=c,E(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var n=_(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,m;var a=n.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=c),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function C(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,n=function e(){for(;++r<t.length;)if(u.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=c,e.done=!0,e};return n.next=n}}return{next:D}}function D(){return{value:c,done:!0}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())}),r=function(){return this||"object"==typeof self&&self}()||Function("return this")(),n=r.regeneratorRuntime&&0<=Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime"),a=n&&r.regeneratorRuntime;r.regeneratorRuntime=void 0;var i=t;if(n)r.regeneratorRuntime=a;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}var M=i,o={}.toString,s=function(e){return o.call(e).slice(8,-1)},d=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==s(e)?e.split(""):Object(e)},c=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},u=function(e){return d(c(e))},h={f:{}.propertyIsEnumerable},w=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},l=function(e){return"object"==typeof e?null!==e:"function"==typeof e},f=function(e,t){if(!l(e))return e;var r,n;if(t&&"function"==typeof(r=e.toString)&&!l(n=r.call(e)))return n;if("function"==typeof(r=e.valueOf)&&!l(n=r.call(e)))return n;if(!t&&"function"==typeof(r=e.toString)&&!l(n=r.call(e)))return n;throw TypeError("Can't convert object to primitive value")},p={}.hasOwnProperty,m=function(e,t){return p.call(e,t)},g=function(e){try{return!!e()}catch(e){return!0}},v=!g(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),y=e(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),_=y.document,b=l(_)&&l(_.createElement),A=function(e){return b?_.createElement(e):{}},x=!v&&!g(function(){return 7!=Object.defineProperty(A("div"),"a",{get:function(){return 7}}).a}),k=Object.getOwnPropertyDescriptor,E={f:v?k:function(e,t){if(e=u(e),t=f(t,!0),x)try{return k(e,t)}catch(e){}if(m(e,t))return w(!h.f.call(e,t),e[t])}},S=e(function(e){var t=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=t)}),T=(S.version,function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}),C=function(n,a,e){if(T(n),void 0===a)return n;switch(e){case 1:return function(e){return n.call(a,e)};case 2:return function(e,t){return n.call(a,e,t)};case 3:return function(e,t,r){return n.call(a,e,t,r)}}return function(){return n.apply(a,arguments)}},D=function(e){if(!l(e))throw TypeError(e+" is not an object!");return e},O=Object.defineProperty,N={f:v?Object.defineProperty:function(e,t,r){if(D(e),t=f(t,!0),D(r),x)try{return O(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},P=v?function(e,t,r){return N.f(e,t,w(1,r))}:function(e,t,r){return e[t]=r,e},j="prototype",R=function(e,t,r){var n,a,i,o=e&R.F,s=e&R.G,c=e&R.S,u=e&R.P,l=e&R.B,f=e&R.W,d=s?S:S[t]||(S[t]={}),h=d[j],p=s?y:c?y[t]:(y[t]||{})[j];for(n in s&&(r=t),r)(a=!o&&p&&void 0!==p[n])&&m(d,n)||(i=a?p[n]:r[n],d[n]=s&&"function"!=typeof p[n]?r[n]:l&&a?C(i,y):f&&p[n]==i?function(n){var e=function(e,t,r){if(this instanceof n){switch(arguments.length){case 0:return new n;case 1:return new n(e);case 2:return new n(e,t)}return new n(e,t,r)}return n.apply(this,arguments)};return e[j]=n[j],e}(i):u&&"function"==typeof i?C(Function.call,i):i,u&&((d.virtual||(d.virtual={}))[n]=i,e&R.R&&h&&!h[n]&&P(h,n,i)))};R.F=1,R.G=2,R.S=4,R.P=8,R.B=16,R.W=32,R.U=64,R.R=128;var z=R,L=function(e,t){var r=(S.Object||{})[e]||Object[e],n={};n[e]=t(r),z(z.S+z.F*g(function(){r(1)}),"Object",n)},Y=E.f;L("getOwnPropertyDescriptor",function(){return function(e,t){return Y(u(e),t)}});var W,I=S.Object,B=function(e,t){return I.getOwnPropertyDescriptor(e,t)},q=P,H=0,F=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+F).toString(36))},U=e(function(e){var r=G("meta"),t=N.f,n=0,a=Object.isExtensible||function(){return!0},i=!g(function(){return a(Object.preventExtensions({}))}),o=function(e){t(e,r,{value:{i:"O"+ ++n,w:{}}})},s=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!l(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!m(e,r)){if(!a(e))return"F";if(!t)return"E";o(e)}return e[r].i},getWeak:function(e,t){if(!m(e,r)){if(!a(e))return!0;if(!t)return!1;o(e)}return e[r].w},onFreeze:function(e){return i&&s.NEED&&a(e)&&!m(e,r)&&o(e),e}}}),$=(U.KEY,U.NEED,U.fastKey,U.getWeak,U.onFreeze,e(function(e){var t="__core-js_shared__",r=y[t]||(y[t]={});(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:S.version,mode:"pure",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),V=e(function(e){var t=$("wks"),r=y.Symbol,n="function"==typeof r;(e.exports=function(e){return t[e]||(t[e]=n&&r[e]||(n?r:G)("Symbol."+e))}).store=t}),K=N.f,J=V("toStringTag"),Z=function(e,t,r){e&&!m(e=r?e:e.prototype,J)&&K(e,J,{configurable:!0,value:t})},X={f:V},Q=N.f,ee=function(e){var t=S.Symbol||(S.Symbol={});"_"==e.charAt(0)||e in t||Q(t,e,{value:X.f(e)})},te=Math.ceil,re=Math.floor,ne=function(e){return isNaN(e=+e)?0:(0<e?re:te)(e)},ae=Math.min,ie=function(e){return 0<e?ae(ne(e),9007199254740991):0},oe=Math.max,se=Math.min,ce=$("keys"),ue=function(e){return ce[e]||(ce[e]=G(e))},le=(W=!1,function(e,t,r){var n,a,i,o=u(e),s=ie(o.length),c=(a=s,(n=ne(n=r))<0?oe(n+a,0):se(n,a));if(W&&t!=t){for(;c<s;)if((i=o[c++])!=i)return!0}else for(;c<s;c++)if((W||c in o)&&o[c]===t)return W||c||0;return!W&&-1}),fe=ue("IE_PROTO"),de=function(e,t){var r,n=u(e),a=0,i=[];for(r in n)r!=fe&&m(n,r)&&i.push(r);for(;t.length>a;)m(n,r=t[a++])&&(~le(i,r)||i.push(r));return i},he="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),pe=Object.keys||function(e){return de(e,he)},me={f:Object.getOwnPropertySymbols},ge=Array.isArray||function(e){return"Array"==s(e)},ve=v?Object.defineProperties:function(e,t){D(e);for(var r,n=pe(t),a=n.length,i=0;i<a;)N.f(e,r=n[i++],t[r]);return e},ye=y.document,_e=ye&&ye.documentElement,be=ue("IE_PROTO"),Ae=function(){},we="prototype",xe=function(){var e,t=A("iframe"),r=he.length;for(t.style.display="none",_e.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),xe=e.F;r--;)delete xe[we][he[r]];return xe()},ke=Object.create||function(e,t){var r;return null!==e?(Ae[we]=D(e),r=new Ae,Ae[we]=null,r[be]=e):r=xe(),void 0===t?r:ve(r,t)},Ee=he.concat("length","prototype"),Me={f:Object.getOwnPropertyNames||function(e){return de(e,Ee)}},Se=Me.f,Te={}.toString,Ce="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],De={f:function(e){return Ce&&"[object Window]"==Te.call(e)?function(e){try{return Se(e)}catch(e){return Ce.slice()}}(e):Se(u(e))}},Oe=U.KEY,Ne=E.f,Pe=N.f,je=De.f,Re=y.Symbol,ze=y.JSON,Le=ze&&ze.stringify,Ye="prototype",We=V("_hidden"),Ie=V("toPrimitive"),Be={}.propertyIsEnumerable,qe=$("symbol-registry"),He=$("symbols"),Fe=$("op-symbols"),Ge=Object[Ye],Ue="function"==typeof Re,$e=y.QObject,Ve=!$e||!$e[Ye]||!$e[Ye].findChild,Ke=v&&g(function(){return 7!=ke(Pe({},"a",{get:function(){return Pe(this,"a",{value:7}).a}})).a})?function(e,t,r){var n=Ne(Ge,t);n&&delete Ge[t],Pe(e,t,r),n&&e!==Ge&&Pe(Ge,t,n)}:Pe,Je=function(e){var t=He[e]=ke(Re[Ye]);return t._k=e,t},Ze=Ue&&"symbol"==typeof Re.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Re},Xe=function(e,t,r){return e===Ge&&Xe(Fe,t,r),D(e),t=f(t,!0),D(r),m(He,t)?(r.enumerable?(m(e,We)&&e[We][t]&&(e[We][t]=!1),r=ke(r,{enumerable:w(0,!1)})):(m(e,We)||Pe(e,We,w(1,{})),e[We][t]=!0),Ke(e,t,r)):Pe(e,t,r)},Qe=function(e,t){D(e);for(var r,n=function(e){var t=pe(e),r=me.f;if(r)for(var n,a=r(e),i=h.f,o=0;a.length>o;)i.call(e,n=a[o++])&&t.push(n);return t}(t=u(t)),a=0,i=n.length;a<i;)Xe(e,r=n[a++],t[r]);return e},et=function(e){var t=Be.call(this,e=f(e,!0));return!(this===Ge&&m(He,e)&&!m(Fe,e))&&(!(t||!m(this,e)||!m(He,e)||m(this,We)&&this[We][e])||t)},tt=function(e,t){if(e=u(e),t=f(t,!0),e!==Ge||!m(He,t)||m(Fe,t)){var r=Ne(e,t);return!r||!m(He,t)||m(e,We)&&e[We][t]||(r.enumerable=!0),r}},rt=function(e){for(var t,r=je(u(e)),n=[],a=0;r.length>a;)m(He,t=r[a++])||t==We||t==Oe||n.push(t);return n},nt=function(e){for(var t,r=e===Ge,n=je(r?Fe:u(e)),a=[],i=0;n.length>i;)!m(He,t=n[i++])||r&&!m(Ge,t)||a.push(He[t]);return a};Ue||(q((Re=function(){if(this instanceof Re)throw TypeError("Symbol is not a constructor!");var t=G(0<arguments.length?arguments[0]:void 0),r=function(e){this===Ge&&r.call(Fe,e),m(this,We)&&m(this[We],t)&&(this[We][t]=!1),Ke(this,t,w(1,e))};return v&&Ve&&Ke(Ge,t,{configurable:!0,set:r}),Je(t)})[Ye],"toString",function(){return this._k}),E.f=tt,N.f=Xe,Me.f=De.f=rt,h.f=et,me.f=nt,X.f=function(e){return Je(V(e))}),z(z.G+z.W+z.F*!Ue,{Symbol:Re});for(var at="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;at.length>it;)V(at[it++]);for(var ot=pe(V.store),st=0;ot.length>st;)ee(ot[st++]);z(z.S+z.F*!Ue,"Symbol",{for:function(e){return m(qe,e+="")?qe[e]:qe[e]=Re(e)},keyFor:function(e){if(!Ze(e))throw TypeError(e+" is not a symbol!");for(var t in qe)if(qe[t]===e)return t},useSetter:function(){Ve=!0},useSimple:function(){Ve=!1}}),z(z.S+z.F*!Ue,"Object",{create:function(e,t){return void 0===t?ke(e):Qe(ke(e),t)},defineProperty:Xe,defineProperties:Qe,getOwnPropertyDescriptor:tt,getOwnPropertyNames:rt,getOwnPropertySymbols:nt}),ze&&z(z.S+z.F*(!Ue||g(function(){var e=Re();return"[null]"!=Le([e])||"{}"!=Le({a:e})||"{}"!=Le(Object(e))})),"JSON",{stringify:function(e){for(var t,r,n=[e],a=1;arguments.length>a;)n.push(arguments[a++]);if(r=t=n[1],(l(t)||void 0!==e)&&!Ze(e))return ge(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!Ze(t))return t}),n[1]=t,Le.apply(ze,n)}}),Re[Ye][Ie]||P(Re[Ye],Ie,Re[Ye].valueOf),Z(Re,"Symbol"),Z(Math,"Math",!0),Z(y.JSON,"JSON",!0);var ct=S.Object.getOwnPropertySymbols,ut=function(e){return Object(c(e))};L("keys",function(){return function(e){return pe(ut(e))}});var lt=S.Object.keys;z(z.S+z.F*!v,"Object",{defineProperty:N.f});var ft=S.Object,dt=function(e,t,r){return ft.defineProperty(e,t,r)};var ht=function(e,t,r){return t in e?dt(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e};var pt=function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=lt(r);"function"==typeof ct&&(n=n.concat(ct(r).filter(function(e){return B(r,e).enumerable}))),n.forEach(function(e){ht(t,e,r[e])})}return t};var mt=function(e,t){if(null==e)return{};var r,n,a={},i=lt(e);for(n=0;n<i.length;n++)r=i[n],0<=t.indexOf(r)||(a[r]=e[r]);return a};var gt=function(e,t){if(null==e)return{};var r,n,a=mt(e,t);if(ct){var i=ct(e);for(n=0;n<i.length;n++)r=i[n],0<=t.indexOf(r)||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a},vt={},yt={};P(yt,V("iterator"),function(){return this});var _t,bt=ue("IE_PROTO"),At=Object.prototype,wt=Object.getPrototypeOf||function(e){return e=ut(e),m(e,bt)?e[bt]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?At:null},xt=V("iterator"),kt=!([].keys&&"next"in[].keys()),Et="values",Mt=function(){return this},St=function(e,t,r,n,a,i,o){var s,c,u;c=t,u=n,(s=r).prototype=ke(yt,{next:w(1,u)}),Z(s,c+" Iterator");var l,f,d,h=function(e){if(!kt&&e in v)return v[e];switch(e){case"keys":case Et:return function(){return new r(this,e)}}return function(){return new r(this,e)}},p=t+" Iterator",m=a==Et,g=!1,v=e.prototype,y=v[xt]||v["@@iterator"]||a&&v[a],_=y||h(a),b=a?m?h("entries"):_:void 0,A="Array"==t&&v.entries||y;if(A&&(d=wt(A.call(new e)))!==Object.prototype&&d.next&&Z(d,p,!0),m&&y&&y.name!==Et&&(g=!0,_=function(){return y.call(this)}),o&&(kt||g||!v[xt])&&P(v,xt,_),vt[t]=_,vt[p]=Mt,a)if(l={values:m?_:h(Et),keys:i?_:h("keys"),entries:b},o)for(f in l)f in v||q(v,f,l[f]);else z(z.P+z.F*(kt||g),t,l);return l},Tt=(_t=!0,function(e,t){var r,n,a=String(c(e)),i=ne(t),o=a.length;return i<0||o<=i?_t?"":void 0:(r=a.charCodeAt(i))<55296||56319<r||i+1===o||(n=a.charCodeAt(i+1))<56320||57343<n?_t?a.charAt(i):r:_t?a.slice(i,i+2):n-56320+(r-55296<<10)+65536});St(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=Tt(t,r),this._i+=e.length,{value:e,done:!1})});var Ct=function(e,t){return{value:t,done:!!e}};St(Array,"Array",function(e,t){this._t=u(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,Ct(1)):Ct(0,"keys"==t?r:"values"==t?e[r]:[r,e[r]])},"values");vt.Arguments=vt.Array;for(var Dt=V("toStringTag"),Ot="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),Nt=0;Nt<Ot.length;Nt++){var Pt=Ot[Nt],jt=y[Pt],Rt=jt&&jt.prototype;Rt&&!Rt[Dt]&&P(Rt,Dt,Pt),vt[Pt]=vt.Array}var zt,Lt,Yt,Wt=V("toStringTag"),It="Arguments"==s(function(){return arguments}()),Bt=function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Wt))?r:It?s(t):"Object"==(n=s(t))&&"function"==typeof t.callee?"Arguments":n},qt=function(e,t,r,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(r+": incorrect invocation!");return e},Ht=function(t,e,r,n){try{return n?e(D(r)[0],r[1]):e(r)}catch(e){var a=t.return;throw void 0!==a&&D(a.call(t)),e}},Ft=V("iterator"),Gt=Array.prototype,Ut=function(e){return void 0!==e&&(vt.Array===e||Gt[Ft]===e)},$t=V("iterator"),Vt=S.getIteratorMethod=function(e){if(null!=e)return e[$t]||e["@@iterator"]||vt[Bt(e)]},Kt=e(function(e){var d={},h={},t=e.exports=function(e,t,r,n,a){var i,o,s,c,u=a?function(){return e}:Vt(e),l=C(r,n,t?2:1),f=0;if("function"!=typeof u)throw TypeError(e+" is not iterable!");if(Ut(u)){for(i=ie(e.length);f<i;f++)if((c=t?l(D(o=e[f])[0],o[1]):l(e[f]))===d||c===h)return c}else for(s=u.call(e);!(o=s.next()).done;)if((c=Ht(s,l,o.value,t))===d||c===h)return c};t.BREAK=d,t.RETURN=h}),Jt=V("species"),Zt=function(e,t){var r,n=D(e).constructor;return void 0===n||null==(r=D(n)[Jt])?t:T(r)},Xt=y.process,Qt=y.setImmediate,er=y.clearImmediate,tr=y.MessageChannel,rr=y.Dispatch,nr=0,ar={},ir="onreadystatechange",or=function(){var e=+this;if(ar.hasOwnProperty(e)){var t=ar[e];delete ar[e],t()}},sr=function(e){or.call(e.data)};Qt&&er||(Qt=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return ar[++nr]=function(){!function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}e.apply(r,t)}("function"==typeof e?e:Function(e),t)},zt(nr),nr},er=function(e){delete ar[e]},"process"==s(Xt)?zt=function(e){Xt.nextTick(C(or,e,1))}:rr&&rr.now?zt=function(e){rr.now(C(or,e,1))}:tr?(Yt=(Lt=new tr).port2,Lt.port1.onmessage=sr,zt=C(Yt.postMessage,Yt,1)):y.addEventListener&&"function"==typeof postMessage&&!y.importScripts?(zt=function(e){y.postMessage(e+"","*")},y.addEventListener("message",sr,!1)):zt=ir in A("script")?function(e){_e.appendChild(A("script"))[ir]=function(){_e.removeChild(this),or.call(e)}}:function(e){setTimeout(C(or,e,1),0)});var cr={set:Qt,clear:er},ur=cr.set,lr=y.MutationObserver||y.WebKitMutationObserver,fr=y.process,dr=y.Promise,hr="process"==s(fr);function pr(e){var r,n;this.promise=new e(function(e,t){if(void 0!==r||void 0!==n)throw TypeError("Bad Promise constructor");r=e,n=t}),this.resolve=T(r),this.reject=T(n)}var mr={f:function(e){return new pr(e)}},gr=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},vr=y.navigator,yr=vr&&vr.userAgent||"",_r=function(e,t){if(D(e),l(t)&&t.constructor===e)return t;var r=mr.f(e);return(0,r.resolve)(t),r.promise},br=function(e,t,r){for(var n in t)r&&e[n]?e[n]=t[n]:P(e,n,t[n]);return e},Ar=V("species"),wr=function(e){var t="function"==typeof S[e]?S[e]:y[e];v&&t&&!t[Ar]&&N.f(t,Ar,{configurable:!0,get:function(){return this}})},xr=V("iterator"),kr=!1;try{[7][xr]().return=function(){kr=!0}}catch(e){}var Er,Mr,Sr,Tr,Cr=function(e,t){if(!t&&!kr)return!1;var r=!1;try{var n=[7],a=n[xr]();a.next=function(){return{done:r=!0}},n[xr]=function(){return a},e(n)}catch(e){}return r},Dr=cr.set,Or=function(){var r,n,a,e=function(){var e,t;for(hr&&(e=fr.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(e){throw r?a():n=void 0,e}}n=void 0,e&&e.enter()};if(hr)a=function(){fr.nextTick(e)};else if(!lr||y.navigator&&y.navigator.standalone)if(dr&&dr.resolve){var t=dr.resolve(void 0);a=function(){t.then(e)}}else a=function(){ur.call(y,e)};else{var i=!0,o=document.createTextNode("");new lr(e).observe(o,{characterData:!0}),a=function(){o.data=i=!i}}return function(e){var t={fn:e,next:void 0};n&&(n.next=t),r||(r=t,a()),n=t}}(),Nr="Promise",Pr=y.TypeError,jr=y.process,Rr=jr&&jr.versions,zr=Rr&&Rr.v8||"",Lr=y[Nr],Yr="process"==Bt(jr),Wr=function(){},Ir=Mr=mr.f,Br=!!function(){try{var e=Lr.resolve(1),t=(e.constructor={})[V("species")]=function(e){e(Wr,Wr)};return(Yr||"function"==typeof PromiseRejectionEvent)&&e.then(Wr)instanceof t&&0!==zr.indexOf("6.6")&&-1===yr.indexOf("Chrome/66")}catch(e){}}(),qr=function(e){var t;return!(!l(e)||"function"!=typeof(t=e.then))&&t},Hr=function(l,r){if(!l._n){l._n=!0;var n=l._c;Or(function(){for(var c=l._v,u=1==l._s,e=0,t=function(e){var t,r,n,a=u?e.ok:e.fail,i=e.resolve,o=e.reject,s=e.domain;try{a?(u||(2==l._h&&Ur(l),l._h=1),!0===a?t=c:(s&&s.enter(),t=a(c),s&&(s.exit(),n=!0)),t===e.promise?o(Pr("Promise-chain cycle")):(r=qr(t))?r.call(t,i,o):i(t)):o(c)}catch(e){s&&!n&&s.exit(),o(e)}};n.length>e;)t(n[e++]);l._c=[],l._n=!1,r&&!l._h&&Fr(l)})}},Fr=function(i){Dr.call(y,function(){var e,t,r,n=i._v,a=Gr(i);if(a&&(e=gr(function(){Yr?jr.emit("unhandledRejection",n,i):(t=y.onunhandledrejection)?t({promise:i,reason:n}):(r=y.console)&&r.error&&r.error("Unhandled promise rejection",n)}),i._h=Yr||Gr(i)?2:1),i._a=void 0,a&&e.e)throw e.v})},Gr=function(e){return 1!==e._h&&0===(e._a||e._c).length},Ur=function(t){Dr.call(y,function(){var e;Yr?jr.emit("rejectionHandled",t):(e=y.onrejectionhandled)&&e({promise:t,reason:t._v})})},$r=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Hr(t,!0))},Vr=function(e){var r,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Pr("Promise can't be resolved itself");(r=qr(e))?Or(function(){var t={_w:n,_d:!1};try{r.call(e,C(Vr,t,1),C($r,t,1))}catch(e){$r.call(t,e)}}):(n._v=e,n._s=1,Hr(n,!1))}catch(e){$r.call({_w:n,_d:!1},e)}}};Br||(Lr=function(e){qt(this,Lr,Nr,"_h"),T(e),Er.call(this);try{e(C(Vr,this,1),C($r,this,1))}catch(e){$r.call(this,e)}},(Er=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=br(Lr.prototype,{then:function(e,t){var r=Ir(Zt(this,Lr));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=Yr?jr.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&Hr(this,!1),r.promise},catch:function(e){return this.then(void 0,e)}}),Sr=function(){var e=new Er;this.promise=e,this.resolve=C(Vr,e,1),this.reject=C($r,e,1)},mr.f=Ir=function(e){return e===Lr||e===Tr?new Sr(e):Mr(e)}),z(z.G+z.W+z.F*!Br,{Promise:Lr}),Z(Lr,Nr),wr(Nr),Tr=S[Nr],z(z.S+z.F*!Br,Nr,{reject:function(e){var t=Ir(this);return(0,t.reject)(e),t.promise}}),z(z.S+!0*z.F,Nr,{resolve:function(e){return _r(this===Tr?Lr:this,e)}}),z(z.S+z.F*!(Br&&Cr(function(e){Lr.all(e).catch(Wr)})),Nr,{all:function(e){var o=this,t=Ir(o),s=t.resolve,c=t.reject,r=gr(function(){var n=[],a=0,i=1;Kt(e,!1,function(e){var t=a++,r=!1;n.push(void 0),i++,o.resolve(e).then(function(e){r||(r=!0,n[t]=e,--i||s(n))},c)}),--i||s(n)});return r.e&&c(r.v),t.promise},race:function(e){var t=this,r=Ir(t),n=r.reject,a=gr(function(){Kt(e,!1,function(e){t.resolve(e).then(r.resolve,n)})});return a.e&&n(a.v),r.promise}}),z(z.P+z.R,"Promise",{finally:function(t){var r=Zt(this,S.Promise||y.Promise),e="function"==typeof t;return this.then(e?function(e){return _r(r,t()).then(function(){return e})}:t,e?function(e){return _r(r,t()).then(function(){throw e})}:t)}}),z(z.S,"Promise",{try:function(e){var t=mr.f(this),r=gr(e);return(r.e?t.reject:t.resolve)(r.v),t.promise}});var Kr=S.Promise;function Jr(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Kr.resolve(c).then(n,a)}var Zr=function(s){return function(){var e=this,o=arguments;return new Kr(function(t,r){var n=s.apply(e,o);function a(e){Jr(n,t,r,a,i,"next",e)}function i(e){Jr(n,t,r,a,i,"throw",e)}a(void 0)})}},Xr="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Qr=e(function(O,N){!function(e){var t=N&&!N.nodeType&&N,r=O&&!O.nodeType&&O,n="object"==typeof Xr&&Xr;n.global!==n&&n.window!==n&&n.self!==n||(e=n);var a,i,v=2147483647,y=36,_=1,b=26,o=38,s=700,A=72,w=128,x="-",c=/^xn--/,u=/[^\x20-\x7E]/,l=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=y-_,k=Math.floor,E=String.fromCharCode;function M(e){throw RangeError(f[e])}function h(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function p(e,t){var r=e.split("@"),n="";return 1<r.length&&(n=r[0]+"@",e=r[1]),n+h((e=e.replace(l,".")).split("."),t).join(".")}function S(e){for(var t,r,n=[],a=0,i=e.length;a<i;)55296<=(t=e.charCodeAt(a++))&&t<=56319&&a<i?56320==(64512&(r=e.charCodeAt(a++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),a--):n.push(t);return n}function T(e){return h(e,function(e){var t="";return 65535<e&&(t+=E((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=E(e)}).join("")}function C(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function D(e,t,r){var n=0;for(e=r?k(e/s):e>>1,e+=k(e/t);d*b>>1<e;n+=y)e=k(e/d);return k(n+(d+1)*e/(e+o))}function m(e){var t,r,n,a,i,o,s,c,u,l,f,d=[],h=e.length,p=0,m=w,g=A;for((r=e.lastIndexOf(x))<0&&(r=0),n=0;n<r;++n)128<=e.charCodeAt(n)&&M("not-basic"),d.push(e.charCodeAt(n));for(a=0<r?r+1:0;a<h;){for(i=p,o=1,s=y;h<=a&&M("invalid-input"),f=e.charCodeAt(a++),(y<=(c=f-48<10?f-22:f-65<26?f-65:f-97<26?f-97:y)||c>k((v-p)/o))&&M("overflow"),p+=c*o,!(c<(u=s<=g?_:g+b<=s?b:s-g));s+=y)o>k(v/(l=y-u))&&M("overflow"),o*=l;g=D(p-i,t=d.length+1,0==i),k(p/t)>v-m&&M("overflow"),m+=k(p/t),p%=t,d.splice(p++,0,m)}return T(d)}function g(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g=[];for(d=(e=S(e)).length,t=w,i=A,o=r=0;o<d;++o)(f=e[o])<128&&g.push(E(f));for(n=a=g.length,a&&g.push(x);n<d;){for(s=v,o=0;o<d;++o)t<=(f=e[o])&&f<s&&(s=f);for(s-t>k((v-r)/(h=n+1))&&M("overflow"),r+=(s-t)*h,t=s,o=0;o<d;++o)if((f=e[o])<t&&++r>v&&M("overflow"),f==t){for(c=r,u=y;!(c<(l=u<=i?_:i+b<=u?b:u-i));u+=y)m=c-l,p=y-l,g.push(E(C(l+m%p,0))),c=k(m/p);g.push(E(C(c,0))),i=D(r,h,n==a),r=0,++n}++r,++t}return g.join("")}if(a={version:"1.3.2",ucs2:{decode:S,encode:T},decode:m,encode:g,toASCII:function(e){return p(e,function(e){return u.test(e)?"xn--"+g(e):e})},toUnicode:function(e){return p(e,function(e){return c.test(e)?m(e.slice(4).toLowerCase()):e})}},t&&r)if(O.exports==t)r.exports=a;else for(i in a)a.hasOwnProperty(i)&&(t[i]=a[i]);else e.punycode=a}(this)}),en={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}};var tn=function(e,t,r,n){t=t||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(t);var o=1e3;n&&"number"==typeof n.maxKeys&&(o=n.maxKeys);var s,c,u=e.length;0<o&&o<u&&(u=o);for(var l=0;l<u;++l){var f,d,h,p,m=e[l].replace(i,"%20"),g=m.indexOf(r);d=0<=g?(f=m.substr(0,g),m.substr(g+1)):(f=m,""),h=decodeURIComponent(f),p=decodeURIComponent(d),s=a,c=h,Object.prototype.hasOwnProperty.call(s,c)?Array.isArray(a[h])?a[h].push(p):a[h]=[a[h],p]:a[h]=p}return a},nn=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},an=function(r,n,a,e){return n=n||"&",a=a||"=",null===r&&(r=void 0),"object"==typeof r?Object.keys(r).map(function(e){var t=encodeURIComponent(nn(e))+a;return Array.isArray(r[e])?r[e].map(function(e){return t+encodeURIComponent(nn(e))}).join(n):t+encodeURIComponent(nn(r[e]))}).join(n):e?encodeURIComponent(nn(e))+a+encodeURIComponent(nn(r)):""},on=e(function(e,t){t.decode=t.parse=tn,t.encode=t.stringify=an}),sn=(on.decode,on.parse,on.encode,on.stringify,En),cn=function(e,t){return En(e,!1,!0).resolve(t)},un=function(e,t){return e?En(e,!1,!0).resolveObject(t):t},ln=function(e){en.isString(e)&&(e=En(e));return e instanceof dn?e.format():dn.prototype.format.call(e)},fn=dn;function dn(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var hn=/^([a-z0-9.+-]+:)/i,pn=/:[0-9]*$/,mn=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,gn=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),vn=["'"].concat(gn),yn=["%","/","?",";","#"].concat(vn),_n=["/","?","#"],bn=/^[+a-z0-9A-Z_-]{0,63}$/,An=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,wn={javascript:!0,"javascript:":!0},xn={javascript:!0,"javascript:":!0},kn={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function En(e,t,r){if(e&&en.isObject(e)&&e instanceof dn)return e;var n=new dn;return n.parse(e,t,r),n}dn.prototype.parse=function(e,t,r){if(!en.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),a=-1!==n&&n<e.indexOf("#")?"?":"#",i=e.split(a);i[0]=i[0].replace(/\\/g,"/");var o=e=i.join(a);if(o=o.trim(),!r&&1===e.split("#").length){var s=mn.exec(o);if(s)return this.path=o,this.href=o,this.pathname=s[1],s[2]?(this.search=s[2],this.query=t?on.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var c=hn.exec(o);if(c){var u=(c=c[0]).toLowerCase();this.protocol=u,o=o.substr(c.length)}if(r||c||o.match(/^\/\/[^@\/]+@[^@\/]+/)){var l="//"===o.substr(0,2);!l||c&&xn[c]||(o=o.substr(2),this.slashes=!0)}if(!xn[c]&&(l||c&&!kn[c])){for(var f,d,h=-1,p=0;p<_n.length;p++){-1!==(m=o.indexOf(_n[p]))&&(-1===h||m<h)&&(h=m)}-1!==(d=-1===h?o.lastIndexOf("@"):o.lastIndexOf("@",h))&&(f=o.slice(0,d),o=o.slice(d+1),this.auth=decodeURIComponent(f)),h=-1;for(p=0;p<yn.length;p++){var m;-1!==(m=o.indexOf(yn[p]))&&(-1===h||m<h)&&(h=m)}-1===h&&(h=o.length),this.host=o.slice(0,h),o=o.slice(h),this.parseHost(),this.hostname=this.hostname||"";var g="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!g)for(var v=this.hostname.split(/\./),y=(p=0,v.length);p<y;p++){var _=v[p];if(_&&!_.match(bn)){for(var b="",A=0,w=_.length;A<w;A++)127<_.charCodeAt(A)?b+="x":b+=_[A];if(!b.match(bn)){var x=v.slice(0,p),k=v.slice(p+1),E=_.match(An);E&&(x.push(E[1]),k.unshift(E[2])),k.length&&(o="/"+k.join(".")+o),this.hostname=x.join(".");break}}}255<this.hostname.length?this.hostname="":this.hostname=this.hostname.toLowerCase(),g||(this.hostname=Qr.toASCII(this.hostname));var M=this.port?":"+this.port:"",S=this.hostname||"";this.host=S+M,this.href+=this.host,g&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!wn[u])for(p=0,y=vn.length;p<y;p++){var T=vn[p];if(-1!==o.indexOf(T)){var C=encodeURIComponent(T);C===T&&(C=escape(T)),o=o.split(T).join(C)}}var D=o.indexOf("#");-1!==D&&(this.hash=o.substr(D),o=o.slice(0,D));var O=o.indexOf("?");if(-1!==O?(this.search=o.substr(O),this.query=o.substr(O+1),t&&(this.query=on.parse(this.query)),o=o.slice(0,O)):t&&(this.search="",this.query={}),o&&(this.pathname=o),kn[u]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){M=this.pathname||"";var N=this.search||"";this.path=M+N}return this.href=this.format(),this},dn.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&en.isObject(this.query)&&Object.keys(this.query).length&&(i=on.stringify(this.query));var o=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||kn[t])&&!1!==a?(a="//"+(a||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):a||(a=""),n&&"#"!==n.charAt(0)&&(n="#"+n),o&&"?"!==o.charAt(0)&&(o="?"+o),t+a+(r=r.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(o=o.replace("#","%23"))+n},dn.prototype.resolve=function(e){return this.resolveObject(En(e,!1,!0)).format()},dn.prototype.resolveObject=function(e){if(en.isString(e)){var t=new dn;t.parse(e,!1,!0),e=t}for(var r=new dn,n=Object.keys(this),a=0;a<n.length;a++){var i=n[a];r[i]=this[i]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var o=Object.keys(e),s=0;s<o.length;s++){var c=o[s];"protocol"!==c&&(r[c]=e[c])}return kn[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!kn[e.protocol]){for(var u=Object.keys(e),l=0;l<u.length;l++){var f=u[l];r[f]=e[f]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||xn[e.protocol])r.pathname=e.pathname;else{for(var d=(e.pathname||"").split("/");d.length&&!(e.host=d.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),r.pathname=d.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var h=r.pathname||"",p=r.search||"";r.path=h+p}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var m=r.pathname&&"/"===r.pathname.charAt(0),g=e.host||e.pathname&&"/"===e.pathname.charAt(0),v=g||m||r.host&&e.pathname,y=v,_=r.pathname&&r.pathname.split("/")||[],b=(d=e.pathname&&e.pathname.split("/")||[],r.protocol&&!kn[r.protocol]);if(b&&(r.hostname="",r.port=null,r.host&&(""===_[0]?_[0]=r.host:_.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),v=v&&(""===d[0]||""===_[0])),g)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,_=d;else if(d.length)_||(_=[]),_.pop(),_=_.concat(d),r.search=e.search,r.query=e.query;else if(!en.isNullOrUndefined(e.search)){if(b)r.hostname=r.host=_.shift(),(E=!!(r.host&&0<r.host.indexOf("@"))&&r.host.split("@"))&&(r.auth=E.shift(),r.host=r.hostname=E.shift());return r.search=e.search,r.query=e.query,en.isNull(r.pathname)&&en.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!_.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var A=_.slice(-1)[0],w=(r.host||e.host||1<_.length)&&("."===A||".."===A)||""===A,x=0,k=_.length;0<=k;k--)"."===(A=_[k])?_.splice(k,1):".."===A?(_.splice(k,1),x++):x&&(_.splice(k,1),x--);if(!v&&!y)for(;x--;x)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),w&&"/"!==_.join("/").substr(-1)&&_.push("");var E,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);b&&(r.hostname=r.host=M?"":_.length?_.shift():"",(E=!!(r.host&&0<r.host.indexOf("@"))&&r.host.split("@"))&&(r.auth=E.shift(),r.host=r.hostname=E.shift()));return(v=v||r.host&&_.length)&&!M&&_.unshift(""),_.length?r.pathname=_.join("/"):(r.pathname=null,r.path=null),en.isNull(r.pathname)&&en.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},dn.prototype.parseHost=function(){var e=this.host,t=pn.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var Mn,Sn={parse:sn,resolve:cn,resolveObject:un,format:ln,Url:fn},Tn=e(function(e){var t,r;t="undefined"!=typeof window?window:this,r=function(x,e){var t=[],n=Object.getPrototypeOf,s=t.slice,m=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},c=t.push,a=t.indexOf,r={},i=r.toString,g=r.hasOwnProperty,o=g.toString,u=o.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},_=function(e){return null!=e&&e===e.window},k=x.document,l={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,r){var n,a,i=(r=r||k).createElement("script");if(i.text=e,t)for(n in l)(a=t[n]||t.getAttribute&&t.getAttribute(n))&&i.setAttribute(n,a);r.head.appendChild(i).parentNode.removeChild(i)}function A(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?r[i.call(e)]||"object":typeof e}var E=function(e,t){return new E.fn.init(e,t)};function f(e){var t=!!e&&"length"in e&&e.length,r=A(e);return!y(e)&&!_(e)&&("array"===r||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:"3.6.0",constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(r){return this.pushStack(E.map(this,function(e,t){return r.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,r=+e+(e<0?t:0);return this.pushStack(0<=r&&r<t?[this[r]]:[])},end:function(){return this.prevObject||this.constructor()},push:c,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,r,n,a,i,o=arguments[0]||{},s=1,c=arguments.length,u=!1;for("boolean"==typeof o&&(u=o,o=arguments[s]||{},s++),"object"==typeof o||y(o)||(o={}),s===c&&(o=this,s--);s<c;s++)if(null!=(e=arguments[s]))for(t in e)n=e[t],"__proto__"!==t&&o!==n&&(u&&n&&(E.isPlainObject(n)||(a=Array.isArray(n)))?(r=o[t],i=a&&!Array.isArray(r)?[]:a||E.isPlainObject(r)?r:{},a=!1,o[t]=E.extend(u,i,n)):void 0!==n&&(o[t]=n));return o},E.extend({expando:"jQuery"+("3.6.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,r;return!(!e||"[object Object]"!==i.call(e)||(t=n(e))&&("function"!=typeof(r=g.call(t,"constructor")&&t.constructor)||o.call(r)!==u))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,r){b(e,{nonce:t&&t.nonce},r)},each:function(e,t){var r,n=0;if(f(e))for(r=e.length;n<r&&!1!==t.call(e[n],n,e[n]);n++);else for(n in e)if(!1===t.call(e[n],n,e[n]))break;return e},makeArray:function(e,t){var r=t||[];return null!=e&&(f(Object(e))?E.merge(r,"string"==typeof e?[e]:e):c.call(r,e)),r},inArray:function(e,t,r){return null==t?-1:a.call(t,e,r)},merge:function(e,t){for(var r=+t.length,n=0,a=e.length;n<r;n++)e[a++]=t[n];return e.length=a,e},grep:function(e,t,r){for(var n=[],a=0,i=e.length,o=!r;a<i;a++)!t(e[a],a)!==o&&n.push(e[a]);return n},map:function(e,t,r){var n,a,i=0,o=[];if(f(e))for(n=e.length;i<n;i++)null!=(a=t(e[i],i,r))&&o.push(a);else for(i in e)null!=(a=t(e[i],i,r))&&o.push(a);return m(o)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){r["[object "+t+"]"]=t.toLowerCase()});var d=function(r){var e,h,b,i,a,p,f,m,A,c,u,w,x,o,k,g,s,l,v,E="sizzle"+1*new Date,d=r.document,M=0,n=0,y=ce(),_=ce(),S=ce(),T=ce(),C=function(e,t){return e===t&&(u=!0),0},D={}.hasOwnProperty,t=[],O=t.pop,N=t.push,P=t.push,j=t.slice,R=function(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},z="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",Y="(?:\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+L+"*("+Y+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+Y+"))|)"+L+"*\\]",I=":("+Y+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(L+"+","g"),q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),H=new RegExp("^"+L+"*,"+L+"*"),F=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),G=new RegExp(L+"|>"),U=new RegExp(I),$=new RegExp("^"+Y+"$"),V={ID:new RegExp("^#("+Y+")"),CLASS:new RegExp("^\\.("+Y+")"),TAG:new RegExp("^("+Y+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+I),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+z+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},K=/HTML$/i,J=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\([^\\r\\n\\f])","g"),re=function(e,t){var r="0x"+e.slice(1)-65536;return t||(r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320))},ne=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){w()},oe=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{P.apply(t=j.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){P={apply:t.length?function(e,t){N.apply(e,j.call(t))}:function(e,t){for(var r=e.length,n=0;e[r++]=t[n++];);e.length=r-1}}}function se(e,t,r,n){var a,i,o,s,c,u,l,f=t&&t.ownerDocument,d=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==d&&9!==d&&11!==d)return r;if(!n&&(w(t),t=t||x,k)){if(11!==d&&(c=Q.exec(e)))if(a=c[1]){if(9===d){if(!(o=t.getElementById(a)))return r;if(o.id===a)return r.push(o),r}else if(f&&(o=f.getElementById(a))&&v(t,o)&&o.id===a)return r.push(o),r}else{if(c[2])return P.apply(r,t.getElementsByTagName(e)),r;if((a=c[3])&&h.getElementsByClassName&&t.getElementsByClassName)return P.apply(r,t.getElementsByClassName(a)),r}if(h.qsa&&!T[e+" "]&&(!g||!g.test(e))&&(1!==d||"object"!==t.nodeName.toLowerCase())){if(l=e,f=t,1===d&&(G.test(e)||F.test(e))){for((f=ee.test(e)&&ve(t.parentNode)||t)===t&&h.scope||((s=t.getAttribute("id"))?s=s.replace(ne,ae):t.setAttribute("id",s=E)),i=(u=p(e)).length;i--;)u[i]=(s?"#"+s:":scope")+" "+_e(u[i]);l=u.join(",")}try{return P.apply(r,f.querySelectorAll(l)),r}catch(t){T(e,!0)}finally{s===E&&t.removeAttribute("id")}}}return m(e.replace(q,"$1"),t,r,n)}function ce(){var n=[];return function e(t,r){return n.push(t+" ")>b.cacheLength&&delete e[n.shift()],e[t+" "]=r}}function ue(e){return e[E]=!0,e}function le(e){var t=x.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var r=e.split("|"),n=r.length;n--;)b.attrHandle[r[n]]=t}function de(e,t){var r=t&&e,n=r&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(n)return n;if(r)for(;r=r.nextSibling;)if(r===t)return-1;return e?1:-1}function he(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function pe(r){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===r}}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&oe(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ge(o){return ue(function(i){return i=+i,ue(function(e,t){for(var r,n=o([],e.length,i),a=n.length;a--;)e[r=n[a]]&&(e[r]=!(t[r]=e[r]))})})}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in h=se.support={},a=se.isXML=function(e){var t=e&&e.namespaceURI,r=e&&(e.ownerDocument||e).documentElement;return!K.test(t||r&&r.nodeName||"HTML")},w=se.setDocument=function(e){var t,r,n=e?e.ownerDocument||e:d;return n!=x&&9===n.nodeType&&n.documentElement&&(o=(x=n).documentElement,k=!a(x),d!=x&&(r=x.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",ie,!1):r.attachEvent&&r.attachEvent("onunload",ie)),h.scope=le(function(e){return o.appendChild(e).appendChild(x.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),h.attributes=le(function(e){return e.className="i",!e.getAttribute("className")}),h.getElementsByTagName=le(function(e){return e.appendChild(x.createComment("")),!e.getElementsByTagName("*").length}),h.getElementsByClassName=X.test(x.getElementsByClassName),h.getById=le(function(e){return o.appendChild(e).id=E,!x.getElementsByName||!x.getElementsByName(E).length}),h.getById?(b.filter.ID=function(e){var t=e.replace(te,re);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&k){var r=t.getElementById(e);return r?[r]:[]}}):(b.filter.ID=function(e){var r=e.replace(te,re);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===r}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&k){var r,n,a,i=t.getElementById(e);if(i){if((r=i.getAttributeNode("id"))&&r.value===e)return[i];for(a=t.getElementsByName(e),n=0;i=a[n++];)if((r=i.getAttributeNode("id"))&&r.value===e)return[i]}return[]}}),b.find.TAG=h.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):h.qsa?t.querySelectorAll(e):void 0}:function(e,t){var r,n=[],a=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;r=i[a++];)1===r.nodeType&&n.push(r);return n},b.find.CLASS=h.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&k)return t.getElementsByClassName(e)},s=[],g=[],(h.qsa=X.test(x.querySelectorAll))&&(le(function(e){var t;o.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+L+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+L+"*(?:value|"+z+")"),e.querySelectorAll("[id~="+E+"-]").length||g.push("~="),(t=x.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+L+"*name"+L+"*="+L+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")}),le(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=x.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+L+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),o.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(h.matchesSelector=X.test(l=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&le(function(e){h.disconnectedMatch=l.call(e,"*"),l.call(e,"[s!='']:x"),s.push("!=",I)}),g=g.length&&new RegExp(g.join("|")),s=s.length&&new RegExp(s.join("|")),t=X.test(o.compareDocumentPosition),v=t||X.test(o.contains)?function(e,t){var r=9===e.nodeType?e.documentElement:e,n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(r.contains?r.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},C=t?function(e,t){if(e===t)return u=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!h.sortDetached&&t.compareDocumentPosition(e)===r?e==x||e.ownerDocument==d&&v(d,e)?-1:t==x||t.ownerDocument==d&&v(d,t)?1:c?R(c,e)-R(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return u=!0,0;var r,n=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e==x?-1:t==x?1:a?-1:i?1:c?R(c,e)-R(c,t):0;if(a===i)return de(e,t);for(r=e;r=r.parentNode;)o.unshift(r);for(r=t;r=r.parentNode;)s.unshift(r);for(;o[n]===s[n];)n++;return n?de(o[n],s[n]):o[n]==d?-1:s[n]==d?1:0}),x},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(w(e),h.matchesSelector&&k&&!T[t+" "]&&(!s||!s.test(t))&&(!g||!g.test(t)))try{var r=l.call(e,t);if(r||h.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){T(t,!0)}return 0<se(t,x,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=x&&w(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=x&&w(e);var r=b.attrHandle[t.toLowerCase()],n=r&&D.call(b.attrHandle,t.toLowerCase())?r(e,t,!k):void 0;return void 0!==n?n:h.attributes||!k?e.getAttribute(t):(n=e.getAttributeNode(t))&&n.specified?n.value:null},se.escape=function(e){return(e+"").replace(ne,ae)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],n=0,a=0;if(u=!h.detectDuplicates,c=!h.sortStable&&e.slice(0),e.sort(C),u){for(;t=e[a++];)t===e[a]&&(n=r.push(a));for(;n--;)e.splice(r[n],1)}return c=null,e},i=se.getText=function(e){var t,r="",n=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)r+=i(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[n++];)r+=i(t);return r},(b=se.selectors={cacheLength:50,createPseudo:ue,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,re),e[3]=(e[3]||e[4]||e[5]||"").replace(te,re),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,r=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":r&&U.test(r)&&(t=p(r,!0))&&(t=r.indexOf(")",r.length-t)-r.length)&&(e[0]=e[0].slice(0,t),e[2]=r.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,re).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=y[e+" "];return t||(t=new RegExp("(^|"+L+")"+e+"("+L+"|$)"))&&y(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(r,n,a){return function(e){var t=se.attr(e,r);return null==t?"!="===n:!n||(t+="","="===n?t===a:"!="===n?t!==a:"^="===n?a&&0===t.indexOf(a):"*="===n?a&&-1<t.indexOf(a):"$="===n?a&&t.slice(-a.length)===a:"~="===n?-1<(" "+t.replace(B," ")+" ").indexOf(a):"|="===n&&(t===a||t.slice(0,a.length+1)===a+"-"))}},CHILD:function(p,e,t,m,g){var v="nth"!==p.slice(0,3),y="last"!==p.slice(-4),_="of-type"===e;return 1===m&&0===g?function(e){return!!e.parentNode}:function(e,t,r){var n,a,i,o,s,c,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,f=_&&e.nodeName.toLowerCase(),d=!r&&!_,h=!1;if(l){if(v){for(;u;){for(o=e;o=o[u];)if(_?o.nodeName.toLowerCase()===f:1===o.nodeType)return!1;c=u="only"===p&&!c&&"nextSibling"}return!0}if(c=[y?l.firstChild:l.lastChild],y&&d){for(h=(s=(n=(a=(i=(o=l)[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]||[])[0]===M&&n[1])&&n[2],o=s&&l.childNodes[s];o=++s&&o&&o[u]||(h=s=0)||c.pop();)if(1===o.nodeType&&++h&&o===e){a[p]=[M,s,h];break}}else if(d&&(h=s=(n=(a=(i=(o=e)[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]||[])[0]===M&&n[1]),!1===h)for(;(o=++s&&o&&o[u]||(h=s=0)||c.pop())&&((_?o.nodeName.toLowerCase()!==f:1!==o.nodeType)||!++h||(d&&((a=(i=o[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]=[M,h]),o!==e)););return(h-=g)===m||h%m==0&&0<=h/m}}},PSEUDO:function(e,i){var t,o=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return o[E]?o(i):1<o.length?(t=[e,e,"",i],b.setFilters.hasOwnProperty(e.toLowerCase())?ue(function(e,t){for(var r,n=o(e,i),a=n.length;a--;)e[r=R(e,n[a])]=!(t[r]=n[a])}):function(e){return o(e,0,t)}):o}},pseudos:{not:ue(function(e){var n=[],a=[],s=f(e.replace(q,"$1"));return s[E]?ue(function(e,t,r,n){for(var a,i=s(e,null,n,[]),o=e.length;o--;)(a=i[o])&&(e[o]=!(t[o]=a))}):function(e,t,r){return n[0]=e,s(n,null,r,a),n[0]=null,!a.pop()}}),has:ue(function(t){return function(e){return 0<se(t,e).length}}),contains:ue(function(t){return t=t.replace(te,re),function(e){return-1<(e.textContent||i(e)).indexOf(t)}}),lang:ue(function(r){return $.test(r||"")||se.error("unsupported lang: "+r),r=r.replace(te,re).toLowerCase(),function(e){var t;do{if(t=k?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===r||0===t.indexOf(r+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=r.location&&r.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===o},focus:function(e){return e===x.activeElement&&(!x.hasFocus||x.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge(function(){return[0]}),last:ge(function(e,t){return[t-1]}),eq:ge(function(e,t,r){return[r<0?r+t:r]}),even:ge(function(e,t){for(var r=0;r<t;r+=2)e.push(r);return e}),odd:ge(function(e,t){for(var r=1;r<t;r+=2)e.push(r);return e}),lt:ge(function(e,t,r){for(var n=r<0?r+t:t<r?t:r;0<=--n;)e.push(n);return e}),gt:ge(function(e,t,r){for(var n=r<0?r+t:r;++n<t;)e.push(n);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=he(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=pe(e);function ye(){}function _e(e){for(var t=0,r=e.length,n="";t<r;t++)n+=e[t].value;return n}function be(s,e,t){var c=e.dir,u=e.next,l=u||c,f=t&&"parentNode"===l,d=n++;return e.first?function(e,t,r){for(;e=e[c];)if(1===e.nodeType||f)return s(e,t,r);return!1}:function(e,t,r){var n,a,i,o=[M,d];if(r){for(;e=e[c];)if((1===e.nodeType||f)&&s(e,t,r))return!0}else for(;e=e[c];)if(1===e.nodeType||f)if(a=(i=e[E]||(e[E]={}))[e.uniqueID]||(i[e.uniqueID]={}),u&&u===e.nodeName.toLowerCase())e=e[c]||e;else{if((n=a[l])&&n[0]===M&&n[1]===d)return o[2]=n[2];if((a[l]=o)[2]=s(e,t,r))return!0}return!1}}function Ae(a){return 1<a.length?function(e,t,r){for(var n=a.length;n--;)if(!a[n](e,t,r))return!1;return!0}:a[0]}function we(e,t,r,n,a){for(var i,o=[],s=0,c=e.length,u=null!=t;s<c;s++)(i=e[s])&&(r&&!r(i,n,a)||(o.push(i),u&&t.push(s)));return o}function xe(h,p,m,g,v,e){return g&&!g[E]&&(g=xe(g)),v&&!v[E]&&(v=xe(v,e)),ue(function(e,t,r,n){var a,i,o,s=[],c=[],u=t.length,l=e||function(e,t,r){for(var n=0,a=t.length;n<a;n++)se(e,t[n],r);return r}(p||"*",r.nodeType?[r]:r,[]),f=!h||!e&&p?l:we(l,s,h,r,n),d=m?v||(e?h:u||g)?[]:t:f;if(m&&m(f,d,r,n),g)for(a=we(d,c),g(a,[],r,n),i=a.length;i--;)(o=a[i])&&(d[c[i]]=!(f[c[i]]=o));if(e){if(v||h){if(v){for(a=[],i=d.length;i--;)(o=d[i])&&a.push(f[i]=o);v(null,d=[],a,n)}for(i=d.length;i--;)(o=d[i])&&-1<(a=v?R(e,o):s[i])&&(e[a]=!(t[a]=o))}}else d=we(d===t?d.splice(u,d.length):d),v?v(null,t,d,n):P.apply(t,d)})}function ke(e){for(var a,t,r,n=e.length,i=b.relative[e[0].type],o=i||b.relative[" "],s=i?1:0,c=be(function(e){return e===a},o,!0),u=be(function(e){return-1<R(a,e)},o,!0),l=[function(e,t,r){var n=!i&&(r||t!==A)||((a=t).nodeType?c(e,t,r):u(e,t,r));return a=null,n}];s<n;s++)if(t=b.relative[e[s].type])l=[be(Ae(l),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(r=++s;r<n&&!b.relative[e[r].type];r++);return xe(1<s&&Ae(l),1<s&&_e(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(q,"$1"),t,s<r&&ke(e.slice(s,r)),r<n&&ke(e=e.slice(r)),r<n&&_e(e))}l.push(t)}return Ae(l)}return ye.prototype=b.filters=b.pseudos,b.setFilters=new ye,p=se.tokenize=function(e,t){var r,n,a,i,o,s,c,u=_[e+" "];if(u)return t?0:u.slice(0);for(o=e,s=[],c=b.preFilter;o;){for(i in r&&!(n=H.exec(o))||(n&&(o=o.slice(n[0].length)||o),s.push(a=[])),r=!1,(n=F.exec(o))&&(r=n.shift(),a.push({value:r,type:n[0].replace(q," ")}),o=o.slice(r.length)),b.filter)!(n=V[i].exec(o))||c[i]&&!(n=c[i](n))||(r=n.shift(),a.push({value:r,type:i,matches:n}),o=o.slice(r.length));if(!r)break}return t?o.length:o?se.error(e):_(e,s).slice(0)},f=se.compile=function(e,t){var r,g,v,y,_,n,a=[],i=[],o=S[e+" "];if(!o){for(t||(t=p(e)),r=t.length;r--;)(o=ke(t[r]))[E]?a.push(o):i.push(o);(o=S(e,(g=i,y=0<(v=a).length,_=0<g.length,n=function(e,t,r,n,a){var i,o,s,c=0,u="0",l=e&&[],f=[],d=A,h=e||_&&b.find.TAG("*",a),p=M+=null==d?1:Math.random()||.1,m=h.length;for(a&&(A=t==x||t||a);u!==m&&null!=(i=h[u]);u++){if(_&&i){for(o=0,t||i.ownerDocument==x||(w(i),r=!k);s=g[o++];)if(s(i,t||x,r)){n.push(i);break}a&&(M=p)}y&&((i=!s&&i)&&c--,e&&l.push(i))}if(c+=u,y&&u!==c){for(o=0;s=v[o++];)s(l,f,t,r);if(e){if(0<c)for(;u--;)l[u]||f[u]||(f[u]=O.call(n));f=we(f)}P.apply(n,f),a&&!e&&0<f.length&&1<c+v.length&&se.uniqueSort(n)}return a&&(M=p,A=d),l},y?ue(n):n))).selector=e}return o},m=se.select=function(e,t,r,n){var a,i,o,s,c,u="function"==typeof e&&e,l=!n&&p(e=u.selector||e);if(r=r||[],1===l.length){if(2<(i=l[0]=l[0].slice(0)).length&&"ID"===(o=i[0]).type&&9===t.nodeType&&k&&b.relative[i[1].type]){if(!(t=(b.find.ID(o.matches[0].replace(te,re),t)||[])[0]))return r;u&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(a=V.needsContext.test(e)?0:i.length;a--&&(o=i[a],!b.relative[s=o.type]);)if((c=b.find[s])&&(n=c(o.matches[0].replace(te,re),ee.test(i[0].type)&&ve(t.parentNode)||t))){if(i.splice(a,1),!(e=n.length&&_e(i)))return P.apply(r,n),r;break}}return(u||f(e,l))(n,t,!k,r,!t||ee.test(e)&&ve(t.parentNode)||t),r},h.sortStable=E.split("").sort(C).join("")===E,h.detectDuplicates=!!u,w(),h.sortDetached=le(function(e){return 1&e.compareDocumentPosition(x.createElement("fieldset"))}),le(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,r){if(!r)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),h.attributes&&le(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,r){if(!r&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),le(function(e){return null==e.getAttribute("disabled")})||fe(z,function(e,t,r){var n;if(!r)return!0===e[t]?t.toLowerCase():(n=e.getAttributeNode(t))&&n.specified?n.value:null}),se}(x);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,r){for(var n=[],a=void 0!==r;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&E(e).is(r))break;n.push(e)}return n},p=function(e,t){for(var r=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&r.push(e);return r},w=E.expr.match.needsContext;function M(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var S=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,r,n){return y(r)?E.grep(e,function(e,t){return!!r.call(e,t,e)!==n}):r.nodeType?E.grep(e,function(e){return e===r!==n}):"string"!=typeof r?E.grep(e,function(e){return-1<a.call(r,e)!==n}):E.filter(r,e,n)}E.filter=function(e,t,r){var n=t[0];return r&&(e=":not("+e+")"),1===t.length&&1===n.nodeType?E.find.matchesSelector(n,e)?[n]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,r,n=this.length,a=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<n;t++)if(E.contains(a[t],this))return!0}));for(r=this.pushStack([]),t=0;t<n;t++)E.find(e,a[t],r);return 1<n?E.uniqueSort(r):r},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&w.test(e)?E(e):e||[],!1).length}});var C,D=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,r){var n,a;if(!e)return this;if(r=r||C,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==r.ready?r.ready(e):e(E):E.makeArray(e,this);if(!(n="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:D.exec(e))||!n[1]&&t)return!t||t.jquery?(t||r).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:k,!0)),S.test(n[1])&&E.isPlainObject(t))for(n in t)y(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(a=k.getElementById(n[2]))&&(this[0]=a,this.length=1),this}).prototype=E.fn,C=E(k);var O=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}E.fn.extend({has:function(e){var t=E(e,this),r=t.length;return this.filter(function(){for(var e=0;e<r;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var r,n=0,a=this.length,i=[],o="string"!=typeof e&&E(e);if(!w.test(e))for(;n<a;n++)for(r=this[n];r&&r!==t;r=r.parentNode)if(r.nodeType<11&&(o?-1<o.index(r):1===r.nodeType&&E.find.matchesSelector(r,e))){i.push(r);break}return this.pushStack(1<i.length?E.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?a.call(E(e),this[0]):a.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,r){return h(e,"parentNode",r)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,r){return h(e,"nextSibling",r)},prevUntil:function(e,t,r){return h(e,"previousSibling",r)},siblings:function(e){return p((e.parentNode||{}).firstChild,e)},children:function(e){return p(e.firstChild)},contents:function(e){return null!=e.contentDocument&&n(e.contentDocument)?e.contentDocument:(M(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(n,a){E.fn[n]=function(e,t){var r=E.map(this,a,e);return"Until"!==n.slice(-5)&&(t=e),t&&"string"==typeof t&&(r=E.filter(t,r)),1<this.length&&(N[n]||E.uniqueSort(r),O.test(n)&&r.reverse()),this.pushStack(r)}});var j=/[^\x20\t\r\n\f]+/g;function R(e){return e}function z(e){throw e}function L(e,t,r,n){var a;try{e&&y(a=e.promise)?a.call(e).done(t).fail(r):e&&y(a=e.then)?a.call(e,t,r):t.apply(void 0,[e].slice(n))}catch(e){r.apply(void 0,[e])}}E.Callbacks=function(n){var e,r;n="string"==typeof n?(e=n,r={},E.each(e.match(j)||[],function(e,t){r[t]=!0}),r):E.extend({},n);var a,t,i,o,s=[],c=[],u=-1,l=function(){for(o=o||n.once,i=a=!0;c.length;u=-1)for(t=c.shift();++u<s.length;)!1===s[u].apply(t[0],t[1])&&n.stopOnFalse&&(u=s.length,t=!1);n.memory||(t=!1),a=!1,o&&(s=t?[]:"")},f={add:function(){return s&&(t&&!a&&(u=s.length-1,c.push(t)),function r(e){E.each(e,function(e,t){y(t)?n.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==A(t)&&r(t)})}(arguments),t&&!a&&l()),this},remove:function(){return E.each(arguments,function(e,t){for(var r;-1<(r=E.inArray(t,s,r));)s.splice(r,1),r<=u&&u--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return o=c=[],s=t="",this},disabled:function(){return!s},lock:function(){return o=c=[],t||a||(s=t=""),this},locked:function(){return!!o},fireWith:function(e,t){return o||(t=[e,(t=t||[]).slice?t.slice():t],c.push(t),a||l()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},E.extend({Deferred:function(e){var i=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],a="pending",o={state:function(){return a},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var a=arguments;return E.Deferred(function(n){E.each(i,function(e,t){var r=y(a[t[4]])&&a[t[4]];s[t[1]](function(){var e=r&&r.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[t[0]+"With"](this,r?[e]:arguments)})}),a=null}).promise()},then:function(t,r,n){var c=0;function u(a,i,o,s){return function(){var r=this,n=arguments,e=function(){var e,t;if(!(a<c)){if((e=o.apply(r,n))===i.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,y(t)?s?t.call(e,u(c,i,R,s),u(c,i,z,s)):(c++,t.call(e,u(c,i,R,s),u(c,i,z,s),u(c,i,R,i.notifyWith))):(o!==R&&(r=void 0,n=[e]),(s||i.resolveWith)(r,n))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),c<=a+1&&(o!==z&&(r=void 0,n=[e]),i.rejectWith(r,n))}};a?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),x.setTimeout(t))}}return E.Deferred(function(e){i[0][3].add(u(0,e,y(n)?n:R,e.notifyWith)),i[1][3].add(u(0,e,y(t)?t:R)),i[2][3].add(u(0,e,y(r)?r:z))}).promise()},promise:function(e){return null!=e?E.extend(e,o):o}},s={};return E.each(i,function(e,t){var r=t[2],n=t[5];o[t[1]]=r.add,n&&r.add(function(){a=n},i[3-e][2].disable,i[3-e][3].disable,i[0][2].lock,i[0][3].lock),r.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=r.fireWith}),o.promise(s),e&&e.call(s,s),s},when:function(e){var r=arguments.length,t=r,n=Array(t),a=s.call(arguments),i=E.Deferred(),o=function(t){return function(e){n[t]=this,a[t]=1<arguments.length?s.call(arguments):e,--r||i.resolveWith(n,a)}};if(r<=1&&(L(e,i.done(o(t)).resolve,i.reject,!r),"pending"===i.state()||y(a[t]&&a[t].then)))return i.then();for(;t--;)L(a[t],o(t),i.reject);return i.promise()}});var Y=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){x.console&&x.console.warn&&e&&Y.test(e.name)&&x.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){x.setTimeout(function(){throw e})};var W=E.Deferred();function I(){k.removeEventListener("DOMContentLoaded",I),x.removeEventListener("load",I),E.ready()}E.fn.ready=function(e){return W.then(e).catch(function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||W.resolveWith(k,[E])}}),E.ready.then=W.then,"complete"===k.readyState||"loading"!==k.readyState&&!k.documentElement.doScroll?x.setTimeout(E.ready):(k.addEventListener("DOMContentLoaded",I),x.addEventListener("load",I));var B=function(e,t,r,n,a,i,o){var s=0,c=e.length,u=null==r;if("object"===A(r))for(s in a=!0,r)B(e,t,s,r[s],!0,i,o);else if(void 0!==n&&(a=!0,y(n)||(o=!0),u&&(t=o?(t.call(e,n),null):(u=t,function(e,t,r){return u.call(E(e),r)})),t))for(;s<c;s++)t(e[s],r,o?n:n.call(e[s],s,t(e[s],r)));return a?e:u?t.call(e):c?t(e[0],r):i},q=/^-ms-/,H=/-([a-z])/g;function F(e,t){return t.toUpperCase()}function G(e){return e.replace(q,"ms-").replace(H,F)}var U=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function $(){this.expando=E.expando+$.uid++}$.uid=1,$.prototype={cache:function(e){var t=e[this.expando];return t||(t={},U(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,r){var n,a=this.cache(e);if("string"==typeof t)a[G(t)]=r;else for(n in t)a[G(n)]=t[n];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,r){return void 0===t||t&&"string"==typeof t&&void 0===r?this.get(e,t):(this.set(e,t,r),void 0!==r?r:t)},remove:function(e,t){var r,n=e[this.expando];if(void 0!==n){if(void 0!==t){r=(t=Array.isArray(t)?t.map(G):(t=G(t))in n?[t]:t.match(j)||[]).length;for(;r--;)delete n[t[r]]}(void 0===t||E.isEmptyObject(n))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var V=new $,K=new $,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function X(e,t,r){var n,a;if(void 0===r&&1===e.nodeType)if(n="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(r=e.getAttribute(n))){try{r="true"===(a=r)||"false"!==a&&("null"===a?null:a===+a+""?+a:J.test(a)?JSON.parse(a):a)}catch(e){}K.set(e,t,r)}else r=void 0;return r}E.extend({hasData:function(e){return K.hasData(e)||V.hasData(e)},data:function(e,t,r){return K.access(e,t,r)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,r){return V.access(e,t,r)},_removeData:function(e,t){V.remove(e,t)}}),E.fn.extend({data:function(r,e){var t,n,a,i=this[0],o=i&&i.attributes;if(void 0!==r)return"object"==typeof r?this.each(function(){K.set(this,r)}):B(this,function(e){var t;if(i&&void 0===e)return void 0!==(t=K.get(i,r))?t:void 0!==(t=X(i,r))?t:void 0;this.each(function(){K.set(this,r,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(a=K.get(i),1===i.nodeType&&!V.get(i,"hasDataAttrs"))){for(t=o.length;t--;)o[t]&&0===(n=o[t].name).indexOf("data-")&&(n=G(n.slice(5)),X(i,n,a[n]));V.set(i,"hasDataAttrs",!0)}return a},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),E.extend({queue:function(e,t,r){var n;if(e)return t=(t||"fx")+"queue",n=V.get(e,t),r&&(!n||Array.isArray(r)?n=V.access(e,t,E.makeArray(r)):n.push(r)),n||[]},dequeue:function(e,t){t=t||"fx";var r=E.queue(e,t),n=r.length,a=r.shift(),i=E._queueHooks(e,t);"inprogress"===a&&(a=r.shift(),n--),a&&("fx"===t&&r.unshift("inprogress"),delete i.stop,a.call(e,function(){E.dequeue(e,t)},i)),!n&&i&&i.empty.fire()},_queueHooks:function(e,t){var r=t+"queueHooks";return V.get(e,r)||V.access(e,r,{empty:E.Callbacks("once memory").add(function(){V.remove(e,[t+"queue",r])})})}}),E.fn.extend({queue:function(t,r){var e=2;return"string"!=typeof t&&(r=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===r?this:this.each(function(){var e=E.queue(this,t,r);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var r,n=1,a=E.Deferred(),i=this,o=this.length,s=function(){--n||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)(r=V.get(i[o],e+"queueHooks"))&&r.empty&&(n++,r.empty.add(s));return s(),a.promise(t)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ee=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),te=["Top","Right","Bottom","Left"],re=k.documentElement,ne=function(e){return E.contains(e.ownerDocument,e)},ae={composed:!0};re.getRootNode&&(ne=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var ie=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ne(e)&&"none"===E.css(e,"display")};function oe(e,t,r,n){var a,i,o=20,s=n?function(){return n.cur()}:function(){return E.css(e,t,"")},c=s(),u=r&&r[3]||(E.cssNumber[t]?"":"px"),l=e.nodeType&&(E.cssNumber[t]||"px"!==u&&+c)&&ee.exec(E.css(e,t));if(l&&l[3]!==u){for(c/=2,u=u||l[3],l=+c||1;o--;)E.style(e,t,l+u),(1-i)*(1-(i=s()/c||.5))<=0&&(o=0),l/=i;l*=2,E.style(e,t,l+u),r=r||[]}return r&&(l=+l||+c||0,a=r[1]?l+(r[1]+1)*r[2]:+r[2],n&&(n.unit=u,n.start=l,n.end=a)),a}var se={};function ce(e,t){for(var r,n,a,i,o,s,c,u=[],l=0,f=e.length;l<f;l++)(n=e[l]).style&&(r=n.style.display,t?("none"===r&&(u[l]=V.get(n,"display")||null,u[l]||(n.style.display="")),""===n.style.display&&ie(n)&&(u[l]=(c=o=i=void 0,o=(a=n).ownerDocument,s=a.nodeName,(c=se[s])||(i=o.body.appendChild(o.createElement(s)),c=E.css(i,"display"),i.parentNode.removeChild(i),"none"===c&&(c="block"),se[s]=c)))):"none"!==r&&(u[l]="none",V.set(n,"display",r)));for(l=0;l<f;l++)null!=u[l]&&(e[l].style.display=u[l]);return e}E.fn.extend({show:function(){return ce(this,!0)},hide:function(){return ce(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ie(this)?E(this).show():E(this).hide()})}});var ue,le,fe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ue=k.createDocumentFragment().appendChild(k.createElement("div")),(le=k.createElement("input")).setAttribute("type","radio"),le.setAttribute("checked","checked"),le.setAttribute("name","t"),ue.appendChild(le),v.checkClone=ue.cloneNode(!0).cloneNode(!0).lastChild.checked,ue.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ue.cloneNode(!0).lastChild.defaultValue,ue.innerHTML="<option></option>",v.option=!!ue.lastChild;var pe={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function me(e,t){var r;return r=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&M(e,t)?E.merge([e],r):r}function ge(e,t){for(var r=0,n=e.length;r<n;r++)V.set(e[r],"globalEval",!t||V.get(t[r],"globalEval"))}pe.tbody=pe.tfoot=pe.colgroup=pe.caption=pe.thead,pe.th=pe.td,v.option||(pe.optgroup=pe.option=[1,"<select multiple='multiple'>","</select>"]);var ve=/<|&#?\w+;/;function ye(e,t,r,n,a){for(var i,o,s,c,u,l,f=t.createDocumentFragment(),d=[],h=0,p=e.length;h<p;h++)if((i=e[h])||0===i)if("object"===A(i))E.merge(d,i.nodeType?[i]:i);else if(ve.test(i)){for(o=o||f.appendChild(t.createElement("div")),s=(de.exec(i)||["",""])[1].toLowerCase(),c=pe[s]||pe._default,o.innerHTML=c[1]+E.htmlPrefilter(i)+c[2],l=c[0];l--;)o=o.lastChild;E.merge(d,o.childNodes),(o=f.firstChild).textContent=""}else d.push(t.createTextNode(i));for(f.textContent="",h=0;i=d[h++];)if(n&&-1<E.inArray(i,n))a&&a.push(i);else if(u=ne(i),o=me(f.appendChild(i),"script"),u&&ge(o),r)for(l=0;i=o[l++];)he.test(i.type||"")&&r.push(i);return f}var _e=/^([^.]*)(?:\.(.+)|)/;function be(){return!0}function Ae(){return!1}function we(e,t){return e===function(){try{return k.activeElement}catch(e){}}()==("focus"===t)}function xe(e,t,r,n,a,i){var o,s;if("object"==typeof t){for(s in"string"!=typeof r&&(n=n||r,r=void 0),t)xe(e,s,r,n,t[s],i);return e}if(null==n&&null==a?(a=r,n=r=void 0):null==a&&("string"==typeof r?(a=n,n=void 0):(a=n,n=r,r=void 0)),!1===a)a=Ae;else if(!a)return e;return 1===i&&(o=a,(a=function(e){return E().off(e),o.apply(this,arguments)}).guid=o.guid||(o.guid=E.guid++)),e.each(function(){E.event.add(this,t,a,n,r)})}function ke(e,a,i){i?(V.set(e,a,!1),E.event.add(e,a,{namespace:!1,handler:function(e){var t,r,n=V.get(this,a);if(1&e.isTrigger&&this[a]){if(n.length)(E.event.special[a]||{}).delegateType&&e.stopPropagation();else if(n=s.call(arguments),V.set(this,a,n),t=i(this,a),this[a](),n!==(r=V.get(this,a))||t?V.set(this,a,!1):r={},n!==r)return e.stopImmediatePropagation(),e.preventDefault(),r&&r.value}else n.length&&(V.set(this,a,{value:E.event.trigger(E.extend(n[0],E.Event.prototype),n.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===V.get(e,a)&&E.event.add(e,a,be)}E.event={global:{},add:function(t,e,r,n,a){var i,o,s,c,u,l,f,d,h,p,m,g=V.get(t);if(U(t))for(r.handler&&(r=(i=r).handler,a=i.selector),a&&E.find.matchesSelector(re,a),r.guid||(r.guid=E.guid++),(c=g.events)||(c=g.events=Object.create(null)),(o=g.handle)||(o=g.handle=function(e){return void 0!==E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(j)||[""]).length;u--;)h=m=(s=_e.exec(e[u])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=E.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=E.event.special[h]||{},l=E.extend({type:h,origType:m,data:n,handler:r,guid:r.guid,selector:a,needsContext:a&&E.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=c[h])||((d=c[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,n,p,o)||t.addEventListener&&t.addEventListener(h,o)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=r.guid)),a?d.splice(d.delegateCount++,0,l):d.push(l),E.event.global[h]=!0)},remove:function(e,t,r,n,a){var i,o,s,c,u,l,f,d,h,p,m,g=V.hasData(e)&&V.get(e);if(g&&(c=g.events)){for(u=(t=(t||"").match(j)||[""]).length;u--;)if(h=m=(s=_e.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=E.event.special[h]||{},d=c[h=(n?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)l=d[i],!a&&m!==l.origType||r&&r.guid!==l.guid||s&&!s.test(l.namespace)||n&&n!==l.selector&&("**"!==n||!l.selector)||(d.splice(i,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||E.removeEvent(e,h,g.handle),delete c[h])}else for(h in c)E.event.remove(e,h+t[u],r,n,!0);E.isEmptyObject(c)&&V.remove(e,"handle events")}},dispatch:function(e){var t,r,n,a,i,o,s=new Array(arguments.length),c=E.event.fix(e),u=(V.get(this,"events")||Object.create(null))[c.type]||[],l=E.event.special[c.type]||{};for(s[0]=c,t=1;t<arguments.length;t++)s[t]=arguments[t];if(c.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,c)){for(o=E.event.handlers.call(this,c,u),t=0;(a=o[t++])&&!c.isPropagationStopped();)for(c.currentTarget=a.elem,r=0;(i=a.handlers[r++])&&!c.isImmediatePropagationStopped();)c.rnamespace&&!1!==i.namespace&&!c.rnamespace.test(i.namespace)||(c.handleObj=i,c.data=i.data,void 0!==(n=((E.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,s))&&!1===(c.result=n)&&(c.preventDefault(),c.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,c),c.result}},handlers:function(e,t){var r,n,a,i,o,s=[],c=t.delegateCount,u=e.target;if(c&&u.nodeType&&!("click"===e.type&&1<=e.button))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(i=[],o={},r=0;r<c;r++)void 0===o[a=(n=t[r]).selector+" "]&&(o[a]=n.needsContext?-1<E(a,this).index(u):E.find(a,this,null,[u]).length),o[a]&&i.push(n);i.length&&s.push({elem:u,handlers:i})}return u=this,c<t.length&&s.push({elem:u,handlers:t.slice(c)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:y(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return fe.test(t.type)&&t.click&&M(t,"input")&&ke(t,"click",be),!1},trigger:function(e){var t=this||e;return fe.test(t.type)&&t.click&&M(t,"input")&&ke(t,"click"),!0},_default:function(e){var t=e.target;return fe.test(t.type)&&t.click&&M(t,"input")&&V.get(t,"click")||M(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,r){e.removeEventListener&&e.removeEventListener(t,r)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?be:Ae,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Ae,isPropagationStopped:Ae,isImmediatePropagationStopped:Ae,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=be,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=be,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=be,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(e,t){E.event.special[e]={setup:function(){return ke(this,e,we),!1},trigger:function(){return ke(this,e),!0},_default:function(){return!0},delegateType:t}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,a){E.event.special[e]={delegateType:a,bindType:a,handle:function(e){var t,r=e.relatedTarget,n=e.handleObj;return r&&(r===this||E.contains(this,r))||(e.type=n.origType,t=n.handler.apply(this,arguments),e.type=a),t}}}),E.fn.extend({on:function(e,t,r,n){return xe(this,e,t,r,n)},one:function(e,t,r,n){return xe(this,e,t,r,n,1)},off:function(e,t,r){var n,a;if(e&&e.preventDefault&&e.handleObj)return n=e.handleObj,E(e.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler),this;if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(r=t,t=void 0),!1===r&&(r=Ae),this.each(function(){E.event.remove(this,e,r,t)});for(a in e)this.off(a,t,e[a]);return this}});var Ee=/<script|<style|<link/i,Me=/checked\s*(?:[^=]|=\s*.checked.)/i,Se=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Te(e,t){return M(e,"table")&&M(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function Ce(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function De(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var r,n,a,i,o,s;if(1===t.nodeType){if(V.hasData(e)&&(s=V.get(e).events))for(a in V.remove(t,"handle events"),s)for(r=0,n=s[a].length;r<n;r++)E.event.add(t,a,s[a][r]);K.hasData(e)&&(i=K.access(e),o=E.extend({},i),K.set(t,o))}}function Ne(r,n,a,i){n=m(n);var e,t,o,s,c,u,l=0,f=r.length,d=f-1,h=n[0],p=y(h);if(p||1<f&&"string"==typeof h&&!v.checkClone&&Me.test(h))return r.each(function(e){var t=r.eq(e);p&&(n[0]=h.call(this,e,t.html())),Ne(t,n,a,i)});if(f&&(t=(e=ye(n,r[0].ownerDocument,!1,r,i)).firstChild,1===e.childNodes.length&&(e=t),t||i)){for(s=(o=E.map(me(e,"script"),Ce)).length;l<f;l++)c=e,l!==d&&(c=E.clone(c,!0,!0),s&&E.merge(o,me(c,"script"))),a.call(r[l],c,l);if(s)for(u=o[o.length-1].ownerDocument,E.map(o,De),l=0;l<s;l++)c=o[l],he.test(c.type||"")&&!V.access(c,"globalEval")&&E.contains(u,c)&&(c.src&&"module"!==(c.type||"").toLowerCase()?E._evalUrl&&!c.noModule&&E._evalUrl(c.src,{nonce:c.nonce||c.getAttribute("nonce")},u):b(c.textContent.replace(Se,""),c,u))}return r}function Pe(e,t,r){for(var n,a=t?E.filter(t,e):e,i=0;null!=(n=a[i]);i++)r||1!==n.nodeType||E.cleanData(me(n)),n.parentNode&&(r&&ne(n)&&ge(me(n,"script")),n.parentNode.removeChild(n));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,r){var n,a,i,o,s,c,u,l=e.cloneNode(!0),f=ne(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(o=me(l),n=0,a=(i=me(e)).length;n<a;n++)s=i[n],"input"===(u=(c=o[n]).nodeName.toLowerCase())&&fe.test(s.type)?c.checked=s.checked:"input"!==u&&"textarea"!==u||(c.defaultValue=s.defaultValue);if(t)if(r)for(i=i||me(e),o=o||me(l),n=0,a=i.length;n<a;n++)Oe(i[n],o[n]);else Oe(e,l);return 0<(o=me(l,"script")).length&&ge(o,!f&&me(e,"script")),l},cleanData:function(e){for(var t,r,n,a=E.event.special,i=0;void 0!==(r=e[i]);i++)if(U(r)){if(t=r[V.expando]){if(t.events)for(n in t.events)a[n]?E.event.remove(r,n):E.removeEvent(r,n,t.handle);r[V.expando]=void 0}r[K.expando]&&(r[K.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Pe(this,e,!0)},remove:function(e){return Pe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ne(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Te(this,e).appendChild(e)})},prepend:function(){return Ne(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Te(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ne(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ne(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(me(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},r=0,n=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ee.test(e)&&!pe[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;r<n;r++)1===(t=this[r]||{}).nodeType&&(E.cleanData(me(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var r=[];return Ne(this,arguments,function(e){var t=this.parentNode;E.inArray(this,r)<0&&(E.cleanData(me(this)),t&&t.replaceChild(e,this))},r)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,o){E.fn[e]=function(e){for(var t,r=[],n=E(e),a=n.length-1,i=0;i<=a;i++)t=i===a?this:this.clone(!0),E(n[i])[o](t),c.apply(r,t.get());return this.pushStack(r)}});var je=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=x),t.getComputedStyle(e)},ze=function(e,t,r){var n,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in n=r.call(e),t)e.style[a]=i[a];return n},Le=new RegExp(te.join("|"),"i");function Ye(e,t,r){var n,a,i,o,s=e.style;return(r=r||Re(e))&&(""!==(o=r.getPropertyValue(t)||r[t])||ne(e)||(o=E.style(e,t)),!v.pixelBoxStyles()&&je.test(o)&&Le.test(t)&&(n=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=r.width,s.width=n,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function We(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){c.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(c).appendChild(u);var e=x.getComputedStyle(u);r="1%"!==e.top,s=12===t(e.marginLeft),u.style.right="60%",i=36===t(e.right),n=36===t(e.width),u.style.position="absolute",a=12===t(u.offsetWidth/3),re.removeChild(c),u=null}}function t(e){return Math.round(parseFloat(e))}var r,n,a,i,o,s,c=k.createElement("div"),u=k.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===u.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),n},pixelBoxStyles:function(){return e(),i},pixelPosition:function(){return e(),r},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),a},reliableTrDimensions:function(){var e,t,r,n;return null==o&&(e=k.createElement("table"),t=k.createElement("tr"),r=k.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",r.style.height="9px",r.style.display="block",re.appendChild(e).appendChild(t).appendChild(r),n=x.getComputedStyle(t),o=parseInt(n.height,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),o}}))}();var Ie=["Webkit","Moz","ms"],Be=k.createElement("div").style,qe={};function He(e){return E.cssProps[e]||qe[e]||(e in Be?e:qe[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),r=Ie.length;r--;)if((e=Ie[r]+t)in Be)return e}(e)||e)}var Fe=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},$e={letterSpacing:"0",fontWeight:"400"};function Ve(e,t,r){var n=ee.exec(t);return n?Math.max(0,n[2]-(r||0))+(n[3]||"px"):t}function Ke(e,t,r,n,a,i){var o="width"===t?1:0,s=0,c=0;if(r===(n?"border":"content"))return 0;for(;o<4;o+=2)"margin"===r&&(c+=E.css(e,r+te[o],!0,a)),n?("content"===r&&(c-=E.css(e,"padding"+te[o],!0,a)),"margin"!==r&&(c-=E.css(e,"border"+te[o]+"Width",!0,a))):(c+=E.css(e,"padding"+te[o],!0,a),"padding"!==r?c+=E.css(e,"border"+te[o]+"Width",!0,a):s+=E.css(e,"border"+te[o]+"Width",!0,a));return!n&&0<=i&&(c+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-c-s-.5))||0),c}function Je(e,t,r){var n=Re(e),a=(!v.boxSizingReliable()||r)&&"border-box"===E.css(e,"boxSizing",!1,n),i=a,o=Ye(e,t,n),s="offset"+t[0].toUpperCase()+t.slice(1);if(je.test(o)){if(!r)return o;o="auto"}return(!v.boxSizingReliable()&&a||!v.reliableTrDimensions()&&M(e,"tr")||"auto"===o||!parseFloat(o)&&"inline"===E.css(e,"display",!1,n))&&e.getClientRects().length&&(a="border-box"===E.css(e,"boxSizing",!1,n),(i=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+Ke(e,t,r||(a?"border":"content"),i,n,o)+"px"}function Ze(e,t,r,n,a){return new Ze.prototype.init(e,t,r,n,a)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var r=Ye(e,"opacity");return""===r?"1":r}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,r,n){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=G(t),c=Ge.test(t),u=e.style;if(c||(t=He(s)),o=E.cssHooks[t]||E.cssHooks[s],void 0===r)return o&&"get"in o&&void 0!==(a=o.get(e,!1,n))?a:u[t];"string"==(i=typeof r)&&(a=ee.exec(r))&&a[1]&&(r=oe(e,t,a),i="number"),null!=r&&r==r&&("number"!==i||c||(r+=a&&a[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==r||0!==t.indexOf("background")||(u[t]="inherit"),o&&"set"in o&&void 0===(r=o.set(e,r,n))||(c?u.setProperty(t,r):u[t]=r))}},css:function(e,t,r,n){var a,i,o,s=G(t);return Ge.test(t)||(t=He(s)),(o=E.cssHooks[t]||E.cssHooks[s])&&"get"in o&&(a=o.get(e,!0,r)),void 0===a&&(a=Ye(e,t,n)),"normal"===a&&t in $e&&(a=$e[t]),""===r||r?(i=parseFloat(a),!0===r||isFinite(i)?i||0:a):a}}),E.each(["height","width"],function(e,c){E.cssHooks[c]={get:function(e,t,r){if(t)return!Fe.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,c,r):ze(e,Ue,function(){return Je(e,c,r)})},set:function(e,t,r){var n,a=Re(e),i=!v.scrollboxSize()&&"absolute"===a.position,o=(i||r)&&"border-box"===E.css(e,"boxSizing",!1,a),s=r?Ke(e,c,r,o,a):0;return o&&i&&(s-=Math.ceil(e["offset"+c[0].toUpperCase()+c.slice(1)]-parseFloat(a[c])-Ke(e,c,"border",!1,a)-.5)),s&&(n=ee.exec(t))&&"px"!==(n[3]||"px")&&(e.style[c]=t,t=E.css(e,c)),Ve(0,t,s)}}}),E.cssHooks.marginLeft=We(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ye(e,"marginLeft"))||e.getBoundingClientRect().left-ze(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(a,i){E.cssHooks[a+i]={expand:function(e){for(var t=0,r={},n="string"==typeof e?e.split(" "):[e];t<4;t++)r[a+te[t]+i]=n[t]||n[t-2]||n[0];return r}},"margin"!==a&&(E.cssHooks[a+i].set=Ve)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,r){var n,a,i={},o=0;if(Array.isArray(t)){for(n=Re(e),a=t.length;o<a;o++)i[t[o]]=E.css(e,t[o],!1,n);return i}return void 0!==r?E.style(e,t,r):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=Ze).prototype={constructor:Ze,init:function(e,t,r,n,a,i){this.elem=e,this.prop=r,this.easing=a||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=n,this.unit=i||(E.cssNumber[r]?"":"px")},cur:function(){var e=Ze.propHooks[this.prop];return e&&e.get?e.get(this):Ze.propHooks._default.get(this)},run:function(e){var t,r=Ze.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),r&&r.set?r.set(this):Ze.propHooks._default.set(this),this}}).init.prototype=Ze.prototype,(Ze.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[He(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ze.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=Ze.prototype.init,E.fx.step={};var Xe,Qe,et,tt,rt=/^(?:toggle|show|hide)$/,nt=/queueHooks$/;function at(){Qe&&(!1===k.hidden&&x.requestAnimationFrame?x.requestAnimationFrame(at):x.setTimeout(at,E.fx.interval),E.fx.tick())}function it(){return x.setTimeout(function(){Xe=void 0}),Xe=Date.now()}function ot(e,t){var r,n=0,a={height:e};for(t=t?1:0;n<4;n+=2-t)a["margin"+(r=te[n])]=a["padding"+r]=e;return t&&(a.opacity=a.width=e),a}function st(e,t,r){for(var n,a=(ct.tweeners[t]||[]).concat(ct.tweeners["*"]),i=0,o=a.length;i<o;i++)if(n=a[i].call(r,t,e))return n}function ct(i,e,t){var r,o,n=0,a=ct.prefilters.length,s=E.Deferred().always(function(){delete c.elem}),c=function(){if(o)return!1;for(var e=Xe||it(),t=Math.max(0,u.startTime+u.duration-e),r=1-(t/u.duration||0),n=0,a=u.tweens.length;n<a;n++)u.tweens[n].run(r);return s.notifyWith(i,[u,r,t]),r<1&&a?t:(a||s.notifyWith(i,[u,1,0]),s.resolveWith(i,[u]),!1)},u=s.promise({elem:i,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:Xe||it(),duration:t.duration,tweens:[],createTween:function(e,t){var r=E.Tween(i,u.opts,e,t,u.opts.specialEasing[e]||u.opts.easing);return u.tweens.push(r),r},stop:function(e){var t=0,r=e?u.tweens.length:0;if(o)return this;for(o=!0;t<r;t++)u.tweens[t].run(1);return e?(s.notifyWith(i,[u,1,0]),s.resolveWith(i,[u,e])):s.rejectWith(i,[u,e]),this}}),l=u.props;for(function(e,t){var r,n,a,i,o;for(r in e)if(a=t[n=G(r)],i=e[r],Array.isArray(i)&&(a=i[1],i=e[r]=i[0]),r!==n&&(e[n]=i,delete e[r]),(o=E.cssHooks[n])&&"expand"in o)for(r in i=o.expand(i),delete e[n],i)r in e||(e[r]=i[r],t[r]=a);else t[n]=a}(l,u.opts.specialEasing);n<a;n++)if(r=ct.prefilters[n].call(u,i,l,u.opts))return y(r.stop)&&(E._queueHooks(u.elem,u.opts.queue).stop=r.stop.bind(r)),r;return E.map(l,st,u),y(u.opts.start)&&u.opts.start.call(i,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),E.fx.timer(E.extend(c,{elem:i,anim:u,queue:u.opts.queue})),u}E.Animation=E.extend(ct,{tweeners:{"*":[function(e,t){var r=this.createTween(e,t);return oe(r.elem,e,ee.exec(t),r),r}]},tweener:function(e,t){for(var r,n=0,a=(e=y(e)?(t=e,["*"]):e.match(j)).length;n<a;n++)r=e[n],ct.tweeners[r]=ct.tweeners[r]||[],ct.tweeners[r].unshift(t)},prefilters:[function(e,t,r){var n,a,i,o,s,c,u,l,f="width"in t||"height"in t,d=this,h={},p=e.style,m=e.nodeType&&ie(e),g=V.get(e,"fxshow");for(n in r.queue||(null==(o=E._queueHooks(e,"fx")).unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,d.always(function(){d.always(function(){o.unqueued--,E.queue(e,"fx").length||o.empty.fire()})})),t)if(a=t[n],rt.test(a)){if(delete t[n],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!g||void 0===g[n])continue;m=!0}h[n]=g&&g[n]||E.style(e,n)}if((c=!E.isEmptyObject(t))||!E.isEmptyObject(h))for(n in f&&1===e.nodeType&&(r.overflow=[p.overflow,p.overflowX,p.overflowY],null==(u=g&&g.display)&&(u=V.get(e,"display")),"none"===(l=E.css(e,"display"))&&(u?l=u:(ce([e],!0),u=e.style.display||u,l=E.css(e,"display"),ce([e]))),("inline"===l||"inline-block"===l&&null!=u)&&"none"===E.css(e,"float")&&(c||(d.done(function(){p.display=u}),null==u&&(l=p.display,u="none"===l?"":l)),p.display="inline-block")),r.overflow&&(p.overflow="hidden",d.always(function(){p.overflow=r.overflow[0],p.overflowX=r.overflow[1],p.overflowY=r.overflow[2]})),c=!1,h)c||(g?"hidden"in g&&(m=g.hidden):g=V.access(e,"fxshow",{display:u}),i&&(g.hidden=!m),m&&ce([e],!0),d.done(function(){for(n in m||ce([e]),V.remove(e,"fxshow"),h)E.style(e,n,h[n])})),c=st(m?g[n]:0,n,d),n in g||(g[n]=c.start,m&&(c.end=c.start,c.start=0))}],prefilter:function(e,t){t?ct.prefilters.unshift(e):ct.prefilters.push(e)}}),E.speed=function(e,t,r){var n=e&&"object"==typeof e?E.extend({},e):{complete:r||!r&&t||y(e)&&e,duration:e,easing:r&&t||t&&!y(t)&&t};return E.fx.off?n.duration=0:"number"!=typeof n.duration&&(n.duration in E.fx.speeds?n.duration=E.fx.speeds[n.duration]:n.duration=E.fx.speeds._default),null!=n.queue&&!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){y(n.old)&&n.old.call(this),n.queue&&E.dequeue(this,n.queue)},n},E.fn.extend({fadeTo:function(e,t,r,n){return this.filter(ie).css("opacity",0).show().end().animate({opacity:t},e,r,n)},animate:function(t,e,r,n){var a=E.isEmptyObject(t),i=E.speed(e,r,n),o=function(){var e=ct(this,E.extend({},t),i);(a||V.get(this,"finish"))&&e.stop(!0)};return o.finish=o,a||!1===i.queue?this.each(o):this.queue(i.queue,o)},stop:function(a,e,i){var o=function(e){var t=e.stop;delete e.stop,t(i)};return"string"!=typeof a&&(i=e,e=a,a=void 0),e&&this.queue(a||"fx",[]),this.each(function(){var e=!0,t=null!=a&&a+"queueHooks",r=E.timers,n=V.get(this);if(t)n[t]&&n[t].stop&&o(n[t]);else for(t in n)n[t]&&n[t].stop&&nt.test(t)&&o(n[t]);for(t=r.length;t--;)r[t].elem!==this||null!=a&&r[t].queue!==a||(r[t].anim.stop(i),e=!1,r.splice(t,1));!e&&i||E.dequeue(this,a)})},finish:function(o){return!1!==o&&(o=o||"fx"),this.each(function(){var e,t=V.get(this),r=t[o+"queue"],n=t[o+"queueHooks"],a=E.timers,i=r?r.length:0;for(t.finish=!0,E.queue(this,o,[]),n&&n.stop&&n.stop.call(this,!0),e=a.length;e--;)a[e].elem===this&&a[e].queue===o&&(a[e].anim.stop(!0),a.splice(e,1));for(e=0;e<i;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,n){var a=E.fn[n];E.fn[n]=function(e,t,r){return null==e||"boolean"==typeof e?a.apply(this,arguments):this.animate(ot(n,!0),e,t,r)}}),E.each({slideDown:ot("show"),slideUp:ot("hide"),slideToggle:ot("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,n){E.fn[e]=function(e,t,r){return this.animate(n,e,t,r)}}),E.timers=[],E.fx.tick=function(){var e,t=0,r=E.timers;for(Xe=Date.now();t<r.length;t++)(e=r[t])()||r[t]!==e||r.splice(t--,1);r.length||E.fx.stop(),Xe=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){Qe||(Qe=!0,at())},E.fx.stop=function(){Qe=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(n,e){return n=E.fx&&E.fx.speeds[n]||n,e=e||"fx",this.queue(e,function(e,t){var r=x.setTimeout(e,n);t.stop=function(){x.clearTimeout(r)}})},et=k.createElement("input"),tt=k.createElement("select").appendChild(k.createElement("option")),et.type="checkbox",v.checkOn=""!==et.value,v.optSelected=tt.selected,(et=k.createElement("input")).value="t",et.type="radio",v.radioValue="t"===et.value;var ut,lt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,r){var n,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?E.prop(e,t,r):(1===i&&E.isXMLDoc(e)||(a=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?ut:void 0)),void 0!==r?null===r?void E.removeAttr(e,t):a&&"set"in a&&void 0!==(n=a.set(e,r,t))?n:(e.setAttribute(t,r+""),r):a&&"get"in a&&null!==(n=a.get(e,t))?n:null==(n=E.find.attr(e,t))?void 0:n)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&M(e,"input")){var r=e.value;return e.setAttribute("type",t),r&&(e.value=r),t}}}},removeAttr:function(e,t){var r,n=0,a=t&&t.match(j);if(a&&1===e.nodeType)for(;r=a[n++];)e.removeAttribute(r)}}),ut={set:function(e,t,r){return!1===t?E.removeAttr(e,r):e.setAttribute(r,r),r}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var o=lt[t]||E.find.attr;lt[t]=function(e,t,r){var n,a,i=t.toLowerCase();return r||(a=lt[i],lt[i]=n,n=null!=o(e,t,r)?i:null,lt[i]=a),n}});var ft=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(j)||[]).join(" ")}function pt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(j)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,r){var n,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&E.isXMLDoc(e)||(t=E.propFix[t]||t,a=E.propHooks[t]),void 0!==r?a&&"set"in a&&void 0!==(n=a.set(e,r,t))?n:e[t]=r:a&&"get"in a&&null!==(n=a.get(e,t))?n:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ft.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,r,n,a,i,o,s,c=0;if(y(t))return this.each(function(e){E(this).addClass(t.call(this,e,pt(this)))});if((e=mt(t)).length)for(;r=this[c++];)if(a=pt(r),n=1===r.nodeType&&" "+ht(a)+" "){for(o=0;i=e[o++];)n.indexOf(" "+i+" ")<0&&(n+=i+" ");a!==(s=ht(n))&&r.setAttribute("class",s)}return this},removeClass:function(t){var e,r,n,a,i,o,s,c=0;if(y(t))return this.each(function(e){E(this).removeClass(t.call(this,e,pt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)for(;r=this[c++];)if(a=pt(r),n=1===r.nodeType&&" "+ht(a)+" "){for(o=0;i=e[o++];)for(;-1<n.indexOf(" "+i+" ");)n=n.replace(" "+i+" "," ");a!==(s=ht(n))&&r.setAttribute("class",s)}return this},toggleClass:function(a,t){var i=typeof a,o="string"===i||Array.isArray(a);return"boolean"==typeof t&&o?t?this.addClass(a):this.removeClass(a):y(a)?this.each(function(e){E(this).toggleClass(a.call(this,e,pt(this),t),t)}):this.each(function(){var e,t,r,n;if(o)for(t=0,r=E(this),n=mt(a);e=n[t++];)r.hasClass(e)?r.removeClass(e):r.addClass(e);else void 0!==a&&"boolean"!==i||((e=pt(this))&&V.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===a?"":V.get(this,"__className__")||""))})},hasClass:function(e){var t,r,n=0;for(t=" "+e+" ";r=this[n++];)if(1===r.nodeType&&-1<(" "+ht(pt(r))+" ").indexOf(t))return!0;return!1}});var gt=/\r/g;E.fn.extend({val:function(r){var n,e,a,t=this[0];return arguments.length?(a=y(r),this.each(function(e){var t;1===this.nodeType&&(null==(t=a?r.call(this,e,E(this).val()):r)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(n=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&void 0!==n.set(this,t,"value")||(this.value=t))})):t?(n=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in n&&void 0!==(e=n.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(gt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:ht(E.text(e))}},select:{get:function(e){var t,r,n,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],c=o?i+1:a.length;for(n=i<0?c:o?i:0;n<c;n++)if(((r=a[n]).selected||n===i)&&!r.disabled&&(!r.parentNode.disabled||!M(r.parentNode,"optgroup"))){if(t=E(r).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var r,n,a=e.options,i=E.makeArray(t),o=a.length;o--;)((n=a[o]).selected=-1<E.inArray(E.valHooks.option.get(n),i))&&(r=!0);return r||(e.selectedIndex=-1),i}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in x;var vt=/^(?:focusinfocus|focusoutblur)$/,yt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,r,n){var a,i,o,s,c,u,l,f,d=[r||k],h=g.call(e,"type")?e.type:e,p=g.call(e,"namespace")?e.namespace.split("."):[];if(i=f=o=r=r||k,3!==r.nodeType&&8!==r.nodeType&&!vt.test(h+E.event.triggered)&&(-1<h.indexOf(".")&&(h=(p=h.split(".")).shift(),p.sort()),c=h.indexOf(":")<0&&"on"+h,(e=e[E.expando]?e:new E.Event(h,"object"==typeof e&&e)).isTrigger=n?2:3,e.namespace=p.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:E.makeArray(t,[e]),l=E.event.special[h]||{},n||!l.trigger||!1!==l.trigger.apply(r,t))){if(!n&&!l.noBubble&&!_(r)){for(s=l.delegateType||h,vt.test(s+h)||(i=i.parentNode);i;i=i.parentNode)d.push(i),o=i;o===(r.ownerDocument||k)&&d.push(o.defaultView||o.parentWindow||x)}for(a=0;(i=d[a++])&&!e.isPropagationStopped();)f=i,e.type=1<a?s:l.bindType||h,(u=(V.get(i,"events")||Object.create(null))[e.type]&&V.get(i,"handle"))&&u.apply(i,t),(u=c&&i[c])&&u.apply&&U(i)&&(e.result=u.apply(i,t),!1===e.result&&e.preventDefault());return e.type=h,n||e.isDefaultPrevented()||l._default&&!1!==l._default.apply(d.pop(),t)||!U(r)||c&&y(r[h])&&!_(r)&&((o=r[c])&&(r[c]=null),E.event.triggered=h,e.isPropagationStopped()&&f.addEventListener(h,yt),r[h](),e.isPropagationStopped()&&f.removeEventListener(h,yt),E.event.triggered=void 0,o&&(r[c]=o)),e.result}},simulate:function(e,t,r){var n=E.extend(new E.Event,r,{type:e,isSimulated:!0});E.event.trigger(n,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var r=this[0];if(r)return E.event.trigger(e,t,r,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(r,n){var a=function(e){E.event.simulate(n,e.target,E.event.fix(e))};E.event.special[n]={setup:function(){var e=this.ownerDocument||this.document||this,t=V.access(e,n);t||e.addEventListener(r,a,!0),V.access(e,n,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=V.access(e,n)-1;t?V.access(e,n,t):(e.removeEventListener(r,a,!0),V.remove(e,n))}}});var _t=x.location,bt={guid:Date.now()},At=/\?/;E.parseXML=function(e){var t,r;if(!e||"string"!=typeof e)return null;try{t=(new x.DOMParser).parseFromString(e,"text/xml")}catch(e){}return r=t&&t.getElementsByTagName("parsererror")[0],t&&!r||E.error("Invalid XML: "+(r?E.map(r.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var wt=/\[\]$/,xt=/\r?\n/g,kt=/^(?:submit|button|image|reset|file)$/i,Et=/^(?:input|select|textarea|keygen)/i;function Mt(r,e,n,a){var t;if(Array.isArray(e))E.each(e,function(e,t){n||wt.test(r)?a(r,t):Mt(r+"["+("object"==typeof t&&null!=t?e:"")+"]",t,n,a)});else if(n||"object"!==A(e))a(r,e);else for(t in e)Mt(r+"["+t+"]",e[t],n,a)}E.param=function(e,t){var r,n=[],a=function(e,t){var r=y(t)?t():t;n[n.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==r?"":r)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){a(this.name,this.value)});else for(r in e)Mt(r,e[r],t,a);return n.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Et.test(this.nodeName)&&!kt.test(e)&&(this.checked||!fe.test(e))}).map(function(e,t){var r=E(this).val();return null==r?null:Array.isArray(r)?E.map(r,function(e){return{name:t.name,value:e.replace(xt,"\r\n")}}):{name:t.name,value:r.replace(xt,"\r\n")}}).get()}});var St=/%20/g,Tt=/#.*$/,Ct=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Nt=/^\/\//,Pt={},jt={},Rt="*/".concat("*"),zt=k.createElement("a");function Lt(i){return function(e,t){"string"!=typeof e&&(t=e,e="*");var r,n=0,a=e.toLowerCase().match(j)||[];if(y(t))for(;r=a[n++];)"+"===r[0]?(r=r.slice(1)||"*",(i[r]=i[r]||[]).unshift(t)):(i[r]=i[r]||[]).push(t)}}function Yt(t,a,i,o){var s={},c=t===jt;function u(e){var n;return s[e]=!0,E.each(t[e]||[],function(e,t){var r=t(a,i,o);return"string"!=typeof r||c||s[r]?c?!(n=r):void 0:(a.dataTypes.unshift(r),u(r),!1)}),n}return u(a.dataTypes[0])||!s["*"]&&u("*")}function Wt(e,t){var r,n,a=E.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((a[r]?e:n||(n={}))[r]=t[r]);return n&&E.extend(!0,e,n),e}zt.href=_t.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:_t.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(_t.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Wt(Wt(e,E.ajaxSettings),t):Wt(E.ajaxSettings,e)},ajaxPrefilter:Lt(Pt),ajaxTransport:Lt(jt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var l,f,d,r,h,n,p,m,a,i,g=E.ajaxSetup({},t),v=g.context||g,y=g.context&&(v.nodeType||v.jquery)?E(v):E.event,_=E.Deferred(),b=E.Callbacks("once memory"),A=g.statusCode||{},o={},s={},c="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(p){if(!r)for(r={};t=Dt.exec(d);)r[t[1].toLowerCase()+" "]=(r[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=r[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return p?d:null},setRequestHeader:function(e,t){return null==p&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,o[e]=t),this},overrideMimeType:function(e){return null==p&&(g.mimeType=e),this},statusCode:function(e){var t;if(e)if(p)w.always(e[w.status]);else for(t in e)A[t]=[A[t],e[t]];return this},abort:function(e){var t=e||c;return l&&l.abort(t),u(0,t),this}};if(_.promise(w),g.url=((e||g.url||_t.href)+"").replace(Nt,_t.protocol+"//"),g.type=t.method||t.type||g.method||g.type,g.dataTypes=(g.dataType||"*").toLowerCase().match(j)||[""],null==g.crossDomain){n=k.createElement("a");try{n.href=g.url,n.href=n.href,g.crossDomain=zt.protocol+"//"+zt.host!=n.protocol+"//"+n.host}catch(e){g.crossDomain=!0}}if(g.data&&g.processData&&"string"!=typeof g.data&&(g.data=E.param(g.data,g.traditional)),Yt(Pt,g,t,w),p)return w;for(a in(m=E.event&&g.global)&&0==E.active++&&E.event.trigger("ajaxStart"),g.type=g.type.toUpperCase(),g.hasContent=!Ot.test(g.type),f=g.url.replace(Tt,""),g.hasContent?g.data&&g.processData&&0===(g.contentType||"").indexOf("application/x-www-form-urlencoded")&&(g.data=g.data.replace(St,"+")):(i=g.url.slice(f.length),g.data&&(g.processData||"string"==typeof g.data)&&(f+=(At.test(f)?"&":"?")+g.data,delete g.data),!1===g.cache&&(f=f.replace(Ct,"$1"),i=(At.test(f)?"&":"?")+"_="+bt.guid+++i),g.url=f+i),g.ifModified&&(E.lastModified[f]&&w.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&w.setRequestHeader("If-None-Match",E.etag[f])),(g.data&&g.hasContent&&!1!==g.contentType||t.contentType)&&w.setRequestHeader("Content-Type",g.contentType),w.setRequestHeader("Accept",g.dataTypes[0]&&g.accepts[g.dataTypes[0]]?g.accepts[g.dataTypes[0]]+("*"!==g.dataTypes[0]?", "+Rt+"; q=0.01":""):g.accepts["*"]),g.headers)w.setRequestHeader(a,g.headers[a]);if(g.beforeSend&&(!1===g.beforeSend.call(v,w,g)||p))return w.abort();if(c="abort",b.add(g.complete),w.done(g.success),w.fail(g.error),l=Yt(jt,g,t,w)){if(w.readyState=1,m&&y.trigger("ajaxSend",[w,g]),p)return w;g.async&&0<g.timeout&&(h=x.setTimeout(function(){w.abort("timeout")},g.timeout));try{p=!1,l.send(o,u)}catch(e){if(p)throw e;u(-1,e)}}else u(-1,"No Transport");function u(e,t,r,n){var a,i,o,s,c,u=t;p||(p=!0,h&&x.clearTimeout(h),l=void 0,d=n||"",w.readyState=0<e?4:0,a=200<=e&&e<300||304===e,r&&(s=function(e,t,r){for(var n,a,i,o,s=e.contents,c=e.dataTypes;"*"===c[0];)c.shift(),void 0===n&&(n=e.mimeType||t.getResponseHeader("Content-Type"));if(n)for(a in s)if(s[a]&&s[a].test(n)){c.unshift(a);break}if(c[0]in r)i=c[0];else{for(a in r){if(!c[0]||e.converters[a+" "+c[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==c[0]&&c.unshift(i),r[i]}(g,w,r)),!a&&-1<E.inArray("script",g.dataTypes)&&E.inArray("json",g.dataTypes)<0&&(g.converters["text script"]=function(){}),s=function(e,t,r,n){var a,i,o,s,c,u={},l=e.dataTypes.slice();if(l[1])for(o in e.converters)u[o.toLowerCase()]=e.converters[o];for(i=l.shift();i;)if(e.responseFields[i]&&(r[e.responseFields[i]]=t),!c&&n&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=i,i=l.shift())if("*"===i)i=c;else if("*"!==c&&c!==i){if(!(o=u[c+" "+i]||u["* "+i]))for(a in u)if((s=a.split(" "))[1]===i&&(o=u[c+" "+s[0]]||u["* "+s[0]])){!0===o?o=u[a]:!0!==u[a]&&(i=s[0],l.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+c+" to "+i}}}return{state:"success",data:t}}(g,s,w,a),a?(g.ifModified&&((c=w.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=c),(c=w.getResponseHeader("etag"))&&(E.etag[f]=c)),204===e||"HEAD"===g.type?u="nocontent":304===e?u="notmodified":(u=s.state,i=s.data,a=!(o=s.error))):(o=u,!e&&u||(u="error",e<0&&(e=0))),w.status=e,w.statusText=(t||u)+"",a?_.resolveWith(v,[i,u,w]):_.rejectWith(v,[w,u,o]),w.statusCode(A),A=void 0,m&&y.trigger(a?"ajaxSuccess":"ajaxError",[w,g,a?i:o]),b.fireWith(v,[w,u]),m&&(y.trigger("ajaxComplete",[w,g]),--E.active||E.event.trigger("ajaxStop")))}return w},getJSON:function(e,t,r){return E.get(e,t,r,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,a){E[a]=function(e,t,r,n){return y(t)&&(n=n||r,r=t,t=void 0),E.ajax(E.extend({url:e,type:a,dataType:n,data:t,success:r},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,r){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,r)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(r){return y(r)?this.each(function(e){E(this).wrapInner(r.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(r):e.append(r)})},wrap:function(t){var r=y(t);return this.each(function(e){E(this).wrapAll(r?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new x.XMLHttpRequest}catch(e){}};var It={0:200,1223:204},Bt=E.ajaxSettings.xhr();v.cors=!!Bt&&"withCredentials"in Bt,v.ajax=Bt=!!Bt,E.ajaxTransport(function(a){var i,o;if(v.cors||Bt&&!a.crossDomain)return{send:function(e,t){var r,n=a.xhr();if(n.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(r in a.xhrFields)n[r]=a.xhrFields[r];for(r in a.mimeType&&n.overrideMimeType&&n.overrideMimeType(a.mimeType),a.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)n.setRequestHeader(r,e[r]);i=function(e){return function(){i&&(i=o=n.onload=n.onerror=n.onabort=n.ontimeout=n.onreadystatechange=null,"abort"===e?n.abort():"error"===e?"number"!=typeof n.status?t(0,"error"):t(n.status,n.statusText):t(It[n.status]||n.status,n.statusText,"text"!==(n.responseType||"text")||"string"!=typeof n.responseText?{binary:n.response}:{text:n.responseText},n.getAllResponseHeaders()))}},n.onload=i(),o=n.onerror=n.ontimeout=i("error"),void 0!==n.onabort?n.onabort=o:n.onreadystatechange=function(){4===n.readyState&&x.setTimeout(function(){i&&o()})},i=i("abort");try{n.send(a.hasContent&&a.data||null)}catch(e){if(i)throw e}},abort:function(){i&&i()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(r){var n,a;if(r.crossDomain||r.scriptAttrs)return{send:function(e,t){n=E("<script>").attr(r.scriptAttrs||{}).prop({charset:r.scriptCharset,src:r.url}).on("load error",a=function(e){n.remove(),a=null,e&&t("error"===e.type?404:200,e.type)}),k.head.appendChild(n[0])},abort:function(){a&&a()}}});var qt,Ht=[],Ft=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ht.pop()||E.expando+"_"+bt.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,r){var n,a,i,o=!1!==e.jsonp&&(Ft.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ft.test(e.data)&&"data");if(o||"jsonp"===e.dataTypes[0])return n=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,o?e[o]=e[o].replace(Ft,"$1"+n):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+n),e.converters["script json"]=function(){return i||E.error(n+" was not called"),i[0]},e.dataTypes[0]="json",a=x[n],x[n]=function(){i=arguments},r.always(function(){void 0===a?E(x).removeProp(n):x[n]=a,e[n]&&(e.jsonpCallback=t.jsonpCallback,Ht.push(n)),i&&y(a)&&a(i[0]),i=a=void 0}),"script"}),v.createHTMLDocument=((qt=k.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===qt.childNodes.length),E.parseHTML=function(e,t,r){return"string"!=typeof e?[]:("boolean"==typeof t&&(r=t,t=!1),t||(v.createHTMLDocument?((n=(t=k.implementation.createHTMLDocument("")).createElement("base")).href=k.location.href,t.head.appendChild(n)):t=k),i=!r&&[],(a=S.exec(e))?[t.createElement(a[1])]:(a=ye([e],t,i),i&&i.length&&E(i).remove(),E.merge([],a.childNodes)));var n,a,i},E.fn.load=function(e,t,r){var n,a,i,o=this,s=e.indexOf(" ");return-1<s&&(n=ht(e.slice(s)),e=e.slice(0,s)),y(t)?(r=t,t=void 0):t&&"object"==typeof t&&(a="POST"),0<o.length&&E.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done(function(e){i=arguments,o.html(n?E("<div>").append(E.parseHTML(e)).find(n):e)}).always(r&&function(e,t){o.each(function(){r.apply(this,i||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,r){var n,a,i,o,s,c,u=E.css(e,"position"),l=E(e),f={};"static"===u&&(e.style.position="relative"),s=l.offset(),i=E.css(e,"top"),c=E.css(e,"left"),a=("absolute"===u||"fixed"===u)&&-1<(i+c).indexOf("auto")?(o=(n=l.position()).top,n.left):(o=parseFloat(i)||0,parseFloat(c)||0),y(t)&&(t=t.call(e,r,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):l.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,r,n=this[0];return n?n.getClientRects().length?(e=n.getBoundingClientRect(),r=n.ownerDocument.defaultView,{top:e.top+r.pageYOffset,left:e.left+r.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,r,n=this[0],a={top:0,left:0};if("fixed"===E.css(n,"position"))t=n.getBoundingClientRect();else{for(t=this.offset(),r=n.ownerDocument,e=n.offsetParent||r.documentElement;e&&(e===r.body||e===r.documentElement)&&"static"===E.css(e,"position");)e=e.parentNode;e&&e!==n&&1===e.nodeType&&((a=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),a.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-E.css(n,"marginTop",!0),left:t.left-a.left-E.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===E.css(e,"position");)e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,a){var i="pageYOffset"===a;E.fn[t]=function(e){return B(this,function(e,t,r){var n;if(_(e)?n=e:9===e.nodeType&&(n=e.defaultView),void 0===r)return n?n[a]:e[t];n?n.scrollTo(i?n.pageXOffset:r,i?r:n.pageYOffset):e[t]=r},t,e,arguments.length)}}),E.each(["top","left"],function(e,r){E.cssHooks[r]=We(v.pixelPosition,function(e,t){if(t)return t=Ye(e,r),je.test(t)?E(e).position()[r]+"px":t})}),E.each({Height:"height",Width:"width"},function(o,s){E.each({padding:"inner"+o,content:s,"":"outer"+o},function(n,i){E.fn[i]=function(e,t){var r=arguments.length&&(n||"boolean"!=typeof e),a=n||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,r){var n;return _(e)?0===i.indexOf("outer")?e["inner"+o]:e.document.documentElement["client"+o]:9===e.nodeType?(n=e.documentElement,Math.max(e.body["scroll"+o],n["scroll"+o],e.body["offset"+o],n["offset"+o],n["client"+o])):void 0===r?E.css(e,t,a):E.style(e,t,r,a)},s,r?e:void 0,r)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,r){return this.on(e,null,t,r)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,r,n){return this.on(t,e,r,n)},undelegate:function(e,t,r){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",r)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,r){E.fn[r]=function(e,t){return 0<arguments.length?this.on(r,null,e,t):this.trigger(r)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var r,n,a;if("string"==typeof t&&(r=e[t],t=e,e=r),y(e))return n=s.call(arguments,2),(a=function(){return e.apply(t||this,n.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,a},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=M,E.isFunction=y,E.isWindow=_,E.camelCase=G,E.type=A,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"")};var Ut=x.jQuery,$t=x.$;return E.noConflict=function(e){return x.$===E&&(x.$=$t),e&&x.jQuery===E&&(x.jQuery=Ut),E},void 0===e&&(x.jQuery=x.$=E),E},e.exports=t.document?r(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return r(e)}});Tn.noConflict();var Cn=function(e,t,r){return(!(3<arguments.length&&void 0!==arguments[3])||arguments[3])&&(t&&"string"==typeof t?t=Mn.find(t):t||(t=Mn)),new Tn.fn.init(e,t,r)};Cn.fn=Cn.prototype=Tn.fn,Tn.extend(Cn,Tn);var Dn=function(e){return e.find('script, style, link[rel="stylesheet"]').remove(),e};Cn.cloneHtml=function(){return Dn(Cn("html",null,null,!1).clone()).children().wrap("<div />").wrap("<div />")},Cn.root=function(){return Cn("*").first()},Cn.browser=!0;var On=function(e){var t=e.get(0);return!(!t||!t.tagName)&&"container"===t.tagName.toLowerCase()};function Nn(e,t){return Array(t+1).join(e)}Cn.html=function(e){if(e)return On(e)||On(e.children("container"))?e.children("container").html()||e.html():Cn("<div>").append(e.eq(0).clone()).html();var t=Dn(Cn("body",null,null,!1).clone()),r=Dn(Cn("head",null,null,!1).clone());return Mn&&0<Mn.length?Mn.children().html():Cn("<container />").append(Cn("<container>".concat(r.html(),"</container>"))).append(Cn("<container>".concat(t.html(),"</container>"))).wrap("<container />").parent().html()},Cn.load=function(e){var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2];return e=e?Cn("<container />").html(e):Cn.cloneHtml(),Mn=Mn||Cn('<div class="'.concat("mercury-parsing-container",'" style="display:none;" />')),(e=Dn(e)).find("*").contents().each(function(){this.nodeType===Node.COMMENT_NODE&&Cn(this).remove()}),Mn.html(e),t?{$:Cn,html:e.html()}:Cn};var Pn=["ADDRESS","ARTICLE","ASIDE","AUDIO","BLOCKQUOTE","BODY","CANVAS","CENTER","DD","DIR","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","FRAMESET","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","HTML","ISINDEX","LI","MAIN","MENU","NAV","NOFRAMES","NOSCRIPT","OL","OUTPUT","P","PRE","SECTION","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","UL"];function jn(e){return Yn(e,Pn)}var Rn=["AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR"];function zn(e){return Yn(e,Rn)}var Ln=["A","TABLE","THEAD","TBODY","TFOOT","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"];function Yn(e,t){return 0<=t.indexOf(e.nodeName)}function Wn(t,e){return t.getElementsByTagName&&e.some(function(e){return t.getElementsByTagName(e).length})}var In={};function Bn(e){return e?e.replace(/(\n+\s*)+/g,"\n"):""}function qn(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function Hn(e,t,r){for(var n=0;n<e.length;n++){var a=e[n];if(Fn(a,t,r))return a}}function Fn(e,t,r){var n=e.filter;if("string"==typeof n){if(n===t.nodeName.toLowerCase())return!0}else if(Array.isArray(n)){if(-1<n.indexOf(t.nodeName.toLowerCase()))return!0}else{if("function"!=typeof n)throw new TypeError("`filter` needs to be a string, array, or function");if(n.call(e,t,r))return!0}}function Gn(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function Un(e,t,r){return e&&e.parentNode===t||r(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}In.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},In.lineBreak={filter:"br",replacement:function(e,t,r){return r.br+"\n"}},In.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,t,r){var n=Number(t.nodeName.charAt(1));return"setext"===r.headingStyle&&n<3?"\n\n"+e+"\n"+Nn(1===n?"=":"-",e.length)+"\n\n":"\n\n"+Nn("#",n)+" "+e+"\n\n"}},In.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},In.list={filter:["ul","ol"],replacement:function(e,t){var r=t.parentNode;return"LI"===r.nodeName&&r.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},In.listItem={filter:"li",replacement:function(e,t,r){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n ");var n=r.bulletListMarker+" ",a=t.parentNode;if("OL"===a.nodeName){var i=a.getAttribute("start"),o=Array.prototype.indexOf.call(a.children,t);n=(i?Number(i)+o:o+1)+". "}return n+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},In.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,r){return"\n\n "+t.firstChild.textContent.replace(/\n/g,"\n ")+"\n\n"}},In.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,r){for(var n,a=((t.firstChild.getAttribute("class")||"").match(/language-(\S+)/)||[null,""])[1],i=t.firstChild.textContent,o=r.fence.charAt(0),s=3,c=new RegExp("^"+o+"{3,}","gm");n=c.exec(i);)n[0].length>=s&&(s=n[0].length+1);var u=Nn(o,s);return"\n\n"+u+a+"\n"+i.replace(/\n$/,"")+"\n"+u+"\n\n"}},In.horizontalRule={filter:"hr",replacement:function(e,t,r){return"\n\n"+r.hr+"\n\n"}},In.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){var r=t.getAttribute("href"),n=Bn(t.getAttribute("title"));return n&&(n=' "'+n+'"'),"["+e+"]("+r+n+")"}},In.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,r){var n,a,i=t.getAttribute("href"),o=Bn(t.getAttribute("title"));switch(o&&(o=' "'+o+'"'),r.linkReferenceStyle){case"collapsed":n="["+e+"][]",a="["+e+"]: "+i+o;break;case"shortcut":n="["+e+"]",a="["+e+"]: "+i+o;break;default:var s=this.references.length+1;n="["+e+"]["+s+"]",a="["+s+"]: "+i+o}return this.references.push(a),n},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},In.emphasis={filter:["em","i"],replacement:function(e,t,r){return e.trim()?r.emDelimiter+e+r.emDelimiter:""}},In.strong={filter:["strong","b"],replacement:function(e,t,r){return e.trim()?r.strongDelimiter+e+r.strongDelimiter:""}},In.code={filter:function(e){var t=e.previousSibling||e.nextSibling,r="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!r},replacement:function(e){if(!e)return"";e=e.replace(/\r?\n|\r/g," ");for(var t=/^`|^ .*?[^ ].* $|`$/.test(e)?" ":"",r="`",n=e.match(/`+/gm)||[];-1!==n.indexOf(r);)r+="`";return r+t+e+t+r}},In.image={filter:"img",replacement:function(e,t){var r=Bn(t.getAttribute("alt")),n=t.getAttribute("src")||"",a=Bn(t.getAttribute("title"));return n?"!["+r+"]("+n+(a?' "'+a+'"':"")+")":""}},qn.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=Hn(this.array,e,this.options))?t:(t=Hn(this._keep,e,this.options))?t:(t=Hn(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t<this.array.length;t++)e(this.array[t],t)}};var $n="undefined"!=typeof window?window:{};var Vn,Kn,Jn=function(){var e=$n.DOMParser,t=!1;try{(new e).parseFromString("","text/html")&&(t=!0)}catch(e){}return t}()?$n.DOMParser:((Vn=function(){}).prototype.parseFromString=function(){var t=!1;try{document.implementation.createHTMLDocument("").open()}catch(e){window.ActiveXObject&&(t=!0)}return t}()?function(e){var t=new window.ActiveXObject("htmlfile");return t.designMode="on",t.open(),t.write(e),t.close(),t}:function(e){var t=document.implementation.createHTMLDocument("");return t.open(),t.write(e),t.close(),t},Vn);function Zn(e,t){var r;"string"==typeof e?r=(Kn=Kn||new Jn).parseFromString('<x-turndown id="turndown-root">'+e+"</x-turndown>","text/html").getElementById("turndown-root"):r=e.cloneNode(!0);return function(e){var t=e.element,r=e.isBlock,n=e.isVoid,a=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!a(t)){for(var i=null,o=!1,s=null,c=Un(s,t,a);c!==t;){if(3===c.nodeType||4===c.nodeType){var u=c.data.replace(/[ \r\n\t]+/g," ");if(i&&!/ $/.test(i.data)||o||" "!==u[0]||(u=u.substr(1)),!u){c=Gn(c);continue}c.data=u,i=c}else{if(1!==c.nodeType){c=Gn(c);continue}r(c)||"BR"===c.nodeName?(i&&(i.data=i.data.replace(/ $/,"")),i=null,o=!1):n(c)||a(c)?o=!(i=null):i&&(o=!1)}var l=Un(s,c,a);s=c,c=l}i&&(i.data=i.data.replace(/ $/,""),i.data||Gn(i))}}({element:r,isBlock:jn,isVoid:zn,isPre:t.preformattedCode?Xn:null}),r}function Xn(e){return"PRE"===e.nodeName||"CODE"===e.nodeName}function Qn(e,t){var r;return e.isBlock=jn(e),e.isCode="CODE"===e.nodeName||e.parentNode.isCode,e.isBlank=!zn(r=e)&&!Yn(r,Ln)&&/^\s*$/i.test(r.textContent)&&!Wn(r,Rn)&&!Wn(r,Ln),e.flankingWhitespace=function(e,t){if(e.isBlock||t.preformattedCode&&e.isCode)return{leading:"",trailing:""};var r=(n=e.textContent,a=n.match(/^(([ \t\r\n]*)(\s*))[\s\S]*?((\s*?)([ \t\r\n]*))$/),{leading:a[1],leadingAscii:a[2],leadingNonAscii:a[3],trailing:a[4],trailingNonAscii:a[5],trailingAscii:a[6]});var n,a;r.leadingAscii&&ea("left",e,t)&&(r.leading=r.leadingNonAscii);r.trailingAscii&&ea("right",e,t)&&(r.trailing=r.trailingNonAscii);return{leading:r.leading,trailing:r.trailing}}(e,t),e}function ea(e,t,r){var n,a,i;return a="left"===e?(n=t.previousSibling,/ $/):(n=t.nextSibling,/^ /),n&&(3===n.nodeType?i=a.test(n.nodeValue):r.preformattedCode&&"CODE"===n.nodeName?i=!1:1!==n.nodeType||jn(n)||(i=a.test(n.textContent))),i}var ta=Array.prototype.reduce,ra=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function na(e){if(!(this instanceof na))return new na(e);var t={rules:In,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",preformattedCode:!1,blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}return e}({},t,e),this.rules=new qn(this.options)}function aa(e){var n=this;return ta.call(e.childNodes,function(e,t){var r="";return 3===(t=new Qn(t,n.options)).nodeType?r=t.isCode?t.nodeValue:n.escape(t.nodeValue):1===t.nodeType&&(r=function(e){var t=this.rules.forNode(e),r=aa.call(this,e),n=e.flankingWhitespace;(n.leading||n.trailing)&&(r=r.trim());return n.leading+t.replacement(r,e,this.options)+n.trailing}.call(n,t)),ia(e,r)},"")}function ia(e,t){var r=function(e){for(var t=e.length;0<t&&"\n"===e[t-1];)t--;return e.substring(0,t)}(e),n=t.replace(/^\n*/,""),a=Math.max(e.length-r.length,t.length-n.length);return r+"\n\n".substring(0,a)+n}na.prototype={turndown:function(e){if(null==(t=e)||"string"!=typeof t&&(!t.nodeType||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType))throw new TypeError(e+" is not a string, or an element/document/fragment node.");var t;if(""===e)return"";var r=aa.call(this,new Zn(e,this.options));return function(t){var r=this;return this.rules.forEach(function(e){"function"==typeof e.append&&(t=ia(t,e.append(r.options)))}),t.replace(/^[\t\r\n]+/,"").replace(/[\t\r\n\s]+$/,"")}.call(this,r)},use:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)this.use(e[t]);else{if("function"!=typeof e)throw new TypeError("plugin must be a Function or an Array of Functions");e(this)}return this},addRule:function(e,t){return this.rules.add(e,t),this},keep:function(e){return this.rules.keep(e),this},remove:function(e){return this.rules.remove(e),this},escape:function(e){return ra.reduce(function(e,t){return e.replace(t[0],t[1])},e)}};var oa=function(){return!1},sa=function(e){return e},ca=/\s{2,}(?![^<>]*<\/(pre|code|textarea)>)/g;function ua(e){return e.replace(ca," ").trim()}var la="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",fa="["+la+"]",da=RegExp("^"+fa+fa+"*"),ha=RegExp(fa+fa+"*$"),pa=function(e,t,r){var n={},a=g(function(){return!!la[e]()||"​…"!="​…"[e]()}),i=n[e]=a?t(ma):la[e];r&&(n[r]=i),z(z.P+z.F*a,"String",n)},ma=pa.trim=function(e,t){return e=String(c(e)),1&t&&(e=e.replace(da,"")),2&t&&(e=e.replace(ha,"")),e},ga=pa,va=y.parseInt,ya=ga.trim,_a=/^[-+]?0[xX]/,ba=8!==va(la+"08")||22!==va(la+"0x16")?function(e,t){var r=ya(String(e),3);return va(r,t>>>0||(_a.test(r)?16:10))}:va;z(z.G+z.F*(parseInt!=ba),{parseInt:ba});var Aa=S.parseInt,wa=new RegExp("(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})","i"),xa=/[a-z]/i,ka=/^[a-z]+$/i,Ea=/^[0-9]+$/i,Ma=/charset=([\w-]+)\b/;function Sa(e){return e.split("#")[0].replace(/\/$/,"")}z(z.S,"Array",{isArray:ge});var Ta=S.Array.isArray;var Ca=function(e){if(Ta(e))return e},Da=S.getIterator=function(e){var t=Vt(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return D(t.call(e))};var Oa=function(e,t){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=Da(e);!(n=(o=s.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){a=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}return r};var Na=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var Pa=function(e,t){return Ca(e)||Oa(e,t)||Na()};function ja(e,t){var r=t||Sn.parse(e),n=r.protocol,a=r.host,i=r.path,d=!1,o=i.split("/").reverse().reduce(function(e,t,r){var n,a,i,o,s=t;if(s.includes(".")){var c=s.split("."),u=Pa(c,2),l=u[0],f=u[1];ka.test(f)&&(s=l)}return wa.test(s)&&r<2&&(s=s.replace(wa,"")),0===r&&(d=xa.test(s)),n=s,i=d,o=!0,(a=r)<2&&Ea.test(n)&&n.length<3&&(o=!0),0===a&&"index"===n.toLowerCase()&&(o=!1),a<2&&n.length<3&&!i&&(o=!1),o&&e.push(s),e},[]);return"".concat(n,"//").concat(a).concat(o.reverse().join("/"))}var Ra=new RegExp(".( |$)");function za(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:10;return e.trim().split(/\s+/).slice(0,t).join(" ")}function La(e){var t="utf-8",r=Ma.exec(e);null!==r&&(e=Pa(r,2)[1]);return oa(e)&&(t=e),t}var Ya=function(i){var o=0;return i=i.toString(),function(){var e=i.indexOf("\r\n",o),t=i.indexOf("\n",o),r=i.indexOf("\r",o),n=[e,t,r].sort(function(e,t){return t<e?1:e<t?-1:0}).filter(function(e){return-1!==e})[0];if(void 0!==n)return s(n,n===e?2:1);var a=i.length;return a===o?null:s(a,0)};function s(e,t){var r=i.substr(o,e-o);return o=e+t,r}},Wa=/^[A-Z_]+(\/\d\.\d)? /,Ia=/^([A-Z_]+) (.+) [A-Z]+\/(\d)\.(\d)$/,Ba=/^[A-Z]+\/(\d)\.(\d) (\d{3}) (.*)$/,qa=function(e,t){return r=function(e){e&&e._header&&(e=e._header);return e&&"function"==typeof e.toString?e.toString().trim():""}(e),n=t,s=(o=r).indexOf("\r\n"),i=-1===s?o:o.slice(0,s),n&&Wa.test(i)?Ha(r):null!==(a=i.match(Ia))?{method:a[1],url:a[2],version:{major:parseInt(a[3],10),minor:parseInt(a[4],10)},headers:Ha(r)}:null!==(a=i.match(Ba))?{version:{major:parseInt(a[1],10),minor:parseInt(a[2],10)},statusCode:parseInt(a[3],10),statusMessage:a[4],headers:Ha(r)}:Ha(r);var r,n,a,i,o,s};function Ha(e){var t,r,n,a={},i=Ya(e),o=i();for(Wa.test(o)&&(o=i());o;)o=(" "!==o[0]&&"\t"!==o[0]?(r&&Fa(r,n,a),t=o.indexOf(":"),r=o.substr(0,t),n=o.substr(t+1).trim()):n+=" "+o.trim(),i());return r&&Fa(r,n,a),a}function Fa(e,t,r){switch(e=e.toLowerCase()){case"set-cookie":void 0!==r[e]?r[e].push(t):r[e]=[t];break;case"content-type":case"content-length":case"user-agent":case"referer":case"host":case"authorization":case"proxy-authorization":case"if-modified-since":case"if-unmodified-since":case"from":case"location":case"max-forwards":case"retry-after":case"etag":case"last-modified":case"server":case"age":case"expires":void 0===r[e]&&(r[e]=t);break;default:"string"==typeof r[e]?r[e]+=", "+t:r[e]=t}}var Ga=XMLHttpRequest;if(!Ga)throw new Error("missing XMLHttpRequest");Ua.log={trace:Va,debug:Va,info:Va,warn:Va,error:Va};function Ua(e,t){if("function"!=typeof t)throw new Error("Bad callback given: "+t);if(!e)throw new Error("No options given");var r=e.onResponse;if((e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e))).onResponse=r,e.verbose&&(Ua.log=function(){var e,t,r={},n=["trace","debug","info","warn","error"];for(t=0;t<n.length;t++)r[e=n[t]]=Va,"undefined"!=typeof console&&console&&console[e]&&(r[e]=Ka(console,e));return r}()),e.url&&(e.uri=e.url,delete e.url),!e.uri&&""!==e.uri)throw new Error("options.uri is a required argument");if("string"!=typeof e.uri)throw new Error("options.uri must be a string");for(var n=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],a=0;a<n.length;a++)if(e[n[a]])throw new Error("options."+n[a]+" is not supported");if(e.callback=t,e.method=e.method||"GET",e.headers=e.headers||{},e.body=e.body||null,e.timeout=e.timeout||Ua.DEFAULT_TIMEOUT,e.headers.host)throw new Error("Options.headers.host is not supported");e.json&&(e.headers.accept=e.headers.accept||"application/json","GET"!==e.method&&(e.headers["content-type"]="application/json"),"boolean"!=typeof e.json?e.body=JSON.stringify(e.json):"string"!=typeof e.body&&(e.body=JSON.stringify(e.body)));var i=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.join("&")};if(e.qs){var o="string"==typeof e.qs?e.qs:i(e.qs);-1!==e.uri.indexOf("?")?e.uri=e.uri+"&"+o:e.uri=e.uri+"?"+o}if(e.form){if("string"==typeof e.form)throw"form name unsupported";if("POST"===e.method){var s=(e.encoding||"application/x-www-form-urlencoded").toLowerCase();switch(e.headers["content-type"]=s){case"application/x-www-form-urlencoded":e.body=i(e.form).replace(/%20/g,"+");break;case"multipart/form-data":var c=function(e){var t={};t.boundry="-------------------------------"+Math.floor(1e9*Math.random());var r=[];for(var n in e)e.hasOwnProperty(n)&&r.push("--"+t.boundry+'\nContent-Disposition: form-data; name="'+n+'"\n\n'+e[n]+"\n");return r.push("--"+t.boundry+"--"),t.body=r.join(""),t.length=t.body.length,t.type="multipart/form-data; boundary="+t.boundry,t}(e.form);e.body=c.body,e.headers["content-type"]=c.type;break;default:throw new Error("unsupported encoding:"+s)}}}return e.onResponse=e.onResponse||Va,!0===e.onResponse&&(e.onResponse=t,e.callback=Va),!e.headers.authorization&&e.auth&&(e.headers.authorization="Basic "+function(e){var t,r,n,a,i,o,s,c,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,f=0,d="",h=[];if(!e)return e;for(;t=e.charCodeAt(l++),r=e.charCodeAt(l++),n=e.charCodeAt(l++),a=(c=t<<16|r<<8|n)>>18&63,i=c>>12&63,o=c>>6&63,s=63&c,h[f++]=u.charAt(a)+u.charAt(i)+u.charAt(o)+u.charAt(s),l<e.length;);switch(d=h.join(""),e.length%3){case 1:d=d.slice(0,-2)+"==";break;case 2:d=d.slice(0,-1)+"="}return d}(e.auth.username+":"+e.auth.password)),function(r){var n=new Ga,a=!1,t=function(e){var t,r=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;try{t=location.href}catch(e){(t=document.createElement("a")).href="",t=t.href}var n=r.exec(t.toLowerCase())||[],a=r.exec(e.toLowerCase());return!(!a||a[1]==n[1]&&a[2]==n[2]&&(a[3]||("http:"===a[1]?80:443))==(n[3]||("http:"===n[1]?80:443)))}(r.uri),e="withCredentials"in n;if($a+=1,n.seq_id=$a,n.id=$a+": "+r.method+" "+r.uri,n._id=n.id,t&&!e){var i=new Error("Browser does not support cross-origin request: "+r.uri);return i.cors="unsupported",r.callback(i,n)}n.timeoutTimer=setTimeout(function(){a=!0;var e=new Error("ETIMEDOUT");return e.code="ETIMEDOUT",e.duration=r.timeout,Ua.log.error("Timeout",{id:n._id,milliseconds:r.timeout}),r.callback(e,n)},r.timeout);var o={response:!1,loading:!1,end:!1};n.onreadystatechange=function(e){if(a)return Ua.log.debug("Ignoring timed out state change",{state:n.readyState,id:n.id});if(Ua.log.debug("State change",{state:n.readyState,id:n.id,timed_out:a}),n.readyState===Ga.OPENED)for(var t in Ua.log.debug("Request started",{id:n.id}),r.headers)n.setRequestHeader(t,r.headers[t]);else n.readyState===Ga.HEADERS_RECEIVED?s():n.readyState===Ga.LOADING?(s(),c()):n.readyState===Ga.DONE&&(s(),c(),function(){if(!o.end){if(o.end=!0,Ua.log.debug("Request done",{id:n.id}),n.body=n.responseText,n.headers=qa(n.getAllResponseHeaders()),r.json)try{n.body=JSON.parse(n.responseText)}catch(e){return r.callback(e,n)}r.callback(null,n,n.body)}}())},n.open(r.method,r.uri,!0),t&&(n.withCredentials=!!r.withCredentials);return n.send(r.body),n;function s(){if(!o.response){if(o.response=!0,Ua.log.debug("Got response",{id:n.id,status:n.status}),clearTimeout(n.timeoutTimer),n.statusCode=n.status,t&&0==n.statusCode){var e=new Error("CORS request rejected: "+r.uri);return e.cors="rejected",o.loading=!0,o.end=!0,r.callback(e,n)}r.onResponse(null,n)}}function c(){o.loading||(o.loading=!0,Ua.log.debug("Response body loading",{id:n.id}))}}(e)}var $a=0;Ua.withCredentials=!1,Ua.DEFAULT_TIMEOUT=18e4,Ua.defaults=function(a,e){var t=function(n){return function(e,t){for(var r in e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e)),a)void 0===e[r]&&(e[r]=a[r]);return n(e,t)}},r=t(Ua);return r.get=t(Ua.get),r.post=t(Ua.post),r.put=t(Ua.put),r.head=t(Ua.head),r};function Va(){}function Ka(r,n){return function(e,t){"object"==typeof t&&(e+=" "+JSON.stringify(t));return r[n].call(r,e)}}["get","put","post","head"].forEach(function(e){var r=e.toUpperCase();Ua[e.toLowerCase()]=function(e){"string"==typeof e?e={method:r,uri:e}:(e=JSON.parse(JSON.stringify(e))).method=r;var t=[e].concat(Array.prototype.slice.apply(arguments,[1]));return Ua.apply(this,t)}}),Ua.couch=function(e,a){return"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,a=a||Va,Ua(e,function(e,t,r){if(e)return a(e,t,r);if((t.statusCode<200||299<t.statusCode)&&r.error){for(var n in e=new Error("CouchDB error: "+(r.error.reason||r.error.error)),r)e[n]=r[n];return a(e,t,r)}return a(e,t,r)})};var Ja=Ua,Za=Cn.browser?{}:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},Xa=1e4,Qa=new RegExp("^(".concat(["audio/mpeg","image/gif","image/jpeg","image/jpg"].join("|"),")$"),"i"),ei=5242880;function ti(e){return new Kr(function(n,a){Ja(e,function(e,t,r){e?a(e):n({body:r,response:t})})})}function ri(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(e.statusMessage&&"OK"!==e.statusMessage||200!==e.statusCode){if(!e.statusCode)throw new Error("Unable to fetch content. Original exception was ".concat(e.error));if(!t)throw new Error("Resource returned a response status code of ".concat(e.statusCode," and resource was instructed to reject non-200 status codes."))}var r=e.headers,n=r["content-type"],a=r["content-length"];if(Qa.test(n))throw new Error("Content-type for this resource was ".concat(n," and is not allowed."));if(ei<a)throw new Error("Content for this resource was too large. Maximum content length is ".concat(ei,"."));return!0}function ni(e,t){return ai.apply(this,arguments)}function ai(){return(ai=Zr(M.mark(function e(t,r){var n,a,i,o,s,c=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=2<c.length&&void 0!==c[2]?c[2]:{},r=r||Sn.parse(encodeURI(t)),a=pt({url:r.href,headers:pt({},Za,n),timeout:Xa,jar:!0,encoding:null,gzip:!0,followAllRedirects:!0},"undefined"!=typeof window?{}:{followRedirect:!0}),e.next=5,ti(a);case 5:return i=e.sent,o=i.response,s=i.body,e.prev=8,ri(o),e.abrupt("return",{body:s,response:o});case 13:return e.prev=13,e.t0=e.catch(8),e.abrupt("return",{error:!0,message:e.t0.message});case 16:case"end":return e.stop()}},e,this,[[8,13]])}))).apply(this,arguments)}function ii(a,i,o){return a("meta[".concat(i,"]")).each(function(e,t){var r=a(t),n=r.attr(i);r.attr(o,n),r.removeAttr(i)}),a}var oi=y.Reflect,si=oi&&oi.ownKeys||function(e){var t=Me.f(D(e)),r=me.f;return r?t.concat(r(e)):t};z(z.S,"Reflect",{ownKeys:si});var ci=S.Reflect.ownKeys,ui=new RegExp("transparent|spacer|blank","i"),li="mercury-parser-keep",fi=['iframe[src^="https://www.youtube.com"]','iframe[src^="https://www.youtube-nocookie.com"]','iframe[src^="http://www.youtube.com"]','iframe[src^="https://player.vimeo"]','iframe[src^="http://player.vimeo"]','iframe[src^="https://www.redditmedia.com"]'],di=["title","script","noscript","link","style","hr","embed","iframe","object"],hi=new RegExp("^(".concat(["src","srcset","sizes","type","href","class","id","alt","xlink:href","width","height"].join("|"),")$"),"i"),pi=["ul","ol","table","div","button","form"].join(","),mi=["h2","h3","h4","h5","h6"].join(","),gi=["a","blockquote","dl","div","img","p","pre","table"].join(","),vi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),yi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),_i="meta[name=generator][value^=WordPress]",bi=new RegExp("pag(e|ing|inat)","i"),Ai=new RegExp("^(".concat(["article","aside","blockquote","body","br","button","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","map","object","ol","output","p","pre","progress","section","table","tbody","textarea","tfoot","th","thead","tr","ul","video"].join("|"),")$"),"i"),wi=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","header","hidden","loader","login","menu","meta","nav","outbrain","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","taboola","tools"].join("|"),xi=new RegExp(wi,"i"),ki=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"].join("|"),Ei=new RegExp(ki,"i");function Mi(a){var i=!1;return a("br").each(function(e,t){var r=a(t),n=r.next().get(0);n&&"br"===n.tagName.toLowerCase()?(i=!0,r.remove()):i&&function(e,t){var r=2<arguments.length&&void 0!==arguments[2]&&arguments[2],n=t(e);if(r){for(var a=e.nextSibling,i=t("<p></p>");a&&(!a.tagName||!Ai.test(a.tagName));){var o=a,s=o.nextSibling;t(a).appendTo(i),a=s}return n.replaceWith(i),n.remove()}}(t,a,!(i=!1))}),a}function Si(e){var n,a;return e=Mi(e),(n=e)("div").each(function(e,t){var r=n(t);0===r.children(gi).length&&Ti(r,n,"p")}),(a=e=n)("span").each(function(e,t){var r=a(t);0===r.parents("p, div, li, figcaption").length&&Ti(r,a,"p")}),e=a}function Ti(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"p",n=e.get(0);if(!n)return t;var a,i=ns(n)||{},o=ci(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join(" ");return a=t.browser?"noscript"===n.tagName.toLowerCase()?e.text():e.html():e.contents(),e.replaceWith("<".concat(r," ").concat(o,">").concat(a,"</").concat(r,">")),t}function Ci(e,s){return e.find("img").each(function(e,t){var r,n,a,i,o=s(t);n=Aa((r=o).attr("height"),10),a=Aa(r.attr("width"),10)||20,(n||20)<10||a<10?r.remove():n&&r.removeAttr("height"),i=o,ui.test(i.attr("src"))&&i.remove()}),s}var Di=function(e){if(Ta(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}},Oi=function(e,t,r){t in e?N.f(e,t,w(0,r)):e[t]=r};z(z.S+z.F*!Cr(function(e){}),"Array",{from:function(e){var t,r,n,a,i=ut(e),o="function"==typeof this?this:Array,s=arguments.length,c=1<s?arguments[1]:void 0,u=void 0!==c,l=0,f=Vt(i);if(u&&(c=C(c,2<s?arguments[2]:void 0,2)),null==f||o==Array&&Ut(f))for(r=new o(t=ie(i.length));l<t;l++)Oi(r,l,u?c(i[l],l):i[l]);else for(a=f.call(i),r=new o;!(n=a.next()).done;l++)Oi(r,l,u?Ht(a,c,[n.value,l],!0):n.value);return r.length=l,r}});var Ni=S.Array.from,Pi=V("iterator"),ji=S.isIterable=function(e){var t=Object(e);return void 0!==t[Pi]||"@@iterator"in t||vt.hasOwnProperty(Bt(t))};var Ri=function(e){if(ji(Object(e))||"[object Arguments]"===Object.prototype.toString.call(e))return Ni(e)};var zi=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")};var Li=function(e){return Di(e)||Ri(e)||zi()};function Yi(e,t){return e.find("*").each(function(e,t){var r=ns(t);!function(t,r){if(t.attribs)t.attribs=r;else if(t.attributes){for(;0<t.attributes.length;)t.removeAttribute(t.attributes[0].name);ci(r).forEach(function(e){t.setAttribute(e,r[e])})}}(t,ci(r).reduce(function(e,t){return hi.test(t)?pt({},e,ht({},t,r[t])):e},{}))}),t(".".concat(li),e).removeClass(li),e}var Wi=new RegExp("^(".concat(["br","b","i","label","hr","area","base","basefont","input","img","link","meta"].join("|"),")$"),"i"),Ii=[[".hentry",".entry-content"],["entry",".entry-content"],[".entry",".entry_content"],[".post",".postbody"],[".post",".post_body"],[".post",".post-body"]],Bi=new RegExp(["figure","photo","image","caption"].join("|"),"i"),qi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),Hi=new RegExp("entry-content-asset","i"),Fi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),Gi=new RegExp("^(p|li|span|pre)$","i"),Ui=new RegExp("^(td|blockquote|ol|ul|dl)$","i"),$i=new RegExp("^(address|form)$","i");function Vi(e){var t=e.attr("class"),r=e.attr("id"),n=0;return r&&(qi.test(r)&&(n+=25),Fi.test(r)&&(n-=25)),t&&(0===n&&(qi.test(t)&&(n+=25),Fi.test(t)&&(n-=25)),Bi.test(t)&&(n+=10),Hi.test(t)&&(n+=25)),n}var Ki=y.parseFloat,Ji=ga.trim,Zi=1/Ki(la+"-0")!=-1/0?function(e){var t=Ji(String(e),3),r=Ki(t);return 0===r&&"-"==t.charAt(0)?-0:r}:Ki;z(z.G+z.F*(parseFloat!=Zi),{parseFloat:Zi});var Xi=S.parseFloat;function Qi(e){return Xi(e.attr("score"))||null}function eo(e){return(e.match(/,/g)||[]).length}var to=new RegExp("^(p|pre)$","i");function ro(e){var t=1,r=e.text().trim(),n=r.length;return n<25?0:(t+=eo(r),t+=function(e){var t,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"p",n=e/50;return 0<n?(t=to.test(r)?n-2:n-1.25,Math.min(Math.max(t,0),3)):0}(n),":"===r.slice(-1)&&(t-=1),t)}function no(e,t,r){return e.attr("score",r),e}function ao(e,t,r){try{no(e,0,io(e,t)+r)}catch(e){}return e}function io(e,t){var r,n,a,i=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],o=Qi(e);return o||(o=oo(e),i&&(o+=Vi(e)),r=t,n=o,(a=e.parent())&&ao(a,r,.25*n),o)}function oo(e){var t=e.get(0).tagName;return Gi.test(t)?ro(e):"div"===t.toLowerCase()?5:Ui.test(t)?3:$i.test(t)?-3:"th"===t.toLowerCase()?-5:0}function so(e,t,r){var n,a;e&&(a=t,(n=e).get(0)&&"span"===n.get(0).tagName&&Ti(n,a,"div"),ao(e,t,r))}function co(i,o){return i("p, pre").not("[score]").each(function(e,t){var r=i(t),n=(r=no(r,0,io(r,i,o))).parent(),a=oo(r);so(n,i,a),n&&so(n.parent(),i,a/2)}),i}function uo(u,l,f){if(!u.parent().length)return u;var d=Math.max(10,.25*l),h=f("<div></div>");return u.parent().children().each(function(e,t){var r=f(t);if(Wi.test(t.tagName))return null;var n,a=Qi(r);if(a)if(r.get(0)===u.get(0))h.append(r);else{var i=0,o=Vo(r);if(o<.05&&(i+=20),.5<=o&&(i-=20),r.attr("class")===u.attr("class")&&(i+=.2*l),d<=a+i)return h.append(r);if("p"===t.tagName){var s=r.text(),c=$o(s);if(80<c&&o<.25)return h.append(r);if(c<=80&&0===o&&(n=s,Ra.test(n)))return h.append(r)}}return null}),1===h.children().length&&h.children().first().get(0)===u.get(0)?u:h}function lo(e,a){return a(pi,e).each(function(e,t){var r=a(t);if(!(r.hasClass(li)||0<r.find(".".concat(li)).length)){var n=Qi(r);n||no(r,0,n=io(r,a)),n<0?r.remove():function(e,t,r){if(!e.hasClass("entry-content-asset")){var n=ua(e.text());if(eo(n)<10){if(t("p",e).length/3<t("input",e).length)return e.remove();var a=n.length,i=t("img",e).length;if(a<25&&0===i)return e.remove();var o=Vo(e);if(r<25&&.2<o&&75<a)return e.remove();if(25<=r&&.5<o){var s=e.get(0).tagName.toLowerCase();if("ol"===s||"ul"===s){var c=e.prev();if(c&&":"===ua(c.text()).slice(-1))return}return e.remove()}0<t("script",e).length&&a<150&&e.remove()}}}(r,a,n)}}),a}var fo,ho,po,mo,go,vo,yo,_o,bo,Ao,wo,xo,ko,Eo,Mo,So,To,Co,Do,Oo,No,Po=function(e,t){if(!l(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},jo=N.f,Ro=U.fastKey,zo=v?"_s":"size",Lo=function(e,t){var r,n=Ro(t);if("F"!==n)return e._i[n];for(r=e._f;r;r=r.n)if(r.k==t)return r},Yo={getConstructor:function(e,i,r,n){var a=e(function(e,t){qt(e,a,i,"_i"),e._t=i,e._i=ke(null),e._f=void 0,e._l=void 0,e[zo]=0,null!=t&&Kt(t,r,e[n],e)});return br(a.prototype,{clear:function(){for(var e=Po(this,i),t=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete t[r.i];e._f=e._l=void 0,e[zo]=0},delete:function(e){var t=Po(this,i),r=Lo(t,e);if(r){var n=r.n,a=r.p;delete t._i[r.i],r.r=!0,a&&(a.n=n),n&&(n.p=a),t._f==r&&(t._f=n),t._l==r&&(t._l=a),t[zo]--}return!!r},forEach:function(e){Po(this,i);for(var t,r=C(e,1<arguments.length?arguments[1]:void 0,3);t=t?t.n:this._f;)for(r(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!Lo(Po(this,i),e)}}),v&&jo(a.prototype,"size",{get:function(){return Po(this,i)[zo]}}),a},def:function(e,t,r){var n,a,i=Lo(e,t);return i?i.v=r:(e._l=i={i:a=Ro(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=i),n&&(n.n=i),e[zo]++,"F"!==a&&(e._i[a]=i)),e},getEntry:Lo,setStrong:function(e,r,t){St(e,r,function(e,t){this._t=Po(e,r),this._k=t,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Ct(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Ct(1))},t?"entries":"values",!t,!0),wr(r)}},Wo=V("species"),Io=function(e,t){return ge(r=e)&&("function"!=typeof(n=r.constructor)||n!==Array&&!ge(n.prototype)||(n=void 0),l(n)&&null===(n=n[Wo])&&(n=void 0)),new(void 0===n?Array:n)(t);var r,n},Bo=N.f,qo=(po=1==(fo=0),mo=2==fo,go=3==fo,vo=4==fo,yo=6==fo,_o=5==fo||yo,bo=ho||Io,function(e,t,r){for(var n,a,i=ut(e),o=d(i),s=C(t,r,3),c=ie(o.length),u=0,l=po?bo(e,c):mo?bo(e,0):void 0;u<c;u++)if((_o||u in o)&&(a=s(n=o[u],u,i),fo))if(po)l[u]=a;else if(a)switch(fo){case 3:return!0;case 5:return n;case 6:return u;case 2:l.push(n)}else if(vo)return!1;return yo?-1:go||vo?vo:l});wo=function(e){return function(){return e(this,0<arguments.length?arguments[0]:void 0)}},xo={add:function(e){return Yo.def(Po(this,"Set"),e=0===e?0:e,e)}},ko=Yo,So=y[Ao="Set"],Co=Eo?"set":"add",Do=(To=So)&&To.prototype,Oo={},v&&"function"==typeof To&&(Mo||Do.forEach&&!g(function(){(new To).entries().next()}))?(To=wo(function(e,t){qt(e,To,Ao,"_c"),e._c=new So,null!=t&&Kt(t,Eo,e[Co],e)}),qo("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(n){var a="add"==n||"set"==n;n in Do&&(!Mo||"clear"!=n)&&P(To.prototype,n,function(e,t){if(qt(this,To,n),!a&&Mo&&!l(e))return"get"==n&&void 0;var r=this._c[n](0===e?0:e,t);return a?this:r})}),Mo||Bo(To.prototype,"size",{get:function(){return this._c.size}})):(To=ko.getConstructor(wo,Ao,Eo,Co),br(To.prototype,xo),U.NEED=!0),Z(To,Ao),Oo[Ao]=To,z(z.G+z.W+z.F,Oo),Mo||ko.setStrong(To,Ao,Eo);z(z.P+z.R,"Set",{toJSON:(No="Set",function(){if(Bt(this)!=No)throw TypeError(No+"#toJSON isn't generic");return Kt(this,!(t=[]),t.push,t,e),t;var e,t})});var Ho;Ho="Set",z(z.S,Ho,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}});var Fo;Fo="Set",z(z.S,Fo,{from:function(e){var t,r,n,a,i=arguments[1];return T(this),(t=void 0!==i)&&T(i),null==e?new this:(r=[],t?(n=0,a=C(i,arguments[2],2),Kt(e,!1,function(e){r.push(a(e,n++))})):Kt(e,!1,r.push,r),new this(r))}});var Go=S.Set;function Uo(e,r,n){var i;return["href","src"].forEach(function(e){return a=n,i=e,o=(t=r)("base").attr("href"),void t("[".concat(i,"]")).each(function(e,t){var r=ns(t)[i];if(r){var n=Sn.resolve(o||a,r);as(t,i,n)}});var t,a,i,o}),i=n,r("[srcset]",e).each(function(e,t){var r=ns(t).srcset;if(r){var n=r.match(/(?:\s*)(\S+(?:\s*[\d.]+[wx])?)(?:\s*,\s*)?/g);if(!n)return;var a=n.map(function(e){var t=e.trim().replace(/,$/,"").split(/\s+/);return t[0]=Sn.resolve(i,t[0]),t.join(" ")});as(t,"srcset",Li(new Go(a)).join(", "))}}),e}function $o(e){return e.trim().replace(/\s+/g," ").length}function Vo(e){var t=$o(e.text()),r=$o(e.find("a").text());return 0<t?r/t:0===t&&0<r?1:0}var Ko=X.f("iterator");ee("asyncIterator"),ee("observable");var Jo=S.Symbol,Zo=e(function(t){function r(e){return(r="function"==typeof Jo&&"symbol"==typeof Ko?function(e){return typeof e}:function(e){return e&&"function"==typeof Jo&&e.constructor===Jo&&e!==Jo.prototype?"symbol":typeof e})(e)}function n(e){return"function"==typeof Jo&&"symbol"===r(Ko)?t.exports=n=function(e){return r(e)}:t.exports=n=function(e){return e&&"function"==typeof Jo&&e.constructor===Jo&&e!==Jo.prototype?"symbol":r(e)},n(e)}t.exports=n});function Xo(n,e,t){var a=!(3<arguments.length&&void 0!==arguments[3])||arguments[3],r=e.filter(function(e){return-1!==t.indexOf(e)}),i=!0,o=!1,s=void 0;try{for(var c,u=function(){var e=c.value,t=n("meta[".concat("name",'="').concat(e,'"]')).map(function(e,t){return n(t).attr("value")}).toArray().filter(function(e){return""!==e});if(1===t.length){var r;if(a)r=ts(t[0],n);else r=Pa(t,1)[0];return{v:r}}},l=Da(r);!(i=(c=l.next()).done);i=!0){var f=u();if("object"===Zo(f))return f.v}}catch(e){o=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(o)throw s}}return null}function Qo(e,t){return!(e.children().length>t)&&void 0===e.parents().toArray().find(function(e){var t=ns(e),r=t.class,n=t.id,a="".concat(r," ").concat(n);return a.includes("comment")})}function es(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:1,n=!(3<arguments.length&&void 0!==arguments[3])||arguments[3],a=!0,i=!1,o=void 0;try{for(var s,c=Da(t);!(a=(s=c.next()).done);a=!0){var u=e(s.value);if(1===u.length){var l=e(u[0]);if(Qo(l,r)){var f=void 0;if(f=n?l.text():l.html())return f}}}}catch(e){i=!0,o=e}finally{try{a||null==c.return||c.return()}finally{if(i)throw o}}return null}function ts(e,t){var r=t("<span>".concat(e,"</span>")).text();return""===r?e:r}function rs(e){return 100<=e.text().trim().length}function ns(e){var t=e.attribs,n=e.attributes;return t||!n?t:ci(n).reduce(function(e,t){var r=n[t];return r.name&&r.value&&(e[r.name]=r.value),e},{})}function as(e,t,r){return e.attribs?e.attribs[t]=r:e.attributes&&e.setAttribute(t,r),e}var is=new RegExp("https?://","i"),os=".(png|gif|jpe?g)",ss=new RegExp("".concat(os),"i"),cs=new RegExp("".concat(os,"(\\?\\S+)?(\\s*[\\d.]+[wx])"),"i"),us=["script","style","form"].join(",");function ls(i){return i("img").each(function(e,n){var a=ns(n);ci(a).forEach(function(e){var t=a[e];if("srcset"!==e&&is.test(t)&&cs.test(t))i(n).attr("srcset",t);else if("src"!==e&&"srcset"!==e&&is.test(t)&&ss.test(t)){var r=function(e){try{var t=JSON.parse(e).src;if("string"==typeof t)return t}catch(e){return!1}return!1}(t);r?i(n).attr("src",r):i(n).attr("src",t)}})}),i}function fs(e,t){return"comment"===t.type}function ds(e){var t;return e(us).remove(),(t=e).root().find("*").contents().filter(fs).remove(),e=t}var hs,ps={create:(hs=Zr(M.mark(function e(t,r,n){var a,i,o=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(a=3<o.length&&void 0!==o[3]?o[3]:{},!r){e.next=6;break}i={body:r,response:{statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}},alreadyDecoded:!0},e.next=9;break;case 6:return e.next=8,ni(t,n,a);case 8:i=e.sent;case 9:if(i.error)return i.failed=!0,e.abrupt("return",i);e.next=12;break;case 12:return e.abrupt("return",this.generateDoc(i));case 13:case"end":return e.stop()}},e,this)})),function(e,t,r){return hs.apply(this,arguments)}),generateDoc:function(e){var t=e.body,r=e.response,n=e.alreadyDecoded,a=void 0!==n&&n,i=r.headers["content-type"],o=void 0===i?"":i;if(!o.includes("html")&&!o.includes("text"))throw new Error("Content does not appear to be text.");var s=this.encodeDoc({content:t,contentType:o,alreadyDecoded:a});if(0===s.root().children().length)throw new Error("No children, likely a bad parse.");return s=ds(s=ls(s=ii(ii(s,"content","value"),"property","name")))},encodeDoc:function(e){var t=e.content,r=e.contentType,n=e.alreadyDecoded;if(void 0!==n&&n)return Cn.load(t);var a=La(r),i=sa(t,a),o=Cn.load(i),s=o(Cn.browser?"meta[http-equiv=content-type]":"meta[http-equiv=content-type i]").attr("content")||o("meta[charset]").attr("charset"),c=La(s);return s&&c!==a&&(i=sa(t,c),o=Cn.load(i)),o}},ms=M.mark(gs);function gs(){var t,r,n=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t=0<n.length&&void 0!==n[0]?n[0]:1,r=1<n.length&&void 0!==n[1]?n[1]:1;case 2:if(t<=r)return e.next=5,t+=1;e.next=7;break;case 5:e.next=2;break;case 7:case"end":return e.stop()}},ms,this)}var vs=Object.assign,ys=!vs||g(function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach(function(e){t[e]=e}),7!=vs({},e)[r]||Object.keys(vs({},t)).join("")!=n})?function(e,t){for(var r=ut(e),n=arguments.length,a=1,i=me.f,o=h.f;a<n;)for(var s,c=d(arguments[a++]),u=i?pe(c).concat(i(c)):pe(c),l=u.length,f=0;f<l;)o.call(c,s=u[f++])&&(r[s]=c[s]);return r}:vs;z(z.S+z.F,"Object",{assign:ys});var _s=S.Object.assign,bs=function(r,e){return e.reduce(function(e,t){return e[t]=r,e},{})};function As(e){return e.supportedDomains?bs(e,[e.domain].concat(Li(e.supportedDomains))):bs(e,[e.domain])}var ws={};function xs(e){return e&&e.domain?(_s(ws,As(e)),ws):{error:!0,message:"Unable to add custom extractor. Invalid parameters."}}var ks={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},Es={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var r=t.browser?t(e.text()):e.children();return 1===r.length&&void 0!==r.get(0)&&"img"===r.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},Ms={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var r=JSON.parse(e.attr("data-props")).sources[0].src,n=t("<img />").attr("src",r);e.replaceWith(n)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ss={domain:"medium.com",title:{selectors:["h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:["article"],transforms:{"section span:first-of-type":function(e){var t=e.html();1===t.length&&/^[a-zA-Z()]+$/.test(t)&&e.replaceWith(t)},iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,r=decodeURIComponent(e.attr("data-thumbnail")),n=e.parents("figure");if(t.test(r)){var a=r.match(t),i=Pa(a,2),o=(i[0],i[1]);e.attr("src","https://www.youtube.com/embed/".concat(o));var s=n.find("figcaption");n.empty().append([e,s])}else n.remove()},figure:function(e){if(!(0<e.find("iframe").length)){var t=e.find("img").slice(-1)[0],r=e.find("figcaption");e.empty().append([t,r])}},img:function(e){Aa(e.attr("width"),10)<100&&e.remove()}},clean:["span a","svg"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ts={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".byline-name",".author"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"],['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",".pane-node-body"],transforms:{".pane-node-body":function(e,t){var r=Pa(Ts.lead_image_url.selectors[0],2),n=r[0],a=r[1],i=t(n).attr(a);i&&e.prepend('<img src="'.concat(i,'" />'))}},clean:[]}},Cs={domain:"genius.com",title:{selectors:["h1"]},author:{selectors:["h2 a"]},date_published:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.release_date}]]},dek:{selectors:[]},lead_image_url:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.album.cover_art_url}]]},content:{selectors:[".lyrics"],transforms:{},clean:[]}},Ds={domain:"wired.jp",title:{selectors:['h1[data-testid="ContentHeaderHed"]',"h1.post-title"]},author:{selectors:[['meta[name="article:author"]',"value"],'p[itemprop="author"]']},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time","datetime"]]},dek:{selectors:['div[class^="ContentHeaderDek"]',".post-intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[data-attribute-verso-pattern="article-body"]',"article.article-detail"],transforms:{"img[data-original]":function(e){var t=e.attr("data-original"),r=e.attr("src"),n=Sn.resolve(r,t);e.attr("src",n)}},clean:[".post-category","time","h1.post-title",".social-area-syncer"]}},Os={domain:"www.abendblatt.de",title:{selectors:["h2.article__header__headline"]},author:{selectors:["span.author-info__name-text"]},date_published:{selectors:[["time.teaser-stream-time","datetime"],["time.article__header__date","datetime"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__body"],transforms:{p:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",r=0,n=e.text();r<n.length;r+=1){var a=n.charCodeAt(r);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":33<a&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null},div:function(e){if(!e.hasClass("obfuscated"))return null;for(var t="",r=0,n=e.text();r<n.length;r+=1){var a=n.charCodeAt(r);177===a?t+="%":178===a?t+="!":180===a?t+=";":181===a?t+="=":32===a?t+=" ":10===a?t+="\n":33<a&&(t+=String.fromCharCode(a-1))}return e.html(t),e.removeClass("obfuscated"),e.addClass("deobfuscated"),null}},clean:[]}},Ns=Object.freeze({BloggerExtractor:ks,NYMagExtractor:Es,WikipediaExtractor:{domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},TwitterExtractor:{domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var r=e.find(".tweet"),n=t('<div id="TWEETS_GO_HERE"></div>');n.append(r),e.replaceWith(n)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},NYTimesExtractor:{domain:"www.nytimes.com",title:{selectors:['h1[data-testid="headline"]',"h1.g-headline",'h1[itemprop="headline"]',"h1.headline","h1 .balancedHeadline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline",['meta[name="byl"]',"value"]]},content:{selectors:["div.g-blocks",'section[name="articleBody"]',"article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src");t=t.replace("{{size}}",640),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},TheAtlanticExtractor:{domain:"www.theatlantic.com",title:{selectors:["h1",".c-article-header__hed"]},author:{selectors:[['meta[name="author"]',"value"],".c-byline__author"]},content:{selectors:["article",".article-body"],transforms:[],clean:[".partner-box",".callout",".c-article-writer__image",".c-article-writer__content",".c-letters-cta__text",".c-footer__logo",".c-recirculation-link",".twitter-tweet"]},dek:{selectors:[['meta[name="description"]',"value"]]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},NewYorkerExtractor:{domain:"www.newyorker.com",title:{selectors:['h1[class^="content-header"]','h1[class^="ArticleHeader__hed"]','h1[class*="ContentHeaderHed"]',['meta[name="og:title"]',"value"]]},author:{selectors:['article header div[class^="BylinesWrapper"]',['meta[name="article:author"]',"value"],'div[class^="ArticleContributors"] a[rel="author"]','article header div[class*="Byline__multipleContributors"]']},content:{selectors:[".article__body","article.article.main-content",'main[class^="Layout__content"]'],transforms:{".caption__text":"figcaption",".caption__credit":"figcaption"},clean:['footer[class^="ArticleFooter__footer"]',"aside"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],"time.content-header__publish-date",['meta[name="pubdate"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:['div[class^="ContentHeaderDek"]',"div.content-header__dek",'h2[class^="ArticleHeader__dek"]']},next_page_url:null,excerpt:null},WiredExtractor:{domain:"www.wired.com",title:{selectors:['h1[data-testId="ContentHeaderHed"]']},author:{selectors:[['meta[name="article:author"]',"value"],'a[rel="author"]']},content:{selectors:["article.article.main-content","article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo",".alert-message"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},MSNExtractor:{domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},YahooExtractor:{domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},BuzzfeedExtractor:{domain:"www.buzzfeed.com",supportedDomains:["www.buzzfeednews.com"],title:{selectors:["h1.embed-headline-title"]},author:{selectors:['a[data-action="user/username"]',"byline__author",['meta[name="author"]',"value"]]},content:{selectors:[['div[class^="featureimage_featureImageWrapper"]',".js-subbuzz-wrapper"],[".js-subbuzz-wrapper"]],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print",".js-inline-share-bar",".js-ad-placement"]},date_published:{selectors:[["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[".embed-headline-description"]},next_page_url:null,excerpt:null},WikiaExtractor:{domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},LittleThingsExtractor:{domain:"www.littlethings.com",title:{selectors:['h1[class*="PostHeader"]',"h1.post-title"]},author:{selectors:['div[class^="PostHeader__ScAuthorNameSection"]',['meta[name="author"]',"value"]]},content:{selectors:['section[class*="PostMainArticle"]',".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},PoliticoExtractor:{domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[['div[itemprop="author"] meta[itemprop="name"]',"value"],".story-meta__authors .vcard",".story-main-content .byline .vcard"]},content:{selectors:[[".story-text"],".story-main-content",".story-core"],transforms:[],clean:["figcaption",".story-meta",".ad"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"],[".story-meta__details time[datetime]","datetime"],[".story-main-content .timestamp time[datetime]","datetime"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]}},DeadspinExtractor:{domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com","avclub.com","clickhole.com","splinternews.com","theonion.com","theroot.com","thetakeout.com","theinventory.com"],title:{selectors:["header h1","h1.headline"]},author:{selectors:['a[data-ga*="Author"]',".author"]},content:{selectors:[".js_post-content",".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/".concat(t))}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},BroadwayWorldExtractor:{domain:"www.broadwayworld.com",title:{selectors:["h1[itemprop=headline]","h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},ApartmentTherapyExtractor:Ms,MediumExtractor:Ss,WwwTmzComExtractor:{domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article__published-at",".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__blocks",".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},WwwWashingtonpostComExtractor:{domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-author-name"]},date_published:{selectors:[['.author-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return 0<e.has("img,iframe,video").length?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},WwwHuffingtonpostComExtractor:{domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},NewrepublicComExtractor:{domain:"newrepublic.com",title:{selectors:["h1.article-headline"]},author:{selectors:["span.AuthorList"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["div.article-body"]],transforms:{},clean:["aside"]}},MoneyCnnComExtractor:{domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[['meta[name="author"]',"value"],".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},WwwThevergeComExtractor:{domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},WwwCnnComExtractor:{domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){return e.html()?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},WwwAolComExtractor:{domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},WwwYoutubeComExtractor:{domain:"www.youtube.com",title:{selectors:[['meta[name="title"]',"value"],".watch-title","h1.watch-title-container"]},author:{selectors:[['link[itemprop="name"]',"content"],".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["#player-container-outer","ytd-expandable-video-description-body-renderer #description",["#player-api","#description"]],transforms:{"#player-api":function(e,t){var r=t('meta[itemProp="videoId"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'.concat(r,'" frameborder="0" allowfullscreen></iframe>'))},"#player-container-outer":function(e,t){var r=t('meta[itemProp="videoId"]').attr("value"),n=t('meta[itemProp="description"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'.concat(r,'" frameborder="0" allowfullscreen></iframe>\n <div><span>').concat(n,"</span></div>"))}},clean:[]}},WwwTheguardianComExtractor:{domain:"www.theguardian.com",title:{selectors:["h1",".content__headline"]},author:{selectors:['address[data-link-name="byline"]',"p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:['div[data-gu-name="standfirst"]',".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincontent",".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},WwwSbnationComExtractor:{domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["p.c-entry-summary.p-dek","h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},WwwBloombergComExtractor:{domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title",'h1[class^="headline"]',"h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author",'p[class*="author"]']},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"],['meta[name="parsely-pub-date"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="og:image"]',"content"]]},content:{selectors:[".article-body__content",".body-content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},WwwBustleComExtractor:{domain:"www.bustle.com",title:{selectors:["h1","h1.post-page__title"]},author:{selectors:['a[href*="profile"]',"div.content-meta__author"]},date_published:{selectors:[["time","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article",".post-page__body"],transforms:{},clean:[]}},WwwNprOrgExtractor:{domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},WwwRecodeNetExtractor:{domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},QzComExtractor:{domain:"qz.com",title:{selectors:["article header h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[name="twitter:image"]',"content"]]},content:{selectors:["#article-content"],transforms:{},clean:[]}},WwwDmagazineComExtractor:{domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago",format:"MMMM D, YYYY h:mm a"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},WwwReutersComExtractor:{domain:"www.reuters.com",title:{selectors:['h1[class*="ArticleHeader-headline-"]',"h1.article-headline"]},author:{selectors:[['meta[name="og:article:author"]',"value"],".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ArticleBodyWrapper","#article-text"],transforms:{".article-subtitle":"h4"},clean:['div[class^="ArticleBody-byline-container-"]',"#article-byline .author"]}},MashableComExtractor:{domain:"mashable.com",title:{selectors:["header h1","h1.title"]},author:{selectors:[['meta[name="article:author"]',"value"],"span.author_name a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article","section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},WwwChicagotribuneComExtractor:{domain:"www.chicagotribune.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["div.article_byline span:first-of-type"]},date_published:{selectors:["time"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article"],transforms:{},clean:[]}},WwwVoxComExtractor:{domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},NewsNationalgeographicComExtractor:{domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var r=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");r&&e.prepend(t('<img class="__image-lead__" src="'.concat(r,'"/>')))}},clean:[".pull-quote.pull-quote--large"]}},WwwNationalgeographicComExtractor:{domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".Article__Headline__Desc",".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.Article__Content",[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var r=e.children().first();if(r.hasClass("imageGroup")){var n=r.find(".media--medium__container").children().first(),a=n.data("platform-image1-path"),i=n.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n <img src="'.concat(a,'"/>\n <img src="').concat(i,'"/>\n </div>')))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'.concat(o,'"/>')))}}},clean:[".pull-quote.pull-quote--small"]}},WwwLatimesComExtractor:{domain:"www.latimes.com",title:{selectors:["h1.headline",".trb_ar_hl"]},author:{selectors:['a[data-click="standardBylineAuthorName"]',['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".page-article-body",".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},PagesixComExtractor:{domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},ThefederalistpapersOrgExtractor:{domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:[".author-meta-title","main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content"],transforms:{},clean:["header",".article-sharing",".after-article",".type-commenting",".more-posts",["p[style]"]]}},WwwCbssportsComExtractor:{domain:"www.cbssports.com",title:{selectors:[".Article-headline",".article-headline"]},author:{selectors:[".ArticleAuthor-nameText",".author-name"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]],timezone:"UTC"},dek:{selectors:[".Article-subline",".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwMsnbcComExtractor:Ts,WwwThepoliticalinsiderComExtractor:{domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},WwwMentalflossComExtractor:{domain:"www.mentalfloss.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.title",".title-group",".inner"]},author:{selectors:['a[data-vars-label*="authors"]',".field-name-field-enhanced-authors"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article main","div.field.field-name-body"],transforms:{},clean:["small"]}},AbcnewsGoComExtractor:{domain:"abcnews.go.com",title:{selectors:['div[class*="Article_main__body"] h1',".article-header h1"]},author:{selectors:[".ShareByline span:nth-child(2)",".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".ShareByline",".timestamp"],format:"MMMM D, YYYY h:mm a",timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article",".article-copy"],transforms:{},clean:[]}},WwwNydailynewsComExtractor:{domain:"www.nydailynews.com",title:{selectors:["h1.headline","h1#ra-headline"]},author:{selectors:[".article_byline span",['meta[name="parsely-author"]',"value"]]},date_published:{selectors:["time",['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article","article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},WwwCnbcComExtractor:{domain:"www.cnbc.com",title:{selectors:["h1.title","h1.ArticleHeader-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story","div.ArticleBody-articleBody"],transforms:{},clean:[]}},WwwPopsugarComExtractor:{domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ObserverComExtractor:{domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},PeopleComExtractor:{domain:"people.com",title:{selectors:[".article-header h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"],"a.author.url.fn"]},date_published:{selectors:[".mntl-attribution__item-date",['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[".article-header h2"]},content:{selectors:['div[class^="loc article-content"]',"div.article-body__inner"],transforms:{},clean:[]}},WwwUsmagazineComExtractor:{domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.author","a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-content"],transforms:{},clean:[".module-related"]}},WwwRollingstoneComExtractor:{domain:"www.rollingstone.com",title:{selectors:["h1.l-article-header__row--title","h1.content-title"]},author:{selectors:["a.c-byline__link","a.content-author.tracked-offpage"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],"time.content-published-date"],timezone:"America/New_York"},dek:{selectors:["h2.l-article-header__row--lead",".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".l-article-content",[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".c-related-links-wrapper",".module-related"]}},twofortysevensportsComExtractor:{domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".article-cnt__author",".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body","section.body.article"],transforms:{},clean:[]}},UproxxComExtractor:{domain:"uproxx.com",title:{selectors:["div.entry-header h1"]},author:{selectors:[['meta[name="qc:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},WwwEonlineComExtractor:{domain:"www.eonline.com",title:{selectors:["h1.article-detail__title","h1.article__title"]},author:{selectors:[".article-detail__meta__author",".entry-meta__author a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-detail__main-content section"],[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},WwwMiamiheraldComExtractor:{domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},WwwRefinery29ComExtractor:{domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},WwwMacrumorsComExtractor:{domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:['article a[rel="author"]',".author-url"]},date_published:{selectors:[["time","datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article",".article"],transforms:{},clean:[]}},WwwAndroidcentralComExtractor:{domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-body"],transforms:{},clean:[".intro","blockquote"]}},WwwSiComExtractor:{domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="published"]',"value"]],timezone:"America/New_York"},dek:{selectors:[".m-detail-header--dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".m-detail--body",["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},WwwRawstoryComExtractor:{domain:"www.rawstory.com",title:{selectors:[['meta[name="og:title"]',"value"],".blog-title"]},author:{selectors:["div.main-post-head .social-author__name",".blog-author a:first-of-type"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body",".blog-content"],transforms:{},clean:[]}},WwwCnetComExtractor:{domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["span.author","a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".c-head_dek",".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},WwwTodayComExtractor:{domain:"www.today.com",title:{selectors:["h1.article-hero-headline__htag","h1.entry-headline"]},author:{selectors:["span.byline-name",['meta[name="author"]',"value"]]},date_published:{selectors:["time[datetime]",['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__content",".entry-container"],transforms:{},clean:[".label-comment"]}},WwwAlComExtractor:{domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwThepennyhoarderComExtractor:{domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text",".single-post-content-inner"],transforms:{},clean:[]}},WwwWesternjournalismComExtractor:{domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},WwwAmericanowComExtractor:{domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},ScienceflyComExtractor:{domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},HellogigglesComExtractor:{domain:"hellogiggles.com",title:{selectors:[['meta[name="og:title"]',"value"],".title"]},author:{selectors:[".byline-wrapper span.author_name",".author-link"]},date_published:{selectors:[['meta[property="article:published_time"]',"content"],['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".main-content",".entry-content"],transforms:{},clean:[]}},ThoughtcatalogComExtractor:{domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["cite a","div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark","figcaption"]}},WwwInquisitrComExtractor:{domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},WwwNbcnewsComExtractor:{domain:"www.nbcnews.com",title:{selectors:["div.article-hero-headline h1","div.article-hed h1"]},author:{selectors:["div.article-inline-byline span.byline-name","span.byline_author"]},date_published:{selectors:[['meta[name="article:published"]',"value"],[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__content","div.article-body"],transforms:{},clean:[]}},FortuneComExtractor:{domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},WwwLinkedinComExtractor:{domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[".main-author-card h3",['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[".base-main-card__metadata",['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content__body",["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},ObamawhitehouseArchivesGovExtractor:{domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},WwwOpposingviewsComExtractor:{domain:"www.opposingviews.com",title:{selectors:["h1.m-detail-header--title","h1.title"]},author:{selectors:[['meta[name="author"]',"value"],"div.date span span a"]},date_published:{selectors:[['meta[name="published"]',"value"],['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".m-detail--body",".article-content"],transforms:{},clean:[".show-for-small-only"]}},WwwProspectmagazineCoUkExtractor:{domain:"www.prospectmagazine.co.uk",title:{selectors:[".blog-header__title",".page-title"]},author:{selectors:[".blog-header__author-link",".aside_author .title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],".post-info"],timezone:"Europe/London"},dek:{selectors:[".blog-header__description",".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog__container","article .post_content"],transforms:{},clean:[]}},ForwardComExtractor:{domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".post-author a",".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content-container article",[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".post-author",".donate-box",".message",".subtitle"]}},WwwQdailyComExtractor:{domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},GothamistComExtractor:{domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".article-metadata:nth-child(3) .byline-author",".author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],"abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body",".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},WwwFoolComExtractor:{domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"],".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"],"header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".tailwind-article-body",".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'.concat(t,'"/></figure>'))},".caption":"figcaption"},clean:["#pitch"]}},WwwSlateComExtractor:{domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},IciRadioCanadaCaExtractor:{domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],format:"YYYY-MM-DD|HH[h]mm",timezone:"America/New_York"},dek:{selectors:["div.lead-container",".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.document-content-style",[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},WwwFortinetComExtractor:{domain:"www.fortinet.com",title:{selectors:["h1"]},author:{selectors:[".b15-blog-meta__author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}}}},WwwFastcompanyComExtractor:{domain:"www.fastcompany.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".post__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post__article"]}},BlisterreviewComExtractor:{domain:"blisterreview.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:["span.author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.entry-date","datetime"],['meta[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[itemprop="image"]',"content"],['meta[name="twitter:image"]',"content"],["img.attachment-large","src"]]},content:{selectors:[[".elementor-section-wrap",".elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text"]],transforms:{figcaption:"p"},clean:[".comments-area"]}},NewsMynaviJpExtractor:{domain:"news.mynavi.jp",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.articleHeader_name","main div.article-author a.article-author__name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body","main article div"],transforms:{img:function(e){var t=e.attr("data-original");""!==t&&e.attr("src",t)}},clean:[]}},ClinicaltrialsGovExtractor:{domain:"clinicaltrials.gov",title:{selectors:["h1.tr-solo_record"]},author:{selectors:["div#sponsor.tr-info-text"]},date_published:{selectors:['div:has(> span.term[data-term="Last Update Posted"])']},content:{selectors:["div#tab-body"],transforms:{},clean:[".usa-alert> img"]}},GithubComExtractor:{domain:"github.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[]},date_published:{selectors:[["relative-time[datetime]","datetime"],['span[itemprop="dateModified"] relative-time',"datetime"]]},dek:{selectors:[['meta[name="description"]',"value"],'span[itemprop="about"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#readme article"]],transforms:{},clean:[]}},WwwRedditComExtractor:{domain:"www.reddit.com",title:{selectors:['div[data-test-id="post-content"] h1','div[data-test-id="post-content"] h2']},author:{selectors:['div[data-test-id="post-content"] a[href*="user/"]']},date_published:{selectors:['div[data-test-id="post-content"] span[data-click-id="timestamp"]','div[data-test-id="post-content"] a[data-click-id="timestamp"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[['div[data-test-id="post-content"] p'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])','div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] a'],'div[data-test-id="post-content"]'],transforms:{'div[role="img"]':function(e){var t=e.find("img"),r=e.css("background-image");return 1===t.length&&r?(t.attr("src",r.match(/\((.*?)\)/)[1].replace(/('|")/g,"")),t):e}},clean:[".icon",'span[id^="PostAwardBadges"]','div a[data-test-id="comments-page-link-num-comments"]']}},OtrsComExtractor:{domain:"otrs.com",title:{selectors:["#main article h1"]},author:{selectors:["div.dateplusauthor a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main article"],defaultCleaner:!1,transforms:{},clean:["div.dateplusauthor","div.gr-12.push-6.footershare","#atftbx","div.category-modul"]}},WwwOssnewsJpExtractor:{domain:"www.ossnews.jp",title:{selectors:["#alpha-block h1.hxnewstitle"]},author:null,date_published:{selectors:["p.fs12"],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#alpha-block .section:has(h1.hxnewstitle)"],defaultCleaner:!1,transforms:{},clean:[]}},BuzzapJpExtractor:{domain:"buzzap.jp",title:{selectors:["h1.entry-title"]},author:null,date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ctiframe"],defaultCleaner:!1,transforms:{},clean:[]}},WwwAsahiComExtractor:{domain:"www.asahi.com",title:{selectors:["main h1",".ArticleTitle h1"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main"],defaultCleaner:!1,transforms:{},clean:["div.AdMod","div.LoginSelectArea","time","div.notPrint"]}},WwwSanwaCoJpExtractor:{domain:"www.sanwa.co.jp",title:{selectors:["#newsContent h1"]},author:null,date_published:{selectors:["dl.date"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#newsContent"],defaultCleaner:!1,transforms:{},clean:["#smartphone","div.sns_box","div.contentFoot"]}},WwwElecomCoJpExtractor:{domain:"www.elecom.co.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["p.section-last"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["td.TableMain2"],defaultCleaner:!1,transforms:{table:function(e){e.attr("width","auto")}},clean:[]}},ScanNetsecurityNeJpExtractor:{domain:"scan.netsecurity.ne.jp",title:{selectors:["header.arti-header h1.head"]},author:null,date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["header.arti-header p.arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.arti-content.arti-content--thumbnail"],defaultCleaner:!1,transforms:{},clean:["aside.arti-giga"]}},JvndbJvnJpExtractor:{domain:"jvndb.jvn.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["div.modifytxt:nth-child(2)"],format:"YYYY/MM/DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#news-list"],defaultCleaner:!1,transforms:{},clean:[]}},GeniusComExtractor:Cs,WwwJnsaOrgExtractor:{domain:"www.jnsa.org",title:{selectors:["#wgtitle h2"]},author:null,date_published:null,dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main_area"],transforms:{},clean:["#pankuzu","#side"]}},PhpspotOrgExtractor:{domain:"phpspot.org",title:{selectors:["h3.hl"]},author:null,date_published:{selectors:["h4.hl"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["div.entrybody"],defaultCleaner:!1,transforms:{},clean:[]}},WwwInfoqComExtractor:{domain:"www.infoq.com",title:{selectors:["h1.heading"]},author:{selectors:["div.widget.article__authors"]},date_published:{selectors:[".article__readTime.date"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__data"],defaultCleaner:!1,transforms:{},clean:[]}},WwwMoongiftJpExtractor:{domain:"www.moongift.jp",title:{selectors:["h1.title a"]},author:null,date_published:{selectors:["ul.meta li:not(.social):first-of-type"],timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main"],transforms:{},clean:["ul.mg_service.cf"]}},WwwItmediaCoJpExtractor:{domain:"www.itmedia.co.jp",supportedDomains:["www.atmarkit.co.jp","techtarget.itmedia.co.jp","nlab.itmedia.co.jp"],title:{selectors:["#cmsTitle h1"]},author:{selectors:["#byline"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["#cmsAbstract h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#cmsBody"],defaultCleaner:!1,transforms:{},clean:["#snsSharebox"]}},WwwPublickey1JpExtractor:{domain:"www.publickey1.jp",title:{selectors:["h1"]},author:{selectors:[".bloggerinchief p:first-of-type","#subcol p:has(img)"]},date_published:{selectors:["div.pubdate"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincol"],defaultCleaner:!1,transforms:{},clean:["#breadcrumbs","div.sbm","div.ad_footer"]}},TakagihiromitsuJpExtractor:{domain:"takagi-hiromitsu.jp",title:{selectors:["h3"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[http-equiv="Last-Modified"]',"value"]]},dek:null,lead_image_url:null,content:{selectors:["div.body"],defaultCleaner:!1,transforms:{},clean:[]}},BookwalkerJpExtractor:{domain:"bookwalker.jp",title:{selectors:["h1.p-main__title","h1.main-heading"]},author:{selectors:["div.p-author__list","div.authors"]},date_published:{selectors:["dl.p-information__data dd:nth-of-type(7)",".work-info .work-detail:first-of-type .work-detail-contents:last-of-type"],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main__information",["div.main-info","div.main-cover-inner"]],defaultCleaner:!1,transforms:{},clean:["span.label.label--trial","dt.info-head.info-head--coin","dd.info-contents.info-contents--coin","div.info-notice.fn-toggleClass"]}},WwwYomiuriCoJpExtractor:{domain:"www.yomiuri.co.jp",title:{selectors:["h1.title-article.c-article-title"]},author:null,date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main-contents"],transforms:{},clean:[]}},JapanCnetComExtractor:{domain:"japan.cnet.com",title:{selectors:[".leaf-headline-ttl"]},author:{selectors:[".writer"]},date_published:{selectors:[".date"],format:"YYYY年MM月DD日 HH時mm分",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},DeadlineComExtractor:{domain:"deadline.com",title:{selectors:["h1"]},author:{selectors:["section.author h2"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item"],transforms:{".embed-twitter":function(e){var t=e.html();e.replaceWith(t)}},clean:["figcaption"]}},WwwGizmodoJpExtractor:{domain:"www.gizmodo.jp",title:{selectors:["h1.p-post-title"]},author:{selectors:["li.p-post-AssistAuthor"]},date_published:{selectors:[["li.p-post-AssistTime time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.p-post"],transforms:{"img.p-post-thumbnailImage":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["h1.p-post-title","ul.p-post-Assist"]}},GetnewsJpExtractor:{domain:"getnews.jp",title:{selectors:["article h1"]},author:{selectors:[['meta[name="article:author"]',"value"],"span.prof"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["ul.cattag-top time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.post-bodycopy"],transforms:{},clean:[]}},WwwLifehackerJpExtractor:{domain:"www.lifehacker.jp",title:{selectors:['h1[class^="article_pArticle_Title"]',"h1.lh-summary-title"]},author:{selectors:[['meta[name="author"]',"value"],"p.lh-entryDetailInner--credit"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["div.lh-entryDetail-header time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[class^="article_pArticle_Body__"]',"div.lh-entryDetail-body"],transforms:{"img.lazyload":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["p.lh-entryDetailInner--credit"]}},SectIijAdJpExtractor:{domain:"sect.iij.ad.jp",title:{selectors:["div.title-box-inner h1","h3"]},author:{selectors:["p.post-author a","dl.entrydate dd"]},date_published:{selectors:["time"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-inner","#article"],transforms:{},clean:["dl.entrydate"]}},WwwOreillyCoJpExtractor:{domain:"www.oreilly.co.jp",title:{selectors:[['meta[name="og:title"]',"value"],"h3"]},author:{selectors:['span[itemprop="author"]','li[itemprop="author"]']},date_published:{selectors:[['dd[itemprop="datePublished"]',"content"],['meta[itemprop="datePublished"]',"value"]],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image:secure_url"]',"value"],['meta[name="og:image"]',"value"]]},content:{selectors:["section.detail","#content"],defaultCleaner:!1,transforms:{},clean:[".social-tools"]}},WwwIpaGoJpExtractor:{domain:"www.ipa.go.jp",title:{selectors:["h1"]},author:null,date_published:{selectors:["p.ipar_text_right"],format:"YYYY年M月D日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#ipar_main"],defaultCleaner:!1,transforms:{},clean:["p.ipar_text_right"]}},WeeklyAsciiJpExtractor:{domain:"weekly.ascii.jp",title:{selectors:["article h1",'h1[itemprop="headline"]']},author:{selectors:["p.author"]},date_published:{selectors:["p.date",['meta[name="odate"]',"value"]],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#contents_detail","div.article"],transforms:{},clean:[]}},TechlogIijAdJpExtractor:{domain:"techlog.iij.ad.jp",title:{selectors:["h1.entry-title"]},author:{selectors:['a[rel="author"]']},date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],defaultCleaner:!1,transforms:{},clean:[".wp_social_bookmarking_light"]}},WiredJpExtractor:Ds,JapanZdnetComExtractor:{domain:"japan.zdnet.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="cXenseParse:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},WwwRbbtodayComExtractor:{domain:"www.rbbtoday.com",title:{selectors:["h1"]},author:{selectors:[".writer.writer-name"]},date_published:{selectors:[["header time","datetime"]]},dek:{selectors:[['meta[name="description"]',"value"],".arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".arti-content"],transforms:{},clean:[".arti-giga"]}},WwwLemondeFrExtractor:{domain:"www.lemonde.fr",title:{selectors:["h1.article__title"]},author:{selectors:[".author__name"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},dek:{selectors:[".article__desc"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__content"],transforms:{},clean:["figcaption"]}},WwwPhoronixComExtractor:{domain:"www.phoronix.com",title:{selectors:["article h1","article header"]},author:{selectors:[".author a:first-child"]},date_published:{selectors:[".author"],format:"D MMMM YYYY at hh:mm",timezone:"America/New_York"},dek:null,lead_image_url:null,content:{selectors:[".content"],transforms:{},clean:[]}},PitchforkComExtractor:{domain:"pitchfork.com",title:{selectors:[['meta[name="og:title"]',"value"],"title"]},author:{selectors:[['meta[name="article:author"]',"value"],".authors-detail__display-name"]},date_published:{selectors:['div[class^="InfoSliceWrapper-"]',[".pub-date","datetime"]]},dek:{selectors:[['meta[name="og:description"]',"value"],".review-detail__abstract"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],[".single-album-tombstone__art img","src"]]},content:{selectors:["div.body__inner-container",".review-detail__text"]},extend:{score:{selectors:['p[class*="Rating"]',".score"]}}},BiorxivOrgExtractor:{domain:"biorxiv.org",title:{selectors:["h1#page-title"]},author:{selectors:["div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors"]},content:{selectors:["div#abstract-1"],transforms:{},clean:[]}},EpaperZeitDeExtractor:{domain:"epaper.zeit.de",title:{selectors:["p.title"]},author:{selectors:[".article__author"]},date_published:null,excerpt:{selectors:["subtitle"]},lead_image_url:null,content:{selectors:[".article"],transforms:{"p.title":"h1",".article__author":"p",byline:"p",linkbox:"p"},clean:["image-credits","box[type=citation]"]}},WwwLadbibleComExtractor:{domain:"www.ladbible.com",title:{selectors:["h1"]},author:{selectors:["[class*=Byline]"]},date_published:{selectors:["time"],timezone:"Europe/London"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["[class*=ArticleContainer]"],clean:["time","source",'a[href^="https://www.ladbible.com/"]',"picture","[class*=StyledCardBlock]"]}},TimesofindiaIndiatimesComExtractor:{domain:"timesofindia.indiatimes.com",title:{selectors:["h1"]},extend:{reporter:{selectors:["div.byline"],transforms:{}}},date_published:{selectors:[".byline"],format:"MMM D, YYYY, HH:mm z",timezone:"Asia/Kolkata"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.contentwrapper:has(section)"],defaultCleaner:!1,clean:["section","h1",".byline",".img_cptn",".icon_share_wrap",'ul[itemtype="https://schema.org/BreadcrumbList"]']}},MaTtiasBeExtractor:{domain:"ma.ttias.be",title:{selectors:[['meta[name="twitter:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},content:{selectors:[[".content"]],transforms:{h2:function(e){return e.attr("id",null),"h3"},h1:function(e){e.attr("id",null),e.after("<p></p>")},ul:function(e){e.attr("class","entry-content-asset")}}}},PastebinComExtractor:{domain:"pastebin.com",title:{selectors:["h1"]},author:{selectors:[".username",".paste_box_line2 .t_us + a"]},date_published:{selectors:[".date",".paste_box_line2 .t_da + span"],timezone:"America/New_York",format:"MMMM D, YYYY"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".source","#selectable .text"],transforms:{ol:"div",li:"p"},clean:[]}},WwwAbendblattDeExtractor:Os,WwwGrueneDeExtractor:{domain:"www.gruene.de",title:{selectors:["header h1"]},author:null,date_published:null,dek:null,lead_image_url:{selectors:[['meta[property="og:image"]',"content"]]},content:{selectors:[["section header","section h2","section p","section ol"]],transforms:{},clean:["figcaption","p[class]"]}},WwwEngadgetComExtractor:{domain:"www.engadget.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:['a.th-meta[data-ylk*="subsec:author"]']},date_published:{selectors:[]},dek:{selectors:['div[class*="o-title_mark"] div']},lead_image_url:{selectors:[]},content:{selectors:[["#page_body figure:not(div.article-text figure)","div.article-text"]],transforms:{},clean:[]}},ArstechnicaComExtractor:{domain:"arstechnica.com",title:{selectors:["title"]},author:{selectors:['*[rel="author"] *[itemprop="name"]']},date_published:{selectors:[[".byline time","datetime"]]},dek:{selectors:['h2[itemprop="description"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{h2:function(e){e.before("<p></p>")}},clean:["figcaption .enlarge-link","figcaption .sep","figure.video",".gallery","aside",".sidebar"]}},WwwNdtvComExtractor:{domain:"www.ndtv.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:['span[itemprop="author"] span[itemprop="name"]']},date_published:{selectors:[['span[itemprop="dateModified"]',"content"]]},dek:{selectors:["h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:['div[itemprop="articleBody"]'],transforms:{".place_cont":function(e){if(!e.parents("p").length){var t=e.next("p");t&&(e.remove(),t.prepend(e))}}},clean:[".highlghts_Wdgt",".ins_instory_dv_caption","input","._world-wrapper .mt20"]}},SpektrumExtractor:{domain:"www.spektrum.de",title:{selectors:[".content__title"]},author:{selectors:[".content__author__info__name"]},date_published:{selectors:[".content__meta__date"],timezone:"Europe/Berlin"},dek:{selectors:[".content__intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],".image__article__top img"]},content:{selectors:["article.content"],clean:[".breadcrumbs",".hide-for-print","aside","header h2",".image__article__top",".content__author",".copyright",".callout-box"]}},PostlightComExtractor:{domain:"postlight.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.single-hero__abstract"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main.post"],transforms:{},clean:["section.pl-post-link","aside","section.insights_featured_case_studies"]}},WwwInvestmentexecutiveComExtractor:{domain:"www.investmentexecutive.com",title:{selectors:["h1"]},author:{selectors:['div[itemprop="author"]']},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-body"],clean:[".hidden"]}},WwwCbcCaExtractor:{domain:"www.cbc.ca",title:{selectors:["h1"]},author:{selectors:[".authorText",".bylineDetails"]},date_published:{selectors:[[".timeStamp[datetime]","datetime"]]},dek:{selectors:[".deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".story"],transforms:{},clean:[]}}}),Ps=lt(Ns).reduce(function(e,t){var r=Ns[t];return pt({},e,As(r))},{}),js=e(function(e,t){(function(){var n="‎",a="‏",m="ltr",g="rtl",i="bidi",o="",v={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};function e(e){if(void 0===e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return o;if(-1<e.indexOf(n)&&-1<e.indexOf(a))return i;if(-1<e.indexOf(n))return m;if(-1<e.indexOf(a))return g;var t=s(e,g),r=s(e,m);return t&&r?i:r?m:t?g:o}function s(e,t){var r,n,a,i,o,s,c,u,l,f,d,h=!1,p=!1;for(o=-1<e.search(/[0-9]/),e=e.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),r=0;r<e.length;r++){for(a in n=e.charAt(r),i=!1,v)v.hasOwnProperty(a)&&(s=n,c=v[a][0],u=v[a][1],void 0,l=s.charCodeAt(0),f=parseInt(c,16),d=parseInt(u,16),f<l&&l<d&&(i=h=!0));!1===i&&(p=!0)}return t===g?h:t===m?p||!h&&o:void 0}t.getDirection=e,t.patch=function(){String.prototype.getDirection=function(){return e(this.valueOf())}}}).call(this)}),Rs=(js.getDirection,js.patch,/^\s*(posted |written )?by\s*:?\s*(.*)/i),zs=new RegExp("http(s)?://","i"),Ls=/^\d{13}$/i,Ys=/^\d{10}$/i,Ws=/^\s*published\s*:?\s*(.*)/i,Is=/(.*\d)(am|pm)(.*)/i,Bs=/\.m\./i,qs=/^\s*(just|right)?\s*now\s*/i,Hs=["seconds?","minutes?","hours?","days?","weeks?","months?","years?"].join("|"),Fs=new RegExp("(\\d+)\\s+(".concat(Hs,")\\s+ago"),"i"),Gs=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].join("|"),Us=new RegExp("(".concat("[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",")|(").concat("[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",")|(").concat("-[0-9]{3,4}$",")|([0-9]{1,4})|(").concat(Gs,")"),"ig"),$s=/-\d{3,4}$/,Vs=/(: | - | \| )/g,Ks=new RegExp(".com$|.net$|.org$|.co.uk$","g");function Js(e){return ua(e.replace(Rs,"$2").trim())}var Zs=e(function(e){!function(e){e.exports.is_uri=f,e.exports.is_http_uri=t,e.exports.is_https_uri=r,e.exports.is_web_uri=n,e.exports.isUri=f,e.exports.isHttpUri=t,e.exports.isHttpsUri=r,e.exports.isWebUri=n;var l=function(e){return e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/)};function f(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var t,r,n,a,i,o="",s="";if(o=(t=l(e))[1],r=t[2],n=t[3],a=t[4],i=t[5],o&&o.length&&0<=n.length){if(r&&r.length){if(0!==n.length&&!/^\//.test(n))return}else if(/^\/\//.test(n))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(o.toLowerCase()))return s+=o+":",r&&r.length&&(s+="//"+r),s+=n,a&&a.length&&(s+="?"+a),i&&i.length&&(s+="#"+i),s}}}function t(e,t){if(f(e)){var r,n,a,i,o="",s="",c="",u="";if(o=(r=l(e))[1],s=r[2],n=r[3],a=r[4],i=r[5],o){if(t){if("https"!=o.toLowerCase())return}else if("http"!=o.toLowerCase())return;if(s)return/:(\d+)$/.test(s)&&(c=s.match(/:(\d+)$/)[0],s=s.replace(/:\d+$/,"")),u+=o+":",u+="//"+s,c&&(u+=c),u+=n,a&&a.length&&(u+="?"+a),i&&i.length&&(u+="#"+i),u}}}function r(e){return t(e,!0)}function n(e){return t(e)||r(e)}}(e)});function Xs(e){return e=e.trim(),Zs.isWebUri(e)?e:null}var Qs=e(function(tn,e){tn.exports=function(){var e,a;function _(){return e.apply(null,arguments)}function l(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function f(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function y(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function d(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(y(e,t))return!1;return!0}function o(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function p(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function i(e,t){var r,n=[],a=e.length;for(r=0;r<a;++r)n.push(t(e[r],r));return n}function u(e,t){for(var r in t)y(t,r)&&(e[r]=t[r]);return y(t,"toString")&&(e.toString=t.toString),y(t,"valueOf")&&(e.valueOf=t.valueOf),e}function m(e,t,r,n){return Dt(e,t,r,n,!0).utc()}function b(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function g(e){if(null==e._isValid){var t=b(e),r=a.call(t.parsedDateParts,function(e){return null!=e}),n=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r);if(e._strict&&(n=n&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return n;e._isValid=n}return e._isValid}function s(e){var t=m(NaN);return null!=e?u(b(t),e):b(t).userInvalidated=!0,t}a=Array.prototype.some?Array.prototype.some:function(e){var t,r=Object(this),n=r.length>>>0;for(t=0;t<n;t++)if(t in r&&e.call(this,r[t],t,r))return!0;return!1};var c=_.momentProperties=[],t=!1;function v(e,t){var r,n,a,i=c.length;if(o(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),o(t._i)||(e._i=t._i),o(t._f)||(e._f=t._f),o(t._l)||(e._l=t._l),o(t._strict)||(e._strict=t._strict),o(t._tzm)||(e._tzm=t._tzm),o(t._isUTC)||(e._isUTC=t._isUTC),o(t._offset)||(e._offset=t._offset),o(t._pf)||(e._pf=b(t)),o(t._locale)||(e._locale=t._locale),0<i)for(r=0;r<i;r++)n=c[r],o(a=t[n])||(e[n]=a);return e}function A(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,_.updateOffset(this),t=!1)}function w(e){return e instanceof A||null!=e&&null!=e._isAMomentObject}function x(e){!1===_.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function r(i,o){var s=!0;return u(function(){if(null!=_.deprecationHandler&&_.deprecationHandler(null,i),s){var e,t,r,n=[],a=arguments.length;for(t=0;t<a;t++){if(e="","object"==typeof arguments[t]){for(r in e+="\n["+t+"] ",arguments[0])y(arguments[0],r)&&(e+=r+": "+arguments[0][r]+", ");e=e.slice(0,-2)}else e=arguments[t];n.push(e)}x(i+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),s=!1}return o.apply(this,arguments)},o)}var n,k={};function E(e,t){null!=_.deprecationHandler&&_.deprecationHandler(e,t),k[e]||(x(t),k[e]=!0)}function M(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function S(e,t){var r,n=u({},e);for(r in t)y(t,r)&&(f(e[r])&&f(t[r])?(n[r]={},u(n[r],e[r]),u(n[r],t[r])):null!=t[r]?n[r]=t[r]:delete n[r]);for(r in e)y(e,r)&&!y(t,r)&&f(e[r])&&(n[r]=u({},n[r]));return n}function T(e){null!=e&&this.set(e)}function C(e,t,r){var n=""+Math.abs(e),a=t-n.length,i=0<=e;return(i?r?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+n}_.suppressDeprecationWarnings=!1,_.deprecationHandler=null,n=Object.keys?Object.keys:function(e){var t,r=[];for(t in e)y(e,t)&&r.push(t);return r};var D=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,O=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,N={},P={};function j(e,t,r,n){var a=n;"string"==typeof n&&(a=function(){return this[n]()}),e&&(P[e]=a),t&&(P[t[0]]=function(){return C(a.apply(this,arguments),t[1],t[2])}),r&&(P[r]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function R(e,t){return e.isValid()?(t=z(t,e.localeData()),N[t]=N[t]||function(n){var e,a,t,i=n.match(D);for(e=0,a=i.length;e<a;e++)P[i[e]]?i[e]=P[i[e]]:i[e]=(t=i[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(e){var t,r="";for(t=0;t<a;t++)r+=M(i[t])?i[t].call(e,n):i[t];return r}}(t),N[t](e)):e.localeData().invalidDate()}function z(e,t){var r=5;function n(e){return t.longDateFormat(e)||e}for(O.lastIndex=0;0<=r&&O.test(e);)e=e.replace(O,n),O.lastIndex=0,r-=1;return e}var L={};function Y(e,t){var r=e.toLowerCase();L[r]=L[r+"s"]=L[t]=e}function W(e){return"string"==typeof e?L[e]||L[e.toLowerCase()]:void 0}function I(e){var t,r,n={};for(r in e)y(e,r)&&(t=W(r))&&(n[t]=e[r]);return n}var B={};function q(e,t){B[e]=t}function H(e){return e%4==0&&e%100!=0||e%400==0}function F(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function G(e){var t=+e,r=0;return 0!==t&&isFinite(t)&&(r=F(t)),r}function U(t,r){return function(e){return null!=e?(V(this,t,e),_.updateOffset(this,r),this):$(this,t)}}function $(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function V(e,t,r){e.isValid()&&!isNaN(r)&&("FullYear"===t&&H(e.year())&&1===e.month()&&29===e.date()?(r=G(r),e._d["set"+(e._isUTC?"UTC":"")+t](r,e.month(),Te(r,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](r))}var K,J=/\d/,Z=/\d\d/,X=/\d{3}/,Q=/\d{4}/,ee=/[+-]?\d{6}/,te=/\d\d?/,re=/\d\d\d\d?/,ne=/\d\d\d\d\d\d?/,ae=/\d{1,3}/,ie=/\d{1,4}/,oe=/[+-]?\d{1,6}/,se=/\d+/,ce=/[+-]?\d+/,ue=/Z|[+-]\d\d:?\d\d/gi,le=/Z|[+-]\d\d(?::?\d\d)?/gi,fe=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function de(e,r,n){K[e]=M(r)?r:function(e,t){return e&&n?n:r}}function he(e,t){return y(K,e)?K[e](t._strict,t._locale):new RegExp(pe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,r,n,a){return t||r||n||a})))}function pe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}K={};var me={};function ge(e,r){var t,n,a=r;for("string"==typeof e&&(e=[e]),h(r)&&(a=function(e,t){t[r]=G(e)}),n=e.length,t=0;t<n;t++)me[e[t]]=a}function ve(e,a){ge(e,function(e,t,r,n){r._w=r._w||{},a(e,r._w,r,n)})}var ye,_e=0,be=1,Ae=2,we=3,xe=4,ke=5,Ee=6,Me=7,Se=8;function Te(e,t){if(isNaN(e)||isNaN(t))return NaN;var r,n=(t%(r=12)+r)%r;return e+=(t-n)/12,1===n?H(e)?29:28:31-n%7%2}ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},j("M",["MM",2],"Mo",function(){return this.month()+1}),j("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),j("MMMM",0,0,function(e){return this.localeData().months(this,e)}),Y("month","M"),q("month",8),de("M",te),de("MM",te,Z),de("MMM",function(e,t){return t.monthsShortRegex(e)}),de("MMMM",function(e,t){return t.monthsRegex(e)}),ge(["M","MM"],function(e,t){t[be]=G(e)-1}),ge(["MMM","MMMM"],function(e,t,r,n){var a=r._locale.monthsParse(e,n,r._strict);null!=a?t[be]=a:b(r).invalidMonth=e});var Ce="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),De="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Oe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ne=fe,Pe=fe;function je(e,t,r){var n,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)i=m([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(i,"").toLocaleLowerCase();return r?"MMM"===t?-1!==(a=ye.call(this._shortMonthsParse,o))?a:null:-1!==(a=ye.call(this._longMonthsParse,o))?a:null:"MMM"===t?-1!==(a=ye.call(this._shortMonthsParse,o))?a:-1!==(a=ye.call(this._longMonthsParse,o))?a:null:-1!==(a=ye.call(this._longMonthsParse,o))?a:-1!==(a=ye.call(this._shortMonthsParse,o))?a:null}function Re(e,t){var r;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=G(t);else if(!h(t=e.localeData().monthsParse(t)))return e;return r=Math.min(e.date(),Te(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,r),e}function ze(e){return null!=e?(Re(this,e),_.updateOffset(this,!0),this):$(this,"Month")}function Le(){function e(e,t){return t.length-e.length}var t,r,n=[],a=[],i=[];for(t=0;t<12;t++)r=m([2e3,t]),n.push(this.monthsShort(r,"")),a.push(this.months(r,"")),i.push(this.months(r,"")),i.push(this.monthsShort(r,""));for(n.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)n[t]=pe(n[t]),a[t]=pe(a[t]);for(t=0;t<24;t++)i[t]=pe(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Ye(e){return H(e)?366:365}j("Y",0,0,function(){var e=this.year();return e<=9999?C(e,4):"+"+e}),j(0,["YY",2],0,function(){return this.year()%100}),j(0,["YYYY",4],0,"year"),j(0,["YYYYY",5],0,"year"),j(0,["YYYYYY",6,!0],0,"year"),Y("year","y"),q("year",1),de("Y",ce),de("YY",te,Z),de("YYYY",ie,Q),de("YYYYY",oe,ee),de("YYYYYY",oe,ee),ge(["YYYYY","YYYYYY"],_e),ge("YYYY",function(e,t){t[_e]=2===e.length?_.parseTwoDigitYear(e):G(e)}),ge("YY",function(e,t){t[_e]=_.parseTwoDigitYear(e)}),ge("Y",function(e,t){t[_e]=parseInt(e,10)}),_.parseTwoDigitYear=function(e){return G(e)+(68<G(e)?1900:2e3)};var We=U("FullYear",!0);function Ie(e){var t,r;return e<100&&0<=e?((r=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Be(e,t,r){var n=7+t-r,a=(7+Ie(e,0,n).getUTCDay()-t)%7;return-a+n-1}function qe(e,t,r,n,a){var i,o,s=(7+r-n)%7,c=Be(e,n,a),u=1+7*(t-1)+s+c;return o=u<=0?Ye(i=e-1)+u:u>Ye(e)?(i=e+1,u-Ye(e)):(i=e,u),{year:i,dayOfYear:o}}function He(e,t,r){var n,a,i=Be(e.year(),t,r),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?(a=e.year()-1,n=o+Fe(a,t,r)):o>Fe(e.year(),t,r)?(n=o-Fe(e.year(),t,r),a=e.year()+1):(a=e.year(),n=o),{week:n,year:a}}function Fe(e,t,r){var n=Be(e,t,r),a=Be(e+1,t,r);return(Ye(e)-n+a)/7}function Ge(e,t){return e.slice(t,7).concat(e.slice(0,t))}j("w",["ww",2],"wo","week"),j("W",["WW",2],"Wo","isoWeek"),Y("week","w"),Y("isoWeek","W"),q("week",5),q("isoWeek",5),de("w",te),de("ww",te,Z),de("W",te),de("WW",te,Z),ve(["w","ww","W","WW"],function(e,t,r,n){t[n.substr(0,1)]=G(e)}),j("d",0,"do","day"),j("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),j("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),j("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),j("e",0,0,"weekday"),j("E",0,0,"isoWeekday"),Y("day","d"),Y("weekday","e"),Y("isoWeekday","E"),q("day",11),q("weekday",11),q("isoWeekday",11),de("d",te),de("e",te),de("E",te),de("dd",function(e,t){return t.weekdaysMinRegex(e)}),de("ddd",function(e,t){return t.weekdaysShortRegex(e)}),de("dddd",function(e,t){return t.weekdaysRegex(e)}),ve(["dd","ddd","dddd"],function(e,t,r,n){var a=r._locale.weekdaysParse(e,n,r._strict);null!=a?t.d=a:b(r).invalidWeekday=e}),ve(["d","e","E"],function(e,t,r,n){t[n]=G(e)});var Ue="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),$e="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ve="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=fe,Je=fe,Ze=fe;function Xe(e,t,r){var n,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)i=m([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(i,"").toLocaleLowerCase();return r?"dddd"===t?-1!==(a=ye.call(this._weekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:null:"dddd"===t?-1!==(a=ye.call(this._weekdaysParse,o))?a:-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:null:"ddd"===t?-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:-1!==(a=ye.call(this._weekdaysParse,o))?a:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:null:-1!==(a=ye.call(this._minWeekdaysParse,o))?a:-1!==(a=ye.call(this._weekdaysParse,o))?a:-1!==(a=ye.call(this._shortWeekdaysParse,o))?a:null}function Qe(){function e(e,t){return t.length-e.length}var t,r,n,a,i,o=[],s=[],c=[],u=[];for(t=0;t<7;t++)r=m([2e3,1]).day(t),n=pe(this.weekdaysMin(r,"")),a=pe(this.weekdaysShort(r,"")),i=pe(this.weekdays(r,"")),o.push(n),s.push(a),c.push(i),u.push(n),u.push(a),u.push(i);o.sort(e),s.sort(e),c.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function et(){return this.hours()%12||12}function tt(e,t){j(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}j("H",["HH",2],0,"hour"),j("h",["hh",2],0,et),j("k",["kk",2],0,function(){return this.hours()||24}),j("hmm",0,0,function(){return""+et.apply(this)+C(this.minutes(),2)}),j("hmmss",0,0,function(){return""+et.apply(this)+C(this.minutes(),2)+C(this.seconds(),2)}),j("Hmm",0,0,function(){return""+this.hours()+C(this.minutes(),2)}),j("Hmmss",0,0,function(){return""+this.hours()+C(this.minutes(),2)+C(this.seconds(),2)}),tt("a",!0),tt("A",!1),Y("hour","h"),q("hour",13),de("a",rt),de("A",rt),de("H",te),de("h",te),de("k",te),de("HH",te,Z),de("hh",te,Z),de("kk",te,Z),de("hmm",re),de("hmmss",ne),de("Hmm",re),de("Hmmss",ne),ge(["H","HH"],we),ge(["k","kk"],function(e,t,r){var n=G(e);t[we]=24===n?0:n}),ge(["a","A"],function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e}),ge(["h","hh"],function(e,t,r){t[we]=G(e),b(r).bigHour=!0}),ge("hmm",function(e,t,r){var n=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n)),b(r).bigHour=!0}),ge("hmmss",function(e,t,r){var n=e.length-4,a=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n,2)),t[ke]=G(e.substr(a)),b(r).bigHour=!0}),ge("Hmm",function(e,t,r){var n=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n))}),ge("Hmmss",function(e,t,r){var n=e.length-4,a=e.length-2;t[we]=G(e.substr(0,n)),t[xe]=G(e.substr(n,2)),t[ke]=G(e.substr(a))});var nt,at=U("Hours",!0),it={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ce,monthsShort:De,week:{dow:0,doy:6},weekdays:Ue,weekdaysMin:Ve,weekdaysShort:$e,meridiemParse:/[ap]\.?m?\.?/i},ot={},st={};function ct(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r<n;r+=1)if(e[r]!==t[r])return r;return n}function ut(e){return e?e.toLowerCase().replace("_","-"):e}function lt(t){var e=null;if(void 0===ot[t]&&tn&&tn.exports&&null!=t.match("^[^/\\\\]*$"))try{e=nt._abbr,rn(),ft(e)}catch(e){ot[t]=null}return ot[t]}function ft(e,t){var r;return e&&((r=o(t)?ht(e):dt(e,t))?nt=r:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function dt(e,t){if(null===t)return delete ot[e],null;var r,n=it;if(t.abbr=e,null!=ot[e])E("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=ot[e]._config;else if(null!=t.parentLocale)if(null!=ot[t.parentLocale])n=ot[t.parentLocale]._config;else{if(null==(r=lt(t.parentLocale)))return st[t.parentLocale]||(st[t.parentLocale]=[]),st[t.parentLocale].push({name:e,config:t}),null;n=r._config}return ot[e]=new T(S(n,t)),st[e]&&st[e].forEach(function(e){dt(e.name,e.config)}),ft(e),ot[e]}function ht(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!l(e)){if(t=lt(e))return t;e=[e]}return function(e){for(var t,r,n,a,i=0;i<e.length;){for(a=ut(e[i]).split("-"),t=a.length,r=(r=ut(e[i+1]))?r.split("-"):null;0<t;){if(n=lt(a.slice(0,t).join("-")))return n;if(r&&r.length>=t&&ct(a,r)>=t-1)break;t--}i++}return nt}(e)}function pt(e){var t,r=e._a;return r&&-2===b(e).overflow&&(t=r[be]<0||11<r[be]?be:r[Ae]<1||r[Ae]>Te(r[_e],r[be])?Ae:r[we]<0||24<r[we]||24===r[we]&&(0!==r[xe]||0!==r[ke]||0!==r[Ee])?we:r[xe]<0||59<r[xe]?xe:r[ke]<0||59<r[ke]?ke:r[Ee]<0||999<r[Ee]?Ee:-1,b(e)._overflowDayOfYear&&(t<_e||Ae<t)&&(t=Ae),b(e)._overflowWeeks&&-1===t&&(t=Me),b(e)._overflowWeekday&&-1===t&&(t=Se),b(e).overflow=t),e}var mt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,gt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vt=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],_t=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],bt=/^\/?Date\((-?\d+)/i,At=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,wt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function xt(e){var t,r,n,a,i,o,s=e._i,c=mt.exec(s)||gt.exec(s),u=yt.length,l=_t.length;if(c){for(b(e).iso=!0,t=0,r=u;t<r;t++)if(yt[t][1].exec(c[1])){a=yt[t][0],n=!1!==yt[t][2];break}if(null==a)return void(e._isValid=!1);if(c[3]){for(t=0,r=l;t<r;t++)if(_t[t][1].exec(c[3])){i=(c[2]||" ")+_t[t][0];break}if(null==i)return void(e._isValid=!1)}if(!n&&null!=i)return void(e._isValid=!1);if(c[4]){if(!vt.exec(c[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),Tt(e)}else e._isValid=!1}function kt(e,t,r,n,a,i){var o,s,c=[(o=e,s=parseInt(o,10),s<=49?2e3+s:s<=999?1900+s:s),De.indexOf(t),parseInt(r,10),parseInt(n,10),parseInt(a,10)];return i&&c.push(parseInt(i,10)),c}function Et(e){var t,r=At.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(t=kt(r[4],r[3],r[2],r[5],r[6],r[7]),!function(e,t,r){if(e){var n=$e.indexOf(e),a=new Date(t[0],t[1],t[2]).getDay();if(n!==a)return b(r).weekdayMismatch=!0,r._isValid=!1}return!0}(r[1],t,e))return;e._a=t,e._tzm=function(e,t,r){if(e)return wt[e];if(t)return 0;var n=parseInt(r,10),a=n%100,i=(n-a)/100;return 60*i+a}(r[8],r[9],r[10]),e._d=Ie.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),b(e).rfc2822=!0}else e._isValid=!1}function Mt(e,t,r){return null!=e?e:null!=t?t:r}function St(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y=[];if(!e._d){for(g=e,v=void 0,v=new Date(_.now()),n=g._useUTC?[v.getUTCFullYear(),v.getUTCMonth(),v.getUTCDate()]:[v.getFullYear(),v.getMonth(),v.getDate()],e._w&&null==e._a[Ae]&&null==e._a[be]&&(m=p=h=d=f=l=u=c=s=void 0,null!=(s=(o=e)._w).GG||null!=s.W||null!=s.E?(f=1,d=4,c=Mt(s.GG,o._a[_e],He(Ot(),1,4).year),u=Mt(s.W,1),((l=Mt(s.E,1))<1||7<l)&&(p=!0)):(f=o._locale._week.dow,d=o._locale._week.doy,m=He(Ot(),f,d),c=Mt(s.gg,o._a[_e],m.year),u=Mt(s.w,m.week),null!=s.d?((l=s.d)<0||6<l)&&(p=!0):null!=s.e?(l=s.e+f,(s.e<0||6<s.e)&&(p=!0)):l=f),u<1||u>Fe(c,f,d)?b(o)._overflowWeeks=!0:null!=p?b(o)._overflowWeekday=!0:(h=qe(c,u,l,f,d),o._a[_e]=h.year,o._dayOfYear=h.dayOfYear)),null!=e._dayOfYear&&(i=Mt(e._a[_e],n[_e]),(e._dayOfYear>Ye(i)||0===e._dayOfYear)&&(b(e)._overflowDayOfYear=!0),r=Ie(i,0,e._dayOfYear),e._a[be]=r.getUTCMonth(),e._a[Ae]=r.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=y[t]=n[t];for(;t<7;t++)e._a[t]=y[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[we]&&0===e._a[xe]&&0===e._a[ke]&&0===e._a[Ee]&&(e._nextDay=!0,e._a[we]=0),e._d=(e._useUTC?Ie:function(e,t,r,n,a,i,o){var s;return e<100&&0<=e?(s=new Date(e+400,t,r,n,a,i,o),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,r,n,a,i,o),s}).apply(null,y),a=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[we]=24),e._w&&void 0!==e._w.d&&e._w.d!==a&&(b(e).weekdayMismatch=!0)}}function Tt(e){if(e._f!==_.ISO_8601)if(e._f!==_.RFC_2822){e._a=[],b(e).empty=!0;var t,r,n,a,i,o,s,c=""+e._i,u=c.length,l=0;for(n=z(e._f,e._locale).match(D)||[],s=n.length,t=0;t<s;t++)a=n[t],(r=(c.match(he(a,e))||[])[0])&&(0<(i=c.substr(0,c.indexOf(r))).length&&b(e).unusedInput.push(i),c=c.slice(c.indexOf(r)+r.length),l+=r.length),P[a]?(r?b(e).empty=!1:b(e).unusedTokens.push(a),m=a,v=e,null!=(g=r)&&y(me,m)&&me[m](g,v._a,v,m)):e._strict&&!r&&b(e).unusedTokens.push(a);b(e).charsLeftOver=u-l,0<c.length&&b(e).unusedInput.push(c),e._a[we]<=12&&!0===b(e).bigHour&&0<e._a[we]&&(b(e).bigHour=void 0),b(e).parsedDateParts=e._a.slice(0),b(e).meridiem=e._meridiem,e._a[we]=(f=e._locale,d=e._a[we],null==(h=e._meridiem)?d:null!=f.meridiemHour?f.meridiemHour(d,h):(null!=f.isPM&&((p=f.isPM(h))&&d<12&&(d+=12),p||12!==d||(d=0)),d)),null!==(o=b(e).era)&&(e._a[_e]=e._locale.erasConvertYear(o,e._a[_e])),St(e),pt(e)}else Et(e);else xt(e);var f,d,h,p,m,g,v}function Ct(e){var t,r,n=e._i,a=e._f;return e._locale=e._locale||ht(e._l),null===n||void 0===a&&""===n?s({nullInput:!0}):("string"==typeof n&&(e._i=n=e._locale.preparse(n)),w(n)?new A(pt(n)):(p(n)?e._d=n:l(a)?function(e){var t,r,n,a,i,o,s=!1,c=e._f.length;if(0===c)return b(e).invalidFormat=!0,e._d=new Date(NaN);for(a=0;a<c;a++)i=0,o=!1,t=v({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],Tt(t),g(t)&&(o=!0),i+=b(t).charsLeftOver,i+=10*b(t).unusedTokens.length,b(t).score=i,s?i<n&&(n=i,r=t):(null==n||i<n||o)&&(n=i,r=t,o&&(s=!0));u(e,r||t)}(e):a?Tt(e):o(r=(t=e)._i)?t._d=new Date(_.now()):p(r)?t._d=new Date(r.valueOf()):"string"==typeof r?function(e){var t=bt.exec(e._i);if(null!==t)return e._d=new Date(+t[1]);xt(e),!1===e._isValid&&(delete e._isValid,Et(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:_.createFromInputFallback(e)))}(t):l(r)?(t._a=i(r.slice(0),function(e){return parseInt(e,10)}),St(t)):f(r)?function(e){if(!e._d){var t=I(e._i),r=void 0===t.day?t.date:t.day;e._a=i([t.year,t.month,r,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),St(e)}}(t):h(r)?t._d=new Date(r):_.createFromInputFallback(t),g(e)||(e._d=null),e))}function Dt(e,t,r,n,a){var i,o={};return!0!==t&&!1!==t||(n=t,t=void 0),!0!==r&&!1!==r||(n=r,r=void 0),(f(e)&&d(e)||l(e)&&0===e.length)&&(e=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=a,o._l=r,o._i=e,o._f=t,o._strict=n,(i=new A(pt(Ct(o))))._nextDay&&(i.add(1,"d"),i._nextDay=void 0),i}function Ot(e,t,r,n){return Dt(e,t,r,n,!1)}_.createFromInputFallback=r("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),_.ISO_8601=function(){},_.RFC_2822=function(){};var Nt=r("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ot.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:s()}),Pt=r("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ot.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:s()});function jt(e,t){var r,n;if(1===t.length&&l(t[0])&&(t=t[0]),!t.length)return Ot();for(r=t[0],n=1;n<t.length;++n)t[n].isValid()&&!t[n][e](r)||(r=t[n]);return r}var Rt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function zt(e){var t=I(e),r=t.year||0,n=t.quarter||0,a=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,s=t.hour||0,c=t.minute||0,u=t.second||0,l=t.millisecond||0;this._isValid=function(e){var t,r,n=!1,a=Rt.length;for(t in e)if(y(e,t)&&(-1===ye.call(Rt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(r=0;r<a;++r)if(e[Rt[r]]){if(n)return!1;parseFloat(e[Rt[r]])!==G(e[Rt[r]])&&(n=!0)}return!0}(t),this._milliseconds=+l+1e3*u+6e4*c+1e3*s*60*60,this._days=+o+7*i,this._months=+a+3*n+12*r,this._data={},this._locale=ht(),this._bubble()}function Lt(e){return e instanceof zt}function Yt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Wt(e,t,r){var n,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(n=0;n<a;n++)(r&&e[n]!==t[n]||!r&&G(e[n])!==G(t[n]))&&o++;return o+i}function It(e,r){j(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+C(~~(e/60),2)+r+C(~~e%60,2)})}It("Z",":"),It("ZZ",""),de("Z",le),de("ZZ",le),ge(["Z","ZZ"],function(e,t,r){r._useUTC=!0,r._tzm=qt(le,e)});var Bt=/([\+\-]|\d\d)/gi;function qt(e,t){var r,n,a,i=(t||"").match(e);return null===i?null:(r=i[i.length-1]||[],n=(r+"").match(Bt)||["-",0,0],0===(a=60*n[1]+G(n[2]))?0:"+"===n[0]?a:-a)}function Ht(e,t){var r,n;return t._isUTC?(r=t.clone(),n=(w(e)||p(e)?e.valueOf():Ot(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+n),_.updateOffset(r,!1),r):Ot(e).local()}function Ft(e){return-Math.round(e._d.getTimezoneOffset())}function Gt(){return!!this.isValid()&&this._isUTC&&0===this._offset}_.updateOffset=function(){};var Ut=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,$t=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Vt(e,t){var r,n,a,i,o,s,c=e,u=null;return Lt(e)?c={ms:e._milliseconds,d:e._days,M:e._months}:h(e)||!isNaN(+e)?(c={},t?c[t]=+e:c.milliseconds=+e):(u=Ut.exec(e))?(r="-"===u[1]?-1:1,c={y:0,d:G(u[Ae])*r,h:G(u[we])*r,m:G(u[xe])*r,s:G(u[ke])*r,ms:G(Yt(1e3*u[Ee]))*r}):(u=$t.exec(e))?(r="-"===u[1]?-1:1,c={y:Kt(u[2],r),M:Kt(u[3],r),w:Kt(u[4],r),d:Kt(u[5],r),h:Kt(u[6],r),m:Kt(u[7],r),s:Kt(u[8],r)}):null==c?c={}:"object"==typeof c&&("from"in c||"to"in c)&&(i=Ot(c.from),o=Ot(c.to),a=i.isValid()&&o.isValid()?(o=Ht(o,i),i.isBefore(o)?s=Jt(i,o):((s=Jt(o,i)).milliseconds=-s.milliseconds,s.months=-s.months),s):{milliseconds:0,months:0},(c={}).ms=a.milliseconds,c.M=a.months),n=new zt(c),Lt(e)&&y(e,"_locale")&&(n._locale=e._locale),Lt(e)&&y(e,"_isValid")&&(n._isValid=e._isValid),n}function Kt(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function Jt(e,t){var r={};return r.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function Zt(n,a){return function(e,t){var r;return null===t||isNaN(+t)||(E(a,"moment()."+a+"(period, number) is deprecated. Please use moment()."+a+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=e,e=t,t=r),Xt(this,Vt(e,t),n),this}}function Xt(e,t,r,n){var a=t._milliseconds,i=Yt(t._days),o=Yt(t._months);e.isValid()&&(n=null==n||n,o&&Re(e,$(e,"Month")+o*r),i&&V(e,"Date",$(e,"Date")+i*r),a&&e._d.setTime(e._d.valueOf()+a*r),n&&_.updateOffset(e,i||o))}Vt.fn=zt.prototype,Vt.invalid=function(){return Vt(NaN)};var Qt=Zt(1,"add"),er=Zt(-1,"subtract");function tr(e){return"string"==typeof e||e instanceof String}function rr(e,t){if(e.date()<t.date())return-rr(t,e);var r,n,a=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(a,"months");return n=t-i<0?(r=e.clone().add(a-1,"months"),(t-i)/(i-r)):(r=e.clone().add(a+1,"months"),(t-i)/(r-i)),-(a+n)||0}function nr(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ht(e))&&(this._locale=t),this)}_.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",_.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ar=r("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function ir(){return this._locale}var or=126227808e5;function sr(e,t){return(e%t+t)%t}function cr(e,t,r){return e<100&&0<=e?new Date(e+400,t,r)-or:new Date(e,t,r).valueOf()}function ur(e,t,r){return e<100&&0<=e?Date.UTC(e+400,t,r)-or:Date.UTC(e,t,r)}function lr(e,t){return t.erasAbbrRegex(e)}function fr(){var e,t,r=[],n=[],a=[],i=[],o=this.eras();for(e=0,t=o.length;e<t;++e)n.push(pe(o[e].name)),r.push(pe(o[e].abbr)),a.push(pe(o[e].narrow)),i.push(pe(o[e].name)),i.push(pe(o[e].abbr)),i.push(pe(o[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+n.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+r.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function dr(e,t){j(0,[e,e.length],0,t)}function hr(e,t,r,n,a){var i;return null==e?He(this,n,a).year:((i=Fe(e,n,a))<t&&(t=i),function(e,t,r,n,a){var i=qe(e,t,r,n,a),o=Ie(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,e,t,r,n,a))}j("N",0,0,"eraAbbr"),j("NN",0,0,"eraAbbr"),j("NNN",0,0,"eraAbbr"),j("NNNN",0,0,"eraName"),j("NNNNN",0,0,"eraNarrow"),j("y",["y",1],"yo","eraYear"),j("y",["yy",2],0,"eraYear"),j("y",["yyy",3],0,"eraYear"),j("y",["yyyy",4],0,"eraYear"),de("N",lr),de("NN",lr),de("NNN",lr),de("NNNN",function(e,t){return t.erasNameRegex(e)}),de("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),ge(["N","NN","NNN","NNNN","NNNNN"],function(e,t,r,n){var a=r._locale.erasParse(e,n,r._strict);a?b(r).era=a:b(r).invalidEra=e}),de("y",se),de("yy",se),de("yyy",se),de("yyyy",se),de("yo",function(e,t){return t._eraYearOrdinalRegex||se}),ge(["y","yy","yyy","yyyy"],_e),ge(["yo"],function(e,t,r,n){var a;r._locale._eraYearOrdinalRegex&&(a=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[_e]=r._locale.eraYearOrdinalParse(e,a):t[_e]=parseInt(e,10)}),j(0,["gg",2],0,function(){return this.weekYear()%100}),j(0,["GG",2],0,function(){return this.isoWeekYear()%100}),dr("gggg","weekYear"),dr("ggggg","weekYear"),dr("GGGG","isoWeekYear"),dr("GGGGG","isoWeekYear"),Y("weekYear","gg"),Y("isoWeekYear","GG"),q("weekYear",1),q("isoWeekYear",1),de("G",ce),de("g",ce),de("GG",te,Z),de("gg",te,Z),de("GGGG",ie,Q),de("gggg",ie,Q),de("GGGGG",oe,ee),de("ggggg",oe,ee),ve(["gggg","ggggg","GGGG","GGGGG"],function(e,t,r,n){t[n.substr(0,2)]=G(e)}),ve(["gg","GG"],function(e,t,r,n){t[n]=_.parseTwoDigitYear(e)}),j("Q",0,"Qo","quarter"),Y("quarter","Q"),q("quarter",7),de("Q",J),ge("Q",function(e,t){t[be]=3*(G(e)-1)}),j("D",["DD",2],"Do","date"),Y("date","D"),q("date",9),de("D",te),de("DD",te,Z),de("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ge(["D","DD"],Ae),ge("Do",function(e,t){t[Ae]=G(e.match(te)[0])});var pr=U("Date",!0);j("DDD",["DDDD",3],"DDDo","dayOfYear"),Y("dayOfYear","DDD"),q("dayOfYear",4),de("DDD",ae),de("DDDD",X),ge(["DDD","DDDD"],function(e,t,r){r._dayOfYear=G(e)}),j("m",["mm",2],0,"minute"),Y("minute","m"),q("minute",14),de("m",te),de("mm",te,Z),ge(["m","mm"],xe);var mr=U("Minutes",!1);j("s",["ss",2],0,"second"),Y("second","s"),q("second",15),de("s",te),de("ss",te,Z),ge(["s","ss"],ke);var gr,vr,yr=U("Seconds",!1);for(j("S",0,0,function(){return~~(this.millisecond()/100)}),j(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),j(0,["SSS",3],0,"millisecond"),j(0,["SSSS",4],0,function(){return 10*this.millisecond()}),j(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),j(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),j(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),j(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),j(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),Y("millisecond","ms"),q("millisecond",16),de("S",ae,J),de("SS",ae,Z),de("SSS",ae,X),gr="SSSS";gr.length<=9;gr+="S")de(gr,se);function _r(e,t){t[Ee]=G(1e3*("0."+e))}for(gr="S";gr.length<=9;gr+="S")ge(gr,_r);vr=U("Milliseconds",!1),j("z",0,0,"zoneAbbr"),j("zz",0,0,"zoneName");var br=A.prototype;function Ar(e){return e}br.add=Qt,br.calendar=function(e,t){var r,n,a,i;1===arguments.length&&(arguments[0]?w(i=arguments[0])||p(i)||tr(i)||h(i)||(n=l(r=i),a=!1,n&&(a=0===r.filter(function(e){return!h(e)&&tr(r)}).length),n&&a)||function(e){var t,r,n=f(e)&&!d(e),a=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],o=i.length;for(t=0;t<o;t+=1)r=i[t],a=a||y(e,r);return n&&a}(i)||null==i?(e=arguments[0],t=void 0):function(e){var t,r,n=f(e)&&!d(e),a=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)r=i[t],a=a||y(e,r);return n&&a}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var o=e||Ot(),s=Ht(o,this).startOf("day"),c=_.calendarFormat(this,s)||"sameElse",u=t&&(M(t[c])?t[c].call(this,o):t[c]);return this.format(u||this.localeData().calendar(c,this,Ot(o)))},br.clone=function(){return new A(this)},br.diff=function(e,t,r){var n,a,i;if(!this.isValid())return NaN;if(!(n=Ht(e,this)).isValid())return NaN;switch(a=6e4*(n.utcOffset()-this.utcOffset()),t=W(t)){case"year":i=rr(this,n)/12;break;case"month":i=rr(this,n);break;case"quarter":i=rr(this,n)/3;break;case"second":i=(this-n)/1e3;break;case"minute":i=(this-n)/6e4;break;case"hour":i=(this-n)/36e5;break;case"day":i=(this-n-a)/864e5;break;case"week":i=(this-n-a)/6048e5;break;default:i=this-n}return r?i:F(i)},br.endOf=function(e){var t,r;if(void 0===(e=W(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ur:cr,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-sr(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-sr(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-sr(t,1e3)-1}return this._d.setTime(t),_.updateOffset(this,!0),this},br.format=function(e){e||(e=this.isUtc()?_.defaultFormatUtc:_.defaultFormat);var t=R(this,e);return this.localeData().postformat(t)},br.from=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Ot(e).isValid())?Vt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},br.fromNow=function(e){return this.from(Ot(),e)},br.to=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Ot(e).isValid())?Vt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},br.toNow=function(e){return this.to(Ot(),e)},br.get=function(e){return M(this[e=W(e)])?this[e]():this},br.invalidAt=function(){return b(this).overflow},br.isAfter=function(e,t){var r=w(e)?e:Ot(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=W(t)||"millisecond")?this.valueOf()>r.valueOf():r.valueOf()<this.clone().startOf(t).valueOf())},br.isBefore=function(e,t){var r=w(e)?e:Ot(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=W(t)||"millisecond")?this.valueOf()<r.valueOf():this.clone().endOf(t).valueOf()<r.valueOf())},br.isBetween=function(e,t,r,n){var a=w(e)?e:Ot(e),i=w(t)?t:Ot(t);return!!(this.isValid()&&a.isValid()&&i.isValid())&&("("===(n=n||"()")[0]?this.isAfter(a,r):!this.isBefore(a,r))&&(")"===n[1]?this.isBefore(i,r):!this.isAfter(i,r))},br.isSame=function(e,t){var r,n=w(e)?e:Ot(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=W(t)||"millisecond")?this.valueOf()===n.valueOf():(r=n.valueOf(),this.clone().startOf(t).valueOf()<=r&&r<=this.clone().endOf(t).valueOf()))},br.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},br.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},br.isValid=function(){return g(this)},br.lang=ar,br.locale=nr,br.localeData=ir,br.max=Pt,br.min=Nt,br.parsingFlags=function(){return u({},b(this))},br.set=function(e,t){if("object"==typeof e){var r,n=function(e){var t,r=[];for(t in e)y(e,t)&&r.push({unit:t,priority:B[t]});return r.sort(function(e,t){return e.priority-t.priority}),r}(e=I(e)),a=n.length;for(r=0;r<a;r++)this[n[r].unit](e[n[r].unit])}else if(M(this[e=W(e)]))return this[e](t);return this},br.startOf=function(e){var t,r;if(void 0===(e=W(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ur:cr,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=sr(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=sr(t,6e4);break;case"second":t=this._d.valueOf(),t-=sr(t,1e3)}return this._d.setTime(t),_.updateOffset(this,!0),this},br.subtract=er,br.toArray=function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]},br.toObject=function(){return{years:this.year(),months:this.month(),date:this.date(),hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()}},br.toDate=function(){return new Date(this.valueOf())},br.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,r=t?this.clone().utc():this;return r.year()<0||9999<r.year()?R(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):M(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",R(r,"Z")):R(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},br.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,r,n="moment",a="";return this.isLocal()||(n=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),e="["+n+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r=a+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+r)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(br[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),br.toJSON=function(){return this.isValid()?this.toISOString():null},br.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},br.unix=function(){return Math.floor(this.valueOf()/1e3)},br.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},br.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},br.eraName=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].name;if(n[e].until<=r&&r<=n[e].since)return n[e].name}return""},br.eraNarrow=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].narrow;if(n[e].until<=r&&r<=n[e].since)return n[e].narrow}return""},br.eraAbbr=function(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].abbr;if(n[e].until<=r&&r<=n[e].since)return n[e].abbr}return""},br.eraYear=function(){var e,t,r,n,a=this.localeData().eras();for(e=0,t=a.length;e<t;++e)if(r=a[e].since<=a[e].until?1:-1,n=this.clone().startOf("day").valueOf(),a[e].since<=n&&n<=a[e].until||a[e].until<=n&&n<=a[e].since)return(this.year()-_(a[e].since).year())*r+a[e].offset;return this.year()},br.year=We,br.isLeapYear=function(){return H(this.year())},br.weekYear=function(e){return hr.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},br.isoWeekYear=function(e){return hr.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},br.quarter=br.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},br.month=ze,br.daysInMonth=function(){return Te(this.year(),this.month())},br.week=br.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},br.isoWeek=br.isoWeeks=function(e){var t=He(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},br.weeksInYear=function(){var e=this.localeData()._week;return Fe(this.year(),e.dow,e.doy)},br.weeksInWeekYear=function(){var e=this.localeData()._week;return Fe(this.weekYear(),e.dow,e.doy)},br.isoWeeksInYear=function(){return Fe(this.year(),1,4)},br.isoWeeksInISOWeekYear=function(){return Fe(this.isoWeekYear(),1,4)},br.date=pr,br.day=br.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,r,n=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,r=this.localeData(),e="string"==typeof t?isNaN(t)?"number"!=typeof(t=r.weekdaysParse(t))?null:t:parseInt(t,10):t,this.add(e-n,"d")):n},br.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},br.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var t,r,n=(t=e,r=this.localeData(),"string"!=typeof t?isNaN(t)?null:t:r.weekdaysParse(t)%7||7);return this.day(this.day()%7?n:n-7)},br.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},br.hour=br.hours=at,br.minute=br.minutes=mr,br.second=br.seconds=yr,br.millisecond=br.milliseconds=vr,br.utcOffset=function(e,t,r){var n,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?a:Ft(this);if("string"==typeof e){if(null===(e=qt(le,e)))return this}else Math.abs(e)<16&&!r&&(e*=60);return!this._isUTC&&t&&(n=Ft(this)),this._offset=e,this._isUTC=!0,null!=n&&this.add(n,"m"),a!==e&&(!t||this._changeInProgress?Xt(this,Vt(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,_.updateOffset(this,!0),this._changeInProgress=null)),this},br.utc=function(e){return this.utcOffset(0,e)},br.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ft(this),"m")),this},br.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=qt(ue,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},br.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Ot(e).utcOffset():0,(this.utcOffset()-e)%60==0)},br.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},br.isLocal=function(){return!!this.isValid()&&!this._isUTC},br.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},br.isUtc=Gt,br.isUTC=Gt,br.zoneAbbr=function(){return this._isUTC?"UTC":""},br.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},br.dates=r("dates accessor is deprecated. Use date instead.",pr),br.months=r("months accessor is deprecated. Use month instead",ze),br.years=r("years accessor is deprecated. Use year instead",We),br.zone=r("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),br.isDSTShifted=r("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=Ct(t))._a?(e=t._isUTC?m(t._a):Ot(t._a),this._isDSTShifted=this.isValid()&&0<Wt(t._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});var wr=T.prototype;function xr(e,t,r,n){var a=ht(),i=m().set(n,t);return a[r](i,e)}function kr(e,t,r){if(h(e)&&(t=e,e=void 0),e=e||"",null!=t)return xr(e,t,r,"month");var n,a=[];for(n=0;n<12;n++)a[n]=xr(e,n,r,"month");return a}function Er(e,t,r,n){"boolean"==typeof e?h(t)&&(r=t,t=void 0):(t=e,e=!1,h(r=t)&&(r=t,t=void 0)),t=t||"";var a,i=ht(),o=e?i._week.dow:0,s=[];if(null!=r)return xr(t,(r+o)%7,n,"day");for(a=0;a<7;a++)s[a]=xr(t,(a+o)%7,n,"day");return s}wr.calendar=function(e,t,r){var n=this._calendar[e]||this._calendar.sameElse;return M(n)?n.call(t,r):n},wr.longDateFormat=function(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return!t&&r?(this._longDateFormat[e]=r.match(D).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e]):t},wr.invalidDate=function(){return this._invalidDate},wr.ordinal=function(e){return this._ordinal.replace("%d",e)},wr.preparse=Ar,wr.postformat=Ar,wr.relativeTime=function(e,t,r,n){var a=this._relativeTime[r];return M(a)?a(e,t,r,n):a.replace(/%d/i,e)},wr.pastFuture=function(e,t){var r=this._relativeTime[0<e?"future":"past"];return M(r)?r(t):r.replace(/%s/i,t)},wr.set=function(e){var t,r;for(r in e)y(e,r)&&(M(t=e[r])?this[r]=t:this["_"+r]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},wr.eras=function(e,t){var r,n,a,i=this._eras||ht("en")._eras;for(r=0,n=i.length;r<n;++r){switch(typeof i[r].since){case"string":a=_(i[r].since).startOf("day"),i[r].since=a.valueOf()}switch(typeof i[r].until){case"undefined":i[r].until=1/0;break;case"string":a=_(i[r].until).startOf("day").valueOf(),i[r].until=a.valueOf()}}return i},wr.erasParse=function(e,t,r){var n,a,i,o,s,c=this.eras();for(e=e.toUpperCase(),n=0,a=c.length;n<a;++n)if(i=c[n].name.toUpperCase(),o=c[n].abbr.toUpperCase(),s=c[n].narrow.toUpperCase(),r)switch(t){case"N":case"NN":case"NNN":if(o===e)return c[n];break;case"NNNN":if(i===e)return c[n];break;case"NNNNN":if(s===e)return c[n]}else if(0<=[i,o,s].indexOf(e))return c[n]},wr.erasConvertYear=function(e,t){var r=e.since<=e.until?1:-1;return void 0===t?_(e.since).year():_(e.since).year()+(t-e.offset)*r},wr.erasAbbrRegex=function(e){return y(this,"_erasAbbrRegex")||fr.call(this),e?this._erasAbbrRegex:this._erasRegex},wr.erasNameRegex=function(e){return y(this,"_erasNameRegex")||fr.call(this),e?this._erasNameRegex:this._erasRegex},wr.erasNarrowRegex=function(e){return y(this,"_erasNarrowRegex")||fr.call(this),e?this._erasNarrowRegex:this._erasRegex},wr.months=function(e,t){return e?l(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Oe).test(t)?"format":"standalone"][e.month()]:l(this._months)?this._months:this._months.standalone},wr.monthsShort=function(e,t){return e?l(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Oe.test(t)?"format":"standalone"][e.month()]:l(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},wr.monthsParse=function(e,t,r){var n,a,i;if(this._monthsParseExact)return je.call(this,e,t,r);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(a=m([2e3,n]),r&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),r||this._monthsParse[n]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[n]=new RegExp(i.replace(".",""),"i")),r&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(r&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!r&&this._monthsParse[n].test(e))return n}},wr.monthsRegex=function(e){return this._monthsParseExact?(y(this,"_monthsRegex")||Le.call(this),e?this._monthsStrictRegex:this._monthsRegex):(y(this,"_monthsRegex")||(this._monthsRegex=Pe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},wr.monthsShortRegex=function(e){return this._monthsParseExact?(y(this,"_monthsRegex")||Le.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(y(this,"_monthsShortRegex")||(this._monthsShortRegex=Ne),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},wr.week=function(e){return He(e,this._week.dow,this._week.doy).week},wr.firstDayOfYear=function(){return this._week.doy},wr.firstDayOfWeek=function(){return this._week.dow},wr.weekdays=function(e,t){var r=l(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ge(r,this._week.dow):e?r[e.day()]:r},wr.weekdaysMin=function(e){return!0===e?Ge(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},wr.weekdaysShort=function(e){return!0===e?Ge(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},wr.weekdaysParse=function(e,t,r){var n,a,i;if(this._weekdaysParseExact)return Xe.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(a=m([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[n]=new RegExp(i.replace(".",""),"i")),r&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(r&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(r&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}},wr.weekdaysRegex=function(e){return this._weekdaysParseExact?(y(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(y(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},wr.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(y(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(y(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Je),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},wr.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(y(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(y(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},wr.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},wr.meridiem=function(e,t,r){return 11<e?r?"pm":"PM":r?"am":"AM"},ft("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,r=1===G(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th";return e+r}}),_.lang=r("moment.lang is deprecated. Use moment.locale instead.",ft),_.langData=r("moment.langData is deprecated. Use moment.localeData instead.",ht);var Mr=Math.abs;function Sr(e,t,r,n){var a=Vt(t,r);return e._milliseconds+=n*a._milliseconds,e._days+=n*a._days,e._months+=n*a._months,e._bubble()}function Tr(e){return e<0?Math.floor(e):Math.ceil(e)}function Cr(e){return 4800*e/146097}function Dr(e){return 146097*e/4800}function Or(e){return function(){return this.as(e)}}var Nr=Or("ms"),Pr=Or("s"),jr=Or("m"),Rr=Or("h"),zr=Or("d"),Lr=Or("w"),Yr=Or("M"),Wr=Or("Q"),Ir=Or("y");function Br(e){return function(){return this.isValid()?this._data[e]:NaN}}var qr=Br("milliseconds"),Hr=Br("seconds"),Fr=Br("minutes"),Gr=Br("hours"),Ur=Br("days"),$r=Br("months"),Vr=Br("years"),Kr=Math.round,Jr={ss:44,s:45,m:45,h:22,d:26,w:null,M:11},Zr=Math.abs;function Xr(e){return(0<e)-(e<0)||+e}function Qr(){if(!this.isValid())return this.localeData().invalidDate();var e,t,r,n,a,i,o,s,c=Zr(this._milliseconds)/1e3,u=Zr(this._days),l=Zr(this._months),f=this.asSeconds();return f?(e=F(c/60),t=F(e/60),c%=60,e%=60,r=F(l/12),l%=12,n=c?c.toFixed(3).replace(/\.?0+$/,""):"",a=f<0?"-":"",i=Xr(this._months)!==Xr(f)?"-":"",o=Xr(this._days)!==Xr(f)?"-":"",s=Xr(this._milliseconds)!==Xr(f)?"-":"",a+"P"+(r?i+r+"Y":"")+(l?i+l+"M":"")+(u?o+u+"D":"")+(t||e||c?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(c?s+n+"S":"")):"P0D"}var en=zt.prototype;return en.isValid=function(){return this._isValid},en.abs=function(){var e=this._data;return this._milliseconds=Mr(this._milliseconds),this._days=Mr(this._days),this._months=Mr(this._months),e.milliseconds=Mr(e.milliseconds),e.seconds=Mr(e.seconds),e.minutes=Mr(e.minutes),e.hours=Mr(e.hours),e.months=Mr(e.months),e.years=Mr(e.years),this},en.add=function(e,t){return Sr(this,e,t,1)},en.subtract=function(e,t){return Sr(this,e,t,-1)},en.as=function(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if("month"===(e=W(e))||"quarter"===e||"year"===e)switch(t=this._days+n/864e5,r=this._months+Cr(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round(Dr(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}},en.asMilliseconds=Nr,en.asSeconds=Pr,en.asMinutes=jr,en.asHours=Rr,en.asDays=zr,en.asWeeks=Lr,en.asMonths=Yr,en.asQuarters=Wr,en.asYears=Ir,en.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*G(this._months/12):NaN},en._bubble=function(){var e,t,r,n,a,i=this._milliseconds,o=this._days,s=this._months,c=this._data;return 0<=i&&0<=o&&0<=s||i<=0&&o<=0&&s<=0||(i+=864e5*Tr(Dr(s)+o),s=o=0),c.milliseconds=i%1e3,e=F(i/1e3),c.seconds=e%60,t=F(e/60),c.minutes=t%60,r=F(t/60),c.hours=r%24,o+=F(r/24),a=F(Cr(o)),s+=a,o-=Tr(Dr(a)),n=F(s/12),s%=12,c.days=o,c.months=s,c.years=n,this},en.clone=function(){return Vt(this)},en.get=function(e){return e=W(e),this.isValid()?this[e+"s"]():NaN},en.milliseconds=qr,en.seconds=Hr,en.minutes=Fr,en.hours=Gr,en.days=Ur,en.weeks=function(){return F(this.days()/7)},en.months=$r,en.years=Vr,en.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v=!1,y=Jr;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(v=e),"object"==typeof t&&(y=Object.assign({},Jr,t),null!=t.s&&null==t.ss&&(y.ss=t.s-1)),r=this.localeData(),i=!v,o=y,s=r,c=Vt(a=this).abs(),u=Kr(c.as("s")),l=Kr(c.as("m")),f=Kr(c.as("h")),d=Kr(c.as("d")),h=Kr(c.as("M")),p=Kr(c.as("w")),m=Kr(c.as("y")),g=u<=o.ss&&["s",u]||u<o.s&&["ss",u]||l<=1&&["m"]||l<o.m&&["mm",l]||f<=1&&["h"]||f<o.h&&["hh",f]||d<=1&&["d"]||d<o.d&&["dd",d],null!=o.w&&(g=g||p<=1&&["w"]||p<o.w&&["ww",p]),(g=g||h<=1&&["M"]||h<o.M&&["MM",h]||m<=1&&["y"]||["yy",m])[2]=i,g[3]=0<+a,g[4]=s,n=function(e,t,r,n,a){return a.relativeTime(t||1,!!r,e,n)}.apply(null,g),v&&(n=r.pastFuture(+this,n)),r.postformat(n)},en.toISOString=Qr,en.toString=Qr,en.toJSON=Qr,en.locale=nr,en.localeData=ir,en.toIsoString=r("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qr),en.lang=ar,j("X",0,0,"unix"),j("x",0,0,"valueOf"),de("x",ce),de("X",/[+-]?\d+(\.\d{1,3})?/),ge("X",function(e,t,r){r._d=new Date(1e3*parseFloat(e))}),ge("x",function(e,t,r){r._d=new Date(G(e))}),_.version="2.29.4",e=Ot,_.fn=br,_.min=function(){return jt("isBefore",[].slice.call(arguments,0))},_.max=function(){return jt("isAfter",[].slice.call(arguments,0))},_.now=function(){return Date.now?Date.now():+new Date},_.utc=m,_.unix=function(e){return Ot(1e3*e)},_.months=function(e,t){return kr(e,t,"months")},_.isDate=p,_.locale=ft,_.invalid=s,_.duration=Vt,_.isMoment=w,_.weekdays=function(e,t,r){return Er(e,t,r,"weekdays")},_.parseZone=function(){return Ot.apply(null,arguments).parseZone()},_.localeData=ht,_.isDuration=Lt,_.monthsShort=function(e,t){return kr(e,t,"monthsShort")},_.weekdaysMin=function(e,t,r){return Er(e,t,r,"weekdaysMin")},_.defineLocale=dt,_.updateLocale=function(e,t){if(null!=t){var r,n,a=it;null!=ot[e]&&null!=ot[e].parentLocale?ot[e].set(S(ot[e]._config,t)):(null!=(n=lt(e))&&(a=n._config),t=S(a,t),null==n&&(t.abbr=e),(r=new T(t)).parentLocale=ot[e],ot[e]=r),ft(e)}else null!=ot[e]&&(null!=ot[e].parentLocale?(ot[e]=ot[e].parentLocale,e===ft()&&ft(e)):null!=ot[e]&&delete ot[e]);return ot[e]},_.locales=function(){return n(ot)},_.weekdaysShort=function(e,t,r){return Er(e,t,r,"weekdaysShort")},_.normalizeUnits=W,_.relativeTimeRounding=function(e){return void 0!==e?"function"==typeof e&&(Kr=e,!0):Kr},_.relativeTimeThreshold=function(e,t){return void 0!==Jr[e]&&(void 0===t?Jr[e]:(Jr[e]=t,"s"===e&&(Jr.ss=t-1),!0))},_.calendarFormat=function(e,t){var r=e.diff(t,"days",!0);return r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse"},_.prototype=br,_.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},_}()}),ec=e(function(e){var t,r;t=this,r=function(i){void 0===i.version&&i.default&&(i=i.default);var t,o={},s={},c={},u={},l={};i&&"string"==typeof i.version||T("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var e=i.version.split("."),r=+e[0],n=+e[1];function f(e){return 96<e?e-87:64<e?e-29:e-48}function a(e){var t=0,r=e.split("."),n=r[0],a=r[1]||"",i=1,o=0,s=1;for(45===e.charCodeAt(0)&&(s=-(t=1));t<n.length;t++)o=60*o+f(n.charCodeAt(t));for(t=0;t<a.length;t++)i/=60,o+=f(a.charCodeAt(t))*i;return o*s}function d(e){for(var t=0;t<e.length;t++)e[t]=a(e[t])}function h(e,t){var r,n=[];for(r=0;r<t.length;r++)n[r]=e[t[r]];return n}function p(e){var t=e.split("|"),r=t[2].split(" "),n=t[3].split(""),a=t[4].split(" ");return d(r),d(n),d(a),function(e,t){for(var r=0;r<t;r++)e[r]=Math.round((e[r-1]||0)+6e4*e[r]);e[t-1]=1/0}(a,n.length),{name:t[0],abbrs:h(t[1].split(" "),n),offsets:h(r,n),untils:a,population:0|t[5]}}function m(e){e&&this._set(p(e))}function g(e,t){this.name=e,this.zones=t}function v(e){var t=e.toTimeString(),r=t.match(/\([a-z ]+\)/i);"GMT"===(r=r&&r[0]?(r=r[0].match(/[A-Z]/g))?r.join(""):void 0:(r=t.match(/[A-Z]{3,5}/g))?r[0]:void 0)&&(r=void 0),this.at=+e,this.abbr=r,this.offset=e.getTimezoneOffset()}function y(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function _(e,t){for(var r,n;n=6e4*((t.at-e.at)/12e4|0);)(r=new v(new Date(e.at+n))).offset===e.offset?e=r:t=r;return e}function b(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:e.zone.population!==t.zone.population?t.zone.population-e.zone.population:t.zone.name.localeCompare(e.zone.name)}function A(e,t){var r,n;for(d(t),r=0;r<t.length;r++)n=t[r],l[n]=l[n]||{},l[n][e]=!0}function w(e){return(e||"").toLowerCase().replace(/\//g,"_")}function x(e){var t,r,n,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)a=w(r=(n=e[t].split("|"))[0]),o[a]=e[t],u[a]=r,A(a,n[2].split(" "))}function k(e,t){e=w(e);var r,n=o[e];return n instanceof m?n:"string"==typeof n?(n=new m(n),o[e]=n):s[e]&&t!==k&&(r=k(s[e],k))?((n=o[e]=new m)._set(r),n.name=u[e],n):null}function E(e){var t,r,n,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)n=w((r=e[t].split("|"))[0]),a=w(r[1]),s[n]=a,u[n]=r[0],s[a]=n,u[a]=r[1]}function M(e){x(e.zones),E(e.links),function(e){var t,r,n,a;if(e&&e.length)for(t=0;t<e.length;t++)r=(a=e[t].split("|"))[0].toUpperCase(),n=a[1].split(" "),c[r]=new g(r,n)}(e.countries),C.dataVersion=e.version}function S(e){var t="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||t)}function T(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function C(e){var t=Array.prototype.slice.call(arguments,0,-1),r=arguments[arguments.length-1],n=k(r),a=i.utc.apply(null,t);return n&&!i.isMoment(e)&&S(a)&&a.add(n.parse(a),"minutes"),a.tz(r),a}(r<2||2==r&&n<6)&&T("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+i.version+". See momentjs.com"),m.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,r=+e,n=this.untils;for(t=0;t<n.length;t++)if(r<n[t])return t},countries:function(){var t=this.name;return Object.keys(c).filter(function(e){return-1!==c[e].zones.indexOf(t)})},parse:function(e){var t,r,n,a,i=+e,o=this.offsets,s=this.untils,c=s.length-1;for(a=0;a<c;a++)if(t=o[a],r=o[a+1],n=o[a?a-1:a],t<r&&C.moveAmbiguousForward?t=r:n<t&&C.moveInvalidForward&&(t=n),i<s[a]-6e4*t)return o[a];return o[c]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return T("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},y.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},C.version="0.5.36",C.dataVersion="",C._zones=o,C._links=s,C._names=u,C._countries=c,C.add=x,C.link=E,C.load=M,C.zone=k,C.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,T("moment.tz.zoneExists('"+t+"') has been deprecated in favor of !moment.tz.zone('"+t+"')")),!!k(t)},C.guess=function(e){return t&&!e||(t=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&3<e.length){var t=u[w(e)];if(t)return t;T("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var r,n,a,i=function(){var e,t,r,n=(new Date).getFullYear()-2,a=new v(new Date(n,0,1)),i=[a];for(r=1;r<48;r++)(t=new v(new Date(n,r,1))).offset!==a.offset&&(e=_(a,t),i.push(e),i.push(new v(new Date(e.at+6e4)))),a=t;for(r=0;r<4;r++)i.push(new v(new Date(n+r,0,1))),i.push(new v(new Date(n+r,6,1)));return i}(),o=i.length,s=function(e){var t,r,n,a=e.length,i={},o=[];for(t=0;t<a;t++)for(r in n=l[e[t].offset]||{})n.hasOwnProperty(r)&&(i[r]=!0);for(t in i)i.hasOwnProperty(t)&&o.push(u[t]);return o}(i),c=[];for(n=0;n<s.length;n++){for(r=new y(k(s[n]),o),a=0;a<o;a++)r.scoreOffsetAt(i[a]);c.push(r)}return c.sort(b),0<c.length?c[0].zone.name:void 0}()),t},C.names=function(){var e,t=[];for(e in u)u.hasOwnProperty(e)&&(o[e]||o[s[e]])&&u[e]&&t.push(u[e]);return t.sort()},C.Zone=m,C.unpack=p,C.unpackBase60=a,C.needsOffset=S,C.moveInvalidForward=!0,C.moveAmbiguousForward=!1,C.countries=function(){return Object.keys(c)},C.zonesForCountry=function(e,t){if(r=(r=e).toUpperCase(),!(e=c[r]||null))return null;var r,n=e.zones.sort();return t?n.map(function(e){return{name:e,offset:k(e).utcOffset(new Date)}}):n};var D,O=i.fn;function N(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function P(e){return function(){return this._z=null,e.apply(this,arguments)}}i.tz=C,i.defaultZone=null,i.updateOffset=function(e,t){var r,n=i.defaultZone;if(void 0===e._z&&(n&&S(e)&&!e._isUTC&&(e._d=i.utc(e._a)._d,e.utc().add(n.parse(e),"minutes")),e._z=n),e._z)if(r=e._z.utcOffset(e),Math.abs(r)<16&&(r/=60),void 0!==e.utcOffset){var a=e._z;e.utcOffset(-r,t),e._z=a}else e.zone(r,t)},O.tz=function(e,t){if(e){if("string"!=typeof e)throw new Error("Time zone name must be a string, got "+e+" ["+typeof e+"]");return this._z=k(e),this._z?i.updateOffset(this,t):T("Moment Timezone has no data for "+e+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},O.zoneName=N(O.zoneName),O.zoneAbbr=N(O.zoneAbbr),O.utc=P(O.utc),O.local=P(O.local),O.utcOffset=(D=O.utcOffset,function(){return 0<arguments.length&&(this._z=null),D.apply(this,arguments)}),i.tz.setDefault=function(e){return(r<2||2==r&&n<9)&&T("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+i.version+"."),i.defaultZone=e?k(e):null,i};var j=i.momentProperties;return"[object Array]"===Object.prototype.toString.call(j)?(j.push("_z"),j.push("_a")):j&&(j._z=null),M({version:"2022c",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Juba|EAT CAT|-30 -20|01|24nx0|","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5","America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Kuala_Lumpur|+08|-80|0||71e5","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1q00|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PST|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5","Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0||","Pacific/Guadalcanal|+11|-b0|0||11e4","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0||","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0||","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0||","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UTC|UTC|0|0||","Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Volgograd|+04 +03|-40 -30|0101|1N7y0 9Jd0 5gn0|10e5","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 4q00|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Godthab|America/Nuuk","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Whitehorse|America/Dawson","America/Whitehorse|Canada/Yukon","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qostanay","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Brunei","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Etc/GMT-8","Asia/Kuala_Lumpur|Singapore","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Antarctica/Macquarie","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Kyiv","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Ulyanovsk|Europe/Astrakhan","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Fakaofo|Pacific/Kanton","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"],countries:["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv Europe/Uzhgorod Europe/Zaporozhye","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Honolulu Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}),i},e.exports?e.exports=r(Qs):r(t.moment)}),tc=function(e,t){var r=e.toString();function n(n){return function(e,t,r){return n+t+(r[0].toUpperCase()===r[0]?"A":"a")}}if((t=t||{}).preferredOrder=t.preferredOrder||Bc,(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=r.replace(Wc,"x")).replace(Ic,"X")).replace(Yc,"[$1]")).replace(rc,"dddd")).replace(nc,"ddd")).replace(ac,"dd")).replace(sc,"Do")).replace(ic,"MMMM")).replace(oc,"MMM")).replace(cc,function(e,t,r,n,a,i){var o,s=1===Math.min(r.length,a.length,i.length),c=4===Math.max(r.length,a.length,i.length),u="string"==typeof e.preferredOrder?e.preferredOrder:e.preferredOrder[n];return r=parseInt(r,10),a=parseInt(a,10),i=parseInt(i,10),o=[r,a,i],u=u.toUpperCase(),31<r?(o[0]=c?"YYYY":"YY",o[1]=s?"M":"MM",o[2]=s?"D":"DD"):12<a?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o[2]=c?"YYYY":"YY"):31<i?(o[2]=c?"YYYY":"YY","M"===u[0]&&r<13?(o[0]=s?"M":"MM",o[1]=s?"D":"DD"):(o[0]=s?"D":"DD",o[1]=s?"M":"MM")):(o[u.indexOf("D")]=s?"D":"DD",o[u.indexOf("M")]=s?"M":"MM",o[u.indexOf("Y")]=c?"YYYY":"YY"),o.join(n)}.bind(null,t))).replace(uc,"Z")).replace(vc,"HH:mm:ss.SSS")).replace(yc,"HH:mm:ss.SS")).replace(_c,"HH:mm:ss.S")).replace(fc,n("hh:mm:ss"))).replace(pc,n("h:mm:ss"))).replace(dc,n("hh:mm"))).replace(mc,n("h:mm"))).replace(hc,n("hh"))).replace(gc,n("h"))).replace(bc,"HH:mm:ss")).replace(xc,"H:mm:ss.SSS")).replace(kc,"H:mm:ss.SS")).replace(Ec,"H:mm:ss.S")).replace(wc,"H:mm:ss")).replace(Ac,"HH:mm")).replace(Mc,"H:mm")).replace(Sc,"YYYY")).replace(Oc,"D/M")).replace(Nc,"D/MM")).replace(Pc,"DD/M")).replace(jc,"DD/MM")).replace(Rc,"M/YY")).replace(zc,"MM/YY")).match(Lc)){r=(r=r.replace(/0\d.\d{2}|\d{2}.\d{2}/,"H.mm")).replace(/\d{1}.\d{2}/,"h.mm")}(r=(r=(r=r.replace(Tc,"DD")).replace(Cc,"D")).replace(Dc,"YY")).length<1&&(r=void 0);return r},rc=new RegExp(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].join("|"),"i"),nc=new RegExp(["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].join("|"),"i"),ac=new RegExp("\\b("+["Su","Mo","Tu","We","Th","Fr","Sa"].join("|")+")\\b","i"),ic=new RegExp(["January","February","March","April","May","June","July","August","September","October","November","December"].join("|"),"i"),oc=new RegExp(["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].join("|"),"i"),sc=/(\d+)(st|nd|rd|th)\b/i,cc=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,uc=/((\+|-)\d\d:?\d\d)$/,lc="("+["AM?","PM?"].join("|")+")",fc=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+lc,"i"),dc=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+lc,"i"),hc=new RegExp("0\\d(\\s*)"+lc,"i"),pc=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+lc,"i"),mc=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+lc,"i"),gc=new RegExp("\\d{1,2}(\\s*)"+lc,"i"),vc=/\d{2}:\d{2}:\d{2}\.\d{3}/,yc=/\d{2}:\d{2}:\d{2}\.\d{2}/,_c=/\d{2}:\d{2}:\d{2}\.\d{1}/,bc=/0\d:\d{2}:\d{2}/,Ac=/0\d:\d{2}/,wc=/\d{1,2}:\d{2}:\d{2}/,xc=/\d{1,2}:\d{2}:\d{2}\.\d{3}/,kc=/\d{1,2}:\d{2}:\d{2}\.\d{2}/,Ec=/\d{1,2}:\d{2}:\d{2}\.\d{1}/,Mc=/\d{1,2}:\d{2}/,Sc=/\d{4}/,Tc=/0\d/,Cc=/\d{1,2}/,Dc=/\d{2}/,Oc=/^([1-9])\/([1-9]|0[1-9])$/,Nc=/^([1-9])\/(1[012])$/,Pc=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,jc=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,Rc=/^([1-9])\/([1-9][0-9])$/,zc=/^(0[1-9]|1[012])\/([1-9][0-9])$/,Lc=/([/][M]|[M][/]|[MM]|[MMMM])/,Yc=/\b(at)\b/i,Wc=/\d{13}/,Ic=/\d{10}/,Bc={"/":"MDY",".":"DMY","-":"YMD"};var qc=tc;function Hc(e,t,r){if($s.test(e))return ec(new Date(e));if(Fs.test(e)){var n=Fs.exec(e);return ec().subtract(n[1],n[2])}return qs.test(e)?ec():t?ec.tz(e,r||qc(e),t):ec(e,r||qc(e))}function Fc(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=t.timezone,n=t.format;if(Ls.test(e))return new Date(Aa(e,10)).toISOString();if(Ys.test(e))return new Date(1e3*Aa(e,10)).toISOString();var a=Hc(e,r,n);return a.isValid()||(a=Hc(e=(e.match(Us)||[]).join(" ").replace(Bs,"m").replace(Is,"$1 $2 $3").replace(Ws,"$1").trim(),r,n)),a.isValid()?a.toISOString():null}function Gc(e,t){var r,n,a,i,o,s,c=t.$,u=(t.cleanConditionally,t.title),l=void 0===u?"":u,f=t.url,d=void 0===f?"":f,h=t.defaultCleaner,p=void 0===h||h;return r=Ti((r=Ti((r=c)("html"),r,"div"))("body"),r,"div"),p&&Ci(e,c),Uo(e,c,d),function(e,t,r){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:[];if(0===n.length&&(n=fi),r){var a=Sn.parse(r),i=a.protocol,o=a.hostname;n=[].concat(Li(n),['iframe[src^="'.concat(i,"//").concat(o,'"]')])}t(n.join(","),e).addClass(li)}(e,c,d),function(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:[];0===r.length&&(r=di),t(r.join(","),e).not(".".concat(li)).remove()}(e,c),(a=(n=c)("h1",e)).length<3?a.each(function(e,t){return n(t).remove()}):a.each(function(e,t){Ti(n(t),n,"h2")}),function(n,a){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"";a(mi,n).each(function(e,t){var r=a(t);return 0===a(r,n).prevAll("p").length?r.remove():ua(a(t).text())===i?r.remove():Vi(a(t))<0?r.remove():r})}(e,c,l),p&&lo(e,c),i=c,e.find("p").each(function(e,t){var r=i(t);0===r.find("iframe, img").length&&""===r.text().trim()&&r.remove()}),s=c,Yi((o=e).parent().length?o.parent():o,s),e}function Uc(e,t){var r=t.url,n=t.$;if(Vs.test(e)&&(e=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"",r=e.split(Vs);if(1===r.length)return e;var n=function(e,t){if(6<=e.length){var r=e.reduce(function(e,t){return e[t]=e[t]?e[t]+1:1,e},{}),n=ci(r).reduce(function(e,t){return e[1]<r[t]?[t,r[t]]:e},[0,0]),a=Pa(n,2),i=a[0],o=a[1];2<=o&&i.length<=4&&(e=t.split(i));var s=[e[0],e.slice(-1)],c=s.reduce(function(e,t){return e.length>t.length?e:t},"");return 10<c.length?c:t}return null}(r,e);return n||(n=function(e,t){var r=Sn.parse(t).host.replace(Ks,""),n=e[0].toLowerCase().replace(" ","");if(.4<Jc.levenshtein(n,r)&&5<n.length)return e.slice(2).join("");var a=e.slice(-1)[0].toLowerCase().replace(" ","");return.4<Jc.levenshtein(a,r)&&5<=a.length?e.slice(0,-2).join(""):null}(r,t))||e}(e,r)),150<e.length){var a=n("h1");1===a.length&&(e=a.text())}return ua(ts(e,n).trim())}"undefined"!=typeof window&&window.moment&&(window.moment.parseFormat=tc);var $c=e(function(I,B){(function(){var to,ro="Expected a function",no="__lodash_hash_undefined__",ao="__lodash_placeholder__",io=9007199254740991,oo=NaN,so=4294967295,co=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],uo="[object Arguments]",lo="[object Array]",fo="[object Boolean]",ho="[object Date]",po="[object Error]",mo="[object Function]",go="[object GeneratorFunction]",vo="[object Map]",yo="[object Number]",_o="[object Object]",bo="[object Promise]",Ao="[object RegExp]",wo="[object Set]",xo="[object String]",ko="[object Symbol]",Eo="[object WeakMap]",Mo="[object ArrayBuffer]",So="[object DataView]",To="[object Float32Array]",Co="[object Float64Array]",Do="[object Int8Array]",Oo="[object Int16Array]",No="[object Int32Array]",Po="[object Uint8Array]",jo="[object Uint8ClampedArray]",Ro="[object Uint16Array]",zo="[object Uint32Array]",Lo=/\b__p \+= '';/g,Yo=/\b(__p \+=) '' \+/g,Wo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Io=/&(?:amp|lt|gt|quot|#39);/g,Bo=/[&<>"']/g,qo=RegExp(Io.source),Ho=RegExp(Bo.source),Fo=/<%-([\s\S]+?)%>/g,Go=/<%([\s\S]+?)%>/g,Uo=/<%=([\s\S]+?)%>/g,$o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Vo=/^\w*$/,Ko=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Jo=/[\\^$.*+?()[\]{}|]/g,Zo=RegExp(Jo.source),Xo=/^\s+/,r=/\s/,Qo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,es=/\{\n\/\* \[wrapped with (.+)\] \*/,ts=/,? & /,rs=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ns=/[()=,{}\[\]\/\s]/,as=/\\(\\)?/g,is=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,os=/\w*$/,ss=/^[-+]0x[0-9a-f]+$/i,cs=/^0b[01]+$/i,us=/^\[object .+?Constructor\]$/,ls=/^0o[0-7]+$/i,fs=/^(?:0|[1-9]\d*)$/,ds=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,hs=/($^)/,ps=/['\n\r\u2028\u2029\\]/g,e="\\ud800-\\udfff",t="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",n="\\u2700-\\u27bf",a="a-z\\xdf-\\xf6\\xf8-\\xff",i="A-Z\\xc0-\\xd6\\xd8-\\xde",o="\\ufe0e\\ufe0f",s="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",c="["+e+"]",u="["+s+"]",l="["+t+"]",f="\\d+",d="["+n+"]",h="["+a+"]",p="[^"+e+s+f+n+a+i+"]",m="\\ud83c[\\udffb-\\udfff]",g="[^"+e+"]",v="(?:\\ud83c[\\udde6-\\uddff]){2}",y="[\\ud800-\\udbff][\\udc00-\\udfff]",_="["+i+"]",b="(?:"+h+"|"+p+")",A="(?:"+_+"|"+p+")",w="(?:['’](?:d|ll|m|re|s|t|ve))?",x="(?:['’](?:D|LL|M|RE|S|T|VE))?",k="(?:"+l+"|"+m+")"+"?",E="["+o+"]?",M=E+k+("(?:\\u200d(?:"+[g,v,y].join("|")+")"+E+k+")*"),S="(?:"+[d,v,y].join("|")+")"+M,T="(?:"+[g+l+"?",l,v,y,c].join("|")+")",ms=RegExp("['’]","g"),gs=RegExp(l,"g"),C=RegExp(m+"(?="+m+")|"+T+M,"g"),vs=RegExp([_+"?"+h+"+"+w+"(?="+[u,_,"$"].join("|")+")",A+"+"+x+"(?="+[u,_+b,"$"].join("|")+")",_+"?"+b+"+"+w,_+"+"+x,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",f,S].join("|"),"g"),D=RegExp("[\\u200d"+e+t+o+"]"),ys=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,_s=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],bs=-1,As={};As[To]=As[Co]=As[Do]=As[Oo]=As[No]=As[Po]=As[jo]=As[Ro]=As[zo]=!0,As[uo]=As[lo]=As[Mo]=As[fo]=As[So]=As[ho]=As[po]=As[mo]=As[vo]=As[yo]=As[_o]=As[Ao]=As[wo]=As[xo]=As[Eo]=!1;var ws={};ws[uo]=ws[lo]=ws[Mo]=ws[So]=ws[fo]=ws[ho]=ws[To]=ws[Co]=ws[Do]=ws[Oo]=ws[No]=ws[vo]=ws[yo]=ws[_o]=ws[Ao]=ws[wo]=ws[xo]=ws[ko]=ws[Po]=ws[jo]=ws[Ro]=ws[zo]=!0,ws[po]=ws[mo]=ws[Eo]=!1;var O={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},xs=parseFloat,ks=parseInt,N="object"==typeof Xr&&Xr&&Xr.Object===Object&&Xr,P="object"==typeof self&&self&&self.Object===Object&&self,Es=N||P||Function("return this")(),j=B&&!B.nodeType&&B,R=j&&I&&!I.nodeType&&I,Ms=R&&R.exports===j,z=Ms&&N.process,L=function(){try{var e=R&&R.require&&R.require("util").types;return e||z&&z.binding&&z.binding("util")}catch(e){}}(),Ss=L&&L.isArrayBuffer,Ts=L&&L.isDate,Cs=L&&L.isMap,Ds=L&&L.isRegExp,Os=L&&L.isSet,Ns=L&&L.isTypedArray;function Ps(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function js(e,t,r,n){for(var a=-1,i=null==e?0:e.length;++a<i;){var o=e[a];t(n,o,r(o),e)}return n}function Rs(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e}function zs(e,t){for(var r=null==e?0:e.length;r--&&!1!==t(e[r],r,e););return e}function Ls(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(!t(e[r],r,e))return!1;return!0}function Ys(e,t){for(var r=-1,n=null==e?0:e.length,a=0,i=[];++r<n;){var o=e[r];t(o,r,e)&&(i[a++]=o)}return i}function Ws(e,t){return!!(null==e?0:e.length)&&-1<Vs(e,t,0)}function Is(e,t,r){for(var n=-1,a=null==e?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}function Bs(e,t){for(var r=-1,n=null==e?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}function qs(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}function Hs(e,t,r,n){var a=-1,i=null==e?0:e.length;for(n&&i&&(r=e[++a]);++a<i;)r=t(r,e[a],a,e);return r}function Fs(e,t,r,n){var a=null==e?0:e.length;for(n&&a&&(r=e[--a]);a--;)r=t(r,e[a],a,e);return r}function Gs(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var Y=Xs("length");function Us(e,n,t){var a;return t(e,function(e,t,r){if(n(e,t,r))return a=t,!1}),a}function $s(e,t,r,n){for(var a=e.length,i=r+(n?1:-1);n?i--:++i<a;)if(t(e[i],i,e))return i;return-1}function Vs(e,t,r){return t==t?function(e,t,r){var n=r-1,a=e.length;for(;++n<a;)if(e[n]===t)return n;return-1}(e,t,r):$s(e,Js,r)}function Ks(e,t,r,n){for(var a=r-1,i=e.length;++a<i;)if(n(e[a],t))return a;return-1}function Js(e){return e!=e}function Zs(e,t){var r=null==e?0:e.length;return r?ec(e,t)/r:oo}function Xs(t){return function(e){return null==e?to:e[t]}}function W(t){return function(e){return null==t?to:t[e]}}function Qs(e,n,a,i,t){return t(e,function(e,t,r){a=i?(i=!1,e):n(a,e,t,r)}),a}function ec(e,t){for(var r,n=-1,a=e.length;++n<a;){var i=t(e[n]);i!==to&&(r=r===to?i:r+i)}return r}function tc(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}function rc(e){return e?e.slice(0,yc(e)+1).replace(Xo,""):e}function nc(t){return function(e){return t(e)}}function ac(t,e){return Bs(e,function(e){return t[e]})}function ic(e,t){return e.has(t)}function oc(e,t){for(var r=-1,n=e.length;++r<n&&-1<Vs(t,e[r],0););return r}function sc(e,t){for(var r=e.length;r--&&-1<Vs(t,e[r],0););return r}var cc=W({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n",ſ:"s"}),uc=W({"&":"&","<":"<",">":">",'"':""","'":"'"});function lc(e){return"\\"+O[e]}function fc(e){return D.test(e)}function dc(e){var r=-1,n=Array(e.size);return e.forEach(function(e,t){n[++r]=[t,e]}),n}function hc(t,r){return function(e){return t(r(e))}}function pc(e,t){for(var r=-1,n=e.length,a=0,i=[];++r<n;){var o=e[r];o!==t&&o!==ao||(e[r]=ao,i[a++]=r)}return i}function mc(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}function gc(e){return fc(e)?function(e){var t=C.lastIndex=0;for(;C.test(e);)++t;return t}(e):Y(e)}function vc(e){return fc(e)?e.match(C)||[]:e.split("")}function yc(e){for(var t=e.length;t--&&r.test(e.charAt(t)););return t}var _c=W({"&":"&","<":"<",">":">",""":'"',"'":"'"});var bc=function e(t){var r,T=(t=null==t?Es:bc.defaults(Es.Object(),t,bc.pick(Es,_s))).Array,n=t.Date,g=t.Error,v=t.Function,a=t.Math,k=t.Object,y=t.RegExp,l=t.String,C=t.TypeError,i=T.prototype,o=v.prototype,f=k.prototype,s=t["__core-js_shared__"],c=o.toString,E=f.hasOwnProperty,u=0,d=(r=/[^.]+$/.exec(s&&s.keys&&s.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",h=f.toString,p=c.call(k),m=Es._,_=y("^"+c.call(E).replace(Jo,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),b=Ms?t.Buffer:to,A=t.Symbol,w=t.Uint8Array,x=b?b.allocUnsafe:to,M=hc(k.getPrototypeOf,k),S=k.create,D=f.propertyIsEnumerable,O=i.splice,N=A?A.isConcatSpreadable:to,P=A?A.iterator:to,j=A?A.toStringTag:to,R=function(){try{var e=Wr(k,"defineProperty");return e({},"",{}),e}catch(e){}}(),z=t.clearTimeout!==Es.clearTimeout&&t.clearTimeout,L=n&&n.now!==Es.Date.now&&n.now,Y=t.setTimeout!==Es.setTimeout&&t.setTimeout,W=a.ceil,I=a.floor,B=k.getOwnPropertySymbols,q=b?b.isBuffer:to,H=t.isFinite,F=i.join,G=hc(k.keys,k),U=a.max,$=a.min,V=n.now,K=t.parseInt,J=a.random,Z=i.reverse,X=Wr(t,"DataView"),Q=Wr(t,"Map"),ee=Wr(t,"Promise"),te=Wr(t,"Set"),re=Wr(t,"WeakMap"),ne=Wr(k,"create"),ae=re&&new re,ie={},oe=pn(X),se=pn(Q),ce=pn(ee),ue=pn(te),le=pn(re),fe=A?A.prototype:to,de=fe?fe.valueOf:to,he=fe?fe.toString:to;function pe(e){if(Oa(e)&&!ba(e)&&!(e instanceof ye)){if(e instanceof ve)return e;if(E.call(e,"__wrapped__"))return mn(e)}return new ve(e)}var me=function(){function r(){}return function(e){if(!Da(e))return{};if(S)return S(e);r.prototype=e;var t=new r;return r.prototype=to,t}}();function ge(){}function ve(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=to}function ye(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=so,this.__views__=[]}function _e(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function be(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function Ae(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function we(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Ae;++t<r;)this.add(e[t])}function xe(e){var t=this.__data__=new be(e);this.size=t.size}function ke(e,t){var r=ba(e),n=!r&&_a(e),a=!r&&!n&&ka(e),i=!r&&!n&&!a&&Wa(e),o=r||n||a||i,s=o?tc(e.length,l):[],c=s.length;for(var u in e)!t&&!E.call(e,u)||o&&("length"==u||a&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Ur(u,c))||s.push(u);return s}function Ee(e){var t=e.length;return t?e[wt(0,t-1)]:to}function Me(e,t){return un(nr(e),Re(t,0,e.length))}function Se(e){return un(nr(e))}function Te(e,t,r){(r===to||ga(e[t],r))&&(r!==to||t in e)||Pe(e,t,r)}function Ce(e,t,r){var n=e[t];E.call(e,t)&&ga(n,r)&&(r!==to||t in e)||Pe(e,t,r)}function De(e,t){for(var r=e.length;r--;)if(ga(e[r][0],t))return r;return-1}function Oe(e,n,a,i){return Ie(e,function(e,t,r){n(i,e,a(e),r)}),i}function Ne(e,t){return e&&ar(t,si(t),e)}function Pe(e,t,r){"__proto__"==t&&R?R(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}function je(e,t){for(var r=-1,n=t.length,a=T(n),i=null==e;++r<n;)a[r]=i?to:ri(e,t[r]);return a}function Re(e,t,r){return e==e&&(r!==to&&(e=e<=r?e:r),t!==to&&(e=t<=e?e:t)),e}function ze(r,n,a,e,t,i){var o,s=1&n,c=2&n,u=4&n;if(a&&(o=t?a(r,e,t,i):a(r)),o!==to)return o;if(!Da(r))return r;var l,f,d,h,p,m,g,v,y,_=ba(r);if(_){if(v=(g=r).length,y=new g.constructor(v),v&&"string"==typeof g[0]&&E.call(g,"index")&&(y.index=g.index,y.input=g.input),o=y,!s)return nr(r,o)}else{var b=qr(r),A=b==mo||b==go;if(ka(r))return Zt(r,s);if(b==_o||b==uo||A&&!t){if(o=c||A?{}:Fr(r),!s)return c?(m=d=r,h=(p=o)&&ar(m,ci(m),p),ar(d,Br(d),h)):(f=Ne(o,l=r),ar(l,Ir(l),f))}else{if(!ws[b])return t?r:{};o=function(e,t,r){var n,a,i,o,s,c=e.constructor;switch(t){case Mo:return Xt(e);case fo:case ho:return new c(+e);case So:return o=e,s=r?Xt(o.buffer):o.buffer,new o.constructor(s,o.byteOffset,o.byteLength);case To:case Co:case Do:case Oo:case No:case Po:case jo:case Ro:case zo:return Qt(e,r);case vo:return new c;case yo:case xo:return new c(e);case Ao:return(i=new(a=e).constructor(a.source,os.exec(a))).lastIndex=a.lastIndex,i;case wo:return new c;case ko:return n=e,de?k(de.call(n)):{}}}(r,b,s)}}i||(i=new xe);var w=i.get(r);if(w)return w;i.set(r,o),za(r)?r.forEach(function(e){o.add(ze(e,n,a,e,r,i))}):Na(r)&&r.forEach(function(e,t){o.set(t,ze(e,n,a,t,r,i))});var x=_?to:(u?c?Nr:Or:c?ci:si)(r);return Rs(x||r,function(e,t){x&&(e=r[t=e]),Ce(o,t,ze(e,n,a,t,r,i))}),o}function Le(e,t,r){var n=r.length;if(null==e)return!n;for(e=k(e);n--;){var a=r[n],i=t[a],o=e[a];if(o===to&&!(a in e)||!i(o))return!1}return!0}function Ye(e,t,r){if("function"!=typeof e)throw new C(ro);return an(function(){e.apply(to,r)},t)}function We(e,t,r,n){var a=-1,i=Ws,o=!0,s=e.length,c=[],u=t.length;if(!s)return c;r&&(t=Bs(t,nc(r))),n?(i=Is,o=!1):200<=t.length&&(i=ic,o=!1,t=new we(t));e:for(;++a<s;){var l=e[a],f=null==r?l:r(l);if(l=n||0!==l?l:0,o&&f==f){for(var d=u;d--;)if(t[d]===f)continue e;c.push(l)}else i(t,f,n)||c.push(l)}return c}pe.templateSettings={escape:Fo,evaluate:Go,interpolate:Uo,variable:"",imports:{_:pe}},(pe.prototype=ge.prototype).constructor=pe,(ve.prototype=me(ge.prototype)).constructor=ve,(ye.prototype=me(ge.prototype)).constructor=ye,_e.prototype.clear=function(){this.__data__=ne?ne(null):{},this.size=0},_e.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},_e.prototype.get=function(e){var t=this.__data__;if(ne){var r=t[e];return r===no?to:r}return E.call(t,e)?t[e]:to},_e.prototype.has=function(e){var t=this.__data__;return ne?t[e]!==to:E.call(t,e)},_e.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=ne&&t===to?no:t,this},be.prototype.clear=function(){this.__data__=[],this.size=0},be.prototype.delete=function(e){var t=this.__data__,r=De(t,e);return!(r<0||(r==t.length-1?t.pop():O.call(t,r,1),--this.size,0))},be.prototype.get=function(e){var t=this.__data__,r=De(t,e);return r<0?to:t[r][1]},be.prototype.has=function(e){return-1<De(this.__data__,e)},be.prototype.set=function(e,t){var r=this.__data__,n=De(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},Ae.prototype.clear=function(){this.size=0,this.__data__={hash:new _e,map:new(Q||be),string:new _e}},Ae.prototype.delete=function(e){var t=Lr(this,e).delete(e);return this.size-=t?1:0,t},Ae.prototype.get=function(e){return Lr(this,e).get(e)},Ae.prototype.has=function(e){return Lr(this,e).has(e)},Ae.prototype.set=function(e,t){var r=Lr(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},we.prototype.add=we.prototype.push=function(e){return this.__data__.set(e,no),this},we.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.clear=function(){this.__data__=new be,this.size=0},xe.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},xe.prototype.get=function(e){return this.__data__.get(e)},xe.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.set=function(e,t){var r=this.__data__;if(r instanceof be){var n=r.__data__;if(!Q||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ae(n)}return r.set(e,t),this.size=r.size,this};var Ie=sr(Ve),Be=sr(Ke,!0);function qe(e,n){var a=!0;return Ie(e,function(e,t,r){return a=!!n(e,t,r)}),a}function He(e,t,r){for(var n=-1,a=e.length;++n<a;){var i=e[n],o=t(i);if(null!=o&&(s===to?o==o&&!Ya(o):r(o,s)))var s=o,c=i}return c}function Fe(e,n){var a=[];return Ie(e,function(e,t,r){n(e,t,r)&&a.push(e)}),a}function Ge(e,t,r,n,a){var i=-1,o=e.length;for(r||(r=Gr),a||(a=[]);++i<o;){var s=e[i];0<t&&r(s)?1<t?Ge(s,t-1,r,n,a):qs(a,s):n||(a[a.length]=s)}return a}var Ue=cr(),$e=cr(!0);function Ve(e,t){return e&&Ue(e,t,si)}function Ke(e,t){return e&&$e(e,t,si)}function Je(t,e){return Ys(e,function(e){return Sa(t[e])})}function Ze(e,t){for(var r=0,n=(t=$t(t,e)).length;null!=e&&r<n;)e=e[hn(t[r++])];return r&&r==n?e:to}function Xe(e,t,r){var n=t(e);return ba(e)?n:qs(n,r(e))}function Qe(e){return null==e?e===to?"[object Undefined]":"[object Null]":j&&j in k(e)?function(e){var t=E.call(e,j),r=e[j];try{e[j]=to;var n=!0}catch(e){}var a=h.call(e);return n&&(t?e[j]=r:delete e[j]),a}(e):(t=e,h.call(t));var t}function et(e,t){return t<e}function tt(e,t){return null!=e&&E.call(e,t)}function rt(e,t){return null!=e&&t in k(e)}function nt(e,t,r){for(var n=r?Is:Ws,a=e[0].length,i=e.length,o=i,s=T(i),c=1/0,u=[];o--;){var l=e[o];o&&t&&(l=Bs(l,nc(t))),c=$(l.length,c),s[o]=!r&&(t||120<=a&&120<=l.length)?new we(o&&l):to}l=e[0];var f=-1,d=s[0];e:for(;++f<a&&u.length<c;){var h=l[f],p=t?t(h):h;if(h=r||0!==h?h:0,!(d?ic(d,p):n(u,p,r))){for(o=i;--o;){var m=s[o];if(!(m?ic(m,p):n(e[o],p,r)))continue e}d&&d.push(p),u.push(h)}}return u}function at(e,t,r){var n=null==(e=tn(e,t=$t(t,e)))?e:e[hn(Mn(t))];return null==n?to:Ps(n,e,r)}function it(e){return Oa(e)&&Qe(e)==uo}function ot(e,t,r,n,a){return e===t||(null==e||null==t||!Oa(e)&&!Oa(t)?e!=e&&t!=t:function(e,t,r,n,a,i){var o=ba(e),s=ba(t),c=o?lo:qr(e),u=s?lo:qr(t),l=(c=c==uo?_o:c)==_o,f=(u=u==uo?_o:u)==_o,d=c==u;if(d&&ka(e)){if(!ka(t))return!1;l=!(o=!0)}if(d&&!l)return i||(i=new xe),o||Wa(e)?Cr(e,t,r,n,a,i):function(e,t,r,n,a,i,o){switch(r){case So:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Mo:return!(e.byteLength!=t.byteLength||!i(new w(e),new w(t)));case fo:case ho:case yo:return ga(+e,+t);case po:return e.name==t.name&&e.message==t.message;case Ao:case xo:return e==t+"";case vo:var s=dc;case wo:var c=1&n;if(s||(s=mc),e.size!=t.size&&!c)return!1;var u=o.get(e);if(u)return u==t;n|=2,o.set(e,t);var l=Cr(s(e),s(t),n,a,i,o);return o.delete(e),l;case ko:if(de)return de.call(e)==de.call(t)}return!1}(e,t,c,r,n,a,i);if(!(1&r)){var h=l&&E.call(e,"__wrapped__"),p=f&&E.call(t,"__wrapped__");if(h||p){var m=h?e.value():e,g=p?t.value():t;return i||(i=new xe),a(m,g,r,n,i)}}return!!d&&(i||(i=new xe),function(e,t,r,n,a,i){var o=1&r,s=Or(e),c=s.length,u=Or(t).length;if(c!=u&&!o)return!1;for(var l=c;l--;){var f=s[l];if(!(o?f in t:E.call(t,f)))return!1}var d=i.get(e),h=i.get(t);if(d&&h)return d==t&&h==e;var p=!0;i.set(e,t),i.set(t,e);for(var m=o;++l<c;){f=s[l];var g=e[f],v=t[f];if(n)var y=o?n(v,g,f,t,e,i):n(g,v,f,e,t,i);if(!(y===to?g===v||a(g,v,r,n,i):y)){p=!1;break}m||(m="constructor"==f)}if(p&&!m){var _=e.constructor,b=t.constructor;_!=b&&"constructor"in e&&"constructor"in t&&!("function"==typeof _&&_ instanceof _&&"function"==typeof b&&b instanceof b)&&(p=!1)}return i.delete(e),i.delete(t),p}(e,t,r,n,a,i))}(e,t,r,n,ot,a))}function st(e,t,r,n){var a=r.length,i=a,o=!n;if(null==e)return!i;for(e=k(e);a--;){var s=r[a];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<i;){var c=(s=r[a])[0],u=e[c],l=s[1];if(o&&s[2]){if(u===to&&!(c in e))return!1}else{var f=new xe;if(n)var d=n(u,l,c,e,t,f);if(!(d===to?ot(l,u,3,n,f):d))return!1}}return!0}function ct(e){return!(!Da(e)||(t=e,d&&d in t))&&(Sa(e)?_:us).test(pn(e));var t}function ut(e){return"function"==typeof e?e:null==e?Pi:"object"==typeof e?ba(e)?mt(e[0],e[1]):pt(e):qi(e)}function lt(e){if(!Zr(e))return G(e);var t=[];for(var r in k(e))E.call(e,r)&&"constructor"!=r&&t.push(r);return t}function ft(e){if(!Da(e))return function(e){var t=[];if(null!=e)for(var r in k(e))t.push(r);return t}(e);var t=Zr(e),r=[];for(var n in e)("constructor"!=n||!t&&E.call(e,n))&&r.push(n);return r}function dt(e,t){return e<t}function ht(e,n){var a=-1,i=wa(e)?T(e.length):[];return Ie(e,function(e,t,r){i[++a]=n(e,t,r)}),i}function pt(t){var r=Yr(t);return 1==r.length&&r[0][2]?Qr(r[0][0],r[0][1]):function(e){return e===t||st(e,t,r)}}function mt(r,n){return Vr(r)&&Xr(n)?Qr(hn(r),n):function(e){var t=ri(e,r);return t===to&&t===n?ni(e,r):ot(n,t,3)}}function gt(n,a,i,o,s){n!==a&&Ue(a,function(e,t){if(s||(s=new xe),Da(e))!function(e,t,r,n,a,i,o){var s=rn(e,r),c=rn(t,r),u=o.get(c);if(u)return Te(e,r,u);var l=i?i(s,c,r+"",e,t,o):to,f=l===to;if(f){var d=ba(c),h=!d&&ka(c),p=!d&&!h&&Wa(c);l=c,d||h||p?l=ba(s)?s:xa(s)?nr(s):h?Zt(c,!(f=!1)):p?Qt(c,!(f=!1)):[]:ja(c)||_a(c)?_a(l=s)?l=$a(s):Da(s)&&!Sa(s)||(l=Fr(c)):f=!1}f&&(o.set(c,l),a(l,c,n,i,o),o.delete(c)),Te(e,r,l)}(n,a,t,i,gt,o,s);else{var r=o?o(rn(n,t),e,t+"",n,a,s):to;r===to&&(r=e),Te(n,t,r)}},ci)}function vt(e,t){var r=e.length;if(r)return Ur(t+=t<0?r:0,r)?e[t]:to}function yt(e,n,r){n=n.length?Bs(n,function(t){return ba(t)?function(e){return Ze(e,1===t.length?t[0]:t)}:t}):[Pi];var a=-1;return n=Bs(n,nc(zr())),function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}(ht(e,function(t,e,r){return{criteria:Bs(n,function(e){return e(t)}),index:++a,value:t}}),function(e,t){return function(e,t,r){for(var n=-1,a=e.criteria,i=t.criteria,o=a.length,s=r.length;++n<o;){var c=er(a[n],i[n]);if(c){if(s<=n)return c;var u=r[n];return c*("desc"==u?-1:1)}}return e.index-t.index}(e,t,r)})}function _t(e,t,r){for(var n=-1,a=t.length,i={};++n<a;){var o=t[n],s=Ze(e,o);r(s,o)&&St(i,$t(o,e),s)}return i}function bt(e,t,r,n){var a=n?Ks:Vs,i=-1,o=t.length,s=e;for(e===t&&(t=nr(t)),r&&(s=Bs(e,nc(r)));++i<o;)for(var c=0,u=t[i],l=r?r(u):u;-1<(c=a(s,l,c,n));)s!==e&&O.call(s,c,1),O.call(e,c,1);return e}function At(e,t){for(var r=e?t.length:0,n=r-1;r--;){var a=t[r];if(r==n||a!==i){var i=a;Ur(a)?O.call(e,a,1):Wt(e,a)}}return e}function wt(e,t){return e+I(J()*(t-e+1))}function xt(e,t){var r="";if(!e||t<1||io<t)return r;for(;t%2&&(r+=e),(t=I(t/2))&&(e+=e),t;);return r}function kt(e,t){return on(en(e,t,Pi),e+"")}function Et(e){return Ee(gi(e))}function Mt(e,t){var r=gi(e);return un(r,Re(t,0,r.length))}function St(e,t,r,n){if(!Da(e))return e;for(var a=-1,i=(t=$t(t,e)).length,o=i-1,s=e;null!=s&&++a<i;){var c=hn(t[a]),u=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(a!=o){var l=s[c];(u=n?n(l,c,s):to)===to&&(u=Da(l)?l:Ur(t[a+1])?[]:{})}Ce(s,c,u),s=s[c]}return e}var Tt=ae?function(e,t){return ae.set(e,t),e}:Pi,Ct=R?function(e,t){return R(e,"toString",{configurable:!0,enumerable:!1,value:Di(t),writable:!0})}:Pi;function Dt(e){return un(gi(e))}function Ot(e,t,r){var n=-1,a=e.length;t<0&&(t=a<-t?0:a+t),(r=a<r?a:r)<0&&(r+=a),a=r<t?0:r-t>>>0,t>>>=0;for(var i=T(a);++n<a;)i[n]=e[n+t];return i}function Nt(e,n){var a;return Ie(e,function(e,t,r){return!(a=n(e,t,r))}),!!a}function Pt(e,t,r){var n=0,a=null==e?n:e.length;if("number"==typeof t&&t==t&&a<=2147483647){for(;n<a;){var i=n+a>>>1,o=e[i];null!==o&&!Ya(o)&&(r?o<=t:o<t)?n=i+1:a=i}return a}return jt(e,t,Pi,r)}function jt(e,t,r,n){var a=0,i=null==e?0:e.length;if(0===i)return 0;for(var o=(t=r(t))!=t,s=null===t,c=Ya(t),u=t===to;a<i;){var l=I((a+i)/2),f=r(e[l]),d=f!==to,h=null===f,p=f==f,m=Ya(f);if(o)var g=n||p;else g=u?p&&(n||d):s?p&&d&&(n||!h):c?p&&d&&!h&&(n||!m):!h&&!m&&(n?f<=t:f<t);g?a=l+1:i=l}return $(i,4294967294)}function Rt(e,t){for(var r=-1,n=e.length,a=0,i=[];++r<n;){var o=e[r],s=t?t(o):o;if(!r||!ga(s,c)){var c=s;i[a++]=0===o?0:o}}return i}function zt(e){return"number"==typeof e?e:Ya(e)?oo:+e}function Lt(e){if("string"==typeof e)return e;if(ba(e))return Bs(e,Lt)+"";if(Ya(e))return he?he.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Yt(e,t,r){var n=-1,a=Ws,i=e.length,o=!0,s=[],c=s;if(r)o=!1,a=Is;else if(200<=i){var u=t?null:xr(e);if(u)return mc(u);o=!1,a=ic,c=new we}else c=t?[]:s;e:for(;++n<i;){var l=e[n],f=t?t(l):l;if(l=r||0!==l?l:0,o&&f==f){for(var d=c.length;d--;)if(c[d]===f)continue e;t&&c.push(f),s.push(l)}else a(c,f,r)||(c!==s&&c.push(f),s.push(l))}return s}function Wt(e,t){return null==(e=tn(e,t=$t(t,e)))||delete e[hn(Mn(t))]}function It(e,t,r,n){return St(e,t,r(Ze(e,t)),n)}function Bt(e,t,r,n){for(var a=e.length,i=n?a:-1;(n?i--:++i<a)&&t(e[i],i,e););return r?Ot(e,n?0:i,n?i+1:a):Ot(e,n?i+1:0,n?a:i)}function qt(e,t){var r=e;return r instanceof ye&&(r=r.value()),Hs(t,function(e,t){return t.func.apply(t.thisArg,qs([e],t.args))},r)}function Ht(e,t,r){var n=e.length;if(n<2)return n?Yt(e[0]):[];for(var a=-1,i=T(n);++a<n;)for(var o=e[a],s=-1;++s<n;)s!=a&&(i[a]=We(i[a]||o,e[s],t,r));return Yt(Ge(i,1),t,r)}function Ft(e,t,r){for(var n=-1,a=e.length,i=t.length,o={};++n<a;){var s=n<i?t[n]:to;r(o,e[n],s)}return o}function Gt(e){return xa(e)?e:[]}function Ut(e){return"function"==typeof e?e:Pi}function $t(e,t){return ba(e)?e:Vr(e,t)?[e]:dn(Va(e))}var Vt=kt;function Kt(e,t,r){var n=e.length;return r=r===to?n:r,!t&&n<=r?e:Ot(e,t,r)}var Jt=z||function(e){return Es.clearTimeout(e)};function Zt(e,t){if(t)return e.slice();var r=e.length,n=x?x(r):new e.constructor(r);return e.copy(n),n}function Xt(e){var t=new e.constructor(e.byteLength);return new w(t).set(new w(e)),t}function Qt(e,t){var r=t?Xt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function er(e,t){if(e!==t){var r=e!==to,n=null===e,a=e==e,i=Ya(e),o=t!==to,s=null===t,c=t==t,u=Ya(t);if(!s&&!u&&!i&&t<e||i&&o&&c&&!s&&!u||n&&o&&c||!r&&c||!a)return 1;if(!n&&!i&&!u&&e<t||u&&r&&a&&!n&&!i||s&&r&&a||!o&&a||!c)return-1}return 0}function tr(e,t,r,n){for(var a=-1,i=e.length,o=r.length,s=-1,c=t.length,u=U(i-o,0),l=T(c+u),f=!n;++s<c;)l[s]=t[s];for(;++a<o;)(f||a<i)&&(l[r[a]]=e[a]);for(;u--;)l[s++]=e[a++];return l}function rr(e,t,r,n){for(var a=-1,i=e.length,o=-1,s=r.length,c=-1,u=t.length,l=U(i-s,0),f=T(l+u),d=!n;++a<l;)f[a]=e[a];for(var h=a;++c<u;)f[h+c]=t[c];for(;++o<s;)(d||a<i)&&(f[h+r[o]]=e[a++]);return f}function nr(e,t){var r=-1,n=e.length;for(t||(t=T(n));++r<n;)t[r]=e[r];return t}function ar(e,t,r,n){var a=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var s=t[i],c=n?n(r[s],e[s],s,r,e):to;c===to&&(c=e[s]),a?Pe(r,s,c):Ce(r,s,c)}return r}function ir(a,i){return function(e,t){var r=ba(e)?js:Oe,n=i?i():{};return r(e,a,zr(t,2),n)}}function or(s){return kt(function(e,t){var r=-1,n=t.length,a=1<n?t[n-1]:to,i=2<n?t[2]:to;for(a=3<s.length&&"function"==typeof a?(n--,a):to,i&&$r(t[0],t[1],i)&&(a=n<3?to:a,n=1),e=k(e);++r<n;){var o=t[r];o&&s(e,o,r,a)}return e})}function sr(i,o){return function(e,t){if(null==e)return e;if(!wa(e))return i(e,t);for(var r=e.length,n=o?r:-1,a=k(e);(o?n--:++n<r)&&!1!==t(a[n],n,a););return e}}function cr(c){return function(e,t,r){for(var n=-1,a=k(e),i=r(e),o=i.length;o--;){var s=i[c?o:++n];if(!1===t(a[s],s,a))break}return e}}function ur(a){return function(e){var t=fc(e=Va(e))?vc(e):to,r=t?t[0]:e.charAt(0),n=t?Kt(t,1).join(""):e.slice(1);return r[a]()+n}}function lr(t){return function(e){return Hs(Si(_i(e).replace(ms,"")),t,"")}}function fr(n){return function(){var e=arguments;switch(e.length){case 0:return new n;case 1:return new n(e[0]);case 2:return new n(e[0],e[1]);case 3:return new n(e[0],e[1],e[2]);case 4:return new n(e[0],e[1],e[2],e[3]);case 5:return new n(e[0],e[1],e[2],e[3],e[4]);case 6:return new n(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new n(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var t=me(n.prototype),r=n.apply(t,e);return Da(r)?r:t}}function dr(o){return function(e,t,r){var n=k(e);if(!wa(e)){var a=zr(t,3);e=si(e),t=function(e){return a(n[e],e,n)}}var i=o(e,t,r);return-1<i?n[a?e[i]:i]:to}}function hr(c){return Dr(function(a){var i=a.length,e=i,t=ve.prototype.thru;for(c&&a.reverse();e--;){var r=a[e];if("function"!=typeof r)throw new C(ro);if(t&&!o&&"wrapper"==jr(r))var o=new ve([],!0)}for(e=o?e:i;++e<i;){var n=jr(r=a[e]),s="wrapper"==n?Pr(r):to;o=s&&Kr(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?o[jr(s[0])].apply(o,s[3]):1==r.length&&Kr(r)?o[n]():o.thru(r)}return function(){var e=arguments,t=e[0];if(o&&1==e.length&&ba(t))return o.plant(t).value();for(var r=0,n=i?a[r].apply(this,e):t;++r<i;)n=a[r].call(this,n);return n}})}function pr(u,l,f,d,h,p,m,g,v,y){var _=128&l,b=1&l,A=2&l,w=24&l,x=512&l,k=A?to:fr(u);return function e(){for(var t=arguments.length,r=T(t),n=t;n--;)r[n]=arguments[n];if(w)var a=Rr(e),i=function(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}(r,a);if(d&&(r=tr(r,d,h,w)),p&&(r=rr(r,p,m,w)),t-=i,w&&t<y){var o=pc(r,a);return Ar(u,l,pr,e.placeholder,f,r,o,g,v,y-t)}var s=b?f:this,c=A?s[u]:u;return t=r.length,g?r=function(e,t){for(var r=e.length,n=$(t.length,r),a=nr(e);n--;){var i=t[n];e[n]=Ur(i,r)?a[i]:to}return e}(r,g):x&&1<t&&r.reverse(),_&&v<t&&(r.length=v),this&&this!==Es&&this instanceof e&&(c=k||fr(c)),c.apply(s,r)}}function mr(o,s){return function(e,t){return r=e,n=o,a=s(t),i={},Ve(r,function(e,t,r){n(i,a(e),t,r)}),i;var r,n,a,i}}function gr(n,a){return function(e,t){var r;if(e===to&&t===to)return a;if(e!==to&&(r=e),t!==to){if(r===to)return t;t="string"==typeof e||"string"==typeof t?(e=Lt(e),Lt(t)):(e=zt(e),zt(t)),r=n(e,t)}return r}}function vr(n){return Dr(function(e){return e=Bs(e,nc(zr())),kt(function(t){var r=this;return n(e,function(e){return Ps(e,r,t)})})})}function yr(e,t){var r=(t=t===to?" ":Lt(t)).length;if(r<2)return r?xt(t,e):t;var n=xt(t,W(e/gc(t)));return fc(t)?Kt(vc(n),0,e).join(""):n.slice(0,e)}function _r(n){return function(e,t,r){return r&&"number"!=typeof r&&$r(e,t,r)&&(t=r=to),e=Ha(e),t===to?(t=e,e=0):t=Ha(t),function(e,t,r,n){for(var a=-1,i=U(W((t-e)/(r||1)),0),o=T(i);i--;)o[n?i:++a]=e,e+=r;return o}(e,t,r=r===to?e<t?1:-1:Ha(r),n)}}function br(r){return function(e,t){return"string"==typeof e&&"string"==typeof t||(e=Ua(e),t=Ua(t)),r(e,t)}}function Ar(e,t,r,n,a,i,o,s,c,u){var l=8&t;t|=l?32:64,4&(t&=~(l?64:32))||(t&=-4);var f=[e,t,a,l?i:to,l?o:to,l?to:i,l?to:o,s,c,u],d=r.apply(to,f);return Kr(e)&&nn(d,f),d.placeholder=n,sn(d,e,t)}function wr(e){var n=a[e];return function(e,t){if(e=Ua(e),(t=null==t?0:$(Fa(t),292))&&H(e)){var r=(Va(e)+"e").split("e");return+((r=(Va(n(r[0]+"e"+(+r[1]+t)))+"e").split("e"))[0]+"e"+(+r[1]-t))}return n(e)}}var xr=te&&1/mc(new te([,-0]))[1]==1/0?function(e){return new te(e)}:Yi;function kr(o){return function(e){var t,r,n,a,i=qr(e);return i==vo?dc(e):i==wo?(t=e,r=-1,n=Array(t.size),t.forEach(function(e){n[++r]=[e,e]}),n):Bs(o(a=e),function(e){return[e,a[e]]})}}function Er(e,t,r,n,a,i,o,s){var c=2&t;if(!c&&"function"!=typeof e)throw new C(ro);var u=n?n.length:0;if(u||(t&=-97,n=a=to),o=o===to?o:U(Fa(o),0),s=s===to?s:Fa(s),u-=a?a.length:0,64&t){var l=n,f=a;n=a=to}var d,h,p,m,g,v,y,_,b,A,w,x,k,E=c?to:Pr(e),M=[e,t,r,n,a,l,f,i,o,s];if(E&&function(e,t){var r=e[1],n=t[1],a=r|n,i=a<131,o=128==n&&8==r||128==n&&256==r&&e[7].length<=t[8]||384==n&&t[7].length<=t[8]&&8==r;if(i||o){1&n&&(e[2]=t[2],a|=1&r?0:4);var s=t[3];if(s){var c=e[3];e[3]=c?tr(c,s,t[4]):s,e[4]=c?pc(e[3],ao):t[4]}(s=t[5])&&(c=e[5],e[5]=c?rr(c,s,t[6]):s,e[6]=c?pc(e[5],ao):t[6]),(s=t[7])&&(e[7]=s),128&n&&(e[8]=null==e[8]?t[8]:$(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=a}}(M,E),e=M[0],t=M[1],r=M[2],n=M[3],a=M[4],!(s=M[9]=M[9]===to?c?0:e.length:U(M[9]-u,0))&&24&t&&(t&=-25),t&&1!=t)S=8==t||16==t?(y=t,_=s,b=fr(v=e),function e(){for(var t=arguments.length,r=T(t),n=t,a=Rr(e);n--;)r[n]=arguments[n];var i=t<3&&r[0]!==a&&r[t-1]!==a?[]:pc(r,a);return(t-=i.length)<_?Ar(v,y,pr,e.placeholder,to,r,i,to,to,_-t):Ps(this&&this!==Es&&this instanceof e?b:v,this,r)}):32!=t&&33!=t||a.length?pr.apply(to,M):(h=r,p=n,m=1&t,g=fr(d=e),function e(){for(var t=-1,r=arguments.length,n=-1,a=p.length,i=T(a+r),o=this&&this!==Es&&this instanceof e?g:d;++n<a;)i[n]=p[n];for(;r--;)i[n++]=arguments[++t];return Ps(o,m?h:this,i)});else var S=(w=r,x=1&t,k=fr(A=e),function e(){return(this&&this!==Es&&this instanceof e?k:A).apply(x?w:this,arguments)});return sn((E?Tt:nn)(S,M),e,t)}function Mr(e,t,r,n){return e===to||ga(e,f[r])&&!E.call(n,r)?t:e}function Sr(e,t,r,n,a,i){return Da(e)&&Da(t)&&(i.set(t,e),gt(e,t,to,Sr,i),i.delete(t)),e}function Tr(e){return ja(e)?to:e}function Cr(e,t,r,n,a,i){var o=1&r,s=e.length,c=t.length;if(s!=c&&!(o&&s<c))return!1;var u=i.get(e),l=i.get(t);if(u&&l)return u==t&&l==e;var f=-1,d=!0,h=2&r?new we:to;for(i.set(e,t),i.set(t,e);++f<s;){var p=e[f],m=t[f];if(n)var g=o?n(m,p,f,t,e,i):n(p,m,f,e,t,i);if(g!==to){if(g)continue;d=!1;break}if(h){if(!Gs(t,function(e,t){if(!ic(h,t)&&(p===e||a(p,e,r,n,i)))return h.push(t)})){d=!1;break}}else if(p!==m&&!a(p,m,r,n,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function Dr(e){return on(en(e,to,An),e+"")}function Or(e){return Xe(e,si,Ir)}function Nr(e){return Xe(e,ci,Br)}var Pr=ae?function(e){return ae.get(e)}:Yi;function jr(e){for(var t=e.name+"",r=ie[t],n=E.call(ie,t)?r.length:0;n--;){var a=r[n],i=a.func;if(null==i||i==e)return a.name}return t}function Rr(e){return(E.call(pe,"placeholder")?pe:e).placeholder}function zr(){var e=pe.iteratee||ji;return e=e===ji?ut:e,arguments.length?e(arguments[0],arguments[1]):e}function Lr(e,t){var r,n,a=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?a["string"==typeof t?"string":"hash"]:a.map}function Yr(e){for(var t=si(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,Xr(a)]}return t}function Wr(e,t){var r,n,a=(n=t,null==(r=e)?to:r[n]);return ct(a)?a:to}var Ir=B?function(t){return null==t?[]:(t=k(t),Ys(B(t),function(e){return D.call(t,e)}))}:Gi,Br=B?function(e){for(var t=[];e;)qs(t,Ir(e)),e=M(e);return t}:Gi,qr=Qe;function Hr(e,t,r){for(var n=-1,a=(t=$t(t,e)).length,i=!1;++n<a;){var o=hn(t[n]);if(!(i=null!=e&&r(e,o)))break;e=e[o]}return i||++n!=a?i:!!(a=null==e?0:e.length)&&Ca(a)&&Ur(o,a)&&(ba(e)||_a(e))}function Fr(e){return"function"!=typeof e.constructor||Zr(e)?{}:me(M(e))}function Gr(e){return ba(e)||_a(e)||!!(N&&e&&e[N])}function Ur(e,t){var r=typeof e;return!!(t=null==t?io:t)&&("number"==r||"symbol"!=r&&fs.test(e))&&-1<e&&e%1==0&&e<t}function $r(e,t,r){if(!Da(r))return!1;var n=typeof t;return!!("number"==n?wa(r)&&Ur(t,r.length):"string"==n&&t in r)&&ga(r[t],e)}function Vr(e,t){if(ba(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!Ya(e))||Vo.test(e)||!$o.test(e)||null!=t&&e in k(t)}function Kr(e){var t=jr(e),r=pe[t];if("function"!=typeof r||!(t in ye.prototype))return!1;if(e===r)return!0;var n=Pr(r);return!!n&&e===n[0]}(X&&qr(new X(new ArrayBuffer(1)))!=So||Q&&qr(new Q)!=vo||ee&&qr(ee.resolve())!=bo||te&&qr(new te)!=wo||re&&qr(new re)!=Eo)&&(qr=function(e){var t=Qe(e),r=t==_o?e.constructor:to,n=r?pn(r):"";if(n)switch(n){case oe:return So;case se:return vo;case ce:return bo;case ue:return wo;case le:return Eo}return t});var Jr=s?Sa:Ui;function Zr(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||f)}function Xr(e){return e==e&&!Da(e)}function Qr(t,r){return function(e){return null!=e&&e[t]===r&&(r!==to||t in k(e))}}function en(i,o,s){return o=U(o===to?i.length-1:o,0),function(){for(var e=arguments,t=-1,r=U(e.length-o,0),n=T(r);++t<r;)n[t]=e[o+t];t=-1;for(var a=T(o+1);++t<o;)a[t]=e[t];return a[o]=s(n),Ps(i,this,a)}}function tn(e,t){return t.length<2?e:Ze(e,Ot(t,0,-1))}function rn(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var nn=cn(Tt),an=Y||function(e,t){return Es.setTimeout(e,t)},on=cn(Ct);function sn(e,t,r){var n,a,i,o=t+"";return on(e,function(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(1<r?"& ":"")+t[n],t=t.join(2<r?", ":" "),e.replace(Qo,"{\n/* [wrapped with "+t+"] */\n")}(o,(i=o.match(es),n=i?i[1].split(ts):[],a=r,Rs(co,function(e){var t="_."+e[0];a&e[1]&&!Ws(n,t)&&n.push(t)}),n.sort())))}function cn(r){var n=0,a=0;return function(){var e=V(),t=16-(e-a);if(a=e,0<t){if(800<=++n)return arguments[0]}else n=0;return r.apply(to,arguments)}}function un(e,t){var r=-1,n=e.length,a=n-1;for(t=t===to?n:t;++r<t;){var i=wt(r,a),o=e[i];e[i]=e[r],e[r]=o}return e.length=t,e}var ln,fn,dn=(fn=(ln=la(function(e){var a=[];return 46===e.charCodeAt(0)&&a.push(""),e.replace(Ko,function(e,t,r,n){a.push(r?n.replace(as,"$1"):t||e)}),a},function(e){return 500===fn.size&&fn.clear(),e})).cache,ln);function hn(e){if("string"==typeof e||Ya(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function pn(e){if(null!=e){try{return c.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function mn(e){if(e instanceof ye)return e.clone();var t=new ve(e.__wrapped__,e.__chain__);return t.__actions__=nr(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var gn=kt(function(e,t){return xa(e)?We(e,Ge(t,1,xa,!0)):[]}),vn=kt(function(e,t){var r=Mn(t);return xa(r)&&(r=to),xa(e)?We(e,Ge(t,1,xa,!0),zr(r,2)):[]}),yn=kt(function(e,t){var r=Mn(t);return xa(r)&&(r=to),xa(e)?We(e,Ge(t,1,xa,!0),to,r):[]});function _n(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:Fa(r);return a<0&&(a=U(n+a,0)),$s(e,zr(t,3),a)}function bn(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=n-1;return r!==to&&(a=Fa(r),a=r<0?U(n+a,0):$(a,n-1)),$s(e,zr(t,3),a,!0)}function An(e){return null!=e&&e.length?Ge(e,1):[]}function wn(e){return e&&e.length?e[0]:to}var xn=kt(function(e){var t=Bs(e,Gt);return t.length&&t[0]===e[0]?nt(t):[]}),kn=kt(function(e){var t=Mn(e),r=Bs(e,Gt);return t===Mn(r)?t=to:r.pop(),r.length&&r[0]===e[0]?nt(r,zr(t,2)):[]}),En=kt(function(e){var t=Mn(e),r=Bs(e,Gt);return(t="function"==typeof t?t:to)&&r.pop(),r.length&&r[0]===e[0]?nt(r,to,t):[]});function Mn(e){var t=null==e?0:e.length;return t?e[t-1]:to}var Sn=kt(Tn);function Tn(e,t){return e&&e.length&&t&&t.length?bt(e,t):e}var Cn=Dr(function(e,t){var r=null==e?0:e.length,n=je(e,t);return At(e,Bs(t,function(e){return Ur(e,r)?+e:e}).sort(er)),n});function Dn(e){return null==e?e:Z.call(e)}var On=kt(function(e){return Yt(Ge(e,1,xa,!0))}),Nn=kt(function(e){var t=Mn(e);return xa(t)&&(t=to),Yt(Ge(e,1,xa,!0),zr(t,2))}),Pn=kt(function(e){var t=Mn(e);return t="function"==typeof t?t:to,Yt(Ge(e,1,xa,!0),to,t)});function jn(t){if(!t||!t.length)return[];var r=0;return t=Ys(t,function(e){if(xa(e))return r=U(e.length,r),!0}),tc(r,function(e){return Bs(t,Xs(e))})}function Rn(e,t){if(!e||!e.length)return[];var r=jn(e);return null==t?r:Bs(r,function(e){return Ps(t,to,e)})}var zn=kt(function(e,t){return xa(e)?We(e,t):[]}),Ln=kt(function(e){return Ht(Ys(e,xa))}),Yn=kt(function(e){var t=Mn(e);return xa(t)&&(t=to),Ht(Ys(e,xa),zr(t,2))}),Wn=kt(function(e){var t=Mn(e);return t="function"==typeof t?t:to,Ht(Ys(e,xa),to,t)}),In=kt(jn);var Bn=kt(function(e){var t=e.length,r=1<t?e[t-1]:to;return Rn(e,r="function"==typeof r?(e.pop(),r):to)});function qn(e){var t=pe(e);return t.__chain__=!0,t}function Hn(e,t){return t(e)}var Fn=Dr(function(t){var r=t.length,e=r?t[0]:0,n=this.__wrapped__,a=function(e){return je(e,t)};return!(1<r||this.__actions__.length)&&n instanceof ye&&Ur(e)?((n=n.slice(e,+e+(r?1:0))).__actions__.push({func:Hn,args:[a],thisArg:to}),new ve(n,this.__chain__).thru(function(e){return r&&!e.length&&e.push(to),e})):this.thru(a)});var Gn=ir(function(e,t,r){E.call(e,r)?++e[r]:Pe(e,r,1)});var Un=dr(_n),$n=dr(bn);function Vn(e,t){return(ba(e)?Rs:Ie)(e,zr(t,3))}function Kn(e,t){return(ba(e)?zs:Be)(e,zr(t,3))}var Jn=ir(function(e,t,r){E.call(e,r)?e[r].push(t):Pe(e,r,[t])});var Zn=kt(function(e,t,r){var n=-1,a="function"==typeof t,i=wa(e)?T(e.length):[];return Ie(e,function(e){i[++n]=a?Ps(t,e,r):at(e,t,r)}),i}),Xn=ir(function(e,t,r){Pe(e,r,t)});function Qn(e,t){return(ba(e)?Bs:ht)(e,zr(t,3))}var ea=ir(function(e,t,r){e[r?0:1].push(t)},function(){return[[],[]]});var ta=kt(function(e,t){if(null==e)return[];var r=t.length;return 1<r&&$r(e,t[0],t[1])?t=[]:2<r&&$r(t[0],t[1],t[2])&&(t=[t[0]]),yt(e,Ge(t,1),[])}),ra=L||function(){return Es.Date.now()};function na(e,t,r){return t=r?to:t,t=e&&null==t?e.length:t,Er(e,128,to,to,to,to,t)}function aa(e,t){var r;if("function"!=typeof t)throw new C(ro);return e=Fa(e),function(){return 0<--e&&(r=t.apply(this,arguments)),e<=1&&(t=to),r}}var ia=kt(function(e,t,r){var n=1;if(r.length){var a=pc(r,Rr(ia));n|=32}return Er(e,n,t,r,a)}),oa=kt(function(e,t,r){var n=3;if(r.length){var a=pc(r,Rr(oa));n|=32}return Er(t,n,e,r,a)});function sa(n,a,e){var i,o,s,c,u,l,f=0,d=!1,h=!1,t=!0;if("function"!=typeof n)throw new C(ro);function p(e){var t=i,r=o;return i=o=to,f=e,c=n.apply(r,t)}function m(e){var t=e-l;return l===to||a<=t||t<0||h&&s<=e-f}function g(){var e,t,r=ra();if(m(r))return v(r);u=an(g,(t=a-((e=r)-l),h?$(t,s-(e-f)):t))}function v(e){return u=to,t&&i?p(e):(i=o=to,c)}function r(){var e,t=ra(),r=m(t);if(i=arguments,o=this,l=t,r){if(u===to)return f=e=l,u=an(g,a),d?p(e):c;if(h)return Jt(u),u=an(g,a),p(l)}return u===to&&(u=an(g,a)),c}return a=Ua(a)||0,Da(e)&&(d=!!e.leading,s=(h="maxWait"in e)?U(Ua(e.maxWait)||0,a):s,t="trailing"in e?!!e.trailing:t),r.cancel=function(){u!==to&&Jt(u),f=0,i=l=o=u=to},r.flush=function(){return u===to?c:v(ra())},r}var ca=kt(function(e,t){return Ye(e,1,t)}),ua=kt(function(e,t,r){return Ye(e,Ua(t)||0,r)});function la(a,i){if("function"!=typeof a||null!=i&&"function"!=typeof i)throw new C(ro);var o=function(){var e=arguments,t=i?i.apply(this,e):e[0],r=o.cache;if(r.has(t))return r.get(t);var n=a.apply(this,e);return o.cache=r.set(t,n)||r,n};return o.cache=new(la.Cache||Ae),o}function fa(t){if("function"!=typeof t)throw new C(ro);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}la.Cache=Ae;var da=Vt(function(n,a){var i=(a=1==a.length&&ba(a[0])?Bs(a[0],nc(zr())):Bs(Ge(a,1),nc(zr()))).length;return kt(function(e){for(var t=-1,r=$(e.length,i);++t<r;)e[t]=a[t].call(this,e[t]);return Ps(n,this,e)})}),ha=kt(function(e,t){var r=pc(t,Rr(ha));return Er(e,32,to,t,r)}),pa=kt(function(e,t){var r=pc(t,Rr(pa));return Er(e,64,to,t,r)}),ma=Dr(function(e,t){return Er(e,256,to,to,to,t)});function ga(e,t){return e===t||e!=e&&t!=t}var va=br(et),ya=br(function(e,t){return t<=e}),_a=it(function(){return arguments}())?it:function(e){return Oa(e)&&E.call(e,"callee")&&!D.call(e,"callee")},ba=T.isArray,Aa=Ss?nc(Ss):function(e){return Oa(e)&&Qe(e)==Mo};function wa(e){return null!=e&&Ca(e.length)&&!Sa(e)}function xa(e){return Oa(e)&&wa(e)}var ka=q||Ui,Ea=Ts?nc(Ts):function(e){return Oa(e)&&Qe(e)==ho};function Ma(e){if(!Oa(e))return!1;var t=Qe(e);return t==po||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!ja(e)}function Sa(e){if(!Da(e))return!1;var t=Qe(e);return t==mo||t==go||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ta(e){return"number"==typeof e&&e==Fa(e)}function Ca(e){return"number"==typeof e&&-1<e&&e%1==0&&e<=io}function Da(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Oa(e){return null!=e&&"object"==typeof e}var Na=Cs?nc(Cs):function(e){return Oa(e)&&qr(e)==vo};function Pa(e){return"number"==typeof e||Oa(e)&&Qe(e)==yo}function ja(e){if(!Oa(e)||Qe(e)!=_o)return!1;var t=M(e);if(null===t)return!0;var r=E.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&c.call(r)==p}var Ra=Ds?nc(Ds):function(e){return Oa(e)&&Qe(e)==Ao};var za=Os?nc(Os):function(e){return Oa(e)&&qr(e)==wo};function La(e){return"string"==typeof e||!ba(e)&&Oa(e)&&Qe(e)==xo}function Ya(e){return"symbol"==typeof e||Oa(e)&&Qe(e)==ko}var Wa=Ns?nc(Ns):function(e){return Oa(e)&&Ca(e.length)&&!!As[Qe(e)]};var Ia=br(dt),Ba=br(function(e,t){return e<=t});function qa(e){if(!e)return[];if(wa(e))return La(e)?vc(e):nr(e);if(P&&e[P])return function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}(e[P]());var t=qr(e);return(t==vo?dc:t==wo?mc:gi)(e)}function Ha(e){return e?(e=Ua(e))!==1/0&&e!==-1/0?e==e?e:0:17976931348623157e292*(e<0?-1:1):0===e?e:0}function Fa(e){var t=Ha(e),r=t%1;return t==t?r?t-r:t:0}function Ga(e){return e?Re(Fa(e),0,so):0}function Ua(e){if("number"==typeof e)return e;if(Ya(e))return oo;if(Da(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Da(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=rc(e);var r=cs.test(e);return r||ls.test(e)?ks(e.slice(2),r?2:8):ss.test(e)?oo:+e}function $a(e){return ar(e,ci(e))}function Va(e){return null==e?"":Lt(e)}var Ka=or(function(e,t){if(Zr(t)||wa(t))ar(t,si(t),e);else for(var r in t)E.call(t,r)&&Ce(e,r,t[r])}),Ja=or(function(e,t){ar(t,ci(t),e)}),Za=or(function(e,t,r,n){ar(t,ci(t),e,n)}),Xa=or(function(e,t,r,n){ar(t,si(t),e,n)}),Qa=Dr(je);var ei=kt(function(e,t){e=k(e);var r=-1,n=t.length,a=2<n?t[2]:to;for(a&&$r(t[0],t[1],a)&&(n=1);++r<n;)for(var i=t[r],o=ci(i),s=-1,c=o.length;++s<c;){var u=o[s],l=e[u];(l===to||ga(l,f[u])&&!E.call(e,u))&&(e[u]=i[u])}return e}),ti=kt(function(e){return e.push(to,Sr),Ps(li,to,e)});function ri(e,t,r){var n=null==e?to:Ze(e,t);return n===to?r:n}function ni(e,t){return null!=e&&Hr(e,t,rt)}var ai=mr(function(e,t,r){null!=t&&"function"!=typeof t.toString&&(t=h.call(t)),e[t]=r},Di(Pi)),ii=mr(function(e,t,r){null!=t&&"function"!=typeof t.toString&&(t=h.call(t)),E.call(e,t)?e[t].push(r):e[t]=[r]},zr),oi=kt(at);function si(e){return wa(e)?ke(e):lt(e)}function ci(e){return wa(e)?ke(e,!0):ft(e)}var ui=or(function(e,t,r){gt(e,t,r)}),li=or(function(e,t,r,n){gt(e,t,r,n)}),fi=Dr(function(t,e){var r={};if(null==t)return r;var n=!1;e=Bs(e,function(e){return e=$t(e,t),n||(n=1<e.length),e}),ar(t,Nr(t),r),n&&(r=ze(r,7,Tr));for(var a=e.length;a--;)Wt(r,e[a]);return r});var di=Dr(function(e,t){return null==e?{}:_t(r=e,t,function(e,t){return ni(r,t)});var r});function hi(e,r){if(null==e)return{};var t=Bs(Nr(e),function(e){return[e]});return r=zr(r),_t(e,t,function(e,t){return r(e,t[0])})}var pi=kr(si),mi=kr(ci);function gi(e){return null==e?[]:ac(e,si(e))}var vi=lr(function(e,t,r){return t=t.toLowerCase(),e+(r?yi(t):t)});function yi(e){return Mi(Va(e).toLowerCase())}function _i(e){return(e=Va(e))&&e.replace(ds,cc).replace(gs,"")}var bi=lr(function(e,t,r){return e+(r?"-":"")+t.toLowerCase()}),Ai=lr(function(e,t,r){return e+(r?" ":"")+t.toLowerCase()}),wi=ur("toLowerCase");var xi=lr(function(e,t,r){return e+(r?"_":"")+t.toLowerCase()});var ki=lr(function(e,t,r){return e+(r?" ":"")+Mi(t)});var Ei=lr(function(e,t,r){return e+(r?" ":"")+t.toUpperCase()}),Mi=ur("toUpperCase");function Si(e,t,r){return e=Va(e),(t=r?to:t)===to?(n=e,ys.test(n)?e.match(vs)||[]:e.match(rs)||[]):e.match(t)||[];var n}var Ti=kt(function(e,t){try{return Ps(e,to,t)}catch(e){return Ma(e)?e:new g(e)}}),Ci=Dr(function(t,e){return Rs(e,function(e){e=hn(e),Pe(t,e,ia(t[e],t))}),t});function Di(e){return function(){return e}}var Oi=hr(),Ni=hr(!0);function Pi(e){return e}function ji(e){return ut("function"==typeof e?e:ze(e,1))}var Ri=kt(function(t,r){return function(e){return at(e,t,r)}}),zi=kt(function(t,r){return function(e){return at(t,e,r)}});function Li(n,t,e){var r=si(t),a=Je(t,r);null!=e||Da(t)&&(a.length||!r.length)||(e=t,t=n,n=this,a=Je(t,si(t)));var i=!(Da(e)&&"chain"in e&&!e.chain),o=Sa(n);return Rs(a,function(e){var r=t[e];n[e]=r,o&&(n.prototype[e]=function(){var e=this.__chain__;if(i||e){var t=n(this.__wrapped__);return(t.__actions__=nr(this.__actions__)).push({func:r,args:arguments,thisArg:n}),t.__chain__=e,t}return r.apply(n,qs([this.value()],arguments))})}),n}function Yi(){}var Wi=vr(Bs),Ii=vr(Ls),Bi=vr(Gs);function qi(e){return Vr(e)?Xs(hn(e)):(t=e,function(e){return Ze(e,t)});var t}var Hi=_r(),Fi=_r(!0);function Gi(){return[]}function Ui(){return!1}var $i=gr(function(e,t){return e+t},0),Vi=wr("ceil"),Ki=gr(function(e,t){return e/t},1),Ji=wr("floor");var Zi,Xi=gr(function(e,t){return e*t},1),Qi=wr("round"),eo=gr(function(e,t){return e-t},0);return pe.after=function(e,t){if("function"!=typeof t)throw new C(ro);return e=Fa(e),function(){if(--e<1)return t.apply(this,arguments)}},pe.ary=na,pe.assign=Ka,pe.assignIn=Ja,pe.assignInWith=Za,pe.assignWith=Xa,pe.at=Qa,pe.before=aa,pe.bind=ia,pe.bindAll=Ci,pe.bindKey=oa,pe.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ba(e)?e:[e]},pe.chain=qn,pe.chunk=function(e,t,r){t=(r?$r(e,t,r):t===to)?1:U(Fa(t),0);var n=null==e?0:e.length;if(!n||t<1)return[];for(var a=0,i=0,o=T(W(n/t));a<n;)o[i++]=Ot(e,a,a+=t);return o},pe.compact=function(e){for(var t=-1,r=null==e?0:e.length,n=0,a=[];++t<r;){var i=e[t];i&&(a[n++]=i)}return a},pe.concat=function(){var e=arguments.length;if(!e)return[];for(var t=T(e-1),r=arguments[0],n=e;n--;)t[n-1]=arguments[n];return qs(ba(r)?nr(r):[r],Ge(t,1))},pe.cond=function(n){var a=null==n?0:n.length,t=zr();return n=a?Bs(n,function(e){if("function"!=typeof e[1])throw new C(ro);return[t(e[0]),e[1]]}):[],kt(function(e){for(var t=-1;++t<a;){var r=n[t];if(Ps(r[0],this,e))return Ps(r[1],this,e)}})},pe.conforms=function(e){return t=ze(e,1),r=si(t),function(e){return Le(e,t,r)};var t,r},pe.constant=Di,pe.countBy=Gn,pe.create=function(e,t){var r=me(e);return null==t?r:Ne(r,t)},pe.curry=function e(t,r,n){var a=Er(t,8,to,to,to,to,to,r=n?to:r);return a.placeholder=e.placeholder,a},pe.curryRight=function e(t,r,n){var a=Er(t,16,to,to,to,to,to,r=n?to:r);return a.placeholder=e.placeholder,a},pe.debounce=sa,pe.defaults=ei,pe.defaultsDeep=ti,pe.defer=ca,pe.delay=ua,pe.difference=gn,pe.differenceBy=vn,pe.differenceWith=yn,pe.drop=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,(t=r||t===to?1:Fa(t))<0?0:t,n):[]},pe.dropRight=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,0,(t=n-(t=r||t===to?1:Fa(t)))<0?0:t):[]},pe.dropRightWhile=function(e,t){return e&&e.length?Bt(e,zr(t,3),!0,!0):[]},pe.dropWhile=function(e,t){return e&&e.length?Bt(e,zr(t,3),!0):[]},pe.fill=function(e,t,r,n){var a=null==e?0:e.length;return a?(r&&"number"!=typeof r&&$r(e,t,r)&&(r=0,n=a),function(e,t,r,n){var a=e.length;for((r=Fa(r))<0&&(r=a<-r?0:a+r),(n=n===to||a<n?a:Fa(n))<0&&(n+=a),n=n<r?0:Ga(n);r<n;)e[r++]=t;return e}(e,t,r,n)):[]},pe.filter=function(e,t){return(ba(e)?Ys:Fe)(e,zr(t,3))},pe.flatMap=function(e,t){return Ge(Qn(e,t),1)},pe.flatMapDeep=function(e,t){return Ge(Qn(e,t),1/0)},pe.flatMapDepth=function(e,t,r){return r=r===to?1:Fa(r),Ge(Qn(e,t),r)},pe.flatten=An,pe.flattenDeep=function(e){return null!=e&&e.length?Ge(e,1/0):[]},pe.flattenDepth=function(e,t){return null!=e&&e.length?Ge(e,t=t===to?1:Fa(t)):[]},pe.flip=function(e){return Er(e,512)},pe.flow=Oi,pe.flowRight=Ni,pe.fromPairs=function(e){for(var t=-1,r=null==e?0:e.length,n={};++t<r;){var a=e[t];n[a[0]]=a[1]}return n},pe.functions=function(e){return null==e?[]:Je(e,si(e))},pe.functionsIn=function(e){return null==e?[]:Je(e,ci(e))},pe.groupBy=Jn,pe.initial=function(e){return null!=e&&e.length?Ot(e,0,-1):[]},pe.intersection=xn,pe.intersectionBy=kn,pe.intersectionWith=En,pe.invert=ai,pe.invertBy=ii,pe.invokeMap=Zn,pe.iteratee=ji,pe.keyBy=Xn,pe.keys=si,pe.keysIn=ci,pe.map=Qn,pe.mapKeys=function(e,n){var a={};return n=zr(n,3),Ve(e,function(e,t,r){Pe(a,n(e,t,r),e)}),a},pe.mapValues=function(e,n){var a={};return n=zr(n,3),Ve(e,function(e,t,r){Pe(a,t,n(e,t,r))}),a},pe.matches=function(e){return pt(ze(e,1))},pe.matchesProperty=function(e,t){return mt(e,ze(t,1))},pe.memoize=la,pe.merge=ui,pe.mergeWith=li,pe.method=Ri,pe.methodOf=zi,pe.mixin=Li,pe.negate=fa,pe.nthArg=function(t){return t=Fa(t),kt(function(e){return vt(e,t)})},pe.omit=fi,pe.omitBy=function(e,t){return hi(e,fa(zr(t)))},pe.once=function(e){return aa(2,e)},pe.orderBy=function(e,t,r,n){return null==e?[]:(ba(t)||(t=null==t?[]:[t]),ba(r=n?to:r)||(r=null==r?[]:[r]),yt(e,t,r))},pe.over=Wi,pe.overArgs=da,pe.overEvery=Ii,pe.overSome=Bi,pe.partial=ha,pe.partialRight=pa,pe.partition=ea,pe.pick=di,pe.pickBy=hi,pe.property=qi,pe.propertyOf=function(t){return function(e){return null==t?to:Ze(t,e)}},pe.pull=Sn,pe.pullAll=Tn,pe.pullAllBy=function(e,t,r){return e&&e.length&&t&&t.length?bt(e,t,zr(r,2)):e},pe.pullAllWith=function(e,t,r){return e&&e.length&&t&&t.length?bt(e,t,to,r):e},pe.pullAt=Cn,pe.range=Hi,pe.rangeRight=Fi,pe.rearg=ma,pe.reject=function(e,t){return(ba(e)?Ys:Fe)(e,fa(zr(t,3)))},pe.remove=function(e,t){var r=[];if(!e||!e.length)return r;var n=-1,a=[],i=e.length;for(t=zr(t,3);++n<i;){var o=e[n];t(o,n,e)&&(r.push(o),a.push(n))}return At(e,a),r},pe.rest=function(e,t){if("function"!=typeof e)throw new C(ro);return kt(e,t=t===to?t:Fa(t))},pe.reverse=Dn,pe.sampleSize=function(e,t,r){return t=(r?$r(e,t,r):t===to)?1:Fa(t),(ba(e)?Me:Mt)(e,t)},pe.set=function(e,t,r){return null==e?e:St(e,t,r)},pe.setWith=function(e,t,r,n){return n="function"==typeof n?n:to,null==e?e:St(e,t,r,n)},pe.shuffle=function(e){return(ba(e)?Se:Dt)(e)},pe.slice=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,t,r=r&&"number"!=typeof r&&$r(e,t,r)?(t=0,n):(t=null==t?0:Fa(t),r===to?n:Fa(r))):[]},pe.sortBy=ta,pe.sortedUniq=function(e){return e&&e.length?Rt(e):[]},pe.sortedUniqBy=function(e,t){return e&&e.length?Rt(e,zr(t,2)):[]},pe.split=function(e,t,r){return r&&"number"!=typeof r&&$r(e,t,r)&&(t=r=to),(r=r===to?so:r>>>0)?(e=Va(e))&&("string"==typeof t||null!=t&&!Ra(t))&&!(t=Lt(t))&&fc(e)?Kt(vc(e),0,r):e.split(t,r):[]},pe.spread=function(n,a){if("function"!=typeof n)throw new C(ro);return a=null==a?0:U(Fa(a),0),kt(function(e){var t=e[a],r=Kt(e,0,a);return t&&qs(r,t),Ps(n,this,r)})},pe.tail=function(e){var t=null==e?0:e.length;return t?Ot(e,1,t):[]},pe.take=function(e,t,r){return e&&e.length?Ot(e,0,(t=r||t===to?1:Fa(t))<0?0:t):[]},pe.takeRight=function(e,t,r){var n=null==e?0:e.length;return n?Ot(e,(t=n-(t=r||t===to?1:Fa(t)))<0?0:t,n):[]},pe.takeRightWhile=function(e,t){return e&&e.length?Bt(e,zr(t,3),!1,!0):[]},pe.takeWhile=function(e,t){return e&&e.length?Bt(e,zr(t,3)):[]},pe.tap=function(e,t){return t(e),e},pe.throttle=function(e,t,r){var n=!0,a=!0;if("function"!=typeof e)throw new C(ro);return Da(r)&&(n="leading"in r?!!r.leading:n,a="trailing"in r?!!r.trailing:a),sa(e,t,{leading:n,maxWait:t,trailing:a})},pe.thru=Hn,pe.toArray=qa,pe.toPairs=pi,pe.toPairsIn=mi,pe.toPath=function(e){return ba(e)?Bs(e,hn):Ya(e)?[e]:nr(dn(Va(e)))},pe.toPlainObject=$a,pe.transform=function(e,n,a){var t=ba(e),r=t||ka(e)||Wa(e);if(n=zr(n,4),null==a){var i=e&&e.constructor;a=r?t?new i:[]:Da(e)&&Sa(i)?me(M(e)):{}}return(r?Rs:Ve)(e,function(e,t,r){return n(a,e,t,r)}),a},pe.unary=function(e){return na(e,1)},pe.union=On,pe.unionBy=Nn,pe.unionWith=Pn,pe.uniq=function(e){return e&&e.length?Yt(e):[]},pe.uniqBy=function(e,t){return e&&e.length?Yt(e,zr(t,2)):[]},pe.uniqWith=function(e,t){return t="function"==typeof t?t:to,e&&e.length?Yt(e,to,t):[]},pe.unset=function(e,t){return null==e||Wt(e,t)},pe.unzip=jn,pe.unzipWith=Rn,pe.update=function(e,t,r){return null==e?e:It(e,t,Ut(r))},pe.updateWith=function(e,t,r,n){return n="function"==typeof n?n:to,null==e?e:It(e,t,Ut(r),n)},pe.values=gi,pe.valuesIn=function(e){return null==e?[]:ac(e,ci(e))},pe.without=zn,pe.words=Si,pe.wrap=function(e,t){return ha(Ut(t),e)},pe.xor=Ln,pe.xorBy=Yn,pe.xorWith=Wn,pe.zip=In,pe.zipObject=function(e,t){return Ft(e||[],t||[],Ce)},pe.zipObjectDeep=function(e,t){return Ft(e||[],t||[],St)},pe.zipWith=Bn,pe.entries=pi,pe.entriesIn=mi,pe.extend=Ja,pe.extendWith=Za,Li(pe,pe),pe.add=$i,pe.attempt=Ti,pe.camelCase=vi,pe.capitalize=yi,pe.ceil=Vi,pe.clamp=function(e,t,r){return r===to&&(r=t,t=to),r!==to&&(r=(r=Ua(r))==r?r:0),t!==to&&(t=(t=Ua(t))==t?t:0),Re(Ua(e),t,r)},pe.clone=function(e){return ze(e,4)},pe.cloneDeep=function(e){return ze(e,5)},pe.cloneDeepWith=function(e,t){return ze(e,5,t="function"==typeof t?t:to)},pe.cloneWith=function(e,t){return ze(e,4,t="function"==typeof t?t:to)},pe.conformsTo=function(e,t){return null==t||Le(e,t,si(t))},pe.deburr=_i,pe.defaultTo=function(e,t){return null==e||e!=e?t:e},pe.divide=Ki,pe.endsWith=function(e,t,r){e=Va(e),t=Lt(t);var n=e.length,a=r=r===to?n:Re(Fa(r),0,n);return 0<=(r-=t.length)&&e.slice(r,a)==t},pe.eq=ga,pe.escape=function(e){return(e=Va(e))&&Ho.test(e)?e.replace(Bo,uc):e},pe.escapeRegExp=function(e){return(e=Va(e))&&Zo.test(e)?e.replace(Jo,"\\$&"):e},pe.every=function(e,t,r){var n=ba(e)?Ls:qe;return r&&$r(e,t,r)&&(t=to),n(e,zr(t,3))},pe.find=Un,pe.findIndex=_n,pe.findKey=function(e,t){return Us(e,zr(t,3),Ve)},pe.findLast=$n,pe.findLastIndex=bn,pe.findLastKey=function(e,t){return Us(e,zr(t,3),Ke)},pe.floor=Ji,pe.forEach=Vn,pe.forEachRight=Kn,pe.forIn=function(e,t){return null==e?e:Ue(e,zr(t,3),ci)},pe.forInRight=function(e,t){return null==e?e:$e(e,zr(t,3),ci)},pe.forOwn=function(e,t){return e&&Ve(e,zr(t,3))},pe.forOwnRight=function(e,t){return e&&Ke(e,zr(t,3))},pe.get=ri,pe.gt=va,pe.gte=ya,pe.has=function(e,t){return null!=e&&Hr(e,t,tt)},pe.hasIn=ni,pe.head=wn,pe.identity=Pi,pe.includes=function(e,t,r,n){e=wa(e)?e:gi(e),r=r&&!n?Fa(r):0;var a=e.length;return r<0&&(r=U(a+r,0)),La(e)?r<=a&&-1<e.indexOf(t,r):!!a&&-1<Vs(e,t,r)},pe.indexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:Fa(r);return a<0&&(a=U(n+a,0)),Vs(e,t,a)},pe.inRange=function(e,t,r){return t=Ha(t),r===to?(r=t,t=0):r=Ha(r),e=Ua(e),(n=e)>=$(a=t,i=r)&&n<U(a,i);var n,a,i},pe.invoke=oi,pe.isArguments=_a,pe.isArray=ba,pe.isArrayBuffer=Aa,pe.isArrayLike=wa,pe.isArrayLikeObject=xa,pe.isBoolean=function(e){return!0===e||!1===e||Oa(e)&&Qe(e)==fo},pe.isBuffer=ka,pe.isDate=Ea,pe.isElement=function(e){return Oa(e)&&1===e.nodeType&&!ja(e)},pe.isEmpty=function(e){if(null==e)return!0;if(wa(e)&&(ba(e)||"string"==typeof e||"function"==typeof e.splice||ka(e)||Wa(e)||_a(e)))return!e.length;var t=qr(e);if(t==vo||t==wo)return!e.size;if(Zr(e))return!lt(e).length;for(var r in e)if(E.call(e,r))return!1;return!0},pe.isEqual=function(e,t){return ot(e,t)},pe.isEqualWith=function(e,t,r){var n=(r="function"==typeof r?r:to)?r(e,t):to;return n===to?ot(e,t,to,r):!!n},pe.isError=Ma,pe.isFinite=function(e){return"number"==typeof e&&H(e)},pe.isFunction=Sa,pe.isInteger=Ta,pe.isLength=Ca,pe.isMap=Na,pe.isMatch=function(e,t){return e===t||st(e,t,Yr(t))},pe.isMatchWith=function(e,t,r){return r="function"==typeof r?r:to,st(e,t,Yr(t),r)},pe.isNaN=function(e){return Pa(e)&&e!=+e},pe.isNative=function(e){if(Jr(e))throw new g("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return ct(e)},pe.isNil=function(e){return null==e},pe.isNull=function(e){return null===e},pe.isNumber=Pa,pe.isObject=Da,pe.isObjectLike=Oa,pe.isPlainObject=ja,pe.isRegExp=Ra,pe.isSafeInteger=function(e){return Ta(e)&&-io<=e&&e<=io},pe.isSet=za,pe.isString=La,pe.isSymbol=Ya,pe.isTypedArray=Wa,pe.isUndefined=function(e){return e===to},pe.isWeakMap=function(e){return Oa(e)&&qr(e)==Eo},pe.isWeakSet=function(e){return Oa(e)&&"[object WeakSet]"==Qe(e)},pe.join=function(e,t){return null==e?"":F.call(e,t)},pe.kebabCase=bi,pe.last=Mn,pe.lastIndexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=n;return r!==to&&(a=(a=Fa(r))<0?U(n+a,0):$(a,n-1)),t==t?function(e,t,r){for(var n=r+1;n--;)if(e[n]===t)return n;return n}(e,t,a):$s(e,Js,a,!0)},pe.lowerCase=Ai,pe.lowerFirst=wi,pe.lt=Ia,pe.lte=Ba,pe.max=function(e){return e&&e.length?He(e,Pi,et):to},pe.maxBy=function(e,t){return e&&e.length?He(e,zr(t,2),et):to},pe.mean=function(e){return Zs(e,Pi)},pe.meanBy=function(e,t){return Zs(e,zr(t,2))},pe.min=function(e){return e&&e.length?He(e,Pi,dt):to},pe.minBy=function(e,t){return e&&e.length?He(e,zr(t,2),dt):to},pe.stubArray=Gi,pe.stubFalse=Ui,pe.stubObject=function(){return{}},pe.stubString=function(){return""},pe.stubTrue=function(){return!0},pe.multiply=Xi,pe.nth=function(e,t){return e&&e.length?vt(e,Fa(t)):to},pe.noConflict=function(){return Es._===this&&(Es._=m),this},pe.noop=Yi,pe.now=ra,pe.pad=function(e,t,r){e=Va(e);var n=(t=Fa(t))?gc(e):0;if(!t||t<=n)return e;var a=(t-n)/2;return yr(I(a),r)+e+yr(W(a),r)},pe.padEnd=function(e,t,r){e=Va(e);var n=(t=Fa(t))?gc(e):0;return t&&n<t?e+yr(t-n,r):e},pe.padStart=function(e,t,r){e=Va(e);var n=(t=Fa(t))?gc(e):0;return t&&n<t?yr(t-n,r)+e:e},pe.parseInt=function(e,t,r){return r||null==t?t=0:t&&(t=+t),K(Va(e).replace(Xo,""),t||0)},pe.random=function(e,t,r){if(r&&"boolean"!=typeof r&&$r(e,t,r)&&(t=r=to),r===to&&("boolean"==typeof t?(r=t,t=to):"boolean"==typeof e&&(r=e,e=to)),e===to&&t===to?(e=0,t=1):(e=Ha(e),t===to?(t=e,e=0):t=Ha(t)),t<e){var n=e;e=t,t=n}if(r||e%1||t%1){var a=J();return $(e+a*(t-e+xs("1e-"+((a+"").length-1))),t)}return wt(e,t)},pe.reduce=function(e,t,r){var n=ba(e)?Hs:Qs,a=arguments.length<3;return n(e,zr(t,4),r,a,Ie)},pe.reduceRight=function(e,t,r){var n=ba(e)?Fs:Qs,a=arguments.length<3;return n(e,zr(t,4),r,a,Be)},pe.repeat=function(e,t,r){return t=(r?$r(e,t,r):t===to)?1:Fa(t),xt(Va(e),t)},pe.replace=function(){var e=arguments,t=Va(e[0]);return e.length<3?t:t.replace(e[1],e[2])},pe.result=function(e,t,r){var n=-1,a=(t=$t(t,e)).length;for(a||(a=1,e=to);++n<a;){var i=null==e?to:e[hn(t[n])];i===to&&(n=a,i=r),e=Sa(i)?i.call(e):i}return e},pe.round=Qi,pe.runInContext=e,pe.sample=function(e){return(ba(e)?Ee:Et)(e)},pe.size=function(e){if(null==e)return 0;if(wa(e))return La(e)?gc(e):e.length;var t=qr(e);return t==vo||t==wo?e.size:lt(e).length},pe.snakeCase=xi,pe.some=function(e,t,r){var n=ba(e)?Gs:Nt;return r&&$r(e,t,r)&&(t=to),n(e,zr(t,3))},pe.sortedIndex=function(e,t){return Pt(e,t)},pe.sortedIndexBy=function(e,t,r){return jt(e,t,zr(r,2))},pe.sortedIndexOf=function(e,t){var r=null==e?0:e.length;if(r){var n=Pt(e,t);if(n<r&&ga(e[n],t))return n}return-1},pe.sortedLastIndex=function(e,t){return Pt(e,t,!0)},pe.sortedLastIndexBy=function(e,t,r){return jt(e,t,zr(r,2),!0)},pe.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var r=Pt(e,t,!0)-1;if(ga(e[r],t))return r}return-1},pe.startCase=ki,pe.startsWith=function(e,t,r){return e=Va(e),r=null==r?0:Re(Fa(r),0,e.length),t=Lt(t),e.slice(r,r+t.length)==t},pe.subtract=eo,pe.sum=function(e){return e&&e.length?ec(e,Pi):0},pe.sumBy=function(e,t){return e&&e.length?ec(e,zr(t,2)):0},pe.template=function(o,e,t){var r=pe.templateSettings;t&&$r(o,e,t)&&(e=to),o=Va(o),e=Za({},e,r,Mr);var s,c,n=Za({},e.imports,r.imports,Mr),a=si(n),i=ac(n,a),u=0,l=e.interpolate||hs,f="__p += '",d=y((e.escape||hs).source+"|"+l.source+"|"+(l===Uo?is:hs).source+"|"+(e.evaluate||hs).source+"|$","g"),h="//# sourceURL="+(E.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++bs+"]")+"\n";o.replace(d,function(e,t,r,n,a,i){return r||(r=n),f+=o.slice(u,i).replace(ps,lc),t&&(s=!0,f+="' +\n__e("+t+") +\n'"),a&&(c=!0,f+="';\n"+a+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),u=i+e.length,e}),f+="';\n";var p=E.call(e,"variable")&&e.variable;if(p){if(ns.test(p))throw new g("Invalid `variable` option passed into `_.template`")}else f="with (obj) {\n"+f+"\n}\n";f=(c?f.replace(Lo,""):f).replace(Yo,"$1").replace(Wo,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=Ti(function(){return v(a,h+"return "+f).apply(to,i)});if(m.source=f,Ma(m))throw m;return m},pe.times=function(e,t){if((e=Fa(e))<1||io<e)return[];var r=so,n=$(e,so);t=zr(t),e-=so;for(var a=tc(n,t);++r<e;)t(r);return a},pe.toFinite=Ha,pe.toInteger=Fa,pe.toLength=Ga,pe.toLower=function(e){return Va(e).toLowerCase()},pe.toNumber=Ua,pe.toSafeInteger=function(e){return e?Re(Fa(e),-io,io):0===e?e:0},pe.toString=Va,pe.toUpper=function(e){return Va(e).toUpperCase()},pe.trim=function(e,t,r){if((e=Va(e))&&(r||t===to))return rc(e);if(!e||!(t=Lt(t)))return e;var n=vc(e),a=vc(t);return Kt(n,oc(n,a),sc(n,a)+1).join("")},pe.trimEnd=function(e,t,r){if((e=Va(e))&&(r||t===to))return e.slice(0,yc(e)+1);if(!e||!(t=Lt(t)))return e;var n=vc(e);return Kt(n,0,sc(n,vc(t))+1).join("")},pe.trimStart=function(e,t,r){if((e=Va(e))&&(r||t===to))return e.replace(Xo,"");if(!e||!(t=Lt(t)))return e;var n=vc(e);return Kt(n,oc(n,vc(t))).join("")},pe.truncate=function(e,t){var r=30,n="...";if(Da(t)){var a="separator"in t?t.separator:a;r="length"in t?Fa(t.length):r,n="omission"in t?Lt(t.omission):n}var i=(e=Va(e)).length;if(fc(e)){var o=vc(e);i=o.length}if(i<=r)return e;var s=r-gc(n);if(s<1)return n;var c=o?Kt(o,0,s).join(""):e.slice(0,s);if(a===to)return c+n;if(o&&(s+=c.length-s),Ra(a)){if(e.slice(s).search(a)){var u,l=c;for(a.global||(a=y(a.source,Va(os.exec(a))+"g")),a.lastIndex=0;u=a.exec(l);)var f=u.index;c=c.slice(0,f===to?s:f)}}else if(e.indexOf(Lt(a),s)!=s){var d=c.lastIndexOf(a);-1<d&&(c=c.slice(0,d))}return c+n},pe.unescape=function(e){return(e=Va(e))&&qo.test(e)?e.replace(Io,_c):e},pe.uniqueId=function(e){var t=++u;return Va(e)+t},pe.upperCase=Ei,pe.upperFirst=Mi,pe.each=Vn,pe.eachRight=Kn,pe.first=wn,Li(pe,(Zi={},Ve(pe,function(e,t){E.call(pe.prototype,t)||(Zi[t]=e)}),Zi),{chain:!1}),pe.VERSION="4.17.21",Rs(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){pe[e].placeholder=pe}),Rs(["drop","take"],function(r,n){ye.prototype[r]=function(e){e=e===to?1:U(Fa(e),0);var t=this.__filtered__&&!n?new ye(this):this.clone();return t.__filtered__?t.__takeCount__=$(e,t.__takeCount__):t.__views__.push({size:$(e,so),type:r+(t.__dir__<0?"Right":"")}),t},ye.prototype[r+"Right"]=function(e){return this.reverse()[r](e).reverse()}}),Rs(["filter","map","takeWhile"],function(e,t){var r=t+1,n=1==r||3==r;ye.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:zr(e,3),type:r}),t.__filtered__=t.__filtered__||n,t}}),Rs(["head","last"],function(e,t){var r="take"+(t?"Right":"");ye.prototype[e]=function(){return this[r](1).value()[0]}}),Rs(["initial","tail"],function(e,t){var r="drop"+(t?"":"Right");ye.prototype[e]=function(){return this.__filtered__?new ye(this):this[r](1)}}),ye.prototype.compact=function(){return this.filter(Pi)},ye.prototype.find=function(e){return this.filter(e).head()},ye.prototype.findLast=function(e){return this.reverse().find(e)},ye.prototype.invokeMap=kt(function(t,r){return"function"==typeof t?new ye(this):this.map(function(e){return at(e,t,r)})}),ye.prototype.reject=function(e){return this.filter(fa(zr(e)))},ye.prototype.slice=function(e,t){e=Fa(e);var r=this;return r.__filtered__&&(0<e||t<0)?new ye(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),t!==to&&(r=(t=Fa(t))<0?r.dropRight(-t):r.take(t-e)),r)},ye.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},ye.prototype.toArray=function(){return this.take(so)},Ve(ye.prototype,function(f,e){var d=/^(?:filter|find|map|reject)|While$/.test(e),h=/^(?:head|last)$/.test(e),p=pe[h?"take"+("last"==e?"Right":""):e],m=h||/^find/.test(e);p&&(pe.prototype[e]=function(){var e=this.__wrapped__,r=h?[1]:arguments,t=e instanceof ye,n=r[0],a=t||ba(e),i=function(e){var t=p.apply(pe,qs([e],r));return h&&o?t[0]:t};a&&d&&"function"==typeof n&&1!=n.length&&(t=a=!1);var o=this.__chain__,s=!!this.__actions__.length,c=m&&!o,u=t&&!s;if(m||!a)return c&&u?f.apply(this,r):(l=this.thru(i),c?h?l.value()[0]:l.value():l);e=u?e:new ye(this);var l=f.apply(e,r);return l.__actions__.push({func:Hn,args:[i],thisArg:to}),new ve(l,o)})}),Rs(["pop","push","shift","sort","splice","unshift"],function(e){var r=i[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",a=/^(?:pop|shift)$/.test(e);pe.prototype[e]=function(){var t=arguments;if(!a||this.__chain__)return this[n](function(e){return r.apply(ba(e)?e:[],t)});var e=this.value();return r.apply(ba(e)?e:[],t)}}),Ve(ye.prototype,function(e,t){var r=pe[t];if(r){var n=r.name+"";E.call(ie,n)||(ie[n]=[]),ie[n].push({name:t,func:r})}}),ie[pr(to,2).name]=[{name:"wrapper",func:to}],ye.prototype.clone=function(){var e=new ye(this.__wrapped__);return e.__actions__=nr(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=nr(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=nr(this.__views__),e},ye.prototype.reverse=function(){if(this.__filtered__){var e=new ye(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},ye.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,r=ba(e),n=t<0,a=r?e.length:0,i=function(e,t,r){for(var n=-1,a=r.length;++n<a;){var i=r[n],o=i.size;switch(i.type){case"drop":e+=o;break;case"dropRight":t-=o;break;case"take":t=$(t,e+o);break;case"takeRight":e=U(e,t-o)}}return{start:e,end:t}}(0,a,this.__views__),o=i.start,s=i.end,c=s-o,u=n?s:o-1,l=this.__iteratees__,f=l.length,d=0,h=$(c,this.__takeCount__);if(!r||!n&&a==c&&h==c)return qt(e,this.__actions__);var p=[];e:for(;c--&&d<h;){for(var m=-1,g=e[u+=t];++m<f;){var v=l[m],y=v.iteratee,_=v.type,b=y(g);if(2==_)g=b;else if(!b){if(1==_)continue e;break e}}p[d++]=g}return p},pe.prototype.at=Fn,pe.prototype.chain=function(){return qn(this)},pe.prototype.commit=function(){return new ve(this.value(),this.__chain__)},pe.prototype.next=function(){this.__values__===to&&(this.__values__=qa(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?to:this.__values__[this.__index__++]}},pe.prototype.plant=function(e){for(var t,r=this;r instanceof ge;){var n=mn(r);n.__index__=0,n.__values__=to,t?a.__wrapped__=n:t=n;var a=n;r=r.__wrapped__}return a.__wrapped__=e,t},pe.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof ye){var t=e;return this.__actions__.length&&(t=new ye(this)),(t=t.reverse()).__actions__.push({func:Hn,args:[Dn],thisArg:to}),new ve(t,this.__chain__)}return this.thru(Dn)},pe.prototype.toJSON=pe.prototype.valueOf=pe.prototype.value=function(){return qt(this.__wrapped__,this.__actions__)},pe.prototype.first=pe.prototype.head,P&&(pe.prototype[P]=function(){return this}),pe}();R?((R.exports=bc)._=bc,j._=bc):Es._=bc}).call(this)});function Vc(e){return e.reduce(function(e,t,r,n){return e+t})}function Kc(e){if($c.isArray(e))return e;if("string"==typeof e)return e.split("");throw Error("Parameter must be a string or array.")}var Jc={jarowinkler:function(e,t,r){var n,a;e=Kc(e),t=Kc(t),a=e.length>t.length?(n=e,t):(n=t,e);var i,o,s,c,u=r||.7,l=Math.floor(Math.max(n.length/2-1,0)),f=[],d=[],h=0;for(i=0;i<a.length;i++)for(c=a[i],o=Math.max(i-l,0),s=Math.min(i+l+1,n.length);o<s;o++)if(!d[o]&&c===n[o]){d[f[i]=o]=!0,h++;break}var p,m,g=[],v=[],y=0,_=0;for(m=p=0;p<a.length;p++)-1<f[p]&&(g[m]=a[p],m++);for(m=p=0;p<n.length;p++)d[p]&&(v[m]=n[p],m++);for(i=0;i<g.length;i++)g[i]!==v[i]&&y++;for(i=0;i<a.length&&e[i]===t[i];i++)_++;var b=h;r=y/2;if(b){var A=(b/e.length+b/t.length+(b-r)/b)/3;return A<u?A:A+Math.min(.1,1/n.length)*_*(1-A)}return 0},levenshtein:function(e,t,r){if(e=Kc(e),t=Kc(t),0===e.length)return t.length;if(0===t.length)return e.length;var n,a,i,o,s=r||{d:1,i:1,s:1},c=[],u=[],l=t.length+1;for(n=0;n<l;n++)c[n]=n;for(n=0;n<e.length;n++){for(u[0]=n+1,a=0;a<t.length;a++)i=e[n]===t[a]?0:s.s,u[a+1]=Math.min(u[a]+s.d,c[a+1]+s.i,c[a]+i);for(a=0;a<l;a++)c[a]=u[a]}return((o=Math.max(e.length,t.length))-u[t.length])/o},ngram:function(e,t,r){e=Kc(e),t=Kc(t);var n,a,i,o,s,c,u,l=e.length,f=t.length,d=r||2,h=[],p=[],m=[],g=[],v=[];if(0===l||0===f)return l===f?1:0;if(n=0,l<d||f<d){for(a=0,o=Math.min(l,f);a<o;a++)e[a]===t[a]&&n++;return n/Math.max(l,f)}for(a=0;a<l+d-1;a++)h[a]=a<d-1?0:e[a-d+1];for(a=0;a<=l;a++)p[a]=a;for(i=1;i<=f;i++){if(i<d){for(s=0;s<d-i;s++)v[s]=0;for(s=d-i;s<d;s++)v[s]=t[s-(d-i)]}else v=t.slice(i-d,i);for(m[0]=i,a=1;a<=l;a++){for(c=d,o=n=0;o<d;o++)h[a-1+o]!==v[o]?n++:0===h[a-1+o]&&c--;u=n/c,m[a]=Math.min(Math.min(m[a-1]+1,p[a]+1),p[a-1]+u)}g=p,p=m,m=g}return 1-p[l]/Math.max(l,f)},pearson:function(t,r){var n=[];Object.keys(t).forEach(function(e){r[e]&&n.push(e)});var e=n.length;if(0===e)return 0;var a=Vc(n.map(function(e){return t[e]})),i=Vc(n.map(function(e){return r[e]})),o=Vc(n.map(function(e){return Math.pow(t[e],2)})),s=Vc(n.map(function(e){return Math.pow(r[e],2)})),c=Vc(n.map(function(e){return t[e]*r[e]}))-a*i/e,u=Math.sqrt((o-Math.pow(a,2)/e)*(s-Math.pow(i,2)/e));return 0===u?0:c/u},jaccard:function(e,t){return e=Kc(e),t=Kc(t),$c.intersection(e,t).length/$c.union(e,t).length},tanimoto:function(e,t){e=Kc(e),t=Kc(t);var r=$c.intersection(e,t).length;return r/(e.length+t.length-r)}};var Zc={author:Js,lead_image_url:Xs,dek:function(e,t){var r=t.$,n=t.excerpt;if(1e3<e.length||e.length<5)return null;if(n&&za(n,10)===za(e,10))return null;var a=ts(e,r);return zs.test(a)?null:ua(a.trim())},date_published:Fc,content:Gc,title:Uc};function Xc(e,t){var o,a,i,s;return t.stripUnlikelyCandidates&&((o=e)("*").not("a").each(function(e,t){var r=o(t),n=r.attr("class"),a=r.attr("id");if(a||n){var i="".concat(n||""," ").concat(a||"");Ei.test(i)||xi.test(i)&&r.remove()}}),e=o),e=function(a){var e=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];return Ii.forEach(function(e){var t=Pa(e,2),r=t[0],n=t[1];a("".concat(r," ").concat(n)).each(function(e,t){ao(a(t).parent(r),a,80)})}),co(a,e),co(a,e),a}(e=Si(e),t.weightNodes),s=0,(a=e)("[score]").each(function(e,t){if(!Wi.test(t.tagName)){var r=a(t),n=Qi(r);s<n&&(s=n,i=r)}}),i?i=uo(i,s,a):a("body")||a("*").first()}var Qc={defaultOpts:{stripUnlikelyCandidates:!0,weightNodes:!0,cleanConditionally:!0},extract:function(e,t){var r=e.$,n=e.html,a=e.title,i=e.url;t=pt({},this.defaultOpts,t),r=r||Cn.load(n);var o=this.getContentNode(r,a,i,t);if(rs(o))return this.cleanAndReturnNode(o,r);var s=!0,c=!1,u=void 0;try{for(var l,f=Da(ci(t).filter(function(e){return!0===t[e]}));!(s=(l=f.next()).done);s=!0){var d=l.value;if(t[d]=!1,r=Cn.load(n),rs(o=this.getContentNode(r,a,i,t)))break}}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}return this.cleanAndReturnNode(o,r)},getContentNode:function(e,t,r,n){return Gc(Xc(e,n),{$:e,cleanConditionally:n.cleanConditionally,title:t,url:r})},cleanAndReturnNode:function(e,t){return e?ua(t.html(e)):null}},eu=["tweetmeme-title","dc.title","rbtitle","headline","title"],tu=["og:title"],ru=[".hentry .entry-title","h1#articleHeader","h1.articleHeader","h1.article",".instapaper_title","#meebo-title"],nu=["article h1","#entry-title",".entry-title","#entryTitle","#entrytitle",".entryTitle",".entrytitle","#articleTitle",".articleTitle","post post-title","h1.title","h2.article","h1","html head title","title"],au={extract:function(e){var t,r=e.$,n=e.url,a=e.metaCache;return(t=Xo(r,eu,a))?Uc(t,{url:n,$:r}):(t=es(r,ru))?Uc(t,{url:n,$:r}):(t=Xo(r,tu,a))?Uc(t,{url:n,$:r}):(t=es(r,nu))?Uc(t,{url:n,$:r}):""}},iu=["byl","clmst","dc.author","dcsext.author","dc.creator","rbauthors","authors"],ou=[".entry .entry-author",".author.vcard .fn",".author .vcard .fn",".byline.vcard .fn",".byline .vcard .fn",".byline .by .author",".byline .by",".byline .author",".post-author.vcard",".post-author .vcard","a[rel=author]","#by_author",".by_author","#entryAuthor",".entryAuthor",".byline a[href*=author]","#author .authorname",".author .authorname","#author",".author",".articleauthor",".ArticleAuthor",".byline"],su=/^[\n\s]*By/i,cu=[["#byline",su],[".byline",su]],uu={extract:function(e){var t,r=e.$,n=e.metaCache;if((t=Xo(r,iu,n))&&t.length<300)return Js(t);if((t=es(r,ou,2))&&t.length<300)return Js(t);var a=!0,i=!1,o=void 0;try{for(var s,c=Da(cu);!(a=(s=c.next()).done);a=!0){var u=Pa(s.value,2),l=u[0],f=u[1],d=r(l);if(1===d.length){var h=d.text();if(f.test(h))return Js(h)}}}catch(e){i=!0,o=e}finally{try{a||null==c.return||c.return()}finally{if(i)throw o}}return null}},lu=["article:published_time","displaydate","dc.date","dc.date.issued","rbpubdate","publish_date","pub_date","pagedate","pubdate","revision_date","doc_date","date_created","content_create_date","lastmodified","created","date"],fu=[".hentry .dtstamp.published",".hentry .published",".hentry .dtstamp.updated",".hentry .updated",".single .published",".meta .published",".meta .postDate",".entry-date",".byline .date",".postmetadata .date",".article_datetime",".date-header",".story-date",".dateStamp","#story .datetime",".dateline",".pubdate"],du=[new RegExp("/(20\\d{2}/\\d{2}/\\d{2})/","i"),new RegExp("(20\\d{2}-[01]\\d-[0-3]\\d)","i"),new RegExp("/(20\\d{2}/".concat("(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)","/[0-3]\\d)/"),"i")],hu={extract:function(e){var t,r,n,a=e.$,i=e.url,o=e.metaCache;return(t=Xo(a,lu,o,!1))?Fc(t):(t=es(a,fu))?Fc(t):(r=i,(t=(n=du.find(function(e){return e.test(r)}))?n.exec(r)[1]:null)?Fc(t):null)}},pu=["og:image","twitter:image","image_src"],mu=["link[rel=image_src]"],gu=new RegExp(["upload","wp-content","large","photo","wp-image"].join("|"),"i"),vu=new RegExp(["spacer","sprite","blank","throbber","gradient","tile","bg","background","icon","social","header","hdr","advert","spinner","loader","loading","default","rating","share","facebook","twitter","theme","promo","ads","wp-includes"].join("|"),"i"),yu=/\.gif(\?.*)?$/i,_u=/\.jpe?g(\?.*)?$/i;function bu(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}var Au={extract:function(e){var t,u=e.$,r=e.content,n=e.metaCache,a=e.html;u.browser||0!==u("head").length||u("*").first().prepend(a);var i=Xo(u,pu,n,!1);if(i&&(t=Xs(i)))return t;var o=u(r),l=u("img",o).toArray(),f={};l.forEach(function(e,t){var r=u(e),n=r.attr("src");if(n){var a,i,o,s,c=function(e){e=e.trim();var t=0;return gu.test(e)&&(t+=20),vu.test(e)&&(t-=20),yu.test(e)&&(t-=10),_u.test(e)&&(t+=10),t}(n);c+=r.attr("alt")?5:0,c+=function(e){var t=0;1===e.parents("figure").first().length&&(t+=25);var r,n=e.parent();return 1===n.length&&(r=n.parent()),[n,r].forEach(function(e){Bi.test(bu(e))&&(t+=15)}),t}(r),c+=(a=0,i=r.next(),(o=i.get(0))&&"figcaption"===o.tagName.toLowerCase()&&(a+=25),Bi.test(bu(i))&&(a+=15),a),c+=function(e){var t=0,r=Xi(e.attr("width")),n=Xi(e.attr("height")),a=e.attr("src");if(r&&r<=50&&(t-=50),n&&n<=50&&(t-=50),r&&n&&!a.includes("sprite")){var i=r*n;i<5e3?t-=100:t+=Math.round(i/1e3)}return t}(r),c+=(s=t,l.length/2-s),f[n]=c}});var s=ci(f).reduce(function(e,t){return f[t]>e[1]?[t,f[t]]:e},[null,0]),c=Pa(s,2),d=c[0];if(0<c[1]&&(t=Xs(d)))return t;var h=!0,p=!1,m=void 0;try{for(var g,v=Da(mu);!(h=(g=v.next()).done);h=!0){var y=g.value,_=u(y).first(),b=_.attr("src");if(b&&(t=Xs(b)))return t;var A=_.attr("href");if(A&&(t=Xs(A)))return t;var w=_.attr("value");if(w&&(t=Xs(w)))return t}}catch(e){p=!0,m=e}finally{try{h||null==v.return||v.return()}finally{if(p)throw m}}return null}},wu=e(function(t,e){(function(){var e,d,c,h,p,r,u,n,m,g,a,i,o,l,f;c=Math.floor,g=Math.min,d=function(e,t){return e<t?-1:t<e?1:0},m=function(e,t,r,n,a){var i;if(null==r&&(r=0),null==a&&(a=d),r<0)throw new Error("lo must be non-negative");for(null==n&&(n=e.length);r<n;)a(t,e[i=c((r+n)/2)])<0?n=i:r=i+1;return[].splice.apply(e,[r,r-r].concat(t)),t},r=function(e,t,r){return null==r&&(r=d),e.push(t),l(e,0,e.length-1,r)},p=function(e,t){var r,n;return null==t&&(t=d),r=e.pop(),e.length?(n=e[0],e[0]=r,f(e,0,t)):n=r,n},n=function(e,t,r){var n;return null==r&&(r=d),n=e[0],e[0]=t,f(e,0,r),n},u=function(e,t,r){var n;return null==r&&(r=d),e.length&&r(e[0],t)<0&&(t=(n=[e[0],t])[0],e[0]=n[1],f(e,0,r)),t},h=function(r,e){var t,n,a,i,o,s;for(null==e&&(e=d),o=[],n=0,a=(i=function(){s=[];for(var e=0,t=c(r.length/2);0<=t?e<t:t<e;0<=t?e++:e--)s.push(e);return s}.apply(this).reverse()).length;n<a;n++)t=i[n],o.push(f(r,t,e));return o},o=function(e,t,r){var n;if(null==r&&(r=d),-1!==(n=e.indexOf(t)))return l(e,0,n,r),f(e,n,r)},a=function(e,t,r){var n,a,i,o,s;if(null==r&&(r=d),!(a=e.slice(0,t)).length)return a;for(h(a,r),i=0,o=(s=e.slice(t)).length;i<o;i++)n=s[i],u(a,n,r);return a.sort(r).reverse()},i=function(e,t,r){var n,a,i,o,s,c,u,l,f;if(null==r&&(r=d),10*t<=e.length){if(!(i=e.slice(0,t).sort(r)).length)return i;for(a=i[i.length-1],o=0,c=(u=e.slice(t)).length;o<c;o++)r(n=u[o],a)<0&&(m(i,n,0,null,r),i.pop(),a=i[i.length-1]);return i}for(h(e,r),f=[],s=0,l=g(t,e.length);0<=l?s<l:l<s;0<=l?++s:--s)f.push(p(e,r));return f},l=function(e,t,r,n){var a,i,o;for(null==n&&(n=d),a=e[r];t<r&&n(a,i=e[o=r-1>>1])<0;)e[r]=i,r=o;return e[r]=a},f=function(e,t,r){var n,a,i,o,s;for(null==r&&(r=d),a=e.length,i=e[s=t],n=2*t+1;n<a;)(o=n+1)<a&&!(r(e[n],e[o])<0)&&(n=o),e[t]=e[n],n=2*(t=n)+1;return e[t]=i,l(e,s,t,r)},e=function(){function t(e){this.cmp=null!=e?e:d,this.nodes=[]}return t.push=r,t.pop=p,t.replace=n,t.pushpop=u,t.heapify=h,t.updateItem=o,t.nlargest=a,t.nsmallest=i,t.prototype.push=function(e){return r(this.nodes,e,this.cmp)},t.prototype.pop=function(){return p(this.nodes,this.cmp)},t.prototype.peek=function(){return this.nodes[0]},t.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},t.prototype.replace=function(e){return n(this.nodes,e,this.cmp)},t.prototype.pushpop=function(e){return u(this.nodes,e,this.cmp)},t.prototype.heapify=function(){return h(this.nodes,this.cmp)},t.prototype.updateItem=function(e){return o(this.nodes,e,this.cmp)},t.prototype.clear=function(){return this.nodes=[]},t.prototype.empty=function(){return 0===this.nodes.length},t.prototype.size=function(){return this.nodes.length},t.prototype.clone=function(){var e;return(e=new t).nodes=this.nodes.slice(0),e},t.prototype.toArray=function(){return this.nodes.slice(0)},t.prototype.insert=t.prototype.push,t.prototype.top=t.prototype.peek,t.prototype.front=t.prototype.peek,t.prototype.has=t.prototype.contains,t.prototype.copy=t.prototype.clone,t}(),t.exports=e}).call(this)}),xu=e(function(e,l){(function(){var a,h,i,e,ee,t,p,r,g,v,n,o,s,B,M,f,c,q,I,E,u=[].indexOf||function(e){for(var t=0,r=this.length;t<r;t++)if(t in this&&this[t]===e)return t;return-1};p=Math.floor,g=Math.max,v=Math.min,h=wu,f=function(e,t){return t?2*e/t:1},M=function(e,t){var r,n,a,i,o,s;for(o=[e.length,t.length],r=i=0,s=v(n=o[0],a=o[1]);0<=s?i<s:s<i;r=0<=s?++i:--i){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return n-a},E=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},B=function(e){var t,r;for(t=0,r=e.length;t<r;t++)if(e[t])return!0;return!1},ee=function(){function e(e,t,r,n){this.isjunk=e,null==t&&(t=""),null==r&&(r=""),this.autojunk=null==n||n,this.a=this.b=null,this.setSeqs(t,r)}return e.prototype.setSeqs=function(e,t){return this.setSeq1(e),this.setSeq2(t)},e.prototype.setSeq1=function(e){if(e!==this.a)return this.a=e,this.matchingBlocks=this.opcodes=null},e.prototype.setSeq2=function(e){if(e!==this.b)return this.b=e,this.matchingBlocks=this.opcodes=null,this.fullbcount=null,this._chainB()},e.prototype._chainB=function(){var e,t,r,n,a,i,o,s,c,u,l,f,d,h;for(e=this.b,this.b2j=t={},n=u=0,f=e.length;u<f;n=++u)r=e[n],(E(t,r)?t[r]:t[r]=[]).push(n);if(i={},a=this.isjunk)for(l=0,d=(h=Object.keys(t)).length;l<d;l++)a(r=h[l])&&(i[r]=!0,delete t[r]);if(c={},o=e.length,this.autojunk&&200<=o)for(r in s=p(o/100)+1,t)t[r].length>s&&(c[r]=!0,delete t[r]);return this.isbjunk=function(e){return E(i,e)},this.isbpopular=function(e){return E(c,e)}},e.prototype.findLongestMatch=function(e,t,r,n){var a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k;for(a=(_=[this.a,this.b,this.b2j,this.isbjunk])[0],i=_[1],o=_[2],f=_[3],s=(b=[e,r,0])[0],c=b[1],u=b[2],h={},l=g=e;e<=t?g<t:t<g;l=e<=t?++g:--g){for(m={},v=0,y=(A=E(o,a[l])?o[a[l]]:[]).length;v<y;v++)if(!((d=A[v])<r)){if(n<=d)break;u<(p=m[d]=(h[d-1]||0)+1)&&(s=(w=[l-p+1,d-p+1,p])[0],c=w[1],u=w[2])}h=m}for(;e<s&&r<c&&!f(i[c-1])&&a[s-1]===i[c-1];)s=(x=[s-1,c-1,u+1])[0],c=x[1],u=x[2];for(;s+u<t&&c+u<n&&!f(i[c+u])&&a[s+u]===i[c+u];)u++;for(;e<s&&r<c&&f(i[c-1])&&a[s-1]===i[c-1];)s=(k=[s-1,c-1,u+1])[0],c=k[1],u=k[2];for(;s+u<t&&c+u<n&&f(i[c+u])&&a[s+u]===i[c+u];)u++;return[s,c,u]},e.prototype.getMatchingBlocks=function(){var e,t,r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E;if(this.matchingBlocks)return this.matchingBlocks;for(v=[[0,h=(A=[this.a.length,this.b.length])[0],0,p=A[1]]],m=[];v.length;)t=(w=v.pop())[0],e=w[1],n=w[2],r=w[3],a=(x=y=this.findLongestMatch(t,e,n,r))[0],s=x[1],(l=x[2])&&(m.push(y),t<a&&n<s&&v.push([t,a,n,s]),a+l<e&&s+l<r&&v.push([a+l,e,s+l,r]));for(m.sort(M),i=c=f=0,g=[],_=0,b=m.length;_<b;_++)o=(k=m[_])[0],u=k[1],d=k[2],i+f===o&&c+f===u?f+=d:(f&&g.push([i,c,f]),i=(E=[o,u,d])[0],c=E[1],f=E[2]);return f&&g.push([i,c,f]),g.push([h,p,0]),this.matchingBlocks=g},e.prototype.getOpcodes=function(){var e,t,r,n,a,i,o,s,c,u,l,f;if(this.opcodes)return this.opcodes;for(n=a=0,this.opcodes=t=[],s=0,c=(u=this.getMatchingBlocks()).length;s<c;s++)e=(l=u[s])[0],r=l[1],i=l[2],o="",n<e&&a<r?o="replace":n<e?o="delete":a<r&&(o="insert"),o&&t.push([o,n,e,a,r]),n=(f=[e+i,r+i])[0],a=f[1],i&&t.push(["equal",e,n,r,a]);return t},e.prototype.getGroupedOpcodes=function(e){var t,r,n,a,i,o,s,c,u,l,f,d,h,p,m;for(null==e&&(e=3),(t=this.getOpcodes()).length||(t=[["equal",0,1,0,1]]),"equal"===t[0][0]&&(u=(d=t[0])[0],a=d[1],i=d[2],o=d[3],s=d[4],t[0]=[u,g(a,i-e),i,g(o,s-e),s]),"equal"===t[t.length-1][0]&&(u=(h=t[t.length-1])[0],a=h[1],i=h[2],o=h[3],s=h[4],t[t.length-1]=[u,a,v(i,a+e),o,v(s,o+e)]),c=e+e,n=[],r=[],l=0,f=t.length;l<f;l++)u=(p=t[l])[0],a=p[1],i=p[2],o=p[3],s=p[4],"equal"===u&&c<i-a&&(r.push([u,a,v(i,a+e),o,v(s,o+e)]),n.push(r),r=[],a=(m=[g(a,i-e),g(o,s-e)])[0],o=m[1]),r.push([u,a,i,o,s]);return!r.length||1===r.length&&"equal"===r[0][0]||n.push(r),n},e.prototype.ratio=function(){var e,t,r,n;for(t=e=0,r=(n=this.getMatchingBlocks()).length;t<r;t++)e+=n[t][2];return f(e,this.a.length+this.b.length)},e.prototype.quickRatio=function(){var e,t,r,n,a,i,o,s,c,u,l;if(!this.fullbcount)for(this.fullbcount=r={},i=0,s=(u=this.b).length;i<s;i++)r[t=u[i]]=(r[t]||0)+1;for(r=this.fullbcount,e={},o=n=0,c=(l=this.a).length;o<c;o++)t=l[o],a=E(e,t)?e[t]:r[t]||0,e[t]=a-1,0<a&&n++;return f(n,this.a.length+this.b.length)},e.prototype.realQuickRatio=function(){var e,t,r;return r=[this.a.length,this.b.length],f(v(e=r[0],t=r[1]),e+t)},e}(),r=function(e,t,r,n){var a,i,o,s,c,u,l,f,d;if(null==r&&(r=3),null==n&&(n=.6),!(0<r))throw new Error("n must be > 0: ("+r+")");if(!(0<=n&&n<=1))throw new Error("cutoff must be in [0.0, 1.0]: ("+n+")");for(a=[],(i=new ee).setSeq2(e),s=0,u=t.length;s<u;s++)o=t[s],i.setSeq1(o),i.realQuickRatio()>=n&&i.quickRatio()>=n&&i.ratio()>=n&&a.push([i.ratio(),o]);for(d=[],c=0,l=(a=h.nlargest(a,r,M)).length;c<l;c++)(f=a[c])[0],o=f[1],d.push(o);return d},c=function(e,t){var r,n,a;for(r=(a=[0,e.length])[0],n=a[1];r<n&&e[r]===t;)r++;return r},a=function(){function e(e,t){this.linejunk=e,this.charjunk=t}return e.prototype.compare=function(e,t){var r,n,a,i,o,s,c,u,l,f,d,h,p,m;for(c=[],l=0,d=(p=new ee(this.linejunk,e,t).getOpcodes()).length;l<d;l++){switch(u=(m=p[l])[0],n=m[1],r=m[2],i=m[3],a=m[4],u){case"replace":o=this._fancyReplace(e,n,r,t,i,a);break;case"delete":o=this._dump("-",e,n,r);break;case"insert":o=this._dump("+",t,i,a);break;case"equal":o=this._dump(" ",e,n,r);break;default:throw new Error("unknow tag ("+u+")")}for(f=0,h=o.length;f<h;f++)s=o[f],c.push(s)}return c},e.prototype._dump=function(e,t,r,n){var a,i,o;for(o=[],a=i=r;r<=n?i<n:n<i;a=r<=n?++i:--i)o.push(e+" "+t[a]);return o},e.prototype._plainReplace=function(e,t,r,n,a,i){var o,s,c,u,l,f,d,h,p,m;for(l=i-a<r-t?(o=this._dump("+",n,a,i),this._dump("-",e,t,r)):(o=this._dump("-",e,t,r),this._dump("+",n,a,i)),u=[],f=0,h=(m=[o,l]).length;f<h;f++)for(d=0,p=(s=m[f]).length;d<p;d++)c=s[d],u.push(c);return u},e.prototype._fancyReplace=function(e,t,r,n,a,i){var o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,R,z,L,Y,W,I,B,q,H,F,G,U,$,V,K,J,Z,X,Q;for(d=(B=[.74,.75])[0],_=B[1],y=new ee(this.charjunk),b=(q=[null,null])[0],A=q[1],S=[],x=C=a;a<=i?C<i:i<C;x=a<=i?++C:--C)for(m=n[x],y.setSeq2(m),w=D=t;t<=r?D<r:r<D;w=t<=r?++D:--D)(s=e[w])!==m?(y.setSeq1(s),y.realQuickRatio()>d&&y.quickRatio()>d&&y.ratio()>d&&(d=($=[y.ratio(),w,x])[0],h=$[1],p=$[2])):null===b&&(b=(U=[w,x])[0],A=U[1]);if(d<_){if(null===b){for(O=0,P=(V=this._plainReplace(e,t,r,n,a,i)).length;O<P;O++)M=V[O],S.push(M);return S}h=(K=[b,A,1])[0],p=K[1],d=K[2]}else b=null;for(N=0,j=(J=this._fancyHelper(e,t,h,n,a,p)).length;N<j;N++)M=J[N],S.push(M);if(o=(Z=[e[h],n[p]])[0],f=Z[1],null===b){for(l=v="",y.setSeqs(o,f),Y=0,R=(X=y.getOpcodes()).length;Y<R;Y++)switch(T=(Q=X[Y])[0],c=Q[1],u=Q[2],g=Q[3],k=(H=[u-c,Q[4]-g])[0],E=H[1],T){case"replace":l+=Array(k+1).join("^"),v+=Array(E+1).join("^");break;case"delete":l+=Array(k+1).join("-");break;case"insert":v+=Array(E+1).join("+");break;case"equal":l+=Array(k+1).join(" "),v+=Array(E+1).join(" ");break;default:throw new Error("unknow tag ("+T+")")}for(W=0,z=(F=this._qformat(o,f,l,v)).length;W<z;W++)M=F[W],S.push(M)}else S.push(" "+o);for(I=0,L=(G=this._fancyHelper(e,h+1,r,n,p+1,i)).length;I<L;I++)M=G[I],S.push(M);return S},e.prototype._fancyHelper=function(e,t,r,n,a,i){var o;return o=[],t<r?o=a<i?this._fancyReplace(e,t,r,n,a,i):this._dump("-",e,t,r):a<i&&(o=this._dump("+",n,a,i)),o},e.prototype._qformat=function(e,t,r,n){var a,i;return i=[],a=v(c(e,"\t"),c(t,"\t")),a=v(a,c(r.slice(0,a)," ")),a=v(a,c(n.slice(0,a)," ")),r=r.slice(a).replace(/\s+$/,""),n=n.slice(a).replace(/\s+$/,""),i.push("- "+e),r.length&&i.push("? "+Array(a+1).join("\t")+r+"\n"),i.push("+ "+t),n.length&&i.push("? "+Array(a+1).join("\t")+n+"\n"),i},e}(),e=function(e,t){return null==t&&(t=/^\s*#?\s*$/),t.test(e)},i=function(e,t){return null==t&&(t=" \t"),0<=u.call(t,e)},I=function(e,t){var r,n;return r=e+1,1===(n=t-e)?""+r:(n||r--,r+","+n)},s=function(e,t,r){var n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,R,z,L,Y,W;for(null==(s=(P=null!=r?r:{}).fromfile)&&(s=""),null==(A=P.tofile)&&(A=""),null==(c=P.fromfiledate)&&(c=""),null==(w=P.tofiledate)&&(w=""),null==P.n&&3,null==(v=P.lineterm)&&(v="\n"),y=!(g=[]),x=0,S=(j=new ee(null,e,t).getGroupedOpcodes()).length;x<S;x++)for(u=j[x],y||(y=!0,o=c?"\t"+c:"",b=w?"\t"+w:"",g.push("--- "+s+o+v),g.push("+++ "+A+b+v)),p=(R=[u[0],u[u.length-1]])[1],n=I((i=R[0])[1],p[2]),a=I(i[3],p[4]),g.push("@@ -"+n+" +"+a+" @@"+v),k=0,T=u.length;k<T;k++)if(_=(z=u[k])[0],l=z[1],f=z[2],d=z[3],h=z[4],"equal"!==_){if("replace"===_||"delete"===_)for(M=0,D=(Y=e.slice(l,f)).length;M<D;M++)m=Y[M],g.push("-"+m);if("replace"===_||"insert"===_)for(N=0,O=(W=t.slice(d,h)).length;N<O;N++)m=W[N],g.push("+"+m)}else for(E=0,C=(L=e.slice(l,f)).length;E<C;E++)m=L[E],g.push(" "+m);return g},q=function(e,t){var r,n;return r=e+1,(n=t-e)||r--,n<=1?""+r:r+","+(r+n-1)},t=function(e,t,r){var n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E,M,S,T,C,D,O,N,P,j,R,z,L,Y,W,I;for(null==(s=(j=null!=r?r:{}).fromfile)&&(s=""),null==(w=j.tofile)&&(w=""),null==(c=j.fromfiledate)&&(c=""),null==(x=j.tofiledate)&&(x=""),null==j.n&&3,null==(v=j.lineterm)&&(v="\n"),_=!(y={insert:"+ ",delete:"- ",replace:"! ",equal:" "}),g=[],k=0,T=(R=new ee(null,e,t).getGroupedOpcodes()).length;k<T;k++)if(u=R[k],!_){if(_=!0,o=c?"\t"+c:"",A=x?"\t"+x:"",g.push("*** "+s+o+v),g.push("--- "+w+A+v),i=(z=[u[0],u[u.length-1]])[0],p=z[1],g.push("***************"+v),n=q(i[1],p[2]),g.push("*** "+n+" ****"+v),B(function(){var e,t,r,n;for(n=[],e=0,t=u.length;e<t;e++)r=u[e],b=r[0],r[1],r[2],r[3],r[4],n.push("replace"===b||"delete"===b);return n}()))for(E=0,C=u.length;E<C;E++)if(L=u[E],b=L[0],l=L[1],f=L[2],L[3],L[4],"insert"!==b)for(M=0,D=(Y=e.slice(l,f)).length;M<D;M++)m=Y[M],g.push(y[b]+m);if(a=q(i[3],p[4]),g.push("--- "+a+" ----"+v),B(function(){var e,t,r,n;for(n=[],e=0,t=u.length;e<t;e++)r=u[e],b=r[0],r[1],r[2],r[3],r[4],n.push("replace"===b||"insert"===b);return n}()))for(S=0,O=u.length;S<O;S++)if(W=u[S],b=W[0],W[1],W[2],d=W[3],h=W[4],"delete"!==b)for(P=0,N=(I=t.slice(d,h)).length;P<N;P++)m=I[P],g.push(y[b]+m)}return g},n=function(e,t,r,n){return null==n&&(n=i),new a(r,n).compare(e,t)},o=function(e,t){var r,n,a,i,o,s,c;if(!(i={1:"- ",2:"+ "}[t]))throw new Error("unknow delta choice (must be 1 or 2): "+t);for(a=[" ",i],n=[],o=0,s=e.length;o<s;o++)c=(r=e[o]).slice(0,2),0<=u.call(a,c)&&n.push(r.slice(2));return n},l._arrayCmp=M,l.SequenceMatcher=ee,l.getCloseMatches=r,l._countLeading=c,l.Differ=a,l.IS_LINE_JUNK=e,l.IS_CHARACTER_JUNK=i,l._formatRangeUnified=I,l.unifiedDiff=s,l._formatRangeContext=q,l.contextDiff=t,l.ndiff=n,l.restore=o}).call(this)}),ku=(xu._arrayCmp,xu.SequenceMatcher,xu.getCloseMatches,xu._countLeading,xu.Differ,xu.IS_LINE_JUNK,xu.IS_CHARACTER_JUNK,xu._formatRangeUnified,xu.unifiedDiff,xu._formatRangeContext,xu.contextDiff,xu.ndiff,xu.restore,xu);var Eu=/\d/,Mu=new RegExp(["print","archive","comment","discuss","e-mail","email","share","reply","all","login","sign","single","adx","entry-unrelated"].join("|"),"i"),Su=new RegExp("(next|weiter|continue|>([^|]|$)|»([^|]|$))","i"),Tu=new RegExp("(first|last|end)","i"),Cu=new RegExp("(prev|earl|old|new|<|«)","i");function Du(e){var t=e.links,k=e.articleUrl,E=e.baseUrl,M=e.parsedUrl,S=e.$,r=e.previousUrls,T=void 0===r?[]:r;M=M||Sn.parse(k);var C=new RegExp("^".concat(E),"i"),D=0<S(_i).length,n=t.reduce(function(e,t){var r=ns(t);if(!r.href)return e;var n=Sa(r.href),a=S(t),i=a.text();if(!function(t,e,r,n,a,i){if(void 0!==i.find(function(e){return t===e}))return!1;if(!t||t===e||t===r)return!1;var o=n.hostname;if(Sn.parse(t).hostname!==o)return!1;var s=t.replace(r,"");return!(!Eu.test(s)||Mu.test(a)||25<a.length)}(n,k,E,M,i,T))return e;e[n]?e[n].linkText="".concat(e[n].linkText,"|").concat(i):e[n]={score:0,linkText:i,href:n};var o,s,c,u,l,f,d,h,p,m,g,v,y,_,b=e[n],A=(o=a,"".concat(i||o.text()," ").concat(o.attr("class")||""," ").concat(o.attr("id")||"")),w=function(e){var t=e.match(wa);if(!t)return null;var r=Aa(t[6],10);return r<100?r:null}(n),x=(s=n,C.test(s)?0:-25);return x+=(c=A,Su.test(c)?50:0),x+=(u=A,Tu.test(u)&&Su.test(u)?-65:0),x+=(l=A,Cu.test(l)?-200:0),x+=(f=a.parent(),h=d=!1,Ni(gs(p=0,4)).forEach(function(){if(0!==f.length){var e,t="".concat((e=f).attr("class")||""," ").concat(e.attr("id")||"");!d&&bi.test(t)&&(d=!0,p+=25),!h&&yi.test(t)&&Mu.test(t)&&(vi.test(t)||(h=!0,p-=25)),f=f.parent()}}),p),x+=(m=n,Mu.test(m)?-25:0),x+=(g=D,w&&!g?50:0),x+=function(e,t){var r=0;if(Ea.test(e.trim())){var n=Aa(e,10);r=n<2?-30:Math.max(0,10-n),t&&n<=t&&(r-=50)}return r}(i,w),x+=(y=k,_=n,0<(v=x)?v+-250*(1-new ku.SequenceMatcher(null,y,_).ratio()-.2):0),b.score=x,e},{});return 0===ci(n).length?null:n}var Ou={extract:function(e){var t=e.$,r=e.url,n=e.parsedUrl,a=e.previousUrls,i=void 0===a?[]:a;n=n||Sn.parse(r);var o=Sa(r),s=ja(r,n),c=Du({links:t("a[href]").toArray(),articleUrl:o,baseUrl:s,parsedUrl:n,$:t,previousUrls:i});if(!c)return null;var u=ci(c).reduce(function(e,t){var r=c[t];return r.score>e.score?r:e},{score:-100});return 50<=u.score?u.href:null}},Nu=["og:url"];function Pu(e){return{url:e,domain:(t=e,Sn.parse(t).hostname)};var t}var ju={extract:function(e){var t=e.$,r=e.url,n=e.metaCache,a=t("link[rel=canonical]");if(0!==a.length){var i=a.attr("href");if(i)return Pu(i)}var o=Xo(t,Nu,n);return Pu(o||r)}},Ru={ellipse:"…",chars:[" ","-"],max:140,truncate:!0};var zu=function(e,t,r){if("string"!=typeof e||0===e.length)return"";if(0===t)return"";for(var n in r=r||{},Ru)null!==r[n]&&void 0!==r[n]||(r[n]=Ru[n]);return r.max=t||r.max,function(e,t,r,n,a){if(e.length<t)return e;for(var i=0,o="",s=Math.floor(t/2),c="middle"===a?s:t,u=0,l=e.length;u<l;u++)if(o=e.charAt(u),-1!==n.indexOf(o)&&"middle"!==a&&(i=u),!(u<c))return 0===i?a?e.substring(0,c-1)+r+("middle"===a?e.substring(e.length-s,e.length):""):"":e.substring(0,i)+r;return e}(e,r.max,r.ellipse,r.chars,r.truncate)},Lu=["og:description","twitter:description"];function Yu(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:200;return e=e.replace(/[\s\n]+/g," ").trim(),zu(e,r,{ellipse:"…"})}var Wu={extract:function(e){var t=e.$,r=e.content,n=e.metaCache,a=Xo(t,Lu,n);if(a)return Yu(ts(a,t));return Yu(t(r.slice(0,1e3)).text(),t,200)}},Iu={extract:function(e){var t=e.content,r=ua(Cn.load(t)("div").first().text()).split(/\s/).length;return 1===r&&(r=t.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim().split(" ").length),r}},Bu={domain:"*",title:au.extract,date_published:hu.extract,author:uu.extract,content:Qc.extract.bind(Qc),lead_image_url:Au.extract,dek:function(){return null},next_page_url:Ou.extract,url_and_domain:ju.extract,excerpt:Wu.extract,word_count:Iu.extract,direction:function(e){var t=e.title;return js.getDirection(t)},extract:function(e){var t=e.html,r=e.$;if(t&&!r){var n=Cn.load(t);e.$=n}var a=this.title(e),i=this.date_published(e),o=this.author(e),s=this.content(pt({},e,{title:a})),c=this.lead_image_url(pt({},e,{content:s})),u=this.dek(pt({},e,{content:s})),l=this.next_page_url(e),f=this.excerpt(pt({},e,{content:s})),d=this.word_count(pt({},e,{content:s})),h=this.direction({title:a}),p=this.url_and_domain(e);return{title:a,author:o,date_published:i||null,dek:u,lead_image_url:c,content:s,next_page_url:l,url:p.url,domain:p.domain,excerpt:f,word_count:d,direction:h}}},qu={'meta[name="al:ios:app_name"][value="Medium"]':Ss,'meta[name="generator"][value="blogger"]':ks};function Hu(e,t,r){var n,a,i=(t=t||Sn.parse(e)).hostname,o=i.split(".").slice(-2).join(".");return ws[i]||ws[o]||Ps[i]||Ps[o]||(n=r,a=ci(qu).find(function(e){return 0<n(e).length}),qu[a])||Bu}function Fu(s){var c=s.$,t=s.type,u=s.extractionOpts,e=s.extractHtml,r=void 0!==e&&e;if(!u)return null;if("string"==typeof u)return u;var a,i,o,n,l=u.selectors,f=u.defaultCleaner,d=void 0===f||f,h=u.allowMultiple,p=(a=c,i=r,o="lead_image_url"===t||h,l.find(function(e){if(Ta(e)){if(i)return e.reduce(function(e,t){return e&&0<a(t).length},!0);var t=Pa(e,2),r=t[0],n=t[1];return(o||!o&&1===a(r).length)&&a(r).attr(n)&&""!==a(r).attr(n).trim()}return(o||!o&&1===a(e).length)&&""!==a(e).text().trim()}));if(!p)return null;function m(e){var t,r,n,a,i,o;return Uo(e,c,s.url||""),t=e,r=c,(n=u.clean)&&r(n.join(","),t).remove(),a=e,i=c,(o=u.transforms)&&ci(o).forEach(function(r){var e=i(r,a),n=o[r];"string"==typeof n?e.each(function(e,t){Ti(i(t),i,o[r])}):"function"==typeof n&&e.each(function(e,t){var r=n(i(t),i);"string"==typeof r&&Ti(i(t),i,r)})}),e}if(r)return function(){var e;if(Ta(p)){e=c(p.join(","));var r=c("<div></div>");e.each(function(e,t){r.append(t)}),e=r}else e=c(p);return e.wrap(c("<div></div>")),e=m(e=e.parent()),Zc[t]&&Zc[t](e,pt({},s,{defaultCleaner:d})),h?e.children().toArray().map(function(e){return c.html(c(e))}):c.html(e)}();if(Ta(p)){var g=Pa(p,3),v=g[0],y=g[1],_=g[2];n=m(c(v)).map(function(e,t){var r=c(t).attr(y).trim();return _?_(r):r})}else n=m(c(p)).map(function(e,t){return c(t).text().trim()});return n=Ta(n.toArray())&&h?n.toArray():n[0],d&&Zc[t]?Zc[t](n,pt({},s,u)):n}function Gu(t,r){var n={};return ci(t).forEach(function(e){n[e]||(n[e]=Fu(pt({},r,{type:e,extractionOpts:t[e]})))}),n}function Uu(e){var t=e.type,r=e.extractor,n=e.fallback,a=void 0===n||n,i=Fu(pt({},e,{extractionOpts:r[t]}));return i||(a?Bu[t](e):null)}var $u,Vu={extract:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Bu,t=1<arguments.length?arguments[1]:void 0,r=t,n=r.contentOnly,a=r.extractedTitle;if("*"===e.domain)return e.extract(t);if(t=pt({},t,{extractor:e}),n)return{content:Uu(pt({},t,{type:"content",extractHtml:!0,title:a}))};var i=Uu(pt({},t,{type:"title"})),o=Uu(pt({},t,{type:"date_published"})),s=Uu(pt({},t,{type:"author"})),c=Uu(pt({},t,{type:"next_page_url"})),u=Uu(pt({},t,{type:"content",extractHtml:!0,title:i})),l=Uu(pt({},t,{type:"lead_image_url",content:u})),f=Uu(pt({},t,{type:"excerpt",content:u})),d=Uu(pt({},t,{type:"dek",content:u,excerpt:f})),h=Uu(pt({},t,{type:"word_count",content:u})),p=Uu(pt({},t,{type:"direction",title:i})),m=Uu(pt({},t,{type:"url_and_domain"}))||{url:null,domain:null},g=m.url,v=m.domain,y={};return e.extend&&(y=Gu(e.extend,t)),pt({title:i,content:u,author:s,date_published:o,lead_image_url:l,dek:d,next_page_url:c,url:g,domain:v,excerpt:f,word_count:h,direction:p},y)}};function Ku(e){return Ju.apply(this,arguments)}function Ju(){return(Ju=Zr(M.mark(function e(t){var r,n,a,i,o,s,c,u,l,f,d,h,p;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:r=t.next_page_url,n=t.html,a=t.$,i=t.metaCache,o=t.result,s=t.Extractor,c=t.title,u=t.url,l=1,f=[Sa(u)];case 3:if(r&&l<26)return l+=1,e.next=7,ps.create(r);e.next=16;break;case 7:a=e.sent,n=a.html(),d={url:r,html:n,$:a,metaCache:i,extractedTitle:c,previousUrls:f},h=Vu.extract(s,d),f.push(r),o=pt({},o,{content:"".concat(o.content,"<hr><h4>Page ").concat(l,"</h4>").concat(h.content)}),r=h.next_page_url,e.next=3;break;case 16:return p=Bu.word_count({content:"<div>".concat(o.content,"</div>")}),e.abrupt("return",pt({},o,{total_pages:l,rendered_pages:l,word_count:p}));case 18:case"end":return e.stop()}},e,this)}))).apply(this,arguments)}return{parse:($u=Zr(M.mark(function e(t){var r,n,a,i,o,s,c,u,l,f,d,h,p,m,g,v,y,_,b,A,w,x,k,E=arguments;return M.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=1<E.length&&void 0!==E[1]?E[1]:{},n=r.html,a=gt(r,["html"]),i=a.fetchAllPages,o=void 0===i||i,s=a.fallback,c=void 0===s||s,u=a.contentType,l=void 0===u?"html":u,f=a.headers,d=void 0===f?{}:f,h=a.extend,p=a.customExtractor,!t&&Cn.browser&&(t=window.location.href,n=n||Cn.html()),m=Sn.parse(t),m.hostname){e.next=6;break}return e.abrupt("return",{error:!0,message:"The url parameter passed does not look like a valid URL. Please check your URL and try again."});case 6:return e.next=8,ps.create(t,n,m,d);case 8:if((g=e.sent).failed)return e.abrupt("return",g);e.next=11;break;case 11:if(p&&xs(p),v=Hu(t,m,g),n||(n=g.html()),y=g("meta").map(function(e,t){return g(t).attr("name")}).toArray(),_={},h&&(_=Gu(h,{$:g,url:t,html:n})),b=Vu.extract(v,{url:t,html:n,$:g,metaCache:y,parsedUrl:m,fallback:c,contentType:l}),w=(A=b).title,x=A.next_page_url,o&&x)return e.next=22,Ku({Extractor:v,next_page_url:x,html:n,$:g,metaCache:y,result:b,title:w,url:t});e.next=25;break;case 22:b=e.sent,e.next=26;break;case 25:b=pt({},b,{total_pages:1,rendered_pages:1});case 26:return"markdown"===l?(k=new na,b.content=k.turndown(b.content)):"text"===l&&(b.content=g.text(g(b.content))),e.abrupt("return",pt({},b,_));case 28:case"end":return e.stop()}},e,this)})),function(e){return $u.apply(this,arguments)}),browser:!!Cn.browser,fetchResource:function(e){return ps.create(e)},addExtractor:function(e){return xs(e)}}}(); +//# sourceMappingURL=mercury.web.js.map diff --git a/dist/mercury.web.js.map b/dist/mercury.web.js.map new file mode 100644 index 000000000..29e98f77c --- /dev/null +++ b/dist/mercury.web.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mercury.web.js","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/regenerator-runtime/runtime-module.js","../node_modules/@babel/runtime-corejs2/regenerator/index.js","../node_modules/core-js/library/modules/_cof.js","../node_modules/core-js/library/modules/_iobject.js","../node_modules/core-js/library/modules/_defined.js","../node_modules/core-js/library/modules/_to-iobject.js","../node_modules/core-js/library/modules/_object-pie.js","../node_modules/core-js/library/modules/_property-desc.js","../node_modules/core-js/library/modules/_is-object.js","../node_modules/core-js/library/modules/_to-primitive.js","../node_modules/core-js/library/modules/_has.js","../node_modules/core-js/library/modules/_fails.js","../node_modules/core-js/library/modules/_descriptors.js","../node_modules/core-js/library/modules/_global.js","../node_modules/core-js/library/modules/_dom-create.js","../node_modules/core-js/library/modules/_ie8-dom-define.js","../node_modules/core-js/library/modules/_object-gopd.js","../node_modules/core-js/library/modules/_core.js","../node_modules/core-js/library/modules/_a-function.js","../node_modules/core-js/library/modules/_ctx.js","../node_modules/core-js/library/modules/_an-object.js","../node_modules/core-js/library/modules/_object-dp.js","../node_modules/core-js/library/modules/_hide.js","../node_modules/core-js/library/modules/_export.js","../node_modules/core-js/library/modules/_object-sap.js","../node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js","../node_modules/core-js/library/fn/object/get-own-property-descriptor.js","../node_modules/core-js/library/modules/_array-includes.js","../node_modules/core-js/library/modules/_redefine.js","../node_modules/core-js/library/modules/_uid.js","../node_modules/core-js/library/modules/_meta.js","../node_modules/core-js/library/modules/_shared.js","../node_modules/core-js/library/modules/_wks.js","../node_modules/core-js/library/modules/_set-to-string-tag.js","../node_modules/core-js/library/modules/_wks-ext.js","../node_modules/core-js/library/modules/_wks-define.js","../node_modules/core-js/library/modules/_to-integer.js","../node_modules/core-js/library/modules/_to-length.js","../node_modules/core-js/library/modules/_to-absolute-index.js","../node_modules/core-js/library/modules/_shared-key.js","../node_modules/core-js/library/modules/_object-keys-internal.js","../node_modules/core-js/library/modules/_enum-bug-keys.js","../node_modules/core-js/library/modules/_object-keys.js","../node_modules/core-js/library/modules/_object-gops.js","../node_modules/core-js/library/modules/_is-array.js","../node_modules/core-js/library/modules/_object-dps.js","../node_modules/core-js/library/modules/_html.js","../node_modules/core-js/library/modules/_object-create.js","../node_modules/core-js/library/modules/_object-gopn.js","../node_modules/core-js/library/modules/_object-gopn-ext.js","../node_modules/core-js/library/modules/es6.symbol.js","../node_modules/core-js/library/modules/_enum-keys.js","../node_modules/core-js/library/fn/object/get-own-property-symbols.js","../node_modules/core-js/library/modules/_to-object.js","../node_modules/core-js/library/modules/es6.object.keys.js","../node_modules/core-js/library/fn/object/keys.js","../node_modules/core-js/library/modules/es6.object.define-property.js","../node_modules/core-js/library/fn/object/define-property.js","../node_modules/@babel/runtime-corejs2/helpers/defineProperty.js","../node_modules/@babel/runtime-corejs2/helpers/objectSpread.js","../node_modules/@babel/runtime-corejs2/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime-corejs2/helpers/objectWithoutProperties.js","../node_modules/core-js/library/modules/_iterators.js","../node_modules/core-js/library/modules/_iter-create.js","../node_modules/core-js/library/modules/_string-at.js","../node_modules/core-js/library/modules/_object-gpo.js","../node_modules/core-js/library/modules/_iter-define.js","../node_modules/core-js/library/modules/es6.string.iterator.js","../node_modules/core-js/library/modules/_iter-step.js","../node_modules/core-js/library/modules/es6.array.iterator.js","../node_modules/core-js/library/modules/web.dom.iterable.js","../node_modules/core-js/library/modules/_classof.js","../node_modules/core-js/library/modules/_task.js","../node_modules/core-js/library/modules/_an-instance.js","../node_modules/core-js/library/modules/_iter-call.js","../node_modules/core-js/library/modules/_is-array-iter.js","../node_modules/core-js/library/modules/core.get-iterator-method.js","../node_modules/core-js/library/modules/_for-of.js","../node_modules/core-js/library/modules/_species-constructor.js","../node_modules/core-js/library/modules/_invoke.js","../node_modules/core-js/library/modules/_microtask.js","../node_modules/core-js/library/modules/_new-promise-capability.js","../node_modules/core-js/library/modules/_perform.js","../node_modules/core-js/library/modules/_user-agent.js","../node_modules/core-js/library/modules/_promise-resolve.js","../node_modules/core-js/library/modules/_redefine-all.js","../node_modules/core-js/library/modules/_set-species.js","../node_modules/core-js/library/modules/_iter-detect.js","../node_modules/core-js/library/modules/es6.promise.js","../node_modules/core-js/library/modules/_library.js","../node_modules/core-js/library/modules/es7.promise.finally.js","../node_modules/core-js/library/modules/es7.promise.try.js","../node_modules/core-js/library/fn/promise.js","../node_modules/@babel/runtime-corejs2/helpers/asyncToGenerator.js","../node_modules/rollup-plugin-node-globals/src/global.js","../node_modules/url/node_modules/punycode/punycode.js","../node_modules/url/util.js","../node_modules/querystring/decode.js","../node_modules/querystring/encode.js","../node_modules/querystring/index.js","../node_modules/url/url.js","../src/shims/cheerio-query.js","../node_modules/jquery/dist/jquery.min.js","../node_modules/turndown/lib/turndown.browser.es.js","../src/shims/iconv-lite.js","../src/utils/text/normalize-spaces.js","../node_modules/core-js/library/modules/_string-ws.js","../node_modules/core-js/library/modules/_string-trim.js","../node_modules/core-js/library/modules/_parse-int.js","../node_modules/core-js/library/modules/es6.parse-int.js","../node_modules/core-js/library/fn/parse-int.js","../src/utils/text/constants.js","../src/utils/text/remove-anchor.js","../node_modules/core-js/library/modules/es6.array.is-array.js","../node_modules/core-js/library/fn/array/is-array.js","../node_modules/@babel/runtime-corejs2/helpers/arrayWithHoles.js","../node_modules/core-js/library/modules/core.get-iterator.js","../node_modules/@babel/runtime-corejs2/helpers/iterableToArrayLimit.js","../node_modules/@babel/runtime-corejs2/helpers/nonIterableRest.js","../node_modules/@babel/runtime-corejs2/helpers/slicedToArray.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../node_modules/next-line/index.js","../node_modules/http-headers/index.js","../node_modules/browser-request/index.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../node_modules/core-js/library/modules/_own-keys.js","../node_modules/core-js/library/modules/es6.reflect.own-keys.js","../node_modules/core-js/library/fn/reflect/own-keys.js","../src/utils/dom/constants.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../node_modules/@babel/runtime-corejs2/helpers/arrayWithoutHoles.js","../node_modules/core-js/library/modules/_create-property.js","../node_modules/core-js/library/modules/es6.array.from.js","../node_modules/core-js/library/fn/array/from.js","../node_modules/core-js/library/modules/core.is-iterable.js","../node_modules/@babel/runtime-corejs2/helpers/iterableToArray.js","../node_modules/@babel/runtime-corejs2/helpers/nonIterableSpread.js","../node_modules/@babel/runtime-corejs2/helpers/toConsumableArray.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/set-attrs.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../node_modules/core-js/library/modules/_parse-float.js","../node_modules/core-js/library/modules/es6.parse-float.js","../node_modules/core-js/library/fn/parse-float.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/utils/dom/clean-tags.js","../node_modules/core-js/library/modules/_validate-collection.js","../node_modules/core-js/library/modules/_array-methods.js","../node_modules/core-js/library/modules/_collection.js","../node_modules/core-js/library/modules/_collection-to-json.js","../node_modules/core-js/library/modules/_collection-strong.js","../node_modules/core-js/library/modules/_array-species-constructor.js","../node_modules/core-js/library/modules/_array-species-create.js","../node_modules/core-js/library/modules/es6.set.js","../node_modules/core-js/library/modules/es7.set.to-json.js","../node_modules/core-js/library/modules/_array-from-iterable.js","../node_modules/core-js/library/modules/_set-collection-of.js","../node_modules/core-js/library/modules/es7.set.of.js","../node_modules/core-js/library/modules/_set-collection-from.js","../node_modules/core-js/library/modules/es7.set.from.js","../node_modules/core-js/library/fn/set.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../node_modules/core-js/library/fn/symbol/iterator.js","../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","../node_modules/core-js/library/modules/es7.symbol.observable.js","../node_modules/core-js/library/fn/symbol/index.js","../node_modules/@babel/runtime-corejs2/helpers/typeof.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/within-comment.js","../src/utils/dom/strip-tags.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/range.js","../node_modules/core-js/library/modules/_object-assign.js","../node_modules/core-js/library/modules/es6.object.assign.js","../node_modules/core-js/library/fn/object/assign.js","../src/utils/merge-supported-domains.js","../src/extractors/add-extractor.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/genius.com/index.js","../src/extractors/custom/wired.jp/index.js","../src/extractors/custom/www.abendblatt.de/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/custom/www.fortinet.com/index.js","../src/extractors/custom/www.fastcompany.com/index.js","../src/extractors/custom/blisterreview.com/index.js","../src/extractors/custom/news.mynavi.jp/index.js","../src/extractors/custom/clinicaltrials.gov/index.js","../src/extractors/custom/github.com/index.js","../src/extractors/custom/www.reddit.com/index.js","../src/extractors/custom/otrs.com/index.js","../src/extractors/custom/www.ossnews.jp/index.js","../src/extractors/custom/buzzap.jp/index.js","../src/extractors/custom/www.asahi.com/index.js","../src/extractors/custom/www.sanwa.co.jp/index.js","../src/extractors/custom/www.elecom.co.jp/index.js","../src/extractors/custom/scan.netsecurity.ne.jp/index.js","../src/extractors/custom/jvndb.jvn.jp/index.js","../src/extractors/custom/www.jnsa.org/index.js","../src/extractors/custom/phpspot.org/index.js","../src/extractors/custom/www.infoq.com/index.js","../src/extractors/custom/www.moongift.jp/index.js","../src/extractors/custom/www.itmedia.co.jp/index.js","../src/extractors/custom/www.publickey1.jp/index.js","../src/extractors/custom/takagi-hiromitsu.jp/index.js","../src/extractors/custom/bookwalker.jp/index.js","../src/extractors/custom/www.yomiuri.co.jp/index.js","../src/extractors/custom/japan.cnet.com/index.js","../src/extractors/custom/deadline.com/index.js","../src/extractors/custom/www.gizmodo.jp/index.js","../src/extractors/custom/getnews.jp/index.js","../src/extractors/custom/www.lifehacker.jp/index.js","../src/extractors/custom/sect.iij.ad.jp/index.js","../src/extractors/custom/www.oreilly.co.jp/index.js","../src/extractors/custom/www.ipa.go.jp/index.js","../src/extractors/custom/weekly.ascii.jp/index.js","../src/extractors/custom/techlog.iij.ad.jp/index.js","../src/extractors/custom/japan.zdnet.com/index.js","../src/extractors/custom/www.rbbtoday.com/index.js","../src/extractors/custom/www.lemonde.fr/index.js","../src/extractors/custom/www.phoronix.com/index.js","../src/extractors/custom/pitchfork.com/index.js","../src/extractors/custom/biorxiv.org/index.js","../src/extractors/custom/epaper.zeit.de/index.js","../src/extractors/custom/www.ladbible.com/index.js","../src/extractors/custom/timesofindia.indiatimes.com/index.js","../src/extractors/custom/ma.ttias.be/index.js","../src/extractors/custom/pastebin.com/index.js","../src/extractors/custom/www.gruene.de/index.js","../src/extractors/custom/www.engadget.com/index.js","../src/extractors/custom/arstechnica.com/index.js","../src/extractors/custom/www.ndtv.com/index.js","../src/extractors/custom/www.spektrum.de/index.js","../src/extractors/custom/postlight.com/index.js","../src/extractors/custom/www.investmentexecutive.com/index.js","../src/extractors/custom/www.cbc.ca/index.js","../src/extractors/all.js","../node_modules/string-direction/index.js","../src/cleaners/constants.js","../src/cleaners/author.js","../node_modules/valid-url/index.js","../src/cleaners/lead-image-url.js","../node_modules/moment/moment.js","../node_modules/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js","../node_modules/moment-parseformat/lib/parseformat.js","../node_modules/moment-parseformat/index.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/remove-empty.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-headers.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../node_modules/lodash/lodash.js","../node_modules/wuzzy/index.js","../src/cleaners/index.js","../src/cleaners/dek.js","../src/extractors/generic/content/extract-best-node.js","../src/utils/dom/strip-unlikely-candidates.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/utils/text/extract-from-url.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../node_modules/heap/lib/heap.js","../node_modules/difflib/lib/difflib.js","../node_modules/difflib/index.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/utils/dom/is-wordpress.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/utils/text/page-num-from-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../node_modules/ellipsize/index.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/generic/dek/extractor.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js","../src/utils/validate-url.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() {\n return this || (typeof self === \"object\" && self);\n})() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = require(\"./runtime\");\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n","module.exports = require(\"regenerator-runtime\");\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","var core = module.exports = { version: '2.6.2' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","require('../../modules/es6.object.get-own-property-descriptor');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key) {\n return $Object.getOwnPropertyDescriptor(it, key);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","module.exports = require('./_hide');\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","require('../../modules/es6.symbol');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertySymbols;\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n","var _Object$defineProperty = require(\"../core-js/object/define-property\");\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","var _Object$getOwnPropertyDescriptor = require(\"../core-js/object/get-own-property-descriptor\");\n\nvar _Object$getOwnPropertySymbols = require(\"../core-js/object/get-own-property-symbols\");\n\nvar _Object$keys = require(\"../core-js/object/keys\");\n\nvar defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n var ownKeys = _Object$keys(source);\n\n if (typeof _Object$getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(_Object$getOwnPropertySymbols(source).filter(function (sym) {\n return _Object$getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread;","var _Object$keys = require(\"../core-js/object/keys\");\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n\n var sourceKeys = _Object$keys(source);\n\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","var _Object$getOwnPropertySymbols = require(\"../core-js/object/get-own-property-symbols\");\n\nvar objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (_Object$getOwnPropertySymbols) {\n var sourceSymbolKeys = _Object$getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = true;\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","var _Promise = require(\"../core-js/promise\");\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n _Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new _Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","// This module attempts to square cheerio with jquery\n// so that node-specific quirks/features of cheerio\n// will also work in the browser. This mostly involves\n// shimming a few functions and rewriting the jquery\n// constructor so it sandboxes most of its operations\n// and doesn't mutate existing dom elements in the page.\n\nimport jQuery from 'jquery';\n\nconst PARSER_CLASS = 'mercury-parsing-container';\nlet PARSING_NODE;\n\njQuery.noConflict();\nconst $ = (selector, context, rootjQuery, contextOverride = true) => {\n if (contextOverride) {\n if (context && typeof context === 'string') {\n context = PARSING_NODE.find(context);\n } else if (!context) {\n context = PARSING_NODE;\n }\n }\n\n return new jQuery.fn.init(selector, context, rootjQuery); // eslint-disable-line new-cap\n};\n\n// eslint-disable-next-line no-multi-assign\n$.fn = $.prototype = jQuery.fn;\njQuery.extend($, jQuery); // copy's trim, extend etc to $\n\nconst removeUnusedTags = $node => {\n // remove scripts and stylesheets\n $node.find('script, style, link[rel=\"stylesheet\"]').remove();\n\n return $node;\n};\n\n$.cloneHtml = () => {\n const html = removeUnusedTags($('html', null, null, false).clone());\n\n return html\n .children()\n .wrap('<div />')\n .wrap('<div />');\n};\n\n$.root = () => $('*').first();\n\n$.browser = true;\n\nconst isContainer = $node => {\n const el = $node.get(0);\n if (el && el.tagName) {\n return el.tagName.toLowerCase() === 'container';\n }\n\n return false;\n};\n\n$.html = $node => {\n if ($node) {\n // we never want to return a parsing container, only its children\n if (isContainer($node) || isContainer($node.children('container'))) {\n return $node.children('container').html() || $node.html();\n }\n\n return $('<div>')\n .append($node.eq(0).clone())\n .html();\n }\n\n const $body = removeUnusedTags($('body', null, null, false).clone());\n const $head = removeUnusedTags($('head', null, null, false).clone());\n\n if (PARSING_NODE && PARSING_NODE.length > 0) {\n return PARSING_NODE.children().html();\n }\n\n const html = $('<container />')\n .append($(`<container>${$head.html()}</container>`))\n .append($(`<container>${$body.html()}</container>`))\n .wrap('<container />')\n .parent()\n .html();\n\n return html;\n};\n\n// eslint-disable-next-line no-unused-vars\n$.load = (html, opts = {}, returnHtml = false) => {\n if (!html) {\n html = $.cloneHtml();\n } else {\n html = $('<container />').html(html);\n }\n\n PARSING_NODE =\n PARSING_NODE || $(`<div class=\"${PARSER_CLASS}\" style=\"display:none;\" />`);\n\n // Strip scripts\n html = removeUnusedTags(html);\n\n // Remove comments\n html\n .find('*')\n .contents()\n .each(function() {\n // eslint-disable-next-line no-undef\n if (this.nodeType === Node.COMMENT_NODE) {\n $(this).remove();\n }\n });\n PARSING_NODE.html(html);\n\n if (returnHtml) return { $, html: html.html() };\n\n return $;\n};\n\nexport default $;\n","/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(C,e){\"use strict\";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType&&\"function\"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement(\"script\");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[o.call(e)]||\"object\":typeof e}var f=\"3.6.0\",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&\"length\"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),\"function\"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S=\"sizzle\"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+M+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",F=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",B=new RegExp(M+\"+\",\"g\"),$=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),U=new RegExp(M+\"|>\"),X=new RegExp(F),V=new RegExp(\"^\"+I+\"$\"),G={ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+F),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+M+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),ne=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+\" \"]&&(!v||!v.test(t))&&(1!==p||\"object\"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute(\"id\"))?s=s.replace(re,ie):e.setAttribute(\"id\",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?\"#\"+s:\":scope\")+\" \"+xe(l[o]);c=l.join(\",\")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute(\"id\")}}}return g(t.replace($,\"$1\"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split(\"|\"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return(\"input\"===t||\"button\"===t)&&e.type===n}}function ge(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||\"HTML\")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",oe,!1):n.attachEvent&&n.attachEvent(\"onunload\",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement(\"div\")),\"undefined\"!=typeof e.querySelectorAll&&!e.querySelectorAll(\":scope fieldset div\").length}),d.attributes=ce(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML=\"<a id='\"+S+\"'></a><select id='\"+S+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+M+\"*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~=\"+S+\"-]\").length||v.push(\"~=\"),(t=C.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||v.push(\"\\\\[\"+M+\"*name\"+M+\"*=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+S+\"+*\").length||v.push(\".#.+[+~]\"),e.querySelectorAll(\"\\\\\\f\"),v.push(\"[\\\\r\\\\n\\\\f]\")}),ce(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=C.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,\"*\"),c.call(e,\"[s!='']:x\"),s.push(\"!=\",F)}),v=v.length&&new RegExp(v.join(\"|\")),s=s.length&&new RegExp(s.join(\"|\")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+\" \"]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&m(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(B,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[S]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,\"$1\"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace($,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split(\"\").sort(j).join(\"\")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[\":\"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,\"parentNode\")},parentsUntil:function(e,t,n){return h(e,\"parentNode\",n)},next:function(e){return O(e,\"nextSibling\")},prev:function(e){return O(e,\"previousSibling\")},nextAll:function(e){return h(e,\"nextSibling\")},prevAll:function(e){return h(e,\"previousSibling\")},nextUntil:function(e,t,n){return h(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return h(e,\"previousSibling\",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,\"template\")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",S.Callbacks(\"memory\"),S.Callbacks(\"memory\"),2],[\"resolve\",\"done\",S.Callbacks(\"once memory\"),S.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",S.Callbacks(\"once memory\"),S.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),S.ready()}S.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,\"ms-\").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(K,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks(\"once memory\").add(function(){Y.remove(e,[t+\"queue\",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Y.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,te=new RegExp(\"^(?:([+-])=|)(\"+ee+\")([a-z%]*)$\",\"i\"),ne=[\"Top\",\"Right\",\"Bottom\",\"Left\"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&ie(e)&&\"none\"===S.css(e,\"display\")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,\"\")},u=s(),l=n&&n[3]||(S.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(S.cssNumber[t]||\"px\"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Y.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ue[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Y.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(fe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),fe.setAttribute(\"checked\",\"checked\"),fe.setAttribute(\"name\",\"t\"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML=\"<textarea>x</textarea>\",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML=\"<option></option>\",y.option=!!ce.lastChild;var ge={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ve(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],\"globalEval\",!t||Y.get(t[n],\"globalEval\"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}var be=/^([^.]*)(?:\\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==(\"focus\"===t)}function Ee(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(P)||[\"\"]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(P)||[\"\"]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,\"events\")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Se(t,\"click\",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Se(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Y.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ne=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function je(e,t){return A(e,\"table\")&&A(11!==t.nodeType?t:t.firstChild,\"tr\")&&S(e).children(\"tbody\")[0]||e}function De(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function qe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,\"handle events\"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,\"script\"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Y.access(u,\"globalEval\")&&S.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")},l):b(u.textContent.replace(Ne,\"\"),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp(\"^(\"+ee+\")(?!px)[a-z%]+$\",\"i\"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join(\"|\"),\"i\");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",l.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n=\"1%\"!==e.top,s=12===t(e.marginLeft),l.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),l.style.position=\"absolute\",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement(\"div\"),l=E.createElement(\"div\");l.style&&(l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement(\"table\"),t=E.createElement(\"tr\"),n=E.createElement(\"div\"),e.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",t.style.cssText=\"border:1px solid\",t.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=[\"Webkit\",\"Moz\",\"ms\"],$e=E.createElement(\"div\").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ge={letterSpacing:\"0\",fontWeight:\"400\"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Qe(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?(\"content\"===n&&(u-=S.css(e,\"padding\"+ne[a],!0,i)),\"margin\"!==n&&(u-=S.css(e,\"border\"+ne[a]+\"Width\",!0,i))):(u+=S.css(e,\"padding\"+ne[a],!0,i),\"padding\"!==n?u+=S.css(e,\"border\"+ne[a]+\"Width\",!0,i):s+=S.css(e,\"border\"+ne[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===S.css(e,\"boxSizing\",!1,r),o=i,a=We(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,\"tr\")||\"auto\"===a||!parseFloat(a)&&\"inline\"===S.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===S.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),\"normal\"===i&&t in Ge&&(i=Ge[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each([\"height\",\"width\"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===S.css(e,\"boxSizing\",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,\"border\",!1,i)-.5)),s&&(r=te.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,\"marginLeft\"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),S.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?\"\":\"px\")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=ne[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,\"fxshow\");for(r in n.queue||(null==(a=S._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,\"display\")),\"none\"===(c=S.css(e,\"display\"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,\"display\"),le([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===S.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Y.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,\"fxshow\"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&\"object\"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Y.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st(\"show\"),slideUp:st(\"hide\"),slideToggle:st(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement(\"input\"),nt=E.createElement(\"select\").appendChild(E.createElement(\"option\")),tt.type=\"checkbox\",y.checkOn=\"\"!==tt.value,y.optSelected=nt.selected,(tt=E.createElement(\"input\")).value=\"t\",tt.type=\"radio\",y.radioValue=\"t\"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(\" \")}function gt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function vt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,\"tabindex\");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&\" \"+ht(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=ht(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&\" \"+ht(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=ht(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=gt(this))&&Y.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Y.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+ht(gt(n))+\" \").indexOf(t))return!0;return!1}});var yt=/\\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?\"\":e+\"\"})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(yt,\"\"):null==e?\"\":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,\"value\");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each([\"radio\",\"checkbox\"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[S.expando]?e:new S.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,\"events\")||Object.create(null))[e.type]&&Y.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\\?/;S.parseXML=function(e){var t,n;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){}return n=t&&t.getElementsByTagName(\"parsererror\")[0],t&&!n||S.error(\"Invalid XML: \"+(n?S.map(n.childNodes,function(e){return e.textContent}).join(\"\\n\"):e)),t};var Ct=/\\[\\]$/,Et=/\\r?\\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)At(n+\"[\"+t+\"]\",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join(\"&\")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,\"elements\");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(\":disabled\")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,\"\\r\\n\")}}):{name:t.name,value:n.replace(Et,\"\\r\\n\")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\\/\\//,Ot={},Pt={},Rt=\"*/\".concat(\"*\"),Mt=E.createElement(\"a\");function It(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Rt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+\"\").replace(Ht,bt.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(P)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+\"//\"+Mt.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Nt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(Tt.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,\"$1\"),o=(Tt.test(f)?\"&\":\"?\")+\"_=\"+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",S.lastModified[f]),S.etag[f]&&T.setRequestHeader(\"If-None-Match\",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+Rt+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray(\"script\",v.dataTypes)&&S.inArray(\"json\",v.dataTypes)<0&&(v.converters[\"text script\"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(S.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(S.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--S.active||S.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,\"json\")},getScript:function(e,t){return S.get(e,void 0,t,\"script\")}}),S.each([\"get\",\"post\"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&\"withCredentials\"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),S.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\\?(?=&|$)|\\?\\?/;S.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=zt.pop()||S.expando+\"_\"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ut.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,\"$1\"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||S.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),\"script\"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&S.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?S(\"<div>\").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,\"position\"),c=S(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=S.css(e,\"top\"),u=S.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===S.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===S.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,\"borderTopWidth\",!0),i.left+=S.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-S.css(r,\"marginTop\",!0),left:t.left-i.left-S.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===S.css(e,\"position\"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each([\"top\",\"left\"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+\"px\":t})}),S.each({Height:\"height\",Width:\"width\"},function(a,s){S.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?\"\":(e+\"\").replace(Xt,\"\")},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},\"undefined\"==typeof e&&(C.jQuery=C.$=S),S});\n","function extend (destination) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (source.hasOwnProperty(key)) destination[key] = source[key];\n }\n }\n return destination\n}\n\nfunction repeat (character, count) {\n return Array(count + 1).join(character)\n}\n\nfunction trimLeadingNewlines (string) {\n return string.replace(/^\\n*/, '')\n}\n\nfunction trimTrailingNewlines (string) {\n // avoid match-at-end regexp bottleneck, see #370\n var indexEnd = string.length;\n while (indexEnd > 0 && string[indexEnd - 1] === '\\n') indexEnd--;\n return string.substring(0, indexEnd)\n}\n\nvar blockElements = [\n 'ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS',\n 'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE',\n 'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER',\n 'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES',\n 'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD',\n 'TFOOT', 'TH', 'THEAD', 'TR', 'UL'\n];\n\nfunction isBlock (node) {\n return is(node, blockElements)\n}\n\nvar voidElements = [\n 'AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT',\n 'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'\n];\n\nfunction isVoid (node) {\n return is(node, voidElements)\n}\n\nfunction hasVoid (node) {\n return has(node, voidElements)\n}\n\nvar meaningfulWhenBlankElements = [\n 'A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT',\n 'AUDIO', 'VIDEO'\n];\n\nfunction isMeaningfulWhenBlank (node) {\n return is(node, meaningfulWhenBlankElements)\n}\n\nfunction hasMeaningfulWhenBlank (node) {\n return has(node, meaningfulWhenBlankElements)\n}\n\nfunction is (node, tagNames) {\n return tagNames.indexOf(node.nodeName) >= 0\n}\n\nfunction has (node, tagNames) {\n return (\n node.getElementsByTagName &&\n tagNames.some(function (tagName) {\n return node.getElementsByTagName(tagName).length\n })\n )\n}\n\nvar rules = {};\n\nrules.paragraph = {\n filter: 'p',\n\n replacement: function (content) {\n return '\\n\\n' + content + '\\n\\n'\n }\n};\n\nrules.lineBreak = {\n filter: 'br',\n\n replacement: function (content, node, options) {\n return options.br + '\\n'\n }\n};\n\nrules.heading = {\n filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n replacement: function (content, node, options) {\n var hLevel = Number(node.nodeName.charAt(1));\n\n if (options.headingStyle === 'setext' && hLevel < 3) {\n var underline = repeat((hLevel === 1 ? '=' : '-'), content.length);\n return (\n '\\n\\n' + content + '\\n' + underline + '\\n\\n'\n )\n } else {\n return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n'\n }\n }\n};\n\nrules.blockquote = {\n filter: 'blockquote',\n\n replacement: function (content) {\n content = content.replace(/^\\n+|\\n+$/g, '');\n content = content.replace(/^/gm, '> ');\n return '\\n\\n' + content + '\\n\\n'\n }\n};\n\nrules.list = {\n filter: ['ul', 'ol'],\n\n replacement: function (content, node) {\n var parent = node.parentNode;\n if (parent.nodeName === 'LI' && parent.lastElementChild === node) {\n return '\\n' + content\n } else {\n return '\\n\\n' + content + '\\n\\n'\n }\n }\n};\n\nrules.listItem = {\n filter: 'li',\n\n replacement: function (content, node, options) {\n content = content\n .replace(/^\\n+/, '') // remove leading newlines\n .replace(/\\n+$/, '\\n') // replace trailing newlines with just a single one\n .replace(/\\n/gm, '\\n '); // indent\n var prefix = options.bulletListMarker + ' ';\n var parent = node.parentNode;\n if (parent.nodeName === 'OL') {\n var start = parent.getAttribute('start');\n var index = Array.prototype.indexOf.call(parent.children, node);\n prefix = (start ? Number(start) + index : index + 1) + '. ';\n }\n return (\n prefix + content + (node.nextSibling && !/\\n$/.test(content) ? '\\n' : '')\n )\n }\n};\n\nrules.indentedCodeBlock = {\n filter: function (node, options) {\n return (\n options.codeBlockStyle === 'indented' &&\n node.nodeName === 'PRE' &&\n node.firstChild &&\n node.firstChild.nodeName === 'CODE'\n )\n },\n\n replacement: function (content, node, options) {\n return (\n '\\n\\n ' +\n node.firstChild.textContent.replace(/\\n/g, '\\n ') +\n '\\n\\n'\n )\n }\n};\n\nrules.fencedCodeBlock = {\n filter: function (node, options) {\n return (\n options.codeBlockStyle === 'fenced' &&\n node.nodeName === 'PRE' &&\n node.firstChild &&\n node.firstChild.nodeName === 'CODE'\n )\n },\n\n replacement: function (content, node, options) {\n var className = node.firstChild.getAttribute('class') || '';\n var language = (className.match(/language-(\\S+)/) || [null, ''])[1];\n var code = node.firstChild.textContent;\n\n var fenceChar = options.fence.charAt(0);\n var fenceSize = 3;\n var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n\n var match;\n while ((match = fenceInCodeRegex.exec(code))) {\n if (match[0].length >= fenceSize) {\n fenceSize = match[0].length + 1;\n }\n }\n\n var fence = repeat(fenceChar, fenceSize);\n\n return (\n '\\n\\n' + fence + language + '\\n' +\n code.replace(/\\n$/, '') +\n '\\n' + fence + '\\n\\n'\n )\n }\n};\n\nrules.horizontalRule = {\n filter: 'hr',\n\n replacement: function (content, node, options) {\n return '\\n\\n' + options.hr + '\\n\\n'\n }\n};\n\nrules.inlineLink = {\n filter: function (node, options) {\n return (\n options.linkStyle === 'inlined' &&\n node.nodeName === 'A' &&\n node.getAttribute('href')\n )\n },\n\n replacement: function (content, node) {\n var href = node.getAttribute('href');\n var title = cleanAttribute(node.getAttribute('title'));\n if (title) title = ' \"' + title + '\"';\n return '[' + content + '](' + href + title + ')'\n }\n};\n\nrules.referenceLink = {\n filter: function (node, options) {\n return (\n options.linkStyle === 'referenced' &&\n node.nodeName === 'A' &&\n node.getAttribute('href')\n )\n },\n\n replacement: function (content, node, options) {\n var href = node.getAttribute('href');\n var title = cleanAttribute(node.getAttribute('title'));\n if (title) title = ' \"' + title + '\"';\n var replacement;\n var reference;\n\n switch (options.linkReferenceStyle) {\n case 'collapsed':\n replacement = '[' + content + '][]';\n reference = '[' + content + ']: ' + href + title;\n break\n case 'shortcut':\n replacement = '[' + content + ']';\n reference = '[' + content + ']: ' + href + title;\n break\n default:\n var id = this.references.length + 1;\n replacement = '[' + content + '][' + id + ']';\n reference = '[' + id + ']: ' + href + title;\n }\n\n this.references.push(reference);\n return replacement\n },\n\n references: [],\n\n append: function (options) {\n var references = '';\n if (this.references.length) {\n references = '\\n\\n' + this.references.join('\\n') + '\\n\\n';\n this.references = []; // Reset references\n }\n return references\n }\n};\n\nrules.emphasis = {\n filter: ['em', 'i'],\n\n replacement: function (content, node, options) {\n if (!content.trim()) return ''\n return options.emDelimiter + content + options.emDelimiter\n }\n};\n\nrules.strong = {\n filter: ['strong', 'b'],\n\n replacement: function (content, node, options) {\n if (!content.trim()) return ''\n return options.strongDelimiter + content + options.strongDelimiter\n }\n};\n\nrules.code = {\n filter: function (node) {\n var hasSiblings = node.previousSibling || node.nextSibling;\n var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n\n return node.nodeName === 'CODE' && !isCodeBlock\n },\n\n replacement: function (content) {\n if (!content) return ''\n content = content.replace(/\\r?\\n|\\r/g, ' ');\n\n var extraSpace = /^`|^ .*?[^ ].* $|`$/.test(content) ? ' ' : '';\n var delimiter = '`';\n var matches = content.match(/`+/gm) || [];\n while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n\n return delimiter + extraSpace + content + extraSpace + delimiter\n }\n};\n\nrules.image = {\n filter: 'img',\n\n replacement: function (content, node) {\n var alt = cleanAttribute(node.getAttribute('alt'));\n var src = node.getAttribute('src') || '';\n var title = cleanAttribute(node.getAttribute('title'));\n var titlePart = title ? ' \"' + title + '\"' : '';\n return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''\n }\n};\n\nfunction cleanAttribute (attribute) {\n return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : ''\n}\n\n/**\n * Manages a collection of rules used to convert HTML to Markdown\n */\n\nfunction Rules (options) {\n this.options = options;\n this._keep = [];\n this._remove = [];\n\n this.blankRule = {\n replacement: options.blankReplacement\n };\n\n this.keepReplacement = options.keepReplacement;\n\n this.defaultRule = {\n replacement: options.defaultReplacement\n };\n\n this.array = [];\n for (var key in options.rules) this.array.push(options.rules[key]);\n}\n\nRules.prototype = {\n add: function (key, rule) {\n this.array.unshift(rule);\n },\n\n keep: function (filter) {\n this._keep.unshift({\n filter: filter,\n replacement: this.keepReplacement\n });\n },\n\n remove: function (filter) {\n this._remove.unshift({\n filter: filter,\n replacement: function () {\n return ''\n }\n });\n },\n\n forNode: function (node) {\n if (node.isBlank) return this.blankRule\n var rule;\n\n if ((rule = findRule(this.array, node, this.options))) return rule\n if ((rule = findRule(this._keep, node, this.options))) return rule\n if ((rule = findRule(this._remove, node, this.options))) return rule\n\n return this.defaultRule\n },\n\n forEach: function (fn) {\n for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\n }\n};\n\nfunction findRule (rules, node, options) {\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (filterValue(rule, node, options)) return rule\n }\n return void 0\n}\n\nfunction filterValue (rule, node, options) {\n var filter = rule.filter;\n if (typeof filter === 'string') {\n if (filter === node.nodeName.toLowerCase()) return true\n } else if (Array.isArray(filter)) {\n if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true\n } else if (typeof filter === 'function') {\n if (filter.call(rule, node, options)) return true\n } else {\n throw new TypeError('`filter` needs to be a string, array, or function')\n }\n}\n\n/**\n * The collapseWhitespace function is adapted from collapse-whitespace\n * by Luc Thevenard.\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014 Luc Thevenard <lucthevenard@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * collapseWhitespace(options) removes extraneous whitespace from an the given element.\n *\n * @param {Object} options\n */\nfunction collapseWhitespace (options) {\n var element = options.element;\n var isBlock = options.isBlock;\n var isVoid = options.isVoid;\n var isPre = options.isPre || function (node) {\n return node.nodeName === 'PRE'\n };\n\n if (!element.firstChild || isPre(element)) return\n\n var prevText = null;\n var keepLeadingWs = false;\n\n var prev = null;\n var node = next(prev, element, isPre);\n\n while (node !== element) {\n if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n\n if ((!prevText || / $/.test(prevText.data)) &&\n !keepLeadingWs && text[0] === ' ') {\n text = text.substr(1);\n }\n\n // `text` might be empty at this point.\n if (!text) {\n node = remove(node);\n continue\n }\n\n node.data = text;\n\n prevText = node;\n } else if (node.nodeType === 1) { // Node.ELEMENT_NODE\n if (isBlock(node) || node.nodeName === 'BR') {\n if (prevText) {\n prevText.data = prevText.data.replace(/ $/, '');\n }\n\n prevText = null;\n keepLeadingWs = false;\n } else if (isVoid(node) || isPre(node)) {\n // Avoid trimming space around non-block, non-BR void elements and inline PRE.\n prevText = null;\n keepLeadingWs = true;\n } else if (prevText) {\n // Drop protection if set previously.\n keepLeadingWs = false;\n }\n } else {\n node = remove(node);\n continue\n }\n\n var nextNode = next(prev, node, isPre);\n prev = node;\n node = nextNode;\n }\n\n if (prevText) {\n prevText.data = prevText.data.replace(/ $/, '');\n if (!prevText.data) {\n remove(prevText);\n }\n }\n}\n\n/**\n * remove(node) removes the given node from the DOM and returns the\n * next node in the sequence.\n *\n * @param {Node} node\n * @return {Node} node\n */\nfunction remove (node) {\n var next = node.nextSibling || node.parentNode;\n\n node.parentNode.removeChild(node);\n\n return next\n}\n\n/**\n * next(prev, current, isPre) returns the next node in the sequence, given the\n * current and previous nodes.\n *\n * @param {Node} prev\n * @param {Node} current\n * @param {Function} isPre\n * @return {Node}\n */\nfunction next (prev, current, isPre) {\n if ((prev && prev.parentNode === current) || isPre(current)) {\n return current.nextSibling || current.parentNode\n }\n\n return current.firstChild || current.nextSibling || current.parentNode\n}\n\n/*\n * Set up window for Node.js\n */\n\nvar root = (typeof window !== 'undefined' ? window : {});\n\n/*\n * Parsing HTML strings\n */\n\nfunction canParseHTMLNatively () {\n var Parser = root.DOMParser;\n var canParse = false;\n\n // Adapted from https://gist.github.com/1129031\n // Firefox/Opera/IE throw errors on unsupported types\n try {\n // WebKit returns null on unsupported types\n if (new Parser().parseFromString('', 'text/html')) {\n canParse = true;\n }\n } catch (e) {}\n\n return canParse\n}\n\nfunction createHTMLParser () {\n var Parser = function () {};\n\n {\n if (shouldUseActiveX()) {\n Parser.prototype.parseFromString = function (string) {\n var doc = new window.ActiveXObject('htmlfile');\n doc.designMode = 'on'; // disable on-page scripts\n doc.open();\n doc.write(string);\n doc.close();\n return doc\n };\n } else {\n Parser.prototype.parseFromString = function (string) {\n var doc = document.implementation.createHTMLDocument('');\n doc.open();\n doc.write(string);\n doc.close();\n return doc\n };\n }\n }\n return Parser\n}\n\nfunction shouldUseActiveX () {\n var useActiveX = false;\n try {\n document.implementation.createHTMLDocument('').open();\n } catch (e) {\n if (window.ActiveXObject) useActiveX = true;\n }\n return useActiveX\n}\n\nvar HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser();\n\nfunction RootNode (input, options) {\n var root;\n if (typeof input === 'string') {\n var doc = htmlParser().parseFromString(\n // DOM parsers arrange elements in the <head> and <body>.\n // Wrapping in a custom element ensures elements are reliably arranged in\n // a single element.\n '<x-turndown id=\"turndown-root\">' + input + '</x-turndown>',\n 'text/html'\n );\n root = doc.getElementById('turndown-root');\n } else {\n root = input.cloneNode(true);\n }\n collapseWhitespace({\n element: root,\n isBlock: isBlock,\n isVoid: isVoid,\n isPre: options.preformattedCode ? isPreOrCode : null\n });\n\n return root\n}\n\nvar _htmlParser;\nfunction htmlParser () {\n _htmlParser = _htmlParser || new HTMLParser();\n return _htmlParser\n}\n\nfunction isPreOrCode (node) {\n return node.nodeName === 'PRE' || node.nodeName === 'CODE'\n}\n\nfunction Node (node, options) {\n node.isBlock = isBlock(node);\n node.isCode = node.nodeName === 'CODE' || node.parentNode.isCode;\n node.isBlank = isBlank(node);\n node.flankingWhitespace = flankingWhitespace(node, options);\n return node\n}\n\nfunction isBlank (node) {\n return (\n !isVoid(node) &&\n !isMeaningfulWhenBlank(node) &&\n /^\\s*$/i.test(node.textContent) &&\n !hasVoid(node) &&\n !hasMeaningfulWhenBlank(node)\n )\n}\n\nfunction flankingWhitespace (node, options) {\n if (node.isBlock || (options.preformattedCode && node.isCode)) {\n return { leading: '', trailing: '' }\n }\n\n var edges = edgeWhitespace(node.textContent);\n\n // abandon leading ASCII WS if left-flanked by ASCII WS\n if (edges.leadingAscii && isFlankedByWhitespace('left', node, options)) {\n edges.leading = edges.leadingNonAscii;\n }\n\n // abandon trailing ASCII WS if right-flanked by ASCII WS\n if (edges.trailingAscii && isFlankedByWhitespace('right', node, options)) {\n edges.trailing = edges.trailingNonAscii;\n }\n\n return { leading: edges.leading, trailing: edges.trailing }\n}\n\nfunction edgeWhitespace (string) {\n var m = string.match(/^(([ \\t\\r\\n]*)(\\s*))[\\s\\S]*?((\\s*?)([ \\t\\r\\n]*))$/);\n return {\n leading: m[1], // whole string for whitespace-only strings\n leadingAscii: m[2],\n leadingNonAscii: m[3],\n trailing: m[4], // empty for whitespace-only strings\n trailingNonAscii: m[5],\n trailingAscii: m[6]\n }\n}\n\nfunction isFlankedByWhitespace (side, node, options) {\n var sibling;\n var regExp;\n var isFlanked;\n\n if (side === 'left') {\n sibling = node.previousSibling;\n regExp = / $/;\n } else {\n sibling = node.nextSibling;\n regExp = /^ /;\n }\n\n if (sibling) {\n if (sibling.nodeType === 3) {\n isFlanked = regExp.test(sibling.nodeValue);\n } else if (options.preformattedCode && sibling.nodeName === 'CODE') {\n isFlanked = false;\n } else if (sibling.nodeType === 1 && !isBlock(sibling)) {\n isFlanked = regExp.test(sibling.textContent);\n }\n }\n return isFlanked\n}\n\nvar reduce = Array.prototype.reduce;\nvar escapes = [\n [/\\\\/g, '\\\\\\\\'],\n [/\\*/g, '\\\\*'],\n [/^-/g, '\\\\-'],\n [/^\\+ /g, '\\\\+ '],\n [/^(=+)/g, '\\\\$1'],\n [/^(#{1,6}) /g, '\\\\$1 '],\n [/`/g, '\\\\`'],\n [/^~~~/g, '\\\\~~~'],\n [/\\[/g, '\\\\['],\n [/\\]/g, '\\\\]'],\n [/^>/g, '\\\\>'],\n [/_/g, '\\\\_'],\n [/^(\\d+)\\. /g, '$1\\\\. ']\n];\n\nfunction TurndownService (options) {\n if (!(this instanceof TurndownService)) return new TurndownService(options)\n\n var defaults = {\n rules: rules,\n headingStyle: 'setext',\n hr: '* * *',\n bulletListMarker: '*',\n codeBlockStyle: 'indented',\n fence: '```',\n emDelimiter: '_',\n strongDelimiter: '**',\n linkStyle: 'inlined',\n linkReferenceStyle: 'full',\n br: ' ',\n preformattedCode: false,\n blankReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' : ''\n },\n keepReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' + node.outerHTML + '\\n\\n' : node.outerHTML\n },\n defaultReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' + content + '\\n\\n' : content\n }\n };\n this.options = extend({}, defaults, options);\n this.rules = new Rules(this.options);\n}\n\nTurndownService.prototype = {\n /**\n * The entry point for converting a string or DOM node to Markdown\n * @public\n * @param {String|HTMLElement} input The string or DOM node to convert\n * @returns A Markdown representation of the input\n * @type String\n */\n\n turndown: function (input) {\n if (!canConvert(input)) {\n throw new TypeError(\n input + ' is not a string, or an element/document/fragment node.'\n )\n }\n\n if (input === '') return ''\n\n var output = process.call(this, new RootNode(input, this.options));\n return postProcess.call(this, output)\n },\n\n /**\n * Add one or more plugins\n * @public\n * @param {Function|Array} plugin The plugin or array of plugins to add\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n use: function (plugin) {\n if (Array.isArray(plugin)) {\n for (var i = 0; i < plugin.length; i++) this.use(plugin[i]);\n } else if (typeof plugin === 'function') {\n plugin(this);\n } else {\n throw new TypeError('plugin must be a Function or an Array of Functions')\n }\n return this\n },\n\n /**\n * Adds a rule\n * @public\n * @param {String} key The unique key of the rule\n * @param {Object} rule The rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n addRule: function (key, rule) {\n this.rules.add(key, rule);\n return this\n },\n\n /**\n * Keep a node (as HTML) that matches the filter\n * @public\n * @param {String|Array|Function} filter The unique key of the rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n keep: function (filter) {\n this.rules.keep(filter);\n return this\n },\n\n /**\n * Remove a node that matches the filter\n * @public\n * @param {String|Array|Function} filter The unique key of the rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n remove: function (filter) {\n this.rules.remove(filter);\n return this\n },\n\n /**\n * Escapes Markdown syntax\n * @public\n * @param {String} string The string to escape\n * @returns A string with Markdown syntax escaped\n * @type String\n */\n\n escape: function (string) {\n return escapes.reduce(function (accumulator, escape) {\n return accumulator.replace(escape[0], escape[1])\n }, string)\n }\n};\n\n/**\n * Reduces a DOM node down to its Markdown string equivalent\n * @private\n * @param {HTMLElement} parentNode The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction process (parentNode) {\n var self = this;\n return reduce.call(parentNode.childNodes, function (output, node) {\n node = new Node(node, self.options);\n\n var replacement = '';\n if (node.nodeType === 3) {\n replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue);\n } else if (node.nodeType === 1) {\n replacement = replacementForNode.call(self, node);\n }\n\n return join(output, replacement)\n }, '')\n}\n\n/**\n * Appends strings as each rule requires and trims the output\n * @private\n * @param {String} output The conversion output\n * @returns A trimmed version of the ouput\n * @type String\n */\n\nfunction postProcess (output) {\n var self = this;\n this.rules.forEach(function (rule) {\n if (typeof rule.append === 'function') {\n output = join(output, rule.append(self.options));\n }\n });\n\n return output.replace(/^[\\t\\r\\n]+/, '').replace(/[\\t\\r\\n\\s]+$/, '')\n}\n\n/**\n * Converts an element node to its Markdown equivalent\n * @private\n * @param {HTMLElement} node The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction replacementForNode (node) {\n var rule = this.rules.forNode(node);\n var content = process.call(this, node);\n var whitespace = node.flankingWhitespace;\n if (whitespace.leading || whitespace.trailing) content = content.trim();\n return (\n whitespace.leading +\n rule.replacement(content, node, this.options) +\n whitespace.trailing\n )\n}\n\n/**\n * Joins replacement to the current output with appropriate number of new lines\n * @private\n * @param {String} output The current conversion output\n * @param {String} replacement The string to append to the output\n * @returns Joined output\n * @type String\n */\n\nfunction join (output, replacement) {\n var s1 = trimTrailingNewlines(output);\n var s2 = trimLeadingNewlines(replacement);\n var nls = Math.max(output.length - s1.length, replacement.length - s2.length);\n var separator = '\\n\\n'.substring(0, nls);\n\n return s1 + separator + s2\n}\n\n/**\n * Determines whether an input can be converted\n * @private\n * @param {String|HTMLElement} input Describe this parameter\n * @returns Describe what it returns\n * @type String|Object|Array|Boolean|Number\n */\n\nfunction canConvert (input) {\n return (\n input != null && (\n typeof input === 'string' ||\n (input.nodeType && (\n input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11\n ))\n )\n )\n}\n\nexport default TurndownService;\n","// this is a shim for the browser build;\n// iconv-lite doubles build size, and we\n// don't need it for already rendered text\nconst iconv = {\n encodingExists: () => false,\n decode: s => s,\n};\n\nexport default iconv;\n","const NORMALIZE_RE = /\\s{2,}(?![^<>]*<\\/(pre|code|textarea)>)/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","require('../modules/es6.parse-int');\nmodule.exports = require('../modules/_core').parseInt;\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","require('../../modules/es6.array.is-array');\nmodule.exports = require('../../modules/_core').Array.isArray;\n","var _Array$isArray = require(\"../core-js/array/is-array\");\n\nfunction _arrayWithHoles(arr) {\n if (_Array$isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n","var _getIterator = require(\"../core-js/get-iterator\");\n\nfunction _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = _getIterator(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path\n .split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content\n .trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n const matches = ENCODING_RE.exec(str);\n if (matches !== null) {\n [, str] = matches;\n }\n if (iconv.encodingExists(str)) {\n encoding = str;\n }\n return encoding;\n}\n","'use strict'\n\nmodule.exports = function (str) {\n var offset = 0\n str = str.toString()\n\n return iterator\n\n function iterator () {\n var i1 = str.indexOf('\\r\\n', offset)\n var i2 = str.indexOf('\\n', offset)\n var i3 = str.indexOf('\\r', offset)\n\n var indexes = [i1, i2, i3]\n var index = indexes\n .sort(function (a, b) {\n if (a > b) return 1\n if (a < b) return -1\n return 0\n })\n .filter(function (index) {\n return index !== -1\n })[0]\n\n if (index !== undefined) return extract(index, index === i1 ? 2 : 1)\n\n var length = str.length\n if (length === offset) return null\n\n return extract(length, 0)\n }\n\n function extract (index, skip) {\n var line = str.substr(offset, index - offset)\n offset = index + skip\n return line\n }\n}\n","'use strict'\n\nvar nextLine = require('next-line')\n\n// RFC-2068 Start-Line definitions:\n// Request-Line: Method SP Request-URI SP HTTP-Version CRLF\n// Status-Line: HTTP-Version SP Status-Code SP Reason-Phrase CRLF\nvar startLine = /^[A-Z_]+(\\/\\d\\.\\d)? /\nvar requestLine = /^([A-Z_]+) (.+) [A-Z]+\\/(\\d)\\.(\\d)$/\nvar statusLine = /^[A-Z]+\\/(\\d)\\.(\\d) (\\d{3}) (.*)$/\n\nmodule.exports = function (data, onlyHeaders) {\n return parse(normalize(data), onlyHeaders)\n}\n\nfunction parse (str, onlyHeaders) {\n var line = firstLine(str)\n var match\n\n if (onlyHeaders && startLine.test(line)) {\n return parseHeaders(str)\n } else if ((match = line.match(requestLine)) !== null) {\n return {\n method: match[1],\n url: match[2],\n version: { major: parseInt(match[3], 10), minor: parseInt(match[4], 10) },\n headers: parseHeaders(str)\n }\n } else if ((match = line.match(statusLine)) !== null) {\n return {\n version: { major: parseInt(match[1], 10), minor: parseInt(match[2], 10) },\n statusCode: parseInt(match[3], 10),\n statusMessage: match[4],\n headers: parseHeaders(str)\n }\n } else {\n return parseHeaders(str)\n }\n}\n\nfunction parseHeaders (str) {\n var headers = {}\n var next = nextLine(str)\n var line = next()\n var index, name, value\n\n if (startLine.test(line)) line = next()\n\n while (line) {\n // subsequent lines in multi-line headers start with whitespace\n if (line[0] === ' ' || line[0] === '\\t') {\n value += ' ' + line.trim()\n line = next()\n continue\n }\n\n if (name) addHeaderLine(name, value, headers)\n\n index = line.indexOf(':')\n name = line.substr(0, index)\n value = line.substr(index + 1).trim()\n\n line = next()\n }\n\n if (name) addHeaderLine(name, value, headers)\n\n return headers\n}\n\nfunction normalize (str) {\n if (str && str._header) str = str._header // extra headers from http.ServerResponse object\n if (!str || typeof str.toString !== 'function') return ''\n return str.toString().trim()\n}\n\nfunction firstLine (str) {\n var nl = str.indexOf('\\r\\n')\n if (nl === -1) return str\n else return str.slice(0, nl)\n}\n\n// The following function is lifted from:\n// https://github.com/nodejs/node/blob/f1294f5bfd7f02bce8029818be9c92de59749137/lib/_http_incoming.js#L116-L170\n//\n// Add the given (field, value) pair to the message\n//\n// Per RFC2616, section 4.2 it is acceptable to join multiple instances of the\n// same header with a ', ' if the header in question supports specification of\n// multiple values this way. If not, we declare the first instance the winner\n// and drop the second. Extended header fields (those beginning with 'x-') are\n// always joined.\nfunction addHeaderLine (field, value, dest) {\n field = field.toLowerCase()\n switch (field) {\n // Array headers:\n case 'set-cookie':\n if (dest[field] !== undefined) {\n dest[field].push(value)\n } else {\n dest[field] = [value]\n }\n break\n\n // list is taken from:\n // https://mxr.mozilla.org/mozilla/source/netwerk/protocol/http/src/nsHttpHeaderArray.cpp\n case 'content-type':\n case 'content-length':\n case 'user-agent':\n case 'referer':\n case 'host':\n case 'authorization':\n case 'proxy-authorization':\n case 'if-modified-since':\n case 'if-unmodified-since':\n case 'from':\n case 'location':\n case 'max-forwards':\n case 'retry-after':\n case 'etag':\n case 'last-modified':\n case 'server':\n case 'age':\n case 'expires':\n // drop duplicates\n if (dest[field] === undefined) dest[field] = value\n break\n\n default:\n // make comma-separated list\n if (typeof dest[field] === 'string') {\n dest[field] += ', ' + value\n } else {\n dest[field] = value\n }\n }\n}\n","// Browser Request\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nvar httpHeaders = require('http-headers')\nvar XHR = XMLHttpRequest\nif (!XHR) throw new Error('missing XMLHttpRequest')\nrequest.log = {\n 'trace': noop, 'debug': noop, 'info': noop, 'warn': noop, 'error': noop\n}\n\nvar DEFAULT_TIMEOUT = 3 * 60 * 1000 // 3 minutes\n\n//\n// request\n//\n\nfunction request(options, callback) {\n // The entry-point to the API: prep the options object and pass the real work to run_xhr.\n if(typeof callback !== 'function')\n throw new Error('Bad callback given: ' + callback)\n\n if(!options)\n throw new Error('No options given')\n\n var options_onResponse = options.onResponse // Save this for later.\n\n if(typeof options === 'string')\n options = {'uri':options}\n else\n options = JSON.parse(JSON.stringify(options)) // Use a duplicate for mutating.\n\n options.onResponse = options_onResponse // And put it back.\n\n if (options.verbose) request.log = getLogger()\n\n if(options.url) {\n options.uri = options.url\n delete options.url\n }\n\n if(!options.uri && options.uri !== \"\")\n throw new Error(\"options.uri is a required argument\")\n\n if(typeof options.uri != \"string\")\n throw new Error(\"options.uri must be a string\")\n\n var unsupported_options = ['proxy', '_redirectsFollowed', 'maxRedirects', 'followRedirect']\n for (var i = 0; i < unsupported_options.length; i++)\n if(options[ unsupported_options[i] ])\n throw new Error(\"options.\" + unsupported_options[i] + \" is not supported\")\n\n options.callback = callback\n options.method = options.method || 'GET'\n options.headers = options.headers || {}\n options.body = options.body || null\n options.timeout = options.timeout || request.DEFAULT_TIMEOUT\n\n if(options.headers.host)\n throw new Error(\"Options.headers.host is not supported\")\n\n if(options.json) {\n options.headers.accept = options.headers.accept || 'application/json'\n if(options.method !== 'GET')\n options.headers['content-type'] = 'application/json'\n\n if(typeof options.json !== 'boolean')\n options.body = JSON.stringify(options.json)\n else if(typeof options.body !== 'string')\n options.body = JSON.stringify(options.body)\n }\n\n //BEGIN QS Hack\n var serialize = function(obj) {\n var str = []\n for(var p in obj)\n if (obj.hasOwnProperty(p)) {\n str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]))\n }\n return str.join(\"&\")\n }\n\n if(options.qs){\n var qs = (typeof options.qs == 'string')? options.qs : serialize(options.qs)\n if(options.uri.indexOf('?') !== -1){ //no get params\n options.uri = options.uri+'&'+qs\n }else{ //existing get params\n options.uri = options.uri+'?'+qs\n }\n }\n //END QS Hack\n\n //BEGIN FORM Hack\n var multipart = function(obj) {\n //todo: support file type (useful?)\n var result = {}\n result.boundry = '-------------------------------'+Math.floor(Math.random()*1000000000)\n var lines = []\n for(var p in obj){\n if (obj.hasOwnProperty(p)) {\n lines.push(\n '--'+result.boundry+\"\\n\"+\n 'Content-Disposition: form-data; name=\"'+p+'\"'+\"\\n\"+\n \"\\n\"+\n obj[p]+\"\\n\"\n )\n }\n }\n lines.push( '--'+result.boundry+'--' )\n result.body = lines.join('')\n result.length = result.body.length\n result.type = 'multipart/form-data; boundary='+result.boundry\n return result\n }\n\n if(options.form){\n if(typeof options.form == 'string') throw('form name unsupported')\n if(options.method === 'POST'){\n var encoding = (options.encoding || 'application/x-www-form-urlencoded').toLowerCase()\n options.headers['content-type'] = encoding\n switch(encoding){\n case 'application/x-www-form-urlencoded':\n options.body = serialize(options.form).replace(/%20/g, \"+\")\n break\n case 'multipart/form-data':\n var multi = multipart(options.form)\n //options.headers['content-length'] = multi.length;\n options.body = multi.body\n options.headers['content-type'] = multi.type\n break\n default : throw new Error('unsupported encoding:'+encoding)\n }\n }\n }\n //END FORM Hack\n\n // If onResponse is boolean true, call back immediately when the response is known,\n // not when the full request is complete.\n options.onResponse = options.onResponse || noop\n if(options.onResponse === true) {\n options.onResponse = callback\n options.callback = noop\n }\n\n // XXX Browsers do not like this.\n //if(options.body)\n // options.headers['content-length'] = options.body.length;\n\n // HTTP basic authentication\n if(!options.headers.authorization && options.auth)\n options.headers.authorization = 'Basic ' + b64_enc(options.auth.username + ':' + options.auth.password)\n\n return run_xhr(options)\n}\n\nvar req_seq = 0\nfunction run_xhr(options) {\n var xhr = new XHR\n , timed_out = false\n , is_cors = is_crossDomain(options.uri)\n , supports_cors = ('withCredentials' in xhr)\n\n req_seq += 1\n xhr.seq_id = req_seq\n xhr.id = req_seq + ': ' + options.method + ' ' + options.uri\n xhr._id = xhr.id // I know I will type \"_id\" from habit all the time.\n\n if(is_cors && !supports_cors) {\n var cors_err = new Error('Browser does not support cross-origin request: ' + options.uri)\n cors_err.cors = 'unsupported'\n return options.callback(cors_err, xhr)\n }\n\n xhr.timeoutTimer = setTimeout(too_late, options.timeout)\n function too_late() {\n timed_out = true\n var er = new Error('ETIMEDOUT')\n er.code = 'ETIMEDOUT'\n er.duration = options.timeout\n\n request.log.error('Timeout', { 'id':xhr._id, 'milliseconds':options.timeout })\n return options.callback(er, xhr)\n }\n\n // Some states can be skipped over, so remember what is still incomplete.\n var did = {'response':false, 'loading':false, 'end':false}\n\n xhr.onreadystatechange = on_state_change\n xhr.open(options.method, options.uri, true) // asynchronous\n if(is_cors)\n xhr.withCredentials = !! options.withCredentials\n xhr.send(options.body)\n return xhr\n\n function on_state_change(event) {\n if(timed_out)\n return request.log.debug('Ignoring timed out state change', {'state':xhr.readyState, 'id':xhr.id})\n\n request.log.debug('State change', {'state':xhr.readyState, 'id':xhr.id, 'timed_out':timed_out})\n\n if(xhr.readyState === XHR.OPENED) {\n request.log.debug('Request started', {'id':xhr.id})\n for (var key in options.headers)\n xhr.setRequestHeader(key, options.headers[key])\n }\n\n else if(xhr.readyState === XHR.HEADERS_RECEIVED)\n on_response()\n\n else if(xhr.readyState === XHR.LOADING) {\n on_response()\n on_loading()\n }\n\n else if(xhr.readyState === XHR.DONE) {\n on_response()\n on_loading()\n on_end()\n }\n }\n\n function on_response() {\n if(did.response)\n return\n\n did.response = true\n request.log.debug('Got response', {'id':xhr.id, 'status':xhr.status})\n clearTimeout(xhr.timeoutTimer)\n xhr.statusCode = xhr.status // Node request compatibility\n\n // Detect failed CORS requests.\n if(is_cors && xhr.statusCode == 0) {\n var cors_err = new Error('CORS request rejected: ' + options.uri)\n cors_err.cors = 'rejected'\n\n // Do not process this request further.\n did.loading = true\n did.end = true\n\n return options.callback(cors_err, xhr)\n }\n\n options.onResponse(null, xhr)\n }\n\n function on_loading() {\n if(did.loading)\n return\n\n did.loading = true\n request.log.debug('Response body loading', {'id':xhr.id})\n // TODO: Maybe simulate \"data\" events by watching xhr.responseText\n }\n\n function on_end() {\n if(did.end)\n return\n\n did.end = true\n request.log.debug('Request done', {'id':xhr.id})\n\n xhr.body = xhr.responseText\n xhr.headers = httpHeaders(xhr.getAllResponseHeaders())\n if(options.json) {\n try { xhr.body = JSON.parse(xhr.responseText) }\n catch (er) { return options.callback(er, xhr) }\n }\n\n options.callback(null, xhr, xhr.body)\n }\n\n} // request\n\nrequest.withCredentials = false\nrequest.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT\n\n//\n// defaults\n//\n\nrequest.defaults = function(options, requester) {\n var def = function (method) {\n var d = function (params, callback) {\n if(typeof params === 'string')\n params = {'uri': params}\n else {\n params = JSON.parse(JSON.stringify(params))\n }\n for (var i in options) {\n if (params[i] === undefined) params[i] = options[i]\n }\n return method(params, callback)\n }\n return d\n }\n var de = def(request)\n de.get = def(request.get)\n de.post = def(request.post)\n de.put = def(request.put)\n de.head = def(request.head)\n return de\n}\n\n//\n// HTTP method shortcuts\n//\n\nvar shortcuts = [ 'get', 'put', 'post', 'head' ]\nshortcuts.forEach(function(shortcut) {\n var method = shortcut.toUpperCase()\n var func = shortcut.toLowerCase()\n\n request[func] = function(opts) {\n if(typeof opts === 'string')\n opts = {'method':method, 'uri':opts}\n else {\n opts = JSON.parse(JSON.stringify(opts))\n opts.method = method\n }\n\n var args = [opts].concat(Array.prototype.slice.apply(arguments, [1]))\n return request.apply(this, args)\n }\n})\n\n//\n// CouchDB shortcut\n//\n\nrequest.couch = function(options, callback) {\n if(typeof options === 'string')\n options = {'uri':options}\n\n // Just use the request API to do JSON.\n options.json = true\n if(options.body)\n options.json = options.body\n delete options.body\n\n callback = callback || noop\n\n var xhr = request(options, couch_handler)\n return xhr\n\n function couch_handler(er, resp, body) {\n if(er)\n return callback(er, resp, body)\n\n if((resp.statusCode < 200 || resp.statusCode > 299) && body.error) {\n // The body is a Couch JSON object indicating the error.\n er = new Error('CouchDB error: ' + (body.error.reason || body.error.error))\n for (var key in body)\n er[key] = body[key]\n return callback(er, resp, body)\n }\n\n return callback(er, resp, body)\n }\n}\n\n//\n// Utility\n//\n\nfunction noop() {}\n\nfunction getLogger() {\n var logger = {}\n , levels = ['trace', 'debug', 'info', 'warn', 'error']\n , level, i\n\n for(i = 0; i < levels.length; i++) {\n level = levels[i]\n\n logger[level] = noop\n if(typeof console !== 'undefined' && console && console[level])\n logger[level] = formatted(console, level)\n }\n\n return logger\n}\n\nfunction formatted(obj, method) {\n return formatted_logger\n\n function formatted_logger(str, context) {\n if(typeof context === 'object')\n str += ' ' + JSON.stringify(context)\n\n return obj[method].call(obj, str)\n }\n}\n\n// Return whether a URL is a cross-domain request.\nfunction is_crossDomain(url) {\n var rurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/\n\n // jQuery #8138, IE may throw an exception when accessing\n // a field from window.location if document.domain has been set\n var ajaxLocation\n try { ajaxLocation = location.href }\n catch (e) {\n // Use the href attribute of an A element since IE will modify it given document.location\n ajaxLocation = document.createElement( \"a\" )\n ajaxLocation.href = \"\"\n ajaxLocation = ajaxLocation.href\n }\n\n var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []\n , parts = rurl.exec(url.toLowerCase() )\n\n var result = !!(\n parts &&\n ( parts[1] != ajaxLocParts[1]\n || parts[2] != ajaxLocParts[2]\n || (parts[3] || (parts[1] === \"http:\" ? 80 : 443)) != (ajaxLocParts[3] || (ajaxLocParts[1] === \"http:\" ? 80 : 443))\n )\n )\n\n //console.debug('is_crossDomain('+url+') -> ' + result)\n return result\n}\n\n// MIT License from http://phpjs.org/functions/base64_encode:358\nfunction b64_enc (data) {\n // Encodes string using MIME base64 algorithm\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc=\"\", tmp_arr = []\n\n if (!data) {\n return data\n }\n\n // assume utf8 data\n // data = this.utf8_encode(data+'');\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++)\n o2 = data.charCodeAt(i++)\n o3 = data.charCodeAt(i++)\n\n bits = o1<<16 | o2<<8 | o3\n\n h1 = bits>>18 & 0x3f\n h2 = bits>>12 & 0x3f\n h3 = bits>>6 & 0x3f\n h4 = bits & 0x3f\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4)\n } while (i < data.length)\n\n enc = tmp_arr.join('')\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '=='\n break\n case 2:\n enc = enc.slice(0, -1) + '='\n break\n }\n\n return enc\n}\nmodule.exports = request\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser\n ? {}\n : {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n };\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(\n `^(${BAD_CONTENT_TYPES.join('|')})$`,\n 'i'\n);\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = ['nih.gov', 'gutenberg.org'];\n","import URL from 'url';\nimport request from 'postman-request';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 or not.\n// Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon200 = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon200) {\n throw new Error(\n `Resource returned a response status code of ${\n response.statusCode\n } and resource was instructed to reject non-200 status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host\n .split('.')\n .slice(-2)\n .join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl, headers = {}) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS, ...headers },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any non-GET redirects\n followAllRedirects: true,\n ...(typeof window !== 'undefined'\n ? {}\n : {\n // Follow GET redirects; this option is for Node only\n followRedirect: true,\n }),\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return {\n error: true,\n message: e.message,\n };\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","require('../../modules/es6.reflect.own-keys');\nmodule.exports = require('../../modules/_core').Reflect.ownKeys;\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive <br /> tags into\n// <p /> tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a <br />, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('<p></p>');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (\n sibling &&\n !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))\n ) {\n const { nextSibling } = sibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertible = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertible) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertible = $span.parents('p, div, li, figcaption').length === 0;\n if (convertible) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive <br /> tags.\n// * <div /> tags without block level elements inside of them\n// * <span /> tags who are not children of <p /> or <div /> tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html =\n node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(`<${tag} ${attribString}>${html}</${tag}>`);\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","var _Array$isArray = require(\"../core-js/array/is-array\");\n\nfunction _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nmodule.exports = _arrayWithoutHoles;","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || Iterators.hasOwnProperty(classof(O));\n};\n","var _Array$from = require(\"../core-js/array/from\");\n\nvar _isIterable = require(\"../core-js/is-iterable\");\n\nfunction _iterableToArray(iter) {\n if (_isIterable(Object(iter)) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return _Array$from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","import { getAttrs, setAttrs } from 'utils/dom';\n\nimport { WHITELIST_ATTRS_RE, KEEP_CLASS } from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(\n node,\n Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {})\n );\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $\n );\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach(key => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","require('../modules/es6.parse-float');\nmodule.exports = require('../modules/_core').parseFloat;\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import { scoreCommas, scoreLength } from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import { getOrInitScore, setScore } from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { getScore, scoreNode, getWeight, addToParent } from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n }\n if (tagName.toLowerCase() === 'div') {\n return 5;\n }\n if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n }\n if (BAD_TAGS.test(tagName)) {\n return -3;\n }\n if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport { scoreNode, setScore, getOrInitScore, addScore } from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre')\n .not('[score]')\n .each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import { textLength, linkDensity } from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('<div></div>');\n\n $candidate\n .parent()\n .children()\n .each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n }\n if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n }\n if (\n siblingContentLength <= 80 &&\n density === 0 &&\n hasSentenceEnd(siblingContent)\n ) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (\n wrappingDiv.children().length === 1 &&\n wrappingDiv\n .children()\n .first()\n .get(0) === $candidate.get(0)\n ) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport { CLEAN_CONDITIONALLY_TAGS, KEEP_CLASS } from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > pCount / 3) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (\n previousNode &&\n normalizeSpaces(previousNode.text()).slice(-1) === ':'\n ) {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0)\n return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar meta = require('./_meta');\nvar fails = require('./_fails');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar setToStringTag = require('./_set-to-string-tag');\nvar dP = require('./_object-dp').f;\nvar each = require('./_array-methods')(0);\nvar DESCRIPTORS = require('./_descriptors');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME, '_c');\n target._c = new Base();\n if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);\n });\n each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {\n anInstance(this, C, KEY);\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n IS_WEAK || dP(C.prototype, 'size', {\n get: function () {\n return this._c.size;\n }\n });\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F, O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.set');\nrequire('../modules/es7.set.to-json');\nrequire('../modules/es7.set.of');\nrequire('../modules/es7.set.from');\nmodule.exports = require('../modules/_core').Set;\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim().replace(/\\s+/g, ' ').length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n }\n if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","var _Symbol$iterator = require(\"../core-js/symbol/iterator\");\n\nvar _Symbol = require(\"../core-js/symbol\");\n\nfunction _typeof2(obj) { if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof _Symbol === \"function\" && _typeof2(_Symbol$iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values = nodes\n .map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n [metaValue] = values;\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find(parent => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export const IS_LINK = new RegExp('https?://', 'i');\nconst IMAGE_RE = '.(png|gif|jpe?g)';\nexport const IS_IMAGE = new RegExp(`${IMAGE_RE}`, 'i');\nexport const IS_SRCSET = new RegExp(\n `${IMAGE_RE}(\\\\?\\\\S+)?(\\\\s*[\\\\d.]+[wx])`,\n 'i'\n);\n\nexport const TAGS_TO_REMOVE = ['script', 'style', 'form'].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport { IS_LINK, IS_IMAGE, IS_SRCSET } from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n const extractSrcFromJSON = str => {\n try {\n const { src } = JSON.parse(str);\n if (typeof src === 'string') return src;\n } catch (e) {\n return false;\n }\n\n return false;\n };\n\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach(attr => {\n const value = attrs[attr];\n\n if (attr !== 'srcset' && IS_LINK.test(value) && IS_SRCSET.test(value)) {\n $(img).attr('srcset', value);\n } else if (\n attr !== 'src' &&\n attr !== 'srcset' &&\n IS_LINK.test(value) &&\n IS_IMAGE.test(value)\n ) {\n // Is the value a JSON object? If so, we should attempt to extract the image src from the data.\n const existingSrc = extractSrcFromJSON(value);\n if (existingSrc) {\n $(img).attr('src', existingSrc);\n } else {\n $(img).attr('src', value);\n }\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root()\n .find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport { normalizeMetaTags, convertLazyLoadedImages, clean } from './utils/dom';\n\nconst Resource = {\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n // :param headers: Custom headers to be included in the request\n async create(url, preparedResponse, parsedUrl, headers = {}) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = {\n body: preparedResponse,\n response: validResponse,\n alreadyDecoded: true,\n };\n } else {\n result = await fetchResource(url, parsedUrl, headers);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response, alreadyDecoded = false }) {\n const { 'content-type': contentType = '' } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') && !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType, alreadyDecoded });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType, alreadyDecoded = false }) {\n if (alreadyDecoded) {\n return cheerio.load(content);\n }\n\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n // after first cheerio.load, check to see if encoding matches\n const contentTypeSelector = cheerio.browser\n ? 'meta[http-equiv=content-type]'\n : 'meta[http-equiv=content-type i]';\n const metaContentType =\n $(contentTypeSelector).attr('content') ||\n $('meta[charset]').attr('charset');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (metaContentType && properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield (start += 1);\n }\n}\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","const merge = (extractor, domains) =>\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {});\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains\n ? merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n : merge(extractor, [extractor.domain]);\n}\n","import mergeSupportedDomains from '../utils/merge-supported-domains';\n\nexport const apiExtractors = {};\n\nexport default function addExtractor(extractor) {\n if (!extractor || !extractor.domain) {\n return {\n error: true,\n message: 'Unable to add custom extractor. Invalid parameters.',\n };\n }\n\n Object.assign(apiExtractors, mergeSupportedDomains(extractor));\n\n return apiExtractors;\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: ['.post-content noscript'],\n\n // Selectors to remove from the extracted content\n clean: [],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: ['.post-author-name'],\n },\n\n title: {\n selectors: ['.post h2.title'],\n },\n\n date_published: {\n selectors: ['span.publishdate'],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: ['div.article-content', 'section.body', 'article.article'],\n\n // Selectors to remove from the extracted content\n clean: ['.ad', '.single-related-story'],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if (\n $children.length === 1 &&\n $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img'\n ) {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: ['h1.lede-feature-title', 'h1.headline-primary', 'h1'],\n },\n\n author: {\n selectors: ['.by-authors', '.lede-feature-author'],\n },\n\n dek: {\n selectors: ['.lede-feature-teaser'],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: ['h1.headline'],\n },\n\n author: {\n selectors: ['.PostByline__name'],\n },\n\n content: {\n selectors: ['div.post__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('<img />').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['.PostByline__timestamp[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n title: {\n selectors: ['h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Allow drop cap character.\n 'section span:first-of-type': $node => {\n const $text = $node.html();\n if ($text.length === 1 && /^[a-zA-Z()]+$/.test($text)) {\n $node.replaceWith($text);\n }\n },\n // Re-write lazy-loaded youtube videos\n iframe: $node => {\n const ytRe = /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n const $parent = $node.parents('figure');\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe); // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n return;\n }\n\n // If we can't draw the YouTube preview, remove the figure.\n $parent.remove();\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: $node => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n\n $node.empty().append([$img, $caption]);\n },\n\n // Remove any smaller images that did not get caught by the generic image\n // cleaner (author photo 48px, leading sentence images 79px, etc.).\n img: $node => {\n const width = parseInt($node.attr('width'), 10);\n if (width < 100) $node.remove();\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span a', 'svg'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: ['h1', 'h1.is-title-pane'],\n },\n\n author: {\n selectors: ['.byline-name', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body__content', '.pane-node-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [\n selector,\n attr,\n ] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(`<img src=\"${src}\" />`);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const GeniusComExtractor = {\n domain: 'genius.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['h2 a'],\n },\n\n date_published: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.release_date;\n },\n ],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.album.cover_art_url;\n },\n ],\n ],\n },\n\n content: {\n selectors: ['.lyrics'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import URL from 'url';\n\nexport const WiredJpExtractor = {\n domain: 'wired.jp',\n\n title: {\n selectors: ['h1[data-testid=\"ContentHeaderHed\"]', 'h1.post-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'p[itemprop=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: ['div[class^=\"ContentHeaderDek\"]', '.post-intro'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[data-attribute-verso-pattern=\"article-body\"]',\n 'article.article-detail',\n ],\n\n transforms: {\n 'img[data-original]': $node => {\n const dataOriginal = $node.attr('data-original');\n const src = $node.attr('src');\n const url = URL.resolve(src, dataOriginal);\n $node.attr('src', url);\n },\n },\n\n clean: ['.post-category', 'time', 'h1.post-title', '.social-area-syncer'],\n },\n};\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-unused-expressions */\nexport const WwwAbendblattDeExtractor = {\n domain: 'www.abendblatt.de',\n\n title: {\n selectors: ['h2.article__header__headline'],\n },\n\n author: {\n selectors: ['span.author-info__name-text'],\n },\n\n date_published: {\n selectors: [\n ['time.teaser-stream-time', 'datetime'],\n ['time.article__header__date', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n p: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n div: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: ['#mw-content-text'],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': $node => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: ['h2.title'],\n },\n\n date_published: {\n selectors: ['#footer-info-lastmod'],\n },\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('<div id=\"TWEETS_GO_HERE\"></div>');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: ['.permalink[role=main]'],\n\n defaultCleaner: false,\n\n clean: ['.stream-item-footer', 'button', '.tweet-details-fixer'],\n },\n\n author: {\n selectors: ['.tweet.permalink-tweet .username'],\n },\n\n date_published: {\n selectors: [['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms']],\n },\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1[data-testid=\"headline\"]',\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n 'h1 .balancedHeadline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ['meta[name=\"byl\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['div.g-blocks', 'section[name=\"articleBody\"]', 'article#story'],\n\n transforms: {\n 'img.g-lazy': $node => {\n let src = $node.attr('src');\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: ['h1', '.c-article-header__hed'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.c-byline__author'],\n },\n\n content: {\n selectors: ['article', '.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n '.c-article-writer__image',\n '.c-article-writer__content',\n '.c-letters-cta__text',\n '.c-footer__logo',\n '.c-recirculation-link',\n '.twitter-tweet',\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n date_published: {\n selectors: [['time[itemprop=\"datePublished\"]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1[class^=\"content-header\"]',\n 'h1[class^=\"ArticleHeader__hed\"]',\n 'h1[class*=\"ContentHeaderHed\"]',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'article header div[class^=\"BylinesWrapper\"]',\n ['meta[name=\"article:author\"]', 'value'],\n 'div[class^=\"ArticleContributors\"] a[rel=\"author\"]',\n 'article header div[class*=\"Byline__multipleContributors\"]',\n ],\n },\n\n content: {\n selectors: [\n '.article__body',\n 'article.article.main-content',\n 'main[class^=\"Layout__content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption__text': 'figcaption',\n '.caption__credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['footer[class^=\"ArticleFooter__footer\"]', 'aside'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-header__publish-date',\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n 'div[class^=\"ContentHeaderDek\"]',\n 'div.content-header__dek',\n 'h2[class^=\"ArticleHeader__dek\"]',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1[data-testId=\"ContentHeaderHed\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.article.main-content',\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span.caption'],\n },\n\n date_published: {\n selectors: ['span.time'],\n },\n\n lead_image_url: {\n selectors: [],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.figure-caption'],\n },\n\n date_published: {\n selectors: [['time.date[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n\n supportedDomains: ['www.buzzfeednews.com'],\n\n title: {\n selectors: [\n 'h1.embed-headline-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]',\n 'byline__author',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['div[class^=\"featureimage_featureImageWrapper\"]', '.js-subbuzz-wrapper'],\n ['.js-subbuzz-wrapper'],\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': $node => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n '.js-inline-share-bar',\n '.js-ad-placement',\n ],\n },\n\n date_published: {\n selectors: [['time[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.embed-headline-description'],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard',\n '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1[class*=\"PostHeader\"]',\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'div[class^=\"PostHeader__ScAuthorNameSection\"]',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n 'section[class*=\"PostMainArticle\"]',\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n ['div[itemprop=\"author\"] meta[itemprop=\"name\"]', 'value'],\n '.story-meta__authors .vcard',\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [['.story-text'], '.story-main-content', '.story-core'],\n\n transforms: [],\n\n clean: ['figcaption', '.story-meta', '.ad'],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ['.story-meta__details time[datetime]', 'datetime'],\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n 'avclub.com',\n 'clickhole.com',\n 'splinternews.com',\n 'theonion.com',\n 'theroot.com',\n 'thetakeout.com',\n 'theinventory.com',\n ],\n\n title: {\n selectors: ['header h1', 'h1.headline'],\n },\n\n author: {\n selectors: ['a[data-ga*=\"Author\"]', '.author'],\n },\n\n content: {\n selectors: ['.js_post-content', '.post-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': $node => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.magnifier', '.lightbox'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: ['h1[itemprop=headline]', 'h1.article-title'],\n },\n\n author: {\n selectors: ['span[itemprop=author]'],\n },\n\n content: {\n selectors: ['div[itemprop=articlebody]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[itemprop=datePublished]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: ['.post-title-breadcrumb', 'h1', '.headline'],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: ['.article__published-at', '.article-posted-date'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__blocks', '.article-content', '.all-post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lightbox-link'],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: ['h1', '#topper-headline-wrapper'],\n },\n\n author: {\n selectors: ['.pb-author-name'],\n },\n\n date_published: {\n selectors: [['.author-timestamp[itemprop=\"datePublished\"]', 'content']],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': $node => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.interstitial-link', '.newsletter-inline-unit'],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: ['h1.headline__title'],\n },\n\n author: {\n selectors: ['span.author-card__details__name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: ['h2.headline__subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry__body'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: ['h1.article-headline'],\n },\n\n author: {\n selectors: ['span.AuthorList'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.article-subhead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['div.article-body']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['aside'],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: ['.article-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.byline a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: ['#storytext h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inStoryHeading'],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: ['h1.pg-headline', 'h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': $node => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': $node => {\n if ($node.has('a')) {\n if (\n $node.text().trim() ===\n $node\n .find('a')\n .text()\n .trim()\n ) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: ['h1.p-article__title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.p-article__byline__date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [['link[itemprop=\"name\"]', 'content'], '.yt-user-info'],\n },\n\n date_published: {\n selectors: [['meta[itemProp=\"datePublished\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n '#player-container-outer',\n 'ytd-expandable-video-description-body-renderer #description',\n ['#player-api', '#description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>`);\n },\n '#player-container-outer': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n const description = $('meta[itemProp=\"description\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>\n <div><span>${description}</span></div>`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: ['h1', '.content__headline'],\n },\n\n author: {\n selectors: ['address[data-link-name=\"byline\"]', 'p.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['div[data-gu-name=\"standfirst\"]', '.content__standfirst'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincontent', '.content__article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.hide-on-mobile', '.inline-icon'],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1[class^=\"headline\"]',\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n 'p[class*=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"og:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n '.body-content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inline-newsletter', '.page-ad'],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: ['h1', 'h1.post-page__title'],\n },\n\n author: {\n selectors: ['a[href*=\"profile\"]', 'div.content-meta__author'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.post-page__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: ['h1', '.storytitle'],\n },\n\n author: {\n selectors: ['p.byline__name.byline__name--block'],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['.storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['div.enlarge_measure'],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: ['article header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: ['#article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: ['h1.story__title'],\n },\n\n author: {\n selectors: ['.story__info .story__info__item:first-child'],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n format: 'MMMM D, YYYY h:mm a',\n },\n\n dek: {\n selectors: ['.story__subhead'],\n },\n\n lead_image_url: {\n selectors: [['article figure a:first-child', 'href']],\n },\n\n content: {\n selectors: ['.story__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: ['h1[class*=\"ArticleHeader-headline-\"]', 'h1.article-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"og:article:author\"]', 'value'], '.author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ArticleBodyWrapper', '#article-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div[class^=\"ArticleBody-byline-container-\"]',\n '#article-byline .author',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: ['header h1', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.author_name a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article', 'section.article-content.blueprint'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['div.article_byline span:first-of-type'],\n },\n\n date_published: {\n selectors: ['time'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': $node => {\n const imgHtml = $node.html();\n $node\n .parents('.e-image__image')\n .find('.c-dynamic-image')\n .replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: ['.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--large'],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.Article__Headline__Desc', '.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.Article__Content',\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent\n .find('.media--medium__container')\n .children()\n .first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend(\n $(`<div class=\"__image-lead__\">\n <img src=\"${imgPath1}\"/>\n <img src=\"${imgPath2}\"/>\n </div>`)\n );\n }\n } else {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--small'],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: ['h1.headline', '.trb_ar_hl'],\n },\n\n author: {\n selectors: [\n 'a[data-click=\"standardBylineAuthorName\"]',\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.page-article-body', '.trb_ar_main'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': $node => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.trb_ar_by', '.trb_ar_cr'],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: ['nypost.com'],\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.modal-trigger'],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author-meta-title', 'main span.entry-author-name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'header',\n '.article-sharing',\n '.after-article',\n '.type-commenting',\n '.more-posts',\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: ['.Article-headline', '.article-headline'],\n },\n\n author: {\n selectors: ['.ArticleAuthor-nameText', '.author-name'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: ['.Article-subline', '.article-subline'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [['meta[name=\"sailthru.title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: ['div#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n 'a[data-vars-label*=\"authors\"]',\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article main', 'div.field.field-name-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['small'],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: ['div[class*=\"Article_main__body\"] h1', '.article-header h1'],\n },\n\n author: {\n selectors: ['.ShareByline span:nth-child(2)', '.authors'],\n clean: ['.author-overlay', '.by-text'],\n },\n\n date_published: {\n selectors: ['.ShareByline', '.timestamp'],\n format: 'MMMM D, YYYY h:mm a',\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: ['h1.headline', 'h1#ra-headline'],\n },\n\n author: {\n selectors: [\n '.article_byline span',\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: ['time', ['meta[name=\"sailthru.date\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', 'article#ra-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['dl#ra-tags', '.ra-related', 'a.ra-editor', 'dl#ra-share-bottom'],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: ['h1.title', 'h1.ArticleHeader-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n 'div.ArticleBody-articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: ['h2.post-title', 'title-text'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.share-copy-title', '.post-tags', '.reactions'],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author', '.vcard'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: ['.article-header h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value'], 'a.author.url.fn'],\n },\n\n date_published: {\n selectors: [\n '.mntl-attribution__item-date',\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article-header h2'],\n },\n\n content: {\n selectors: ['div[class^=\"loc article-content\"]', 'div.article-body__inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: {\n selectors: ['a.author', 'a.article-byline.tracked-offpage'],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related'],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: ['h1.l-article-header__row--title', 'h1.content-title'],\n },\n\n author: {\n selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.l-article-header__row--lead', '.content-description'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.l-article-content',\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.c-related-links-wrapper', '.module-related'],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: ['title', 'article header h1'],\n },\n\n author: {\n selectors: ['.article-cnt__author', '.author'],\n },\n\n date_published: {\n selectors: [['time[data-published]', 'data-published']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', 'section.body.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: ['div.entry-header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"qc:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: ['h1.article-detail__title', 'h1.article__title'],\n },\n\n author: {\n selectors: ['.article-detail__meta__author', '.entry-meta__author a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.article-detail__main-content section'],\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n date_published: {\n selectors: ['p.published-date'],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.dateline-storybody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n author: {\n selectors: ['.contributor'],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': $node => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.story-share'],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: ['h1', 'h1.title'],\n },\n\n author: {\n selectors: ['article a[rel=\"author\"]', '.author-url'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.intro', 'blockquote'],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: ['h1', 'h1.headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"published\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.m-detail-header--dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.m-detail--body',\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['.inline-thumb', '.primary-message', '.description', '.instructions'],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.blog-title'],\n },\n\n author: {\n selectors: [\n 'div.main-post-head .social-author__name',\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post-body', '.blog-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['span.author', 'a.author'],\n },\n\n date_published: {\n selectors: ['time'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: ['.c-head_dek', '.article-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': $node => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'],\n },\n\n author: {\n selectors: ['span.byline-name', ['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['time[datetime]', ['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', '.entry-container'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.label-comment'],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [['meta[name=\"dcterms.title\"]', 'value']],\n },\n\n author: {\n selectors: [['link[rel=\"author\"]', 'title']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n '.single-post-content-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: ['title', 'h1.entry-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n dek: {\n selectors: ['.subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-sharing.top + div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.ad-notice-small'],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: ['.title', ['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.article-content', '.image', '.body'], '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-video-wrapper', '.show-for-small-only'],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: ['.entry-title', '.cb-entry-title', '.cb-single-title'],\n },\n\n author: {\n selectors: ['div.cb-author', 'div.cb-author-title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['div.theiaPostSlider_slides img', 'src']],\n },\n\n content: {\n selectors: ['div.theiaPostSlider_slides'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.title'],\n },\n\n author: {\n selectors: ['.byline-wrapper span.author_name', '.author-link'],\n },\n\n date_published: {\n selectors: [\n ['meta[property=\"article:published_time\"]', 'content'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.main-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: ['h1.title', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'cite a',\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.tc_mark', 'figcaption'],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: ['h1.entry-title.story--header--title'],\n },\n\n author: {\n selectors: ['div.story--header--author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"datePublished\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.story', '.entry-content.'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: ['div.article-hero-headline h1', 'div.article-hed h1'],\n },\n\n author: {\n selectors: [\n 'div.article-inline-byline span.byline-name',\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', 'div.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.MblGHNMJ'],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['picture', 'article.row'], 'article.row'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: ['.article-title', 'h1'],\n },\n\n author: {\n selectors: [\n '.main-author-card h3',\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.base-main-card__metadata',\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.article-content__body',\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.entity-image'],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: ['whitehouse.gov'],\n\n title: {\n selectors: ['h1', '.pane-node-title'],\n },\n\n author: {\n selectors: ['.blog-author-link', '.node-person-name-link'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.field-name-field-forall-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: ['div#content-start', '.pane-node-field-forall-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pane-node-title', '.pane-custom.pane-1'],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: ['h1.m-detail-header--title', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], 'div.date span span a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"published\"]', 'value'],\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.m-detail--body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.show-for-small-only'],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: ['.blog-header__title', '.page-title'],\n },\n\n author: {\n selectors: ['.blog-header__author-link', '.aside_author .title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value'], '.post-info'],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: ['.blog-header__description', '.page-subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.blog__container', 'article .post_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n '.post-author a',\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.content-container article',\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.post-author', '.donate-box', '.message', '.subtitle'],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: ['h2', 'h2.title'],\n },\n\n author: {\n selectors: ['.name'],\n },\n\n date_published: {\n selectors: [['.date.smart-date', 'data-origindate']],\n },\n\n dek: {\n selectors: ['.excerpt'],\n },\n\n lead_image_url: {\n selectors: [['.article-detail-hd img', 'src']],\n },\n\n content: {\n selectors: ['.detail'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lazyload', '.lazylad', '.lazylood'],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: ['h1', '.entry-header h1'],\n },\n\n author: {\n // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class\n selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [null],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', '.entry-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value'], 'header h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.tailwind-article-body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': $node => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`<figure><img src=\"${src}\"/></figure>`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#pitch'],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: ['.hed', 'h1'],\n },\n\n author: {\n selectors: ['a[rel=author]'],\n },\n\n date_published: {\n selectors: ['.pub-date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"dc.creator\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"dc.date.created\"]', 'value']],\n format: 'YYYY-MM-DD|HH[h]mm',\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['div.lead-container', '.bunker-component.lead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.document-content-style',\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwFortinetComExtractor = {\n domain: 'www.fortinet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.b15-blog-meta__author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12',\n ],\n\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n return null;\n },\n },\n },\n};\n","export const WwwFastcompanyComExtractor = {\n domain: 'www.fastcompany.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.post__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post__article'],\n },\n};\n","export const BlisterreviewComExtractor = {\n domain: 'blisterreview.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span.author-name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.entry-date', 'datetime'],\n ['meta[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[itemprop=\"image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ['img.attachment-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n [\n '.elementor-section-wrap',\n '.elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n figcaption: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.comments-area'],\n },\n};\n","export const NewsMynaviJpExtractor = {\n domain: 'news.mynavi.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'a.articleHeader_name',\n 'main div.article-author a.article-author__name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body', 'main article div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n img: $node => {\n const src = $node.attr('data-original');\n if (src !== '') {\n $node.attr('src', src);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ClinicaltrialsGovExtractor = {\n domain: 'clinicaltrials.gov',\n\n title: {\n selectors: ['h1.tr-solo_record'],\n },\n\n author: {\n selectors: ['div#sponsor.tr-info-text'],\n },\n\n date_published: {\n // selectors: ['span.term[data-term=\"Last Update Posted\"]'],\n selectors: ['div:has(> span.term[data-term=\"Last Update Posted\"])'],\n },\n\n content: {\n selectors: ['div#tab-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.usa-alert> img'],\n },\n};\n","export const GithubComExtractor = {\n domain: 'github.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n ['relative-time[datetime]', 'datetime'],\n ['span[itemprop=\"dateModified\"] relative-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n 'span[itemprop=\"about\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['#readme article']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRedditComExtractor = {\n domain: 'www.reddit.com',\n\n title: {\n selectors: [\n 'div[data-test-id=\"post-content\"] h1',\n 'div[data-test-id=\"post-content\"] h2',\n ],\n },\n\n author: {\n selectors: ['div[data-test-id=\"post-content\"] a[href*=\"user/\"]'],\n },\n\n date_published: {\n selectors: [\n 'div[data-test-id=\"post-content\"] span[data-click-id=\"timestamp\"]',\n 'div[data-test-id=\"post-content\"] a[data-click-id=\"timestamp\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['div[data-test-id=\"post-content\"] p'], // text post\n [\n 'div[data-test-id=\"post-content\"] a[target=\"_blank\"]:not([data-click-id=\"timestamp\"])', // external link\n 'div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]', // embedded media\n ], // external link with media preview (YouTube, imgur album, etc...)\n ['div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]'], // Embedded media (Reddit video)\n ['div[data-test-id=\"post-content\"] a'], // external link\n 'div[data-test-id=\"post-content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[role=\"img\"]': $node => {\n // External link image preview\n const $img = $node.find('img');\n const bgImg = $node.css('background-image');\n if ($img.length === 1 && bgImg) {\n $img.attr('src', bgImg.match(/\\((.*?)\\)/)[1].replace(/('|\")/g, ''));\n return $img;\n }\n return $node;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.icon',\n 'span[id^=\"PostAwardBadges\"]',\n 'div a[data-test-id=\"comments-page-link-num-comments\"]',\n ],\n },\n};\n","export const OtrsComExtractor = {\n domain: 'otrs.com',\n\n title: {\n selectors: ['#main article h1'],\n },\n\n author: {\n selectors: ['div.dateplusauthor a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main article'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'div.dateplusauthor',\n 'div.gr-12.push-6.footershare',\n '#atftbx',\n 'div.category-modul',\n ],\n },\n};\n","export const WwwOssnewsJpExtractor = {\n domain: 'www.ossnews.jp',\n\n title: {\n selectors: ['#alpha-block h1.hxnewstitle'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.fs12'],\n format: 'YYYY年MM月DD日 HH:mm',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#alpha-block .section:has(h1.hxnewstitle)'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BuzzapJpExtractor = {\n domain: 'buzzap.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ctiframe'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwAsahiComExtractor = {\n domain: 'www.asahi.com',\n\n title: {\n selectors: ['main h1', '.ArticleTitle h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"pubdate\"]', 'value']],\n },\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'],\n },\n};\n","export const WwwSanwaCoJpExtractor = {\n domain: 'www.sanwa.co.jp',\n\n title: {\n selectors: ['#newsContent h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['dl.date'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#newsContent'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#smartphone', 'div.sns_box', 'div.contentFoot'],\n },\n};\n","export const WwwElecomCoJpExtractor = {\n domain: 'www.elecom.co.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.section-last'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['td.TableMain2'],\n\n defaultCleaner: false,\n\n transforms: {\n table: $node => {\n $node.attr('width', 'auto');\n },\n },\n\n clean: [],\n },\n};\n","export const ScanNetsecurityNeJpExtractor = {\n domain: 'scan.netsecurity.ne.jp',\n\n title: {\n selectors: ['header.arti-header h1.head'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['header.arti-header p.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.arti-content.arti-content--thumbnail'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['aside.arti-giga'],\n },\n};\n","export const JvndbJvnJpExtractor = {\n domain: 'jvndb.jvn.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['div.modifytxt:nth-child(2)'],\n format: 'YYYY/MM/DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#news-list'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwJnsaOrgExtractor = {\n domain: 'www.jnsa.org',\n\n title: {\n selectors: ['#wgtitle h2'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main_area'],\n\n transforms: {},\n\n clean: ['#pankuzu', '#side'],\n },\n};\n","export const PhpspotOrgExtractor = {\n domain: 'phpspot.org',\n\n title: {\n selectors: ['h3.hl'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['h4.hl'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.entrybody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwInfoqComExtractor = {\n domain: 'www.infoq.com',\n\n title: {\n selectors: ['h1.heading'],\n },\n\n author: {\n selectors: ['div.widget.article__authors'],\n },\n\n date_published: {\n selectors: ['.article__readTime.date'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__data'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwMoongiftJpExtractor = {\n domain: 'www.moongift.jp',\n\n title: {\n selectors: ['h1.title a'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['ul.meta li:not(.social):first-of-type'],\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main'],\n\n transforms: {},\n\n clean: ['ul.mg_service.cf'],\n },\n};\n","export const WwwItmediaCoJpExtractor = {\n domain: 'www.itmedia.co.jp',\n\n supportedDomains: [\n 'www.atmarkit.co.jp',\n 'techtarget.itmedia.co.jp',\n 'nlab.itmedia.co.jp',\n ],\n\n title: {\n selectors: ['#cmsTitle h1'],\n },\n\n author: {\n selectors: ['#byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['#cmsAbstract h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#cmsBody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#snsSharebox'],\n },\n};\n","export const WwwPublickey1JpExtractor = {\n domain: 'www.publickey1.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'],\n },\n\n date_published: {\n selectors: ['div.pubdate'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincol'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#breadcrumbs', 'div.sbm', 'div.ad_footer'],\n },\n};\n","export const TakagihiromitsuJpExtractor = {\n domain: 'takagi-hiromitsu.jp',\n\n title: {\n selectors: ['h3'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[http-equiv=\"Last-Modified\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.body'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BookwalkerJpExtractor = {\n domain: 'bookwalker.jp',\n\n title: {\n selectors: ['h1.p-main__title', 'h1.main-heading'],\n },\n\n author: {\n selectors: ['div.p-author__list', 'div.authors'],\n },\n\n date_published: {\n selectors: [\n 'dl.p-information__data dd:nth-of-type(7)',\n '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type',\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.p-main__information',\n ['div.main-info', 'div.main-cover-inner'],\n ],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'span.label.label--trial',\n 'dt.info-head.info-head--coin',\n 'dd.info-contents.info-contents--coin',\n 'div.info-notice.fn-toggleClass',\n ],\n },\n};\n","export const WwwYomiuriCoJpExtractor = {\n domain: 'www.yomiuri.co.jp',\n\n title: {\n selectors: ['h1.title-article.c-article-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.p-main-contents'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const JapanCnetComExtractor = {\n domain: 'japan.cnet.com',\n\n title: {\n selectors: ['.leaf-headline-ttl'],\n },\n\n author: {\n selectors: ['.writer'],\n },\n\n date_published: {\n selectors: ['.date'],\n format: 'YYYY年MM月DD日 HH時mm分',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const DeadlineComExtractor = {\n domain: 'deadline.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['section.author h2'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item'],\n\n transforms: {\n '.embed-twitter': $node => {\n const innerHtml = $node.html();\n $node.replaceWith(innerHtml);\n },\n },\n\n clean: ['figcaption'],\n },\n};\n","export const WwwGizmodoJpExtractor = {\n domain: 'www.gizmodo.jp',\n\n title: {\n selectors: ['h1.p-post-title'],\n },\n\n author: {\n selectors: ['li.p-post-AssistAuthor'],\n },\n\n date_published: {\n selectors: [['li.p-post-AssistTime time', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.p-post'],\n\n transforms: {\n 'img.p-post-thumbnailImage': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['h1.p-post-title', 'ul.p-post-Assist'],\n },\n};\n","export const GetnewsJpExtractor = {\n domain: 'getnews.jp',\n\n title: {\n selectors: ['article h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.prof'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['ul.cattag-top time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.post-bodycopy'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwLifehackerJpExtractor = {\n domain: 'www.lifehacker.jp',\n\n title: {\n selectors: ['h1[class^=\"article_pArticle_Title\"]', 'h1.lh-summary-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n 'p.lh-entryDetailInner--credit',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['div.lh-entryDetail-header time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[class^=\"article_pArticle_Body__\"]',\n 'div.lh-entryDetail-body',\n ],\n\n transforms: {\n 'img.lazyload': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['p.lh-entryDetailInner--credit'],\n },\n};\n","export const SectIijAdJpExtractor = {\n domain: 'sect.iij.ad.jp',\n\n title: {\n selectors: ['div.title-box-inner h1', 'h3'],\n },\n\n author: {\n selectors: ['p.post-author a', 'dl.entrydate dd'],\n },\n\n date_published: {\n selectors: ['time'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-inner', '#article'],\n\n transforms: {},\n\n clean: ['dl.entrydate'],\n },\n};\n","export const WwwOreillyCoJpExtractor = {\n domain: 'www.oreilly.co.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h3'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"]', 'li[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [\n ['dd[itemprop=\"datePublished\"]', 'content'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image:secure_url\"]', 'value'],\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['section.detail', '#content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.social-tools'],\n },\n};\n","export const WwwIpaGoJpExtractor = {\n domain: 'www.ipa.go.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.ipar_text_right'],\n format: 'YYYY年M月D日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#ipar_main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['p.ipar_text_right'],\n },\n};\n","export const WeeklyAsciiJpExtractor = {\n domain: 'weekly.ascii.jp',\n\n title: {\n selectors: ['article h1', 'h1[itemprop=\"headline\"]'],\n },\n\n author: {\n selectors: ['p.author'],\n },\n\n date_published: {\n selectors: ['p.date', ['meta[name=\"odate\"]', 'value']],\n\n format: 'YYYY年MM月DD日 HH:mm',\n\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div#contents_detail', 'div.article'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const TechlogIijAdJpExtractor = {\n domain: 'techlog.iij.ad.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['a[rel=\"author\"]'],\n },\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.wp_social_bookmarking_light'],\n },\n};\n","export const JapanZdnetComExtractor = {\n domain: 'japan.zdnet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"cXenseParse:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwRbbtodayComExtractor = {\n domain: 'www.rbbtoday.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.writer.writer-name'],\n },\n\n date_published: {\n selectors: [['header time', 'datetime']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value'], '.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.arti-content'],\n\n transforms: {},\n\n clean: ['.arti-giga'],\n },\n};\n","export const WwwLemondeFrExtractor = {\n domain: 'www.lemonde.fr',\n\n title: {\n selectors: ['h1.article__title'],\n },\n\n author: {\n selectors: ['.author__name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article__desc'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__content'],\n\n transforms: {},\n\n clean: ['figcaption'],\n },\n};\n","export const WwwPhoronixComExtractor = {\n domain: 'www.phoronix.com',\n\n title: {\n selectors: ['article h1', 'article header'],\n },\n\n author: {\n selectors: ['.author a:first-child'],\n },\n\n date_published: {\n selectors: ['.author'],\n // 1 June 2019 at 08:34 PM EDT\n format: 'D MMMM YYYY at hh:mm',\n timezone: 'America/New_York',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PitchforkComExtractor = {\n domain: 'pitchfork.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.authors-detail__display-name',\n ],\n },\n\n date_published: {\n selectors: ['div[class^=\"InfoSliceWrapper-\"]', ['.pub-date', 'datetime']],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n '.review-detail__abstract',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['.single-album-tombstone__art img', 'src'],\n ],\n },\n\n content: {\n selectors: ['div.body__inner-container', '.review-detail__text'],\n },\n\n extend: {\n score: {\n selectors: ['p[class*=\"Rating\"]', '.score'],\n },\n },\n};\n","export const BiorxivOrgExtractor = {\n domain: 'biorxiv.org',\n\n title: {\n selectors: ['h1#page-title'],\n },\n\n author: {\n selectors: [\n 'div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors',\n ],\n },\n\n content: {\n selectors: ['div#abstract-1'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const EpaperZeitDeExtractor = {\n domain: 'epaper.zeit.de',\n\n title: {\n selectors: ['p.title'],\n },\n\n author: {\n selectors: ['.article__author'],\n },\n\n date_published: null,\n\n excerpt: {\n selectors: ['subtitle'],\n },\n\n lead_image_url: null,\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'p.title': 'h1',\n '.article__author': 'p',\n byline: 'p',\n linkbox: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['image-credits', 'box[type=citation]'],\n },\n};\n","export const WwwLadbibleComExtractor = {\n domain: 'www.ladbible.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['[class*=Byline]'],\n },\n\n date_published: {\n selectors: ['time'],\n timezone: 'Europe/London',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['[class*=ArticleContainer]'],\n clean: [\n 'time',\n 'source',\n 'a[href^=\"https://www.ladbible.com/\"]',\n 'picture',\n '[class*=StyledCardBlock]',\n ],\n },\n};\n","export const TimesofindiaIndiatimesComExtractor = {\n domain: 'timesofindia.indiatimes.com',\n\n title: {\n selectors: ['h1'],\n },\n\n extend: {\n reporter: {\n selectors: ['div.byline'],\n transforms: {},\n },\n },\n\n date_published: {\n selectors: ['.byline'],\n format: 'MMM D, YYYY, HH:mm z',\n timezone: 'Asia/Kolkata',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.contentwrapper:has(section)'],\n defaultCleaner: false,\n\n clean: [\n 'section',\n 'h1',\n '.byline',\n '.img_cptn',\n '.icon_share_wrap',\n 'ul[itemtype=\"https://schema.org/BreadcrumbList\"]',\n ],\n },\n};\n","export const MaTtiasBeExtractor = {\n domain: 'ma.ttias.be',\n\n title: {\n selectors: [['meta[name=\"twitter:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n content: {\n selectors: [['.content']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // h1 elements will be demoted to h2, so demote h2 elements to h3.\n return 'h3';\n },\n h1: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // A subsequent h2 will be removed if there is not a paragraph before it, so\n // add a paragraph here. It will be removed anyway because it is empty.\n $node.after('<p></p>');\n },\n ul: $node => {\n // Articles contain lists of links which look like, but are not, navigation\n // elements. Adding this class attribute avoids them being incorrectly removed.\n $node.attr('class', 'entry-content-asset');\n },\n },\n },\n};\n","export const PastebinComExtractor = {\n domain: 'pastebin.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.username', '.paste_box_line2 .t_us + a'],\n },\n\n date_published: {\n selectors: ['.date', '.paste_box_line2 .t_da + span'],\n timezone: 'America/New_York',\n format: 'MMMM D, YYYY',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.source', '#selectable .text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n ol: 'div',\n li: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwGrueneDeExtractor = {\n domain: 'www.gruene.de',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[property=\"og:image\"]', 'content']],\n },\n\n content: {\n // selectors: ['section'],\n selectors: [['section header', 'section h2', 'section p', 'section ol']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['figcaption', 'p[class]'],\n },\n};\n","export const WwwEngadgetComExtractor = {\n domain: 'www.engadget.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['a.th-meta[data-ylk*=\"subsec:author\"]'],\n },\n\n // Engadget stories have publish dates, but the only representation of them on the page\n // is in a format like \"2h ago\". There are also these tags with blank values:\n // <meta class=\"swiftype\" name=\"published_at\" data-type=\"date\" value=\"\">\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: ['div[class*=\"o-title_mark\"] div'],\n },\n\n // Engadget stories do have lead images specified by an og:image meta tag, but selecting\n // the value attribute of that tag fails. I believe the \"ℑ\" sequence of characters\n // is triggering this inability to select the attribute value.\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n [\n // Some figures will be inside div.article-text, but some header figures/images\n // will not.\n '#page_body figure:not(div.article-text figure)',\n 'div.article-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ArstechnicaComExtractor = {\n domain: 'arstechnica.com',\n\n // Articles from this site are often paginated, but I was unable to write a CSS\n // selector to find the next page. On the last page, there will be a link with a CSS\n // selector indicating that the previous page is next. But the parser appears to find\n // the next page without this extractor finding it, as long as the fallback option is\n // left at its default value of true.\n\n title: {\n selectors: ['title'],\n },\n\n author: {\n selectors: ['*[rel=\"author\"] *[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['.byline time', 'datetime']],\n },\n\n dek: {\n selectors: ['h2[itemprop=\"description\"]'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // Some pages have an element h2 that is significant, and that the parser will\n // remove if not following a paragraph. Adding this empty paragraph fixes it, and\n // the empty paragraph will be removed anyway.\n $node.before('<p></p>');\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result.\n clean: [\n // Remove enlarge links and separators inside image captions.\n 'figcaption .enlarge-link',\n 'figcaption .sep',\n\n // I could not transform the video into usable elements, so I\n // removed them.\n 'figure.video',\n\n // Image galleries that do not work.\n '.gallery',\n\n 'aside',\n '.sidebar',\n ],\n },\n};\n","export const WwwNdtvComExtractor = {\n domain: 'www.ndtv.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"] span[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['span[itemprop=\"dateModified\"]', 'content']],\n },\n\n dek: {\n selectors: ['h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // This site puts a dateline in a 'b' above the first paragraph, and then somehow\n // blends it into the first paragraph with CSS. This transform moves the dateline\n // to the first paragraph.\n '.place_cont': $node => {\n if (!$node.parents('p').length) {\n const nextSibling = $node.next('p');\n if (nextSibling) {\n $node.remove();\n nextSibling.prepend($node);\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.highlghts_Wdgt',\n '.ins_instory_dv_caption',\n 'input',\n '._world-wrapper .mt20',\n ],\n },\n};\n","export const SpektrumExtractor = {\n domain: 'www.spektrum.de',\n\n title: {\n selectors: ['.content__title'],\n },\n\n author: {\n selectors: ['.content__author__info__name'],\n },\n\n date_published: {\n selectors: ['.content__meta__date'],\n timezone: 'Europe/Berlin',\n },\n\n dek: {\n selectors: ['.content__intro'],\n },\n\n lead_image_url: {\n selectors: [\n // This is how the meta tag appears in the original source code.\n ['meta[name=\"og:image\"]', 'value'],\n // This is how the meta tag appears in the DOM in Chrome.\n // The selector is included here to make the code work within the browser as well.\n ['meta[property=\"og:image\"]', 'content'],\n // This is the image that is shown on the page.\n // It can be slightly cropped compared to the original in the meta tag.\n '.image__article__top img',\n ],\n },\n\n content: {\n selectors: ['article.content'],\n clean: [\n '.breadcrumbs',\n '.hide-for-print',\n 'aside',\n 'header h2',\n '.image__article__top',\n '.content__author',\n '.copyright',\n '.callout-box',\n ],\n },\n};\n","export const PostlightComExtractor = {\n domain: 'postlight.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.single-hero__abstract'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'section.pl-post-link',\n 'aside',\n 'section.insights_featured_case_studies',\n ],\n },\n};\n","export const WwwInvestmentexecutiveComExtractor = {\n domain: 'www.investmentexecutive.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['div[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['section.article-body'],\n\n clean: ['.hidden'],\n },\n};\n","export const WwwCbcCaExtractor = {\n domain: 'www.cbc.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.authorText', '.bylineDetails'],\n },\n\n date_published: {\n selectors: [['.timeStamp[datetime]', 'datetime']],\n },\n\n dek: {\n selectors: ['.deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.story'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","(function(){\n\n var LTR_MARK = \"\\u200e\",\n RTL_MARK = \"\\u200f\",\n LTR = 'ltr', // Left to right direction content\n RTL = 'rtl', // Right to left direction content\n BIDI = 'bidi', // Both directions - any and all directions will not be ok\n NODI = ''; // No direction - any and all directions are ok\n\n var rtlSciriptRanges = {\n Hebrew: [\"0590\",\"05FF\"],\n Arabic: [\"0600\",\"06FF\"],\n NKo: [\"07C0\",\"07FF\"],\n Syriac: [\"0700\",\"074F\"],\n Thaana: [\"0780\",\"07BF\"],\n Tifinagh: [\"2D30\",\"2D7F\"]\n };\n\n /*\n * Gets string direction\n * @param {string} - String to check for direction\n * @returns {string} - 'ltr' if given string is left-to-right, \n * 'rtl' if it's right-to-left and 'bidi' if it has both types of characters \n */\n function getDirection(string) {\n\n if(typeof string === 'undefined')\n throw new Error('TypeError missing argument');\n\n if(typeof string !== 'string')\n throw new Error('TypeError getDirection expects strings');\n\n if(string === '')\n return NODI;\n \n if(string.indexOf(LTR_MARK) > -1 && string.indexOf(RTL_MARK) > -1)\n return BIDI;\n\n if(string.indexOf(LTR_MARK) > -1)\n return LTR;\n\n if(string.indexOf(RTL_MARK) > -1)\n return RTL;\n\n var hasRtl = hasDirectionCharacters(string, RTL);\n var hasLtr = hasDirectionCharacters(string, LTR);\n \n if(hasRtl && hasLtr)\n return BIDI;\n\n if(hasLtr)\n return LTR;\n\n if(hasRtl)\n return RTL;\n\n return NODI;\n }\n /**\n * Determine if a string has characters in right-to-left or left-to-right Unicode blocks\n * @param {string} string - String to check for characters\n * @param {string} direction - Direction to check. Either 'ltr' or 'rtl' string\n * @returns {boolean} - True if given string has direction specific characters, False otherwise\n */\n function hasDirectionCharacters(string, direction) {\n var i, char, range, charIsRtl,\n hasRtl = false,\n hasLtr = false,\n hasDigit = false;\n\n hasDigit = (string.search(/[0-9]/) > -1);\n\n // Remove white space and non directional characters\n string = string.replace(/[\\s\\n\\0\\f\\t\\v\\'\\\"\\-0-9\\+\\?\\!]+/gm, '');\n\n // Loop through each character\n for(i=0; i<string.length; i++) {\n char = string.charAt(i);\n\n // Assume character is not rtl\n charIsRtl = false;\n\n // Test each character against all ltr script ranges\n for (range in rtlSciriptRanges) {\n\n if (rtlSciriptRanges.hasOwnProperty(range)) {\n\n if ( isInScriptRange( char,\n rtlSciriptRanges[range][0],\n rtlSciriptRanges[range][1]) ){\n\n // If character is rtl, set rtl flag (hasRtl) for string to true\n hasRtl = true;\n\n // Set rtl flag for this character to true\n charIsRtl = true;\n }\n }\n }\n\n // If this character is *not* rtl then it is ltr and string has\n // ltr characters\n if(charIsRtl === false) {\n hasLtr = true;\n }\n }\n\n if(direction === RTL)\n return hasRtl;\n if(direction === LTR)\n return hasLtr || (!hasRtl && hasDigit);\n }\n\n /**\n * Checks if a a character is in a Unicode block range\n * @param {string} char - The character to check. An string with only one character\n * @param {string} from - Starting Unicode code of block in hexadecimal. Example: \"2D30\"\n * @param {string} to - Ending Unicode code of block in hexadecimal. Example: \"2F30\"\n * @returns {boolean} - true if char is in range.\n */\n function isInScriptRange(char, from, to) {\n var charCode = char.charCodeAt(0),\n fromCode = parseInt(from, 16),\n toCode = parseInt(to, 16);\n\n return charCode > fromCode && charCode < toCode;\n }\n\n /**\n * Monkey-patch String global object to expose getDirection method\n */\n function patchStringPrototype () {\n String.prototype.getDirection = function() {\n return getDirection(this.valueOf());\n };\n }\n\n // TODO make it AMD friendly\n if(typeof exports !== 'undefined') {\n exports.getDirection = getDirection;\n exports.patch = patchStringPrototype;\n } else {\n this.stringDirection = {\n getDirection: getDirection,\n patch: patchStringPrototype\n };\n }\n\n}).call(this);\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = ['.entry-summary'];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nexport const TIME_NOW_STRING = /^\\s*(just|right)?\\s*now\\s*/i;\nconst timeUnits = [\n 'seconds?',\n 'minutes?',\n 'hours?',\n 'days?',\n 'weeks?',\n 'months?',\n 'years?',\n];\nconst allTimeUnits = timeUnits.join('|');\nexport const TIME_AGO_STRING = new RegExp(\n `(\\\\d+)\\\\s+(${allTimeUnits})\\\\s+ago`,\n 'i'\n);\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING = new RegExp(\n `(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`,\n 'ig'\n);\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE = new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(author.replace(CLEAN_AUTHOR_RE, '$2').trim());\n}\n","(function(module) {\n 'use strict';\n\n module.exports.is_uri = is_iri;\n module.exports.is_http_uri = is_http_iri;\n module.exports.is_https_uri = is_https_iri;\n module.exports.is_web_uri = is_web_iri;\n // Create aliases\n module.exports.isUri = is_iri;\n module.exports.isHttpUri = is_http_iri;\n module.exports.isHttpsUri = is_https_iri;\n module.exports.isWebUri = is_web_iri;\n\n\n // private function\n // internal URI spitter method - direct from RFC 3986\n var splitUri = function(uri) {\n var splitted = uri.match(/(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/);\n return splitted;\n };\n\n function is_iri(value) {\n if (!value) {\n return;\n }\n\n // check for illegal characters\n if (/[^a-z0-9\\:\\/\\?\\#\\[\\]\\@\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=\\.\\-\\_\\~\\%]/i.test(value)) return;\n\n // check for hex escapes that aren't complete\n if (/%[^0-9a-f]/i.test(value)) return;\n if (/%[0-9a-f](:?[^0-9a-f]|$)/i.test(value)) return;\n\n var splitted = [];\n var scheme = '';\n var authority = '';\n var path = '';\n var query = '';\n var fragment = '';\n var out = '';\n\n // from RFC 3986\n splitted = splitUri(value);\n scheme = splitted[1]; \n authority = splitted[2];\n path = splitted[3];\n query = splitted[4];\n fragment = splitted[5];\n\n // scheme and path are required, though the path can be empty\n if (!(scheme && scheme.length && path.length >= 0)) return;\n\n // if authority is present, the path must be empty or begin with a /\n if (authority && authority.length) {\n if (!(path.length === 0 || /^\\//.test(path))) return;\n } else {\n // if authority is not present, the path must not start with //\n if (/^\\/\\//.test(path)) return;\n }\n\n // scheme must begin with a letter, then consist of letters, digits, +, ., or -\n if (!/^[a-z][a-z0-9\\+\\-\\.]*$/.test(scheme.toLowerCase())) return;\n\n // re-assemble the URL per section 5.3 in RFC 3986\n out += scheme + ':';\n if (authority && authority.length) {\n out += '//' + authority;\n }\n\n out += path;\n\n if (query && query.length) {\n out += '?' + query;\n }\n\n if (fragment && fragment.length) {\n out += '#' + fragment;\n }\n\n return out;\n }\n\n function is_http_iri(value, allowHttps) {\n if (!is_iri(value)) {\n return;\n }\n\n var splitted = [];\n var scheme = '';\n var authority = '';\n var path = '';\n var port = '';\n var query = '';\n var fragment = '';\n var out = '';\n\n // from RFC 3986\n splitted = splitUri(value);\n scheme = splitted[1]; \n authority = splitted[2];\n path = splitted[3];\n query = splitted[4];\n fragment = splitted[5];\n\n if (!scheme) return;\n\n if(allowHttps) {\n if (scheme.toLowerCase() != 'https') return;\n } else {\n if (scheme.toLowerCase() != 'http') return;\n }\n\n // fully-qualified URIs must have an authority section that is\n // a valid host\n if (!authority) {\n return;\n }\n\n // enable port component\n if (/:(\\d+)$/.test(authority)) {\n port = authority.match(/:(\\d+)$/)[0];\n authority = authority.replace(/:\\d+$/, '');\n }\n\n out += scheme + ':';\n out += '//' + authority;\n \n if (port) {\n out += port;\n }\n \n out += path;\n \n if(query && query.length){\n out += '?' + query;\n }\n\n if(fragment && fragment.length){\n out += '#' + fragment;\n }\n \n return out;\n }\n\n function is_https_iri(value) {\n return is_http_iri(value, true);\n }\n\n function is_web_iri(value) {\n return (is_http_iri(value) || is_https_iri(value));\n }\n\n})(module);\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","!function(a,i){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=i(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],i):i(a.moment)}(this,function(o){\"use strict\";void 0===o.version&&o.default&&(o=o.default);var i,A={},n={},t={},s={},u={};o&&\"string\"==typeof o.version||N(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\");var a=o.version.split(\".\"),e=+a[0],r=+a[1];function m(a){return 96<a?a-87:64<a?a-29:a-48}function c(a){var i=0,e=a.split(\".\"),r=e[0],c=e[1]||\"\",o=1,A=0,n=1;for(45===a.charCodeAt(0)&&(n=-(i=1));i<r.length;i++)A=60*A+m(r.charCodeAt(i));for(i=0;i<c.length;i++)o/=60,A+=m(c.charCodeAt(i))*o;return A*n}function f(a){for(var i=0;i<a.length;i++)a[i]=c(a[i])}function l(a,i){var e,r=[];for(e=0;e<i.length;e++)r[e]=a[i[e]];return r}function p(a){var i=a.split(\"|\"),e=i[2].split(\" \"),r=i[3].split(\"\"),c=i[4].split(\" \");return f(e),f(r),f(c),function(a,i){for(var e=0;e<i;e++)a[e]=Math.round((a[e-1]||0)+6e4*a[e]);a[i-1]=1/0}(c,r.length),{name:i[0],abbrs:l(i[1].split(\" \"),r),offsets:l(e,r),untils:c,population:0|i[5]}}function M(a){a&&this._set(p(a))}function b(a,i){this.name=a,this.zones=i}function d(a){var i=a.toTimeString(),e=i.match(/\\([a-z ]+\\)/i);\"GMT\"===(e=e&&e[0]?(e=e[0].match(/[A-Z]/g))?e.join(\"\"):void 0:(e=i.match(/[A-Z]{3,5}/g))?e[0]:void 0)&&(e=void 0),this.at=+a,this.abbr=e,this.offset=a.getTimezoneOffset()}function h(a){this.zone=a,this.offsetScore=0,this.abbrScore=0}function E(a,i){for(var e,r;r=6e4*((i.at-a.at)/12e4|0);)(e=new d(new Date(a.at+r))).offset===a.offset?a=e:i=e;return a}function g(a,i){return a.offsetScore!==i.offsetScore?a.offsetScore-i.offsetScore:a.abbrScore!==i.abbrScore?a.abbrScore-i.abbrScore:a.zone.population!==i.zone.population?i.zone.population-a.zone.population:i.zone.name.localeCompare(a.zone.name)}function P(a,i){var e,r;for(f(i),e=0;e<i.length;e++)r=i[e],u[r]=u[r]||{},u[r][a]=!0}function z(){try{var a=Intl.DateTimeFormat().resolvedOptions().timeZone;if(a&&3<a.length){var i=s[T(a)];if(i)return i;N(\"Moment Timezone found \"+a+\" from the Intl api, but did not have that data loaded.\")}}catch(a){}var e,r,c,o=function(){var a,i,e,r=(new Date).getFullYear()-2,c=new d(new Date(r,0,1)),o=[c];for(e=1;e<48;e++)(i=new d(new Date(r,e,1))).offset!==c.offset&&(a=E(c,i),o.push(a),o.push(new d(new Date(a.at+6e4)))),c=i;for(e=0;e<4;e++)o.push(new d(new Date(r+e,0,1))),o.push(new d(new Date(r+e,6,1)));return o}(),A=o.length,n=function(a){var i,e,r,c=a.length,o={},A=[];for(i=0;i<c;i++)for(e in r=u[a[i].offset]||{})r.hasOwnProperty(e)&&(o[e]=!0);for(i in o)o.hasOwnProperty(i)&&A.push(s[i]);return A}(o),t=[];for(r=0;r<n.length;r++){for(e=new h(S(n[r]),A),c=0;c<A;c++)e.scoreOffsetAt(o[c]);t.push(e)}return t.sort(g),0<t.length?t[0].zone.name:void 0}function T(a){return(a||\"\").toLowerCase().replace(/\\//g,\"_\")}function _(a){var i,e,r,c;for(\"string\"==typeof a&&(a=[a]),i=0;i<a.length;i++)c=T(e=(r=a[i].split(\"|\"))[0]),A[c]=a[i],s[c]=e,P(c,r[2].split(\" \"))}function S(a,i){a=T(a);var e,r=A[a];return r instanceof M?r:\"string\"==typeof r?(r=new M(r),A[a]=r):n[a]&&i!==S&&(e=S(n[a],S))?((r=A[a]=new M)._set(e),r.name=s[a],r):null}function k(a){var i,e,r,c;for(\"string\"==typeof a&&(a=[a]),i=0;i<a.length;i++)r=T((e=a[i].split(\"|\"))[0]),c=T(e[1]),n[r]=c,s[r]=e[0],n[c]=r,s[c]=e[1]}function C(a){_(a.zones),k(a.links),function(a){var i,e,r,c;if(a&&a.length)for(i=0;i<a.length;i++)e=(c=a[i].split(\"|\"))[0].toUpperCase(),r=c[1].split(\" \"),t[e]=new b(e,r)}(a.countries),G.dataVersion=a.version}function B(a){var i=\"X\"===a._f||\"x\"===a._f;return!(!a._a||void 0!==a._tzm||i)}function N(a){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(a)}function G(a){var i=Array.prototype.slice.call(arguments,0,-1),e=arguments[arguments.length-1],r=S(e),c=o.utc.apply(null,i);return r&&!o.isMoment(a)&&B(c)&&c.add(r.parse(c),\"minutes\"),c.tz(e),c}(e<2||2==e&&r<6)&&N(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+o.version+\". See momentjs.com\"),M.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var i,e=+a,r=this.untils;for(i=0;i<r.length;i++)if(e<r[i])return i},countries:function(){var i=this.name;return Object.keys(t).filter(function(a){return-1!==t[a].zones.indexOf(i)})},parse:function(a){var i,e,r,c,o=+a,A=this.offsets,n=this.untils,t=n.length-1;for(c=0;c<t;c++)if(i=A[c],e=A[c+1],r=A[c?c-1:c],i<e&&G.moveAmbiguousForward?i=e:r<i&&G.moveInvalidForward&&(i=r),o<n[c]-6e4*i)return A[c];return A[t]},abbr:function(a){return this.abbrs[this._index(a)]},offset:function(a){return N(\"zone.offset has been deprecated in favor of zone.utcOffset\"),this.offsets[this._index(a)]},utcOffset:function(a){return this.offsets[this._index(a)]}},h.prototype.scoreOffsetAt=function(a){this.offsetScore+=Math.abs(this.zone.utcOffset(a.at)-a.offset),this.zone.abbr(a.at).replace(/[^A-Z]/g,\"\")!==a.abbr&&this.abbrScore++},G.version=\"0.5.36\",G.dataVersion=\"\",G._zones=A,G._links=n,G._names=s,G._countries=t,G.add=_,G.link=k,G.load=C,G.zone=S,G.zoneExists=function a(i){return a.didShowError||(a.didShowError=!0,N(\"moment.tz.zoneExists('\"+i+\"') has been deprecated in favor of !moment.tz.zone('\"+i+\"')\")),!!S(i)},G.guess=function(a){return i&&!a||(i=z()),i},G.names=function(){var a,i=[];for(a in s)s.hasOwnProperty(a)&&(A[a]||A[n[a]])&&s[a]&&i.push(s[a]);return i.sort()},G.Zone=M,G.unpack=p,G.unpackBase60=c,G.needsOffset=B,G.moveInvalidForward=!0,G.moveAmbiguousForward=!1,G.countries=function(){return Object.keys(t)},G.zonesForCountry=function(a,i){if(!(a=function(a){return a=a.toUpperCase(),t[a]||null}(a)))return null;var e=a.zones.sort();return i?e.map(function(a){return{name:a,offset:S(a).utcOffset(new Date)}}):e};var y,L=o.fn;function D(a){return function(){return this._z?this._z.abbr(this):a.call(this)}}function O(a){return function(){return this._z=null,a.apply(this,arguments)}}o.tz=G,o.defaultZone=null,o.updateOffset=function(a,i){var e,r=o.defaultZone;if(void 0===a._z&&(r&&B(a)&&!a._isUTC&&(a._d=o.utc(a._a)._d,a.utc().add(r.parse(a),\"minutes\")),a._z=r),a._z)if(e=a._z.utcOffset(a),Math.abs(e)<16&&(e/=60),void 0!==a.utcOffset){var c=a._z;a.utcOffset(-e,i),a._z=c}else a.zone(e,i)},L.tz=function(a,i){if(a){if(\"string\"!=typeof a)throw new Error(\"Time zone name must be a string, got \"+a+\" [\"+typeof a+\"]\");return this._z=S(a),this._z?o.updateOffset(this,i):N(\"Moment Timezone has no data for \"+a+\". See http://momentjs.com/timezone/docs/#/data-loading/.\"),this}if(this._z)return this._z.name},L.zoneName=D(L.zoneName),L.zoneAbbr=D(L.zoneAbbr),L.utc=O(L.utc),L.local=O(L.local),L.utcOffset=(y=L.utcOffset,function(){return 0<arguments.length&&(this._z=null),y.apply(this,arguments)}),o.tz.setDefault=function(a){return(e<2||2==e&&r<9)&&N(\"Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js \"+o.version+\".\"),o.defaultZone=a?S(a):null,o};var v=o.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(v)?(v.push(\"_z\"),v.push(\"_a\")):v&&(v._z=null),C({version:\"2022c\",zones:[\"Africa/Abidjan|GMT|0|0||48e5\",\"Africa/Nairobi|EAT|-30|0||47e5\",\"Africa/Algiers|CET|-10|0||26e5\",\"Africa/Lagos|WAT|-10|0||17e6\",\"Africa/Maputo|CAT|-20|0||26e5\",\"Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5\",\"Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6\",\"Africa/Johannesburg|SAST|-20|0||84e5\",\"Africa/Juba|EAT CAT|-30 -20|01|24nx0|\",\"Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5\",\"Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|\",\"Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5\",\"Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326\",\"America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4\",\"America/Santo_Domingo|AST|40|0||29e5\",\"America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4\",\"America/Fortaleza|-03|30|0||34e5\",\"America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5\",\"America/Panama|EST|50|0||15e5\",\"America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Bahia|-02 -03|20 30|01|1GCq0|27e5\",\"America/Managua|CST|60|0||22e5\",\"America/La_Paz|-04|40|0||19e5\",\"America/Lima|-05|50|0||11e6\",\"America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5\",\"America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5\",\"America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Phoenix|MST|70|0||42e5\",\"America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6\",\"America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4\",\"America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6\",\"America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4\",\"America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3\",\"America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2\",\"America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5\",\"America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2\",\"America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2\",\"America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Noronha|-02|20|0||30e2\",\"America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5\",\"Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5\",\"America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4\",\"America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4\",\"Antarctica/Casey|+11 +08|-b0 -80|010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10\",\"Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70\",\"Pacific/Port_Moresby|+10|-a0|0||25e4\",\"Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Asia/Tashkent|+05|-50|0||23e5\",\"Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Asia/Baghdad|+03|-30|0||66e5\",\"Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40\",\"Asia/Dhaka|+06|-60|0||16e6\",\"Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Kamchatka|+12|-c0|0||18e4\",\"Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|+07|-70|0||15e6\",\"Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|\",\"Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5\",\"Asia/Kuala_Lumpur|+08|-80|0||71e5\",\"Asia/Kolkata|IST|-5u|0||15e6\",\"Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4\",\"Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|CST|-80|0||23e6\",\"Asia/Colombo|+0530|-5u|0||22e5\",\"Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|+09|-90|0||19e4\",\"Asia/Dubai|+04|-40|0||39e5\",\"Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1q00|18e5\",\"Asia/Hong_Kong|HKT|-80|0||73e5\",\"Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4\",\"Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|WIB|-70|0||31e6\",\"Asia/Jayapura|WIT|-90|0||26e4\",\"Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4\",\"Asia/Kabul|+0430|-4u|0||46e5\",\"Asia/Karachi|PKT|-50|0||24e6\",\"Asia/Kathmandu|+0545|-5J|0||12e5\",\"Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4\",\"Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5\",\"Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3\",\"Asia/Makassar|WITA|-80|0||15e5\",\"Asia/Manila|PST|-80|0||24e6\",\"Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5\",\"Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5\",\"Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5\",\"Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5\",\"Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4\",\"Asia/Rangoon|+0630|-6u|0||48e5\",\"Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4\",\"Asia/Seoul|KST|-90|0||23e6\",\"Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2\",\"Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Tokyo|JST|-90|0||38e6\",\"Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5\",\"Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4\",\"Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5\",\"Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5\",\"Atlantic/Cape_Verde|-01|10|0||50e4\",\"Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST|-a0|0||20e5\",\"Australia/Darwin|ACST|-9u|0||12e4\",\"Australia/Eucla|+0845|-8J|0||368\",\"Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Perth|AWST|-80|0||18e5\",\"Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2\",\"Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5\",\"Etc/GMT-1|+01|-10|0||\",\"Pacific/Guadalcanal|+11|-b0|0||11e4\",\"Pacific/Fakaofo|+13|-d0|0||483\",\"Pacific/Kiritimati|+14|-e0|0||51e2\",\"Etc/GMT-2|+02|-20|0||\",\"Pacific/Tahiti|-10|a0|0||18e4\",\"Pacific/Niue|-11|b0|0||12e2\",\"Etc/GMT+12|-12|c0|0||\",\"Pacific/Galapagos|-06|60|0||25e3\",\"Etc/GMT+7|-07|70|0||\",\"Pacific/Pitcairn|-08|80|0||56\",\"Pacific/Gambier|-09|90|0||125\",\"Etc/UTC|UTC|0|0||\",\"Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5\",\"Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6\",\"Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4\",\"Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4\",\"Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4\",\"Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6\",\"Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|\",\"Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Volgograd|+04 +03|-40 -30|0101|1N7y0 9Jd0 5gn0|10e5\",\"Pacific/Honolulu|HST|a0|0||37e4\",\"MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4\",\"Pacific/Fiji|+13 +12|-d0 -c0|010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 4q00|88e4\",\"Pacific/Guam|ChST|-a0|0||17e4\",\"Pacific/Marquesas|-0930|9u|0||86e2\",\"Pacific/Pago_Pago|SST|b0|0||37e2\",\"Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Bissau\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Monrovia\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|America/Danmarkshavn\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Etc/GMT\",\"Africa/Abidjan|Etc/GMT+0\",\"Africa/Abidjan|Etc/GMT-0\",\"Africa/Abidjan|Etc/GMT0\",\"Africa/Abidjan|Etc/Greenwich\",\"Africa/Abidjan|GMT\",\"Africa/Abidjan|GMT+0\",\"Africa/Abidjan|GMT-0\",\"Africa/Abidjan|GMT0\",\"Africa/Abidjan|Greenwich\",\"Africa/Abidjan|Iceland\",\"Africa/Algiers|Africa/Tunis\",\"Africa/Cairo|Egypt\",\"Africa/Casablanca|Africa/El_Aaiun\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Ndjamena\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|America/Juneau\",\"America/Anchorage|America/Nome\",\"America/Anchorage|America/Sitka\",\"America/Anchorage|America/Yakutat\",\"America/Anchorage|US/Alaska\",\"America/Campo_Grande|America/Cuiaba\",\"America/Chicago|America/Indiana/Knox\",\"America/Chicago|America/Indiana/Tell_City\",\"America/Chicago|America/Knox_IN\",\"America/Chicago|America/Matamoros\",\"America/Chicago|America/Menominee\",\"America/Chicago|America/North_Dakota/Beulah\",\"America/Chicago|America/North_Dakota/Center\",\"America/Chicago|America/North_Dakota/New_Salem\",\"America/Chicago|America/Rainy_River\",\"America/Chicago|America/Rankin_Inlet\",\"America/Chicago|America/Resolute\",\"America/Chicago|America/Winnipeg\",\"America/Chicago|CST6CDT\",\"America/Chicago|Canada/Central\",\"America/Chicago|US/Central\",\"America/Chicago|US/Indiana-Starke\",\"America/Chihuahua|America/Mazatlan\",\"America/Chihuahua|Mexico/BajaSur\",\"America/Denver|America/Boise\",\"America/Denver|America/Cambridge_Bay\",\"America/Denver|America/Edmonton\",\"America/Denver|America/Inuvik\",\"America/Denver|America/Ojinaga\",\"America/Denver|America/Shiprock\",\"America/Denver|America/Yellowknife\",\"America/Denver|Canada/Mountain\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Fortaleza|America/Argentina/Buenos_Aires\",\"America/Fortaleza|America/Argentina/Catamarca\",\"America/Fortaleza|America/Argentina/ComodRivadavia\",\"America/Fortaleza|America/Argentina/Cordoba\",\"America/Fortaleza|America/Argentina/Jujuy\",\"America/Fortaleza|America/Argentina/La_Rioja\",\"America/Fortaleza|America/Argentina/Mendoza\",\"America/Fortaleza|America/Argentina/Rio_Gallegos\",\"America/Fortaleza|America/Argentina/Salta\",\"America/Fortaleza|America/Argentina/San_Juan\",\"America/Fortaleza|America/Argentina/San_Luis\",\"America/Fortaleza|America/Argentina/Tucuman\",\"America/Fortaleza|America/Argentina/Ushuaia\",\"America/Fortaleza|America/Belem\",\"America/Fortaleza|America/Buenos_Aires\",\"America/Fortaleza|America/Catamarca\",\"America/Fortaleza|America/Cayenne\",\"America/Fortaleza|America/Cordoba\",\"America/Fortaleza|America/Jujuy\",\"America/Fortaleza|America/Maceio\",\"America/Fortaleza|America/Mendoza\",\"America/Fortaleza|America/Paramaribo\",\"America/Fortaleza|America/Recife\",\"America/Fortaleza|America/Rosario\",\"America/Fortaleza|America/Santarem\",\"America/Fortaleza|Antarctica/Rothera\",\"America/Fortaleza|Atlantic/Stanley\",\"America/Fortaleza|Etc/GMT+3\",\"America/Godthab|America/Nuuk\",\"America/Halifax|America/Glace_Bay\",\"America/Halifax|America/Goose_Bay\",\"America/Halifax|America/Moncton\",\"America/Halifax|America/Thule\",\"America/Halifax|Atlantic/Bermuda\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/La_Paz|America/Boa_Vista\",\"America/La_Paz|America/Guyana\",\"America/La_Paz|America/Manaus\",\"America/La_Paz|America/Porto_Velho\",\"America/La_Paz|Brazil/West\",\"America/La_Paz|Etc/GMT+4\",\"America/Lima|America/Bogota\",\"America/Lima|America/Guayaquil\",\"America/Lima|Etc/GMT+5\",\"America/Los_Angeles|America/Ensenada\",\"America/Los_Angeles|America/Santa_Isabel\",\"America/Los_Angeles|America/Tijuana\",\"America/Los_Angeles|America/Vancouver\",\"America/Los_Angeles|Canada/Pacific\",\"America/Los_Angeles|Mexico/BajaNorte\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Managua|America/Belize\",\"America/Managua|America/Costa_Rica\",\"America/Managua|America/El_Salvador\",\"America/Managua|America/Guatemala\",\"America/Managua|America/Regina\",\"America/Managua|America/Swift_Current\",\"America/Managua|America/Tegucigalpa\",\"America/Managua|Canada/Saskatchewan\",\"America/Mexico_City|America/Bahia_Banderas\",\"America/Mexico_City|America/Merida\",\"America/Mexico_City|America/Monterrey\",\"America/Mexico_City|Mexico/General\",\"America/New_York|America/Detroit\",\"America/New_York|America/Fort_Wayne\",\"America/New_York|America/Indiana/Indianapolis\",\"America/New_York|America/Indiana/Marengo\",\"America/New_York|America/Indiana/Petersburg\",\"America/New_York|America/Indiana/Vevay\",\"America/New_York|America/Indiana/Vincennes\",\"America/New_York|America/Indiana/Winamac\",\"America/New_York|America/Indianapolis\",\"America/New_York|America/Iqaluit\",\"America/New_York|America/Kentucky/Louisville\",\"America/New_York|America/Kentucky/Monticello\",\"America/New_York|America/Louisville\",\"America/New_York|America/Montreal\",\"America/New_York|America/Nassau\",\"America/New_York|America/Nipigon\",\"America/New_York|America/Pangnirtung\",\"America/New_York|America/Thunder_Bay\",\"America/New_York|America/Toronto\",\"America/New_York|Canada/Eastern\",\"America/New_York|EST5EDT\",\"America/New_York|US/East-Indiana\",\"America/New_York|US/Eastern\",\"America/New_York|US/Michigan\",\"America/Noronha|Atlantic/South_Georgia\",\"America/Noronha|Brazil/DeNoronha\",\"America/Noronha|Etc/GMT+2\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|America/Jamaica\",\"America/Panama|EST\",\"America/Panama|Jamaica\",\"America/Phoenix|America/Creston\",\"America/Phoenix|America/Dawson_Creek\",\"America/Phoenix|America/Hermosillo\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Rio_Branco|America/Eirunepe\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Santo_Domingo|America/Anguilla\",\"America/Santo_Domingo|America/Antigua\",\"America/Santo_Domingo|America/Aruba\",\"America/Santo_Domingo|America/Barbados\",\"America/Santo_Domingo|America/Blanc-Sablon\",\"America/Santo_Domingo|America/Curacao\",\"America/Santo_Domingo|America/Dominica\",\"America/Santo_Domingo|America/Grenada\",\"America/Santo_Domingo|America/Guadeloupe\",\"America/Santo_Domingo|America/Kralendijk\",\"America/Santo_Domingo|America/Lower_Princes\",\"America/Santo_Domingo|America/Marigot\",\"America/Santo_Domingo|America/Martinique\",\"America/Santo_Domingo|America/Montserrat\",\"America/Santo_Domingo|America/Port_of_Spain\",\"America/Santo_Domingo|America/Puerto_Rico\",\"America/Santo_Domingo|America/St_Barthelemy\",\"America/Santo_Domingo|America/St_Kitts\",\"America/Santo_Domingo|America/St_Lucia\",\"America/Santo_Domingo|America/St_Thomas\",\"America/Santo_Domingo|America/St_Vincent\",\"America/Santo_Domingo|America/Tortola\",\"America/Santo_Domingo|America/Virgin\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Whitehorse|America/Dawson\",\"America/Whitehorse|Canada/Yukon\",\"Antarctica/Palmer|America/Punta_Arenas\",\"Asia/Baghdad|Antarctica/Syowa\",\"Asia/Baghdad|Asia/Aden\",\"Asia/Baghdad|Asia/Bahrain\",\"Asia/Baghdad|Asia/Kuwait\",\"Asia/Baghdad|Asia/Qatar\",\"Asia/Baghdad|Asia/Riyadh\",\"Asia/Baghdad|Etc/GMT-3\",\"Asia/Baghdad|Europe/Minsk\",\"Asia/Bangkok|Asia/Ho_Chi_Minh\",\"Asia/Bangkok|Asia/Novokuznetsk\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Saigon\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Etc/GMT-7\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Dhaka|Antarctica/Vostok\",\"Asia/Dhaka|Asia/Almaty\",\"Asia/Dhaka|Asia/Bishkek\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dhaka|Asia/Kashgar\",\"Asia/Dhaka|Asia/Qostanay\",\"Asia/Dhaka|Asia/Thimbu\",\"Asia/Dhaka|Asia/Thimphu\",\"Asia/Dhaka|Asia/Urumqi\",\"Asia/Dhaka|Etc/GMT-6\",\"Asia/Dhaka|Indian/Chagos\",\"Asia/Dili|Etc/GMT-9\",\"Asia/Dili|Pacific/Palau\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Asia/Tbilisi\",\"Asia/Dubai|Asia/Yerevan\",\"Asia/Dubai|Etc/GMT-4\",\"Asia/Dubai|Europe/Samara\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Mauritius\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Gaza|Asia/Hebron\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jakarta|Asia/Pontianak\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kamchatka|Asia/Anadyr\",\"Asia/Kamchatka|Etc/GMT-12\",\"Asia/Kamchatka|Kwajalein\",\"Asia/Kamchatka|Pacific/Funafuti\",\"Asia/Kamchatka|Pacific/Kwajalein\",\"Asia/Kamchatka|Pacific/Majuro\",\"Asia/Kamchatka|Pacific/Nauru\",\"Asia/Kamchatka|Pacific/Tarawa\",\"Asia/Kamchatka|Pacific/Wake\",\"Asia/Kamchatka|Pacific/Wallis\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Brunei\",\"Asia/Kuala_Lumpur|Asia/Kuching\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Etc/GMT-8\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|Asia/Macao\",\"Asia/Shanghai|Asia/Macau\",\"Asia/Shanghai|Asia/Taipei\",\"Asia/Shanghai|PRC\",\"Asia/Shanghai|ROC\",\"Asia/Tashkent|Antarctica/Mawson\",\"Asia/Tashkent|Asia/Aqtau\",\"Asia/Tashkent|Asia/Aqtobe\",\"Asia/Tashkent|Asia/Ashgabat\",\"Asia/Tashkent|Asia/Ashkhabad\",\"Asia/Tashkent|Asia/Atyrau\",\"Asia/Tashkent|Asia/Dushanbe\",\"Asia/Tashkent|Asia/Oral\",\"Asia/Tashkent|Asia/Samarkand\",\"Asia/Tashkent|Etc/GMT-5\",\"Asia/Tashkent|Indian/Kerguelen\",\"Asia/Tashkent|Indian/Maldives\",\"Asia/Tehran|Iran\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Vladivostok|Asia/Ust-Nera\",\"Asia/Yakutsk|Asia/Khandyga\",\"Atlantic/Azores|America/Scoresbysund\",\"Atlantic/Cape_Verde|Etc/GMT+1\",\"Australia/Adelaide|Australia/Broken_Hill\",\"Australia/Adelaide|Australia/South\",\"Australia/Adelaide|Australia/Yancowinna\",\"Australia/Brisbane|Australia/Lindeman\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Darwin|Australia/North\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Antarctica/Macquarie\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/Currie\",\"Australia/Sydney|Australia/Hobart\",\"Australia/Sydney|Australia/Melbourne\",\"Australia/Sydney|Australia/NSW\",\"Australia/Sydney|Australia/Tasmania\",\"Australia/Sydney|Australia/Victoria\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|Asia/Nicosia\",\"Europe/Athens|EET\",\"Europe/Athens|Europe/Bucharest\",\"Europe/Athens|Europe/Helsinki\",\"Europe/Athens|Europe/Kiev\",\"Europe/Athens|Europe/Kyiv\",\"Europe/Athens|Europe/Mariehamn\",\"Europe/Athens|Europe/Nicosia\",\"Europe/Athens|Europe/Riga\",\"Europe/Athens|Europe/Sofia\",\"Europe/Athens|Europe/Tallinn\",\"Europe/Athens|Europe/Uzhgorod\",\"Europe/Athens|Europe/Vilnius\",\"Europe/Athens|Europe/Zaporozhye\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Atlantic/Canary\",\"Europe/Lisbon|Atlantic/Faeroe\",\"Europe/Lisbon|Atlantic/Faroe\",\"Europe/Lisbon|Atlantic/Madeira\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Africa/Ceuta\",\"Europe/Paris|Arctic/Longyearbyen\",\"Europe/Paris|Atlantic/Jan_Mayen\",\"Europe/Paris|CET\",\"Europe/Paris|Europe/Amsterdam\",\"Europe/Paris|Europe/Andorra\",\"Europe/Paris|Europe/Belgrade\",\"Europe/Paris|Europe/Berlin\",\"Europe/Paris|Europe/Bratislava\",\"Europe/Paris|Europe/Brussels\",\"Europe/Paris|Europe/Budapest\",\"Europe/Paris|Europe/Busingen\",\"Europe/Paris|Europe/Copenhagen\",\"Europe/Paris|Europe/Gibraltar\",\"Europe/Paris|Europe/Ljubljana\",\"Europe/Paris|Europe/Luxembourg\",\"Europe/Paris|Europe/Madrid\",\"Europe/Paris|Europe/Malta\",\"Europe/Paris|Europe/Monaco\",\"Europe/Paris|Europe/Oslo\",\"Europe/Paris|Europe/Podgorica\",\"Europe/Paris|Europe/Prague\",\"Europe/Paris|Europe/Rome\",\"Europe/Paris|Europe/San_Marino\",\"Europe/Paris|Europe/Sarajevo\",\"Europe/Paris|Europe/Skopje\",\"Europe/Paris|Europe/Stockholm\",\"Europe/Paris|Europe/Tirane\",\"Europe/Paris|Europe/Vaduz\",\"Europe/Paris|Europe/Vatican\",\"Europe/Paris|Europe/Vienna\",\"Europe/Paris|Europe/Warsaw\",\"Europe/Paris|Europe/Zagreb\",\"Europe/Paris|Europe/Zurich\",\"Europe/Paris|Poland\",\"Europe/Ulyanovsk|Europe/Astrakhan\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Fakaofo|Etc/GMT-13\",\"Pacific/Fakaofo|Pacific/Enderbury\",\"Pacific/Fakaofo|Pacific/Kanton\",\"Pacific/Galapagos|Etc/GMT+6\",\"Pacific/Gambier|Etc/GMT+9\",\"Pacific/Guadalcanal|Etc/GMT-11\",\"Pacific/Guadalcanal|Pacific/Efate\",\"Pacific/Guadalcanal|Pacific/Kosrae\",\"Pacific/Guadalcanal|Pacific/Noumea\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kiritimati|Etc/GMT-14\",\"Pacific/Niue|Etc/GMT+11\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Pitcairn|Etc/GMT+8\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Etc/GMT-10\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tahiti|Etc/GMT+10\",\"Pacific/Tahiti|Pacific/Rarotonga\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv Europe/Uzhgorod Europe/Zaporozhye\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Honolulu Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),o});","module.exports = parseFormat\n\nvar dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\nvar abbreviatedDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\nvar shortestDayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nvar monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\nvar abbreviatedMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\nvar regexDayNames = new RegExp(dayNames.join('|'), 'i')\nvar regexAbbreviatedDayNames = new RegExp(abbreviatedDayNames.join('|'), 'i')\nvar regexShortestDayNames = new RegExp('\\\\b(' + shortestDayNames.join('|') + ')\\\\b', 'i')\nvar regexMonthNames = new RegExp(monthNames.join('|'), 'i')\nvar regexAbbreviatedMonthNames = new RegExp(abbreviatedMonthNames.join('|'), 'i')\n\nvar regexFirstSecondThirdFourth = /(\\d+)(st|nd|rd|th)\\b/i\nvar regexEndian = /(\\d{1,4})([/.-])(\\d{1,2})[/.-](\\d{1,4})/\n\nvar regexTimezone = /((\\+|-)\\d\\d:?\\d\\d)$/\nvar amOrPm = '(' + ['AM?', 'PM?'].join('|') + ')'\nvar regexHoursWithLeadingZeroDigitMinutesSecondsAmPm = new RegExp('0\\\\d\\\\:\\\\d{1,2}\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursWithLeadingZeroDigitMinutesAmPm = new RegExp('0\\\\d\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursWithLeadingZeroDigitAmPm = new RegExp('0\\\\d(\\\\s*)' + amOrPm, 'i')\nvar regexHoursMinutesSecondsAmPm = new RegExp('\\\\d{1,2}\\\\:\\\\d{1,2}\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursMinutesAmPm = new RegExp('\\\\d{1,2}\\\\:\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\nvar regexHoursAmPm = new RegExp('\\\\d{1,2}(\\\\s*)' + amOrPm, 'i')\n\nvar regexISO8601HoursWithLeadingZeroMinutesSecondsMilliseconds = /\\d{2}:\\d{2}:\\d{2}\\.\\d{3}/\nvar regexISO8601HoursWithLeadingZeroMinutesSecondsCentiSeconds = /\\d{2}:\\d{2}:\\d{2}\\.\\d{2}/\nvar regexISO8601HoursWithLeadingZeroMinutesSecondsDeciSeconds = /\\d{2}:\\d{2}:\\d{2}\\.\\d{1}/\nvar regexHoursWithLeadingZeroMinutesSeconds = /0\\d:\\d{2}:\\d{2}/\nvar regexHoursWithLeadingZeroMinutes = /0\\d:\\d{2}/\nvar regexHoursMinutesSeconds = /\\d{1,2}:\\d{2}:\\d{2}/\nvar regexHoursMinutesSecondsMilliseconds = /\\d{1,2}:\\d{2}:\\d{2}\\.\\d{3}/\nvar regexHoursMinutesSecondsCentiSeconds = /\\d{1,2}:\\d{2}:\\d{2}\\.\\d{2}/\nvar regexHoursMinutesSecondsDeciSeconds = /\\d{1,2}:\\d{2}:\\d{2}\\.\\d{1}/\nvar regexHoursMinutes = /\\d{1,2}:\\d{2}/\nvar regexYearLong = /\\d{4}/\nvar regexDayLeadingZero = /0\\d/\nvar regexDay = /\\d{1,2}/\nvar regexYearShort = /\\d{2}/\n\nvar regexDayShortMonthShort = /^([1-9])\\/([1-9]|0[1-9])$/\nvar regexDayShortMonth = /^([1-9])\\/(1[012])$/\nvar regexDayMonthShort = /^(0[1-9]|[12][0-9]|3[01])\\/([1-9])$/\nvar regexDayMonth = /^(0[1-9]|[12][0-9]|3[01])\\/(1[012]|0[1-9])$/\n\nvar regexMonthShortYearShort = /^([1-9])\\/([1-9][0-9])$/\nvar regexMonthYearShort = /^(0[1-9]|1[012])\\/([1-9][0-9])$/\n\nvar formatIncludesMonth = /([/][M]|[M][/]|[MM]|[MMMM])/\n\nvar regexFillingWords = /\\b(at)\\b/i\n\nvar regexUnixMillisecondTimestamp = /\\d{13}/\nvar regexUnixTimestamp = /\\d{10}/\n\n// option defaults\nvar defaultOrder = {\n '/': 'MDY',\n '.': 'DMY',\n '-': 'YMD'\n}\n\nfunction parseFormat (dateString, options) {\n var format = dateString.toString()\n\n // default options\n options = options || {}\n options.preferredOrder = options.preferredOrder || defaultOrder\n\n // Unix Millisecond Timestamp ☛ x\n format = format.replace(regexUnixMillisecondTimestamp, 'x')\n // Unix Timestamp ☛ X\n format = format.replace(regexUnixTimestamp, 'X')\n\n // escape filling words\n format = format.replace(regexFillingWords, '[$1]')\n\n // DAYS\n\n // Monday ☛ dddd\n format = format.replace(regexDayNames, 'dddd')\n // Mon ☛ ddd\n format = format.replace(regexAbbreviatedDayNames, 'ddd')\n // Mo ☛ dd\n format = format.replace(regexShortestDayNames, 'dd')\n\n // 1st, 2nd, 23rd ☛ do\n format = format.replace(regexFirstSecondThirdFourth, 'Do')\n\n // MONTHS\n\n // January ☛ MMMM\n format = format.replace(regexMonthNames, 'MMMM')\n // Jan ☛ MMM\n format = format.replace(regexAbbreviatedMonthNames, 'MMM')\n\n // replace endians, like 8/20/2010, 20.8.2010 or 2010-8-20\n format = format.replace(regexEndian, replaceEndian.bind(null, options))\n\n // TIME\n\n // timezone +02:00 ☛ Z\n format = format.replace(regexTimezone, 'Z')\n // 23:39:43.331 ☛ 'HH:mm:ss.SSS'\n format = format.replace(regexISO8601HoursWithLeadingZeroMinutesSecondsMilliseconds, 'HH:mm:ss.SSS')\n // 23:39:43.33 ☛ 'HH:mm:ss.SS'\n format = format.replace(regexISO8601HoursWithLeadingZeroMinutesSecondsCentiSeconds, 'HH:mm:ss.SS')\n // 23:39:43.3 ☛ 'HH:mm:ss.S'\n format = format.replace(regexISO8601HoursWithLeadingZeroMinutesSecondsDeciSeconds, 'HH:mm:ss.S')\n function replaceWithAmPm (timeFormat) {\n return function (match, whitespace, amPm) {\n return timeFormat + whitespace + (amPm[0].toUpperCase() === amPm[0] ? 'A' : 'a')\n }\n }\n // 05:30:20pm ☛ hh:mm:ssa\n format = format.replace(regexHoursWithLeadingZeroDigitMinutesSecondsAmPm, replaceWithAmPm('hh:mm:ss'))\n // 10:30:20pm ☛ h:mm:ssa\n format = format.replace(regexHoursMinutesSecondsAmPm, replaceWithAmPm('h:mm:ss'))\n // 05:30pm ☛ hh:mma\n format = format.replace(regexHoursWithLeadingZeroDigitMinutesAmPm, replaceWithAmPm('hh:mm'))\n // 10:30pm ☛ h:mma\n format = format.replace(regexHoursMinutesAmPm, replaceWithAmPm('h:mm'))\n // 05pm ☛ hha\n format = format.replace(regexHoursWithLeadingZeroDigitAmPm, replaceWithAmPm('hh'))\n // 10pm ☛ ha\n format = format.replace(regexHoursAmPm, replaceWithAmPm('h'))\n // 05:30:20 ☛ HH:mm:ss\n format = format.replace(regexHoursWithLeadingZeroMinutesSeconds, 'HH:mm:ss')\n // 5:30:20.222 ☛ H:mm:ss.SSS\n format = format.replace(regexHoursMinutesSecondsMilliseconds, 'H:mm:ss.SSS')\n // 5:30:20.22 ☛ H:mm:ss.SS\n format = format.replace(regexHoursMinutesSecondsCentiSeconds, 'H:mm:ss.SS')\n // 5:30:20.2 ☛ H:mm:ss.S\n format = format.replace(regexHoursMinutesSecondsDeciSeconds, 'H:mm:ss.S')\n // 10:30:20 ☛ H:mm:ss\n format = format.replace(regexHoursMinutesSeconds, 'H:mm:ss')\n // 05:30 ☛ H:mm\n format = format.replace(regexHoursWithLeadingZeroMinutes, 'HH:mm')\n // 10:30 ☛ HH:mm\n format = format.replace(regexHoursMinutes, 'H:mm')\n\n // do we still have numbers left?\n\n // Lets check for 4 digits first, these are years for sure\n format = format.replace(regexYearLong, 'YYYY')\n\n // check if both numbers are < 13, then it must be D/M\n format = format.replace(regexDayShortMonthShort, 'D/M')\n\n // check if first number is < 10 && last < 13, then it must be D/MM\n format = format.replace(regexDayShortMonth, 'D/MM')\n\n // check if last number is < 32 && last < 10, then it must be DD/M\n format = format.replace(regexDayMonthShort, 'DD/M')\n\n // check if both numbers are > 10, but first < 32 && last < 13, then it must be DD/MM\n format = format.replace(regexDayMonth, 'DD/MM')\n\n // check if first < 10 && last > 12, then it must be M/YY\n format = format.replace(regexMonthShortYearShort, 'M/YY')\n\n // check if first < 13 && last > 12, then it must be MM/YY\n format = format.replace(regexMonthYearShort, 'MM/YY')\n\n // to prevent 9.20 gets formated to D.Y, we format the complete date first, then go for the time\n if (format.match(formatIncludesMonth)) {\n var regexHoursDotWithLeadingZeroOrDoubleDigitMinutes = /0\\d.\\d{2}|\\d{2}.\\d{2}/\n var regexHoursDotMinutes = /\\d{1}.\\d{2}/\n\n format = format.replace(regexHoursDotWithLeadingZeroOrDoubleDigitMinutes, 'H.mm')\n format = format.replace(regexHoursDotMinutes, 'h.mm')\n }\n\n // now, the next number, if existing, must be a day\n format = format.replace(regexDayLeadingZero, 'DD')\n format = format.replace(regexDay, 'D')\n\n // last but not least, there could still be a year left\n format = format.replace(regexYearShort, 'YY')\n\n if (format.length < 1) {\n format = undefined\n }\n\n return format\n}\n\n// if we can't find an endian based on the separator, but\n// there still is a short date with day, month & year,\n// we try to make a smart decision to identify the order\nfunction replaceEndian (options, matchedPart, first, separator, second, third) {\n var parts\n var hasSingleDigit = Math.min(first.length, second.length, third.length) === 1\n var hasQuadDigit = Math.max(first.length, second.length, third.length) === 4\n var preferredOrder = typeof options.preferredOrder === 'string' ? options.preferredOrder : options.preferredOrder[separator]\n\n first = parseInt(first, 10)\n second = parseInt(second, 10)\n third = parseInt(third, 10)\n parts = [first, second, third]\n preferredOrder = preferredOrder.toUpperCase()\n\n // If first is a year, order will always be Year-Month-Day\n if (first > 31) {\n parts[0] = hasQuadDigit ? 'YYYY' : 'YY'\n parts[1] = hasSingleDigit ? 'M' : 'MM'\n parts[2] = hasSingleDigit ? 'D' : 'DD'\n return parts.join(separator)\n }\n\n // Second will never be the year. And if it is a day,\n // the order will always be Month-Day-Year\n if (second > 12) {\n parts[0] = hasSingleDigit ? 'M' : 'MM'\n parts[1] = hasSingleDigit ? 'D' : 'DD'\n parts[2] = hasQuadDigit ? 'YYYY' : 'YY'\n return parts.join(separator)\n }\n\n // if third is a year ...\n if (third > 31) {\n parts[2] = hasQuadDigit ? 'YYYY' : 'YY'\n\n // ... try to find day in first and second.\n // If found, the remaining part is the month.\n if (preferredOrder[0] === 'M' && first < 13) {\n parts[0] = hasSingleDigit ? 'M' : 'MM'\n parts[1] = hasSingleDigit ? 'D' : 'DD'\n return parts.join(separator)\n }\n parts[0] = hasSingleDigit ? 'D' : 'DD'\n parts[1] = hasSingleDigit ? 'M' : 'MM'\n return parts.join(separator)\n }\n\n // if we had no luck until here, we use the preferred order\n parts[preferredOrder.indexOf('D')] = hasSingleDigit ? 'D' : 'DD'\n parts[preferredOrder.indexOf('M')] = hasSingleDigit ? 'M' : 'MM'\n parts[preferredOrder.indexOf('Y')] = hasQuadDigit ? 'YYYY' : 'YY'\n\n return parts.join(separator)\n}\n","var parseFormat = require('./lib/parseformat')\nmodule.exports = parseFormat\n\n/* istanbul ignore next */\nif (typeof window !== 'undefined' && window.moment) {\n window.moment.parseFormat = parseFormat\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_AGO_STRING,\n TIME_NOW_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n if (TIME_AGO_STRING.test(dateString)) {\n const fragments = TIME_AGO_STRING.exec(dateString);\n return moment().subtract(fragments[1], fragments[2]);\n }\n\n if (TIME_NOW_STRING.test(dateString)) {\n return moment();\n }\n\n return timezone\n ? moment.tz(dateString, format || parseFormat(dateString), timezone)\n : moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(\n dateString,\n { timezone, format } = {}\n) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n if (SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10) * 1000).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n { $, cleanConditionally = true, title = '', url = '', defaultCleaner = true }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like <title>, etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '')\n $p.remove();\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport { KEEP_SELECTORS, KEEP_CLASS } from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport { TITLE_SPLITTERS_RE, DOMAIN_ENDINGS_RE } from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] = Reflect.ownKeys(termCounts).reduce(\n (acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n },\n [0, 0]\n );\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce(\n (acc, end) => (acc.length > end.length ? acc : end),\n ''\n );\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle\n .slice(-1)[0]\n .toLowerCase()\n .replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","var _ = require('lodash');\n\nfunction sum (arr) {\n\treturn arr.reduce(function (p, c, i, a) {\n\t\treturn p + c;\n\t});\n}\n\nfunction ensureArr (arr) {\n\tif (_.isArray(arr)) {\n\t\treturn arr;\n\t} else if (typeof arr === 'string') {\n\t\treturn arr.split('');\n\t} else {\n\t\tthrow Error('Parameter must be a string or array.');\n\t}\n}\n\n/**\n * Computes the jaro-winkler distance for two given arrays.\n *\n * NOTE: this implementation is based on the one found in the\n * Lucene Java library.\n *\n * h3 Examples:\n *\n * wuzzy.jarowinkler(\n * \t\t['D', 'W', 'A', 'Y', 'N', 'E'],\n * \t\t['D', 'U', 'A', 'N', 'E']\n * \t);\n * \t// -> 0.840\n *\n * wuzzy.jarowinkler(\n * \t\t'DWAYNE',\n * \t\t'DUANE'\n * \t);\n * \t// -> 0.840\n *\n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @param {Number} t - the threshold for adding\n * the winkler bonus (defaults to 0.7)\n * @return {Number} returns the jaro-winkler distance for\n * the two provided arrays.\n */\nexports.jarowinkler = function (a, b, t) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tvar max, min;\n\tif (a.length > b.length) {\n\t\tmax = a;\n\t\tmin = b;\n\t} else {\n\t\tmax = b;\n\t\tmin = a;\n\t}\n\tvar threshold = t ? t : .7;\n\tvar weight = .1;\n\tvar range = Math.floor(Math.max((max.length / 2) - 1, 0));\n\tvar mIdx = [];\n\tvar mFlg = [];\n\tvar mi, xi, xn, c1;\n\tvar matches = 0;\n\tfor (mi = 0; mi < min.length; mi++) {\n\t\tc1 = min[mi];\n\t\tfor (xi = Math.max(mi - range, 0), xn = Math.min(mi + range + 1, max.length);\n\t\t\t xi < xn;\n\t\t\t xi++) {\n\t\t\tif (!mFlg[xi] && (c1 === max[xi])) {\n\t\t\t\tmIdx[mi] = xi;\n\t\t\t\tmFlg[xi] = true;\n\t\t\t\tmatches++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar ma = [];\n\tvar mb = [];\n\tvar i, si;\n\tvar trans = 0;\n\tvar prefix = 0;\n\tfor (i = 0, si = 0; i < min.length; i++) {\n\t\tif (mIdx[i] > -1) {\n\t\t\tma[si] = min[i];\n\t\t\tsi++;\n\t\t}\n\t}\n\tfor(i = 0, si = 0; i < max.length; i++) {\n\t\tif (mFlg[i]) {\n\t\t\tmb[si] = max[i];\n\t\t\tsi++;\n\t\t}\n\t}\n\tfor (mi = 0; mi < ma.length; mi++) {\n\t\tif (ma[mi] !== mb[mi]) {\n\t\t\ttrans++;\n\t\t}\n\t}\n\tfor (mi = 0; mi < min.length; mi++) {\n\t\tif (a[mi] === b[mi]) {\n\t\t\tprefix++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tvar m = matches;\n\tvar t = trans / 2;\n\tif (!m) {\n\t\treturn 0;\n\t} else {\n\t\tvar j = (m / a.length + m / b.length + (m - t) / m) / 3\n\t\tvar jw = (j < threshold\n\t\t\t? j\n\t\t\t: (j + Math.min(weight, 1 / max.length) * prefix * (1 - j)));\n\t\treturn jw;\n\t}\n\n}\n\n/**\n * Calculates the levenshtein distance for the\n * two provided arrays and returns the normalized\n * distance.\n *\n * h3 Examples:\n *\n * wuzzy.levenshtein(\n * \t\t['D', 'W', 'A', 'Y', 'N', 'E'],\n * \t\t['D', 'U', 'A', 'N', 'E']\n * \t);\n * \t// -> 0.66666667\n *\n * \t\tor\n *\n * wuzzy.levenshtein(\n * \t\t'DWAYNE',\n * \t\t'DUANE'\n * \t);\n * \t// -> 0.66666667\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @param {Object} w - (optional) a set of key/value pairs\n * definining weights for the deletion (key: d), insertion\n * (key: i), and substitution (key: s). default values are\n * 1 for all operations.\n * @return {Number} returns the levenshtein distance for\n * the two provided arrays.\n */\nexports.levenshtein = function (a, b, w) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tif (a.length === 0) {\n\t\treturn b.length;\n\t}\n\tif (b.length === 0) {\n\t\treturn a.length;\n\t}\n\n\tvar weights = (w ? w : {\n\t\td: 1,\n\t\ti: 1,\n\t\ts: 1\n\t});\n\tvar v0 = [];\n\tvar v1 = [];\n\tvar vlen = b.length + 1;\n\tvar i,j;\n\tvar cost;\n\tvar mlen;\n\n\tfor (i = 0; i < vlen; i++) {\n\t\tv0[i] = i;\n\t}\n\n\tfor (i = 0; i < a.length; i++) {\n\t\tv1[0] = i + 1;\n\n\t\tfor (j = 0; j < b.length; j++) {\n\t\t\tcost = (a[i] === b[j]) ? 0 : weights.s;\n\t\t\tv1[j + 1] = Math.min(\n\t\t\t\tv1[j] + weights.d,\n\t\t\t\tv0[j + 1] + weights.i,\n\t\t\t\tv0[j] + cost\n\t\t\t);\n\t\t}\n\n\t\tfor (j = 0; j < vlen; j++) {\n\t\t\tv0[j] = v1[j];\n\t\t}\n\t}\n\n\tmlen = Math.max(a.length, b.length);\n\n\treturn (mlen - v1[b.length]) / mlen;\n}\n\n/**\n * Computes the n-gram edit distance for any n (defaults to 2).\n *\n * NOTE: this implementation is based on the one found in the\n * Lucene Java library.\n *\n * h3 Examples:\n *\n * wuzzy.ngram(\n * \t\t['D', 'W', 'A', 'Y', 'N', 'E'],\n * \t\t['D', 'U', 'A', 'N', 'E']\n * \t);\n * \t// -> 0.583\n *\n * \t\tor\n *\n * wuzzy.ngram(\n * \t\t'DWAYNE',\n * \t\t'DUANE'\n * \t);\n * \t// -> 0.583\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @param {Number} ng - (optional) the n-gram size to work with (defaults to 2)\n * @return {Number} returns the ngram distance for\n * the two provided arrays.\n */\nexports.ngram = function (a, b, ng) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tvar al = a.length;\n\tvar bl = b.length;\n\tvar n = (ng ? ng : 2);\n\tvar cost;\n\tvar i, j, ni, ti, tn, ec;\n\tvar sa = [];\n\tvar p = [];\n\tvar d = [];\n\tvar _d = [];\n\tvar t_j = [];\n\tvar pdl = al + 1;\n\n\t// empty string situation\n\tif ((al === 0) || (bl === 0)) {\n\t\tif (al === bl) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t// smaller than n situation\n\tcost = 0;\n\tif ((al < n) || (bl < n)) {\n\t\tfor (i = 0, ni = Math.min(al, bl); i < ni; i++) {\n\t\t\tif (a[i] === b[i]) {\n\t\t\t\tcost++;\n\t\t\t}\n\t\t}\n\t\treturn cost / Math.max(al, bl);\n\t}\n\n\tfor (i = 0; i < (al + n - 1); i++) {\n\t\tif (i < (n - 1)) {\n\t\t\tsa[i] = 0;\n\t\t} else {\n\t\t\tsa[i] = a[i - n + 1];\n\t\t}\n\t}\n\n\tfor (i = 0; i <= al; i++) {\n\t\tp[i] = i;\n\t}\n\n\tfor (j = 1; j <= bl; j++) {\n\t\tif (j < n) {\n\t\t\tfor (ti = 0; ti < (n - j); ti++) {\n\t\t\t\tt_j[ti] = 0;\n\t\t\t}\n\t\t\tfor (ti = (n - j); ti < n; ti++) {\n\t\t\t\tt_j[ti] = b[ti - (n - j)];\n\t\t\t}\n\t\t} else {\n\t\t\tt_j = b.slice(j - n, j);\n\t\t}\n\t\td[0] = j;\n\t\tfor (i = 1; i <= al; i++) {\n\t\t\tcost = 0;\n\t\t\ttn = n;\n\t\t\tfor (ni = 0; ni < n; ni++) {\n\t\t\t\tif (sa[i - 1 + ni] !== t_j[ni]) {\n\t\t\t\t\tcost++;\n\t\t\t\t} else if (sa[i - 1 + ni] === 0) {\n\t\t\t\t\ttn--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tec = cost / tn;\n\t\t\td[i] = Math.min(\n\t\t\t\tMath.min(\n\t\t\t\t\td[i - 1] + 1,\n\t\t\t\t\tp[i] + 1\n\t\t\t\t),\n\t\t\t\tp[i - 1] + ec\n\t\t\t);\n\t\t}\n\n\t\t_d = p;\n\t\tp = d;\n\t\td = _d;\n\t}\n\n\treturn 1.0 - (p[al] / Math.max(al, bl));\n}\n\n/**\n * Calculates a pearson correlation score for two given\n * objects (compares values of similar keys).\n *\n * h3 Examples:\n *\n * wuzzy.pearson(\n * \t\t{a: 2.5, b: 3.5, c: 3.0, d: 3.5, e: 2.5, f: 3.0},\n * \t\t{a: 3.0, b: 3.5, c: 1.5, d: 5.0, e: 3.5, f: 3.0, g: 5.0}\n * \t);\n * \t// -> 0.396\n *\n * \t\tor\n *\n * wuzzy.pearson(\n * \t\t{a: 2.5, b: 1},\n * \t\t{o: 3.5, e: 6.0}\n * \t);\n * \t// -> 1.0\n * \n * @param {Object} a - the first object to compare\n * @param {Object} b - the second object to compare\n * @return {Number} returns the pearson correlation for\n * the two provided arrays.\n */\nexports.pearson = function (a, b) {\n\tvar sk = [];\n\tObject.keys(a).forEach(function (k) {\n\t\tif (b[k]) {\n\t\t\tsk.push(k);\n\t\t}\n\t});\n\tvar n = sk.length;\n\n\tif (n === 0) {\n\t\treturn 0;\n\t}\n\n\tvar sa = sum(sk.map(function (k) {\n\t\treturn a[k];\n\t}));\n\tvar sb = sum(sk.map(function (k) {\n\t\treturn b[k];\n\t}));\n\n\tvar sas = sum(sk.map(function (k) {\n\t\treturn Math.pow(a[k], 2);\n\t}));\n\n\tvar sbs = sum(sk.map(function (k) {\n\t\treturn Math.pow(b[k], 2);\n\t}));\n\n\tvar sp = sum(sk.map(function (k) {\n\t\treturn a[k] * b[k];\n\t}));\n\n\tvar num = sp - (sa * sb / n);\n\tvar den = Math.sqrt((sas - Math.pow(sa, 2) / n) * (sbs - Math.pow(sb, 2) / n));\n\n\tif (den === 0) {\n\t\treturn 0;\n\t} else {\n\t\treturn num / den;\n\t}\n}\n\n/**\n * Calculates the jaccard index for the two\n * provided arrays.\n *\n * h3 Examples:\n *\n * wuzzy.jaccard(\n * \t\t['a', 'b', 'c', 'd', 'e', 'f'],\n * \t\t['a', 'e', 'f']\n * \t);\n * \t// -> 0.5\n *\n * \t\tor\n *\n * wuzzy.jaccard(\n * \t\t'abcdef',\n * \t\t'aef'\n * \t);\n * \t// -> 0.5\n *\n * \t\tor \n *\n * wuzzy.jaccard(\n * \t\t['abe', 'babe', 'cabe', 'dabe', 'eabe', 'fabe'],\n * \t\t['babe']\n * \t);\n * \t// -> 0.16666667\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @return {Number} returns the jaccard index for\n * the two provided arrays.\n */\nexports.jaccard = function (a, b) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\treturn (_.intersection(a, b).length / _.union(a, b).length);\n}\n\n/**\n * Calculates the tanimoto distance (weighted jaccard index).\n *\n * h3 Examples:\n *\n * wuzzy.tanimoto(\n * \t\t['a', 'b', 'c', 'd', 'd', 'e', 'f', 'f'],\n * \t\t['a', 'e', 'f']\n * \t);\n * \t// -> 0.375\n *\n * \t\tor\n *\n * wuzzy.tanimoto(\n * \t\t'abcddeff',\n * \t\t'aef'\n * \t);\n * \t// -> 0.375\n *\n * \t\tor \n *\n * wuzzy.tanimoto(\n * \t\t['abe', 'babe', 'cabe', 'dabe', 'eabe', 'fabe', 'fabe'],\n * \t\t['babe']\n * \t);\n * \t// -> 0.14285714\n * \n * @param {String/Array} a - the first string/array to compare\n * @param {String/Array} b - the second string/array to compare\n * @return {Number} returns the tanimoto distance for\n * the two provided arrays.\n */\nexports.tanimoto = function (a, b) {\n\ta = ensureArr(a);\n\tb = ensureArr(b);\n\n\tvar both = _.intersection(a, b).length;\n\treturn (both / (a.length + b.length - both));\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import { stripTags } from 'utils/dom';\nimport { excerptContent, normalizeSpaces } from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10))\n return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import { stripUnlikelyCandidates, convertToParagraphs } from 'utils/dom';\n\nimport { scoreContent, findTopCandidate } from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import { CANDIDATES_WHITELIST, CANDIDATES_BLACKLIST } from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*')\n .not('a')\n .each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n }\n if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(extractBestNode($, opts), {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n },\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = ['og:title'];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n // eslint-disable-next-line no-restricted-syntax\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta(\n $,\n DATE_PUBLISHED_META_TAGS,\n metaCache,\n false\n );\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = ['link[rel=image_src]'];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach($node => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) {\n // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return $imgs.length / 2 - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*')\n .first()\n .prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl = extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] = Reflect.ownKeys(imgScores).reduce(\n (acc, key) => (imgScores[key] > acc[1] ? [key, imgScores[key]] : acc),\n [null, 0]\n );\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n","// Generated by CoffeeScript 1.8.0\n(function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof exports === 'object') {\n return module.exports = factory();\n } else {\n return root.Heap = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n}).call(this);\n","// Generated by CoffeeScript 1.3.1\n\n/*\nModule difflib -- helpers for computing deltas between objects.\n\nFunction getCloseMatches(word, possibilities, n=3, cutoff=0.6):\n Use SequenceMatcher to return list of the best \"good enough\" matches.\n\nFunction contextDiff(a, b):\n For two lists of strings, return a delta in context diff format.\n\nFunction ndiff(a, b):\n Return a delta: the difference between `a` and `b` (lists of strings).\n\nFunction restore(delta, which):\n Return one of the two sequences that generated an ndiff delta.\n\nFunction unifiedDiff(a, b):\n For two lists of strings, return a delta in unified diff format.\n\nClass SequenceMatcher:\n A flexible class for comparing pairs of sequences of any type.\n\nClass Differ:\n For producing human-readable deltas from sequences of lines of text.\n*/\n\n\n(function() {\n var Differ, Heap, IS_CHARACTER_JUNK, IS_LINE_JUNK, SequenceMatcher, contextDiff, floor, getCloseMatches, max, min, ndiff, restore, unifiedDiff, _any, _arrayCmp, _calculateRatio, _countLeading, _formatRangeContext, _formatRangeUnified, _has,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i } return -1 }\n\n floor = Math.floor, max = Math.max, min = Math.min\n\n Heap = require('heap')\n\n _calculateRatio = function(matches, length) {\n if (length) {\n return 2.0 * matches / length\n } else {\n return 1.0\n }\n }\n\n _arrayCmp = function(a, b) {\n var i, la, lb, _i, _ref, _ref1\n _ref = [a.length, b.length], la = _ref[0], lb = _ref[1]\n for (i = _i = 0, _ref1 = min(la, lb); 0 <= _ref1 ? _i < _ref1 : _i > _ref1; i = 0 <= _ref1 ? ++_i : --_i) {\n if (a[i] < b[i]) {\n return -1\n }\n if (a[i] > b[i]) {\n return 1\n }\n }\n return la - lb\n }\n\n _has = function(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key)\n }\n\n _any = function(items) {\n var item, _i, _len\n for (_i = 0, _len = items.length; _i < _len; _i++) {\n item = items[_i]\n if (item) {\n return true\n }\n }\n return false\n }\n\n SequenceMatcher = (function() {\n\n /*\n SequenceMatcher is a flexible class for comparing pairs of sequences of\n any type, so long as the sequence elements are hashable. The basic\n algorithm predates, and is a little fancier than, an algorithm\n published in the late 1980's by Ratcliff and Obershelp under the\n hyperbolic name \"gestalt pattern matching\". The basic idea is to find\n the longest contiguous matching subsequence that contains no \"junk\"\n elements (R-O doesn't address junk). The same idea is then applied\n recursively to the pieces of the sequences to the left and to the right\n of the matching subsequence. This does not yield minimal edit\n sequences, but does tend to yield matches that \"look right\" to people.\n \n SequenceMatcher tries to compute a \"human-friendly diff\" between two\n sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the\n longest *contiguous* & junk-free matching subsequence. That's what\n catches peoples' eyes. The Windows(tm) windiff has another interesting\n notion, pairing up elements that appear uniquely in each sequence.\n That, and the method here, appear to yield more intuitive difference\n reports than does diff. This method appears to be the least vulnerable\n to synching up on blocks of \"junk lines\", though (like blank lines in\n ordinary text files, or maybe \"<P>\" lines in HTML files). That may be\n because this is the only method of the 3 that has a *concept* of\n \"junk\" <wink>.\n \n Example, comparing two strings, and considering blanks to be \"junk\":\n \n >>> isjunk = (c) -> c is ' '\n >>> s = new SequenceMatcher(isjunk,\n 'private Thread currentThread;',\n 'private volatile Thread currentThread;')\n \n .ratio() returns a float in [0, 1], measuring the \"similarity\" of the\n sequences. As a rule of thumb, a .ratio() value over 0.6 means the\n sequences are close matches:\n \n >>> s.ratio().toPrecision(3)\n '0.866'\n \n If you're only interested in where the sequences match,\n .getMatchingBlocks() is handy:\n \n >>> for [a, b, size] in s.getMatchingBlocks()\n ... console.log(\"a[#{a}] and b[#{b}] match for #{size} elements\");\n a[0] and b[0] match for 8 elements\n a[8] and b[17] match for 21 elements\n a[29] and b[38] match for 0 elements\n \n Note that the last tuple returned by .get_matching_blocks() is always a\n dummy, (len(a), len(b), 0), and this is the only case in which the last\n tuple element (number of elements matched) is 0.\n \n If you want to know how to change the first sequence into the second,\n use .get_opcodes():\n \n >>> for [op, a1, a2, b1, b2] in s.getOpcodes()\n ... console.log \"#{op} a[#{a1}:#{a2}] b[#{b1}:#{b2}]\"\n equal a[0:8] b[0:8]\n insert a[8:8] b[8:17]\n equal a[8:29] b[17:38]\n \n See the Differ class for a fancy human-friendly file differencer, which\n uses SequenceMatcher both to compare sequences of lines, and to compare\n sequences of characters within similar (near-matching) lines.\n \n See also function getCloseMatches() in this module, which shows how\n simple code building on SequenceMatcher can be used to do useful work.\n \n Timing: Basic R-O is cubic time worst case and quadratic time expected\n case. SequenceMatcher is quadratic time for the worst case and has\n expected-case behavior dependent in a complicated way on how many\n elements the sequences have in common; best case time is linear.\n \n Methods:\n \n constructor(isjunk=null, a='', b='')\n Construct a SequenceMatcher.\n \n setSeqs(a, b)\n Set the two sequences to be compared.\n \n setSeq1(a)\n Set the first sequence to be compared.\n \n setSeq2(b)\n Set the second sequence to be compared.\n \n findLongestMatch(alo, ahi, blo, bhi)\n Find longest matching block in a[alo:ahi] and b[blo:bhi].\n \n getMatchingBlocks()\n Return list of triples describing matching subsequences.\n \n getOpcodes()\n Return list of 5-tuples describing how to turn a into b.\n \n ratio()\n Return a measure of the sequences' similarity (float in [0,1]).\n \n quickRatio()\n Return an upper bound on .ratio() relatively quickly.\n \n realQuickRatio()\n Return an upper bound on ratio() very quickly.\n */\n\n\n function SequenceMatcher(isjunk, a, b, autojunk) {\n this.isjunk = isjunk\n if (a == null) {\n a = ''\n }\n if (b == null) {\n b = ''\n }\n this.autojunk = autojunk != null ? autojunk : true\n /*\n Construct a SequenceMatcher.\n \n Optional arg isjunk is null (the default), or a one-argument\n function that takes a sequence element and returns true iff the\n element is junk. Null is equivalent to passing \"(x) -> 0\", i.e.\n no elements are considered to be junk. For example, pass\n (x) -> x in ' \\t'\n if you're comparing lines as sequences of characters, and don't\n want to synch up on blanks or hard tabs.\n \n Optional arg a is the first of two sequences to be compared. By\n default, an empty string. The elements of a must be hashable. See\n also .setSeqs() and .setSeq1().\n \n Optional arg b is the second of two sequences to be compared. By\n default, an empty string. The elements of b must be hashable. See\n also .setSeqs() and .setSeq2().\n \n Optional arg autojunk should be set to false to disable the\n \"automatic junk heuristic\" that treats popular elements as junk\n (see module documentation for more information).\n */\n\n this.a = this.b = null\n this.setSeqs(a, b)\n }\n\n SequenceMatcher.prototype.setSeqs = function(a, b) {\n /* \n Set the two sequences to be compared. \n \n >>> s = new SequenceMatcher()\n >>> s.setSeqs('abcd', 'bcde')\n >>> s.ratio()\n 0.75\n */\n this.setSeq1(a)\n return this.setSeq2(b)\n }\n\n SequenceMatcher.prototype.setSeq1 = function(a) {\n /* \n Set the first sequence to be compared. \n \n The second sequence to be compared is not changed.\n \n >>> s = new SequenceMatcher(null, 'abcd', 'bcde')\n >>> s.ratio()\n 0.75\n >>> s.setSeq1('bcde')\n >>> s.ratio()\n 1.0\n \n SequenceMatcher computes and caches detailed information about the\n second sequence, so if you want to compare one sequence S against\n many sequences, use .setSeq2(S) once and call .setSeq1(x)\n repeatedly for each of the other sequences.\n \n See also setSeqs() and setSeq2().\n */\n if (a === this.a) {\n return\n }\n this.a = a\n return this.matchingBlocks = this.opcodes = null\n }\n\n SequenceMatcher.prototype.setSeq2 = function(b) {\n /*\n Set the second sequence to be compared. \n \n The first sequence to be compared is not changed.\n \n >>> s = new SequenceMatcher(null, 'abcd', 'bcde')\n >>> s.ratio()\n 0.75\n >>> s.setSeq2('abcd')\n >>> s.ratio()\n 1.0\n \n SequenceMatcher computes and caches detailed information about the\n second sequence, so if you want to compare one sequence S against\n many sequences, use .setSeq2(S) once and call .setSeq1(x)\n repeatedly for each of the other sequences.\n \n See also setSeqs() and setSeq1().\n */\n if (b === this.b) {\n return\n }\n this.b = b\n this.matchingBlocks = this.opcodes = null\n this.fullbcount = null\n return this._chainB()\n }\n\n SequenceMatcher.prototype._chainB = function() {\n var b, b2j, elt, i, idxs, indices, isjunk, junk, n, ntest, popular, _i, _j, _len, _len1, _ref\n b = this.b\n this.b2j = b2j = {}\n for (i = _i = 0, _len = b.length; _i < _len; i = ++_i) {\n elt = b[i]\n indices = _has(b2j, elt) ? b2j[elt] : b2j[elt] = []\n indices.push(i)\n }\n junk = {}\n isjunk = this.isjunk\n if (isjunk) {\n _ref = Object.keys(b2j)\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n elt = _ref[_j]\n if (isjunk(elt)) {\n junk[elt] = true\n delete b2j[elt]\n }\n }\n }\n popular = {}\n n = b.length\n if (this.autojunk && n >= 200) {\n ntest = floor(n / 100) + 1\n for (elt in b2j) {\n idxs = b2j[elt]\n if (idxs.length > ntest) {\n popular[elt] = true\n delete b2j[elt]\n }\n }\n }\n this.isbjunk = function(b) {\n return _has(junk, b)\n }\n return this.isbpopular = function(b) {\n return _has(popular, b)\n }\n }\n\n SequenceMatcher.prototype.findLongestMatch = function(alo, ahi, blo, bhi) {\n /* \n Find longest matching block in a[alo...ahi] and b[blo...bhi]. \n \n If isjunk is not defined:\n \n Return [i,j,k] such that a[i...i+k] is equal to b[j...j+k], where\n alo <= i <= i+k <= ahi\n blo <= j <= j+k <= bhi\n and for all [i',j',k'] meeting those conditions,\n k >= k'\n i <= i'\n and if i == i', j <= j'\n \n In other words, of all maximal matching blocks, return one that\n starts earliest in a, and of all those maximal matching blocks that\n start earliest in a, return the one that starts earliest in b.\n \n >>> isjunk = (x) -> x is ' '\n >>> s = new SequenceMatcher(isjunk, ' abcd', 'abcd abcd')\n >>> s.findLongestMatch(0, 5, 0, 9)\n [1, 0, 4]\n \n >>> s = new SequenceMatcher(null, 'ab', 'c')\n >>> s.findLongestMatch(0, 2, 0, 1)\n [0, 0, 0]\n */\n\n var a, b, b2j, besti, bestj, bestsize, i, isbjunk, j, j2len, k, newj2len, _i, _j, _len, _ref, _ref1, _ref2, _ref3, _ref4, _ref5\n _ref = [this.a, this.b, this.b2j, this.isbjunk], a = _ref[0], b = _ref[1], b2j = _ref[2], isbjunk = _ref[3]\n _ref1 = [alo, blo, 0], besti = _ref1[0], bestj = _ref1[1], bestsize = _ref1[2]\n j2len = {}\n for (i = _i = alo; alo <= ahi ? _i < ahi : _i > ahi; i = alo <= ahi ? ++_i : --_i) {\n newj2len = {}\n _ref2 = (_has(b2j, a[i]) ? b2j[a[i]] : [])\n for (_j = 0, _len = _ref2.length; _j < _len; _j++) {\n j = _ref2[_j]\n if (j < blo) {\n continue\n }\n if (j >= bhi) {\n break\n }\n k = newj2len[j] = (j2len[j - 1] || 0) + 1\n if (k > bestsize) {\n _ref3 = [i - k + 1, j - k + 1, k], besti = _ref3[0], bestj = _ref3[1], bestsize = _ref3[2]\n }\n }\n j2len = newj2len\n }\n while (besti > alo && bestj > blo && !isbjunk(b[bestj - 1]) && a[besti - 1] === b[bestj - 1]) {\n _ref4 = [besti - 1, bestj - 1, bestsize + 1], besti = _ref4[0], bestj = _ref4[1], bestsize = _ref4[2]\n }\n while (besti + bestsize < ahi && bestj + bestsize < bhi && !isbjunk(b[bestj + bestsize]) && a[besti + bestsize] === b[bestj + bestsize]) {\n bestsize++\n }\n while (besti > alo && bestj > blo && isbjunk(b[bestj - 1]) && a[besti - 1] === b[bestj - 1]) {\n _ref5 = [besti - 1, bestj - 1, bestsize + 1], besti = _ref5[0], bestj = _ref5[1], bestsize = _ref5[2]\n }\n while (besti + bestsize < ahi && bestj + bestsize < bhi && isbjunk(b[bestj + bestsize]) && a[besti + bestsize] === b[bestj + bestsize]) {\n bestsize++\n }\n return [besti, bestj, bestsize]\n }\n\n SequenceMatcher.prototype.getMatchingBlocks = function() {\n /*\n Return list of triples describing matching subsequences.\n \n Each triple is of the form [i, j, n], and means that\n a[i...i+n] == b[j...j+n]. The triples are monotonically increasing in\n i and in j. it's also guaranteed that if\n [i, j, n] and [i', j', n'] are adjacent triples in the list, and\n the second is not the last triple in the list, then i+n != i' or\n j+n != j'. IOW, adjacent triples never describe adjacent equal\n blocks.\n \n The last triple is a dummy, [a.length, b.length, 0], and is the only\n triple with n==0.\n \n >>> s = new SequenceMatcher(null, 'abxcd', 'abcd')\n >>> s.getMatchingBlocks()\n [[0, 0, 2], [3, 2, 2], [5, 4, 0]]\n */\n\n var ahi, alo, bhi, blo, i, i1, i2, j, j1, j2, k, k1, k2, la, lb, matchingBlocks, nonAdjacent, queue, x, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4\n if (this.matchingBlocks) {\n return this.matchingBlocks\n }\n _ref = [this.a.length, this.b.length], la = _ref[0], lb = _ref[1]\n queue = [[0, la, 0, lb]]\n matchingBlocks = []\n while (queue.length) {\n _ref1 = queue.pop(), alo = _ref1[0], ahi = _ref1[1], blo = _ref1[2], bhi = _ref1[3]\n _ref2 = x = this.findLongestMatch(alo, ahi, blo, bhi), i = _ref2[0], j = _ref2[1], k = _ref2[2]\n if (k) {\n matchingBlocks.push(x)\n if (alo < i && blo < j) {\n queue.push([alo, i, blo, j])\n }\n if (i + k < ahi && j + k < bhi) {\n queue.push([i + k, ahi, j + k, bhi])\n }\n }\n }\n matchingBlocks.sort(_arrayCmp)\n i1 = j1 = k1 = 0\n nonAdjacent = []\n for (_i = 0, _len = matchingBlocks.length; _i < _len; _i++) {\n _ref3 = matchingBlocks[_i], i2 = _ref3[0], j2 = _ref3[1], k2 = _ref3[2]\n if (i1 + k1 === i2 && j1 + k1 === j2) {\n k1 += k2\n } else {\n if (k1) {\n nonAdjacent.push([i1, j1, k1])\n }\n _ref4 = [i2, j2, k2], i1 = _ref4[0], j1 = _ref4[1], k1 = _ref4[2]\n }\n }\n if (k1) {\n nonAdjacent.push([i1, j1, k1])\n }\n nonAdjacent.push([la, lb, 0])\n return this.matchingBlocks = nonAdjacent\n }\n\n SequenceMatcher.prototype.getOpcodes = function() {\n /* \n Return list of 5-tuples describing how to turn a into b.\n \n Each tuple is of the form [tag, i1, i2, j1, j2]. The first tuple\n has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the\n tuple preceding it, and likewise for j1 == the previous j2.\n \n The tags are strings, with these meanings:\n \n 'replace': a[i1...i2] should be replaced by b[j1...j2]\n 'delete': a[i1...i2] should be deleted.\n Note that j1==j2 in this case.\n 'insert': b[j1...j2] should be inserted at a[i1...i1].\n Note that i1==i2 in this case.\n 'equal': a[i1...i2] == b[j1...j2]\n \n >>> s = new SequenceMatcher(null, 'qabxcd', 'abycdf')\n >>> s.getOpcodes()\n [ [ 'delete' , 0 , 1 , 0 , 0 ] ,\n [ 'equal' , 1 , 3 , 0 , 2 ] ,\n [ 'replace' , 3 , 4 , 2 , 3 ] ,\n [ 'equal' , 4 , 6 , 3 , 5 ] ,\n [ 'insert' , 6 , 6 , 5 , 6 ] ]\n */\n\n var ai, answer, bj, i, j, size, tag, _i, _len, _ref, _ref1, _ref2\n if (this.opcodes) {\n return this.opcodes\n }\n i = j = 0\n this.opcodes = answer = []\n _ref = this.getMatchingBlocks()\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n _ref1 = _ref[_i], ai = _ref1[0], bj = _ref1[1], size = _ref1[2]\n tag = ''\n if (i < ai && j < bj) {\n tag = 'replace'\n } else if (i < ai) {\n tag = 'delete'\n } else if (j < bj) {\n tag = 'insert'\n }\n if (tag) {\n answer.push([tag, i, ai, j, bj])\n }\n _ref2 = [ai + size, bj + size], i = _ref2[0], j = _ref2[1]\n if (size) {\n answer.push(['equal', ai, i, bj, j])\n }\n }\n return answer\n }\n\n SequenceMatcher.prototype.getGroupedOpcodes = function(n) {\n var codes, group, groups, i1, i2, j1, j2, nn, tag, _i, _len, _ref, _ref1, _ref2, _ref3\n if (n == null) {\n n = 3\n }\n /* \n Isolate change clusters by eliminating ranges with no changes.\n \n Return a list groups with upto n lines of context.\n Each group is in the same format as returned by get_opcodes().\n \n >>> a = [1...40].map(String)\n >>> b = a.slice()\n >>> b[8...8] = 'i'\n >>> b[20] += 'x'\n >>> b[23...28] = []\n >>> b[30] += 'y'\n >>> s = new SequenceMatcher(null, a, b)\n >>> s.getGroupedOpcodes()\n [ [ [ 'equal' , 5 , 8 , 5 , 8 ],\n [ 'insert' , 8 , 8 , 8 , 9 ],\n [ 'equal' , 8 , 11 , 9 , 12 ] ],\n [ [ 'equal' , 16 , 19 , 17 , 20 ],\n [ 'replace' , 19 , 20 , 20 , 21 ],\n [ 'equal' , 20 , 22 , 21 , 23 ],\n [ 'delete' , 22 , 27 , 23 , 23 ],\n [ 'equal' , 27 , 30 , 23 , 26 ] ],\n [ [ 'equal' , 31 , 34 , 27 , 30 ],\n [ 'replace' , 34 , 35 , 30 , 31 ],\n [ 'equal' , 35 , 38 , 31 , 34 ] ] ]\n */\n\n codes = this.getOpcodes()\n if (!codes.length) {\n codes = [['equal', 0, 1, 0, 1]]\n }\n if (codes[0][0] === 'equal') {\n _ref = codes[0], tag = _ref[0], i1 = _ref[1], i2 = _ref[2], j1 = _ref[3], j2 = _ref[4]\n codes[0] = [tag, max(i1, i2 - n), i2, max(j1, j2 - n), j2]\n }\n if (codes[codes.length - 1][0] === 'equal') {\n _ref1 = codes[codes.length - 1], tag = _ref1[0], i1 = _ref1[1], i2 = _ref1[2], j1 = _ref1[3], j2 = _ref1[4]\n codes[codes.length - 1] = [tag, i1, min(i2, i1 + n), j1, min(j2, j1 + n)]\n }\n nn = n + n\n groups = []\n group = []\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n _ref2 = codes[_i], tag = _ref2[0], i1 = _ref2[1], i2 = _ref2[2], j1 = _ref2[3], j2 = _ref2[4]\n if (tag === 'equal' && i2 - i1 > nn) {\n group.push([tag, i1, min(i2, i1 + n), j1, min(j2, j1 + n)])\n groups.push(group)\n group = []\n _ref3 = [max(i1, i2 - n), max(j1, j2 - n)], i1 = _ref3[0], j1 = _ref3[1]\n }\n group.push([tag, i1, i2, j1, j2])\n }\n if (group.length && !(group.length === 1 && group[0][0] === 'equal')) {\n groups.push(group)\n }\n return groups\n }\n\n SequenceMatcher.prototype.ratio = function() {\n /*\n Return a measure of the sequences' similarity (float in [0,1]).\n \n Where T is the total number of elements in both sequences, and\n M is the number of matches, this is 2.0*M / T.\n Note that this is 1 if the sequences are identical, and 0 if\n they have nothing in common.\n \n .ratio() is expensive to compute if you haven't already computed\n .getMatchingBlocks() or .getOpcodes(), in which case you may\n want to try .quickRatio() or .realQuickRatio() first to get an\n upper bound.\n \n >>> s = new SequenceMatcher(null, 'abcd', 'bcde')\n >>> s.ratio()\n 0.75\n >>> s.quickRatio()\n 0.75\n >>> s.realQuickRatio()\n 1.0\n */\n\n var match, matches, _i, _len, _ref\n matches = 0\n _ref = this.getMatchingBlocks()\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n match = _ref[_i]\n matches += match[2]\n }\n return _calculateRatio(matches, this.a.length + this.b.length)\n }\n\n SequenceMatcher.prototype.quickRatio = function() {\n /*\n Return an upper bound on ratio() relatively quickly.\n \n This isn't defined beyond that it is an upper bound on .ratio(), and\n is faster to compute.\n */\n\n var avail, elt, fullbcount, matches, numb, _i, _j, _len, _len1, _ref, _ref1\n if (!this.fullbcount) {\n this.fullbcount = fullbcount = {}\n _ref = this.b\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elt = _ref[_i]\n fullbcount[elt] = (fullbcount[elt] || 0) + 1\n }\n }\n fullbcount = this.fullbcount\n avail = {}\n matches = 0\n _ref1 = this.a\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n elt = _ref1[_j]\n if (_has(avail, elt)) {\n numb = avail[elt]\n } else {\n numb = fullbcount[elt] || 0\n }\n avail[elt] = numb - 1\n if (numb > 0) {\n matches++\n }\n }\n return _calculateRatio(matches, this.a.length + this.b.length)\n }\n\n SequenceMatcher.prototype.realQuickRatio = function() {\n /*\n Return an upper bound on ratio() very quickly.\n \n This isn't defined beyond that it is an upper bound on .ratio(), and\n is faster to compute than either .ratio() or .quickRatio().\n */\n\n var la, lb, _ref\n _ref = [this.a.length, this.b.length], la = _ref[0], lb = _ref[1]\n return _calculateRatio(min(la, lb), la + lb)\n }\n\n return SequenceMatcher\n\n })()\n\n getCloseMatches = function(word, possibilities, n, cutoff) {\n var result, s, score, x, _i, _j, _len, _len1, _ref, _results\n if (n == null) {\n n = 3\n }\n if (cutoff == null) {\n cutoff = 0.6\n }\n /*\n Use SequenceMatcher to return list of the best \"good enough\" matches.\n \n word is a sequence for which close matches are desired (typically a\n string).\n \n possibilities is a list of sequences against which to match word\n (typically a list of strings).\n \n Optional arg n (default 3) is the maximum number of close matches to\n return. n must be > 0.\n \n Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities\n that don't score at least that similar to word are ignored.\n \n The best (no more than n) matches among the possibilities are returned\n in a list, sorted by similarity score, most similar first.\n \n >>> getCloseMatches('appel', ['ape', 'apple', 'peach', 'puppy'])\n ['apple', 'ape']\n >>> KEYWORDS = require('coffee-script').RESERVED\n >>> getCloseMatches('wheel', KEYWORDS)\n ['when', 'while']\n >>> getCloseMatches('accost', KEYWORDS)\n ['const']\n */\n\n if (!(n > 0)) {\n throw new Error(\"n must be > 0: (\" + n + \")\")\n }\n if (!((0.0 <= cutoff && cutoff <= 1.0))) {\n throw new Error(\"cutoff must be in [0.0, 1.0]: (\" + cutoff + \")\")\n }\n result = []\n s = new SequenceMatcher()\n s.setSeq2(word)\n for (_i = 0, _len = possibilities.length; _i < _len; _i++) {\n x = possibilities[_i]\n s.setSeq1(x)\n if (s.realQuickRatio() >= cutoff && s.quickRatio() >= cutoff && s.ratio() >= cutoff) {\n result.push([s.ratio(), x])\n }\n }\n result = Heap.nlargest(result, n, _arrayCmp)\n _results = []\n for (_j = 0, _len1 = result.length; _j < _len1; _j++) {\n _ref = result[_j], score = _ref[0], x = _ref[1]\n _results.push(x)\n }\n return _results\n }\n\n _countLeading = function(line, ch) {\n /*\n Return number of `ch` characters at the start of `line`.\n \n >>> _countLeading(' abc', ' ')\n 3\n */\n\n var i, n, _ref\n _ref = [0, line.length], i = _ref[0], n = _ref[1]\n while (i < n && line[i] === ch) {\n i++\n }\n return i\n }\n\n Differ = (function() {\n\n /*\n Differ is a class for comparing sequences of lines of text, and\n producing human-readable differences or deltas. Differ uses\n SequenceMatcher both to compare sequences of lines, and to compare\n sequences of characters within similar (near-matching) lines.\n \n Each line of a Differ delta begins with a two-letter code:\n \n '- ' line unique to sequence 1\n '+ ' line unique to sequence 2\n ' ' line common to both sequences\n '? ' line not present in either input sequence\n \n Lines beginning with '? ' attempt to guide the eye to intraline\n differences, and were not present in either input sequence. These lines\n can be confusing if the sequences contain tab characters.\n \n Note that Differ makes no claim to produce a *minimal* diff. To the\n contrary, minimal diffs are often counter-intuitive, because they synch\n up anywhere possible, sometimes accidental matches 100 pages apart.\n Restricting synch points to contiguous matches preserves some notion of\n locality, at the occasional cost of producing a longer diff.\n \n Example: Comparing two texts.\n \n >>> text1 = ['1. Beautiful is better than ugly.\\n',\n ... '2. Explicit is better than implicit.\\n',\n ... '3. Simple is better than complex.\\n',\n ... '4. Complex is better than complicated.\\n']\n >>> text1.length\n 4\n >>> text2 = ['1. Beautiful is better than ugly.\\n',\n ... '3. Simple is better than complex.\\n',\n ... '4. Complicated is better than complex.\\n',\n ... '5. Flat is better than nested.\\n']\n \n Next we instantiate a Differ object:\n \n >>> d = new Differ()\n \n Note that when instantiating a Differ object we may pass functions to\n filter out line and character 'junk'.\n \n Finally, we compare the two:\n \n >>> result = d.compare(text1, text2)\n [ ' 1. Beautiful is better than ugly.\\n',\n '- 2. Explicit is better than implicit.\\n',\n '- 3. Simple is better than complex.\\n',\n '+ 3. Simple is better than complex.\\n',\n '? ++\\n',\n '- 4. Complex is better than complicated.\\n',\n '? ^ ---- ^\\n',\n '+ 4. Complicated is better than complex.\\n',\n '? ++++ ^ ^\\n',\n '+ 5. Flat is better than nested.\\n' ]\n \n Methods:\n \n constructor(linejunk=null, charjunk=null)\n Construct a text differencer, with optional filters.\n compare(a, b)\n Compare two sequences of lines; generate the resulting delta.\n */\n\n\n function Differ(linejunk, charjunk) {\n this.linejunk = linejunk\n this.charjunk = charjunk\n /*\n Construct a text differencer, with optional filters.\n \n The two optional keyword parameters are for filter functions:\n \n - `linejunk`: A function that should accept a single string argument,\n and return true iff the string is junk. The module-level function\n `IS_LINE_JUNK` may be used to filter out lines without visible\n characters, except for at most one splat ('#'). It is recommended\n to leave linejunk null. \n \n - `charjunk`: A function that should accept a string of length 1. The\n module-level function `IS_CHARACTER_JUNK` may be used to filter out\n whitespace characters (a blank or tab; **note**: bad idea to include\n newline in this!). Use of IS_CHARACTER_JUNK is recommended.\n */\n\n }\n\n Differ.prototype.compare = function(a, b) {\n /*\n Compare two sequences of lines; generate the resulting delta.\n \n Each sequence must contain individual single-line strings ending with\n newlines. Such sequences can be obtained from the `readlines()` method\n of file-like objects. The delta generated also consists of newline-\n terminated strings, ready to be printed as-is via the writeline()\n method of a file-like object.\n \n Example:\n \n >>> d = new Differ\n >>> d.compare(['one\\n', 'two\\n', 'three\\n'],\n ... ['ore\\n', 'tree\\n', 'emu\\n'])\n [ '- one\\n',\n '? ^\\n',\n '+ ore\\n',\n '? ^\\n',\n '- two\\n',\n '- three\\n',\n '? -\\n',\n '+ tree\\n',\n '+ emu\\n' ]\n */\n\n var ahi, alo, bhi, blo, cruncher, g, line, lines, tag, _i, _j, _len, _len1, _ref, _ref1\n cruncher = new SequenceMatcher(this.linejunk, a, b)\n lines = []\n _ref = cruncher.getOpcodes()\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n _ref1 = _ref[_i], tag = _ref1[0], alo = _ref1[1], ahi = _ref1[2], blo = _ref1[3], bhi = _ref1[4]\n switch (tag) {\n case 'replace':\n g = this._fancyReplace(a, alo, ahi, b, blo, bhi)\n break\n case 'delete':\n g = this._dump('-', a, alo, ahi)\n break\n case 'insert':\n g = this._dump('+', b, blo, bhi)\n break\n case 'equal':\n g = this._dump(' ', a, alo, ahi)\n break\n default:\n throw new Error(\"unknow tag (\" + tag + \")\")\n }\n for (_j = 0, _len1 = g.length; _j < _len1; _j++) {\n line = g[_j]\n lines.push(line)\n }\n }\n return lines\n }\n\n Differ.prototype._dump = function(tag, x, lo, hi) {\n /*\n Generate comparison results for a same-tagged range.\n */\n\n var i, _i, _results\n _results = []\n for (i = _i = lo; lo <= hi ? _i < hi : _i > hi; i = lo <= hi ? ++_i : --_i) {\n _results.push(\"\" + tag + \" \" + x[i])\n }\n return _results\n }\n\n Differ.prototype._plainReplace = function(a, alo, ahi, b, blo, bhi) {\n var first, g, line, lines, second, _i, _j, _len, _len1, _ref\n if (bhi - blo < ahi - alo) {\n first = this._dump('+', b, blo, bhi)\n second = this._dump('-', a, alo, ahi)\n } else {\n first = this._dump('-', a, alo, ahi)\n second = this._dump('+', b, blo, bhi)\n }\n lines = []\n _ref = [first, second]\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n g = _ref[_i]\n for (_j = 0, _len1 = g.length; _j < _len1; _j++) {\n line = g[_j]\n lines.push(line)\n }\n }\n return lines\n }\n\n Differ.prototype._fancyReplace = function(a, alo, ahi, b, blo, bhi) {\n /*\n When replacing one block of lines with another, search the blocks\n for *similar* lines; the best-matching pair (if any) is used as a\n synch point, and intraline difference marking is done on the\n similar pair. Lots of work, but often worth it.\n \n Example:\n >>> d = new Differ\n >>> d._fancyReplace(['abcDefghiJkl\\n'], 0, 1,\n ... ['abcdefGhijkl\\n'], 0, 1)\n [ '- abcDefghiJkl\\n',\n '? ^ ^ ^\\n',\n '+ abcdefGhijkl\\n',\n '? ^ ^ ^\\n' ]\n */\n\n var aelt, ai, ai1, ai2, atags, belt, bestRatio, besti, bestj, bj, bj1, bj2, btags, cruncher, cutoff, eqi, eqj, i, j, la, lb, line, lines, tag, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _n, _o, _ref, _ref1, _ref10, _ref11, _ref12, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9\n _ref = [0.74, 0.75], bestRatio = _ref[0], cutoff = _ref[1]\n cruncher = new SequenceMatcher(this.charjunk)\n _ref1 = [null, null], eqi = _ref1[0], eqj = _ref1[1]\n lines = []\n for (j = _i = blo; blo <= bhi ? _i < bhi : _i > bhi; j = blo <= bhi ? ++_i : --_i) {\n bj = b[j]\n cruncher.setSeq2(bj)\n for (i = _j = alo; alo <= ahi ? _j < ahi : _j > ahi; i = alo <= ahi ? ++_j : --_j) {\n ai = a[i]\n if (ai === bj) {\n if (eqi === null) {\n _ref2 = [i, j], eqi = _ref2[0], eqj = _ref2[1]\n }\n continue\n }\n cruncher.setSeq1(ai)\n if (cruncher.realQuickRatio() > bestRatio && cruncher.quickRatio() > bestRatio && cruncher.ratio() > bestRatio) {\n _ref3 = [cruncher.ratio(), i, j], bestRatio = _ref3[0], besti = _ref3[1], bestj = _ref3[2]\n }\n }\n }\n if (bestRatio < cutoff) {\n if (eqi === null) {\n _ref4 = this._plainReplace(a, alo, ahi, b, blo, bhi)\n for (_k = 0, _len = _ref4.length; _k < _len; _k++) {\n line = _ref4[_k]\n lines.push(line)\n }\n return lines\n }\n _ref5 = [eqi, eqj, 1.0], besti = _ref5[0], bestj = _ref5[1], bestRatio = _ref5[2]\n } else {\n eqi = null\n }\n _ref6 = this._fancyHelper(a, alo, besti, b, blo, bestj)\n for (_l = 0, _len1 = _ref6.length; _l < _len1; _l++) {\n line = _ref6[_l]\n lines.push(line)\n }\n _ref7 = [a[besti], b[bestj]], aelt = _ref7[0], belt = _ref7[1]\n if (eqi === null) {\n atags = btags = ''\n cruncher.setSeqs(aelt, belt)\n _ref8 = cruncher.getOpcodes()\n for (_m = 0, _len2 = _ref8.length; _m < _len2; _m++) {\n _ref9 = _ref8[_m], tag = _ref9[0], ai1 = _ref9[1], ai2 = _ref9[2], bj1 = _ref9[3], bj2 = _ref9[4]\n _ref10 = [ai2 - ai1, bj2 - bj1], la = _ref10[0], lb = _ref10[1]\n switch (tag) {\n case 'replace':\n atags += Array(la + 1).join('^')\n btags += Array(lb + 1).join('^')\n break\n case 'delete':\n atags += Array(la + 1).join('-')\n break\n case 'insert':\n btags += Array(lb + 1).join('+')\n break\n case 'equal':\n atags += Array(la + 1).join(' ')\n btags += Array(lb + 1).join(' ')\n break\n default:\n throw new Error(\"unknow tag (\" + tag + \")\")\n }\n }\n _ref11 = this._qformat(aelt, belt, atags, btags)\n for (_n = 0, _len3 = _ref11.length; _n < _len3; _n++) {\n line = _ref11[_n]\n lines.push(line)\n }\n } else {\n lines.push(' ' + aelt)\n }\n _ref12 = this._fancyHelper(a, besti + 1, ahi, b, bestj + 1, bhi)\n for (_o = 0, _len4 = _ref12.length; _o < _len4; _o++) {\n line = _ref12[_o]\n lines.push(line)\n }\n return lines\n }\n\n Differ.prototype._fancyHelper = function(a, alo, ahi, b, blo, bhi) {\n var g\n g = []\n if (alo < ahi) {\n if (blo < bhi) {\n g = this._fancyReplace(a, alo, ahi, b, blo, bhi)\n } else {\n g = this._dump('-', a, alo, ahi)\n }\n } else if (blo < bhi) {\n g = this._dump('+', b, blo, bhi)\n }\n return g\n }\n\n Differ.prototype._qformat = function(aline, bline, atags, btags) {\n /*\n Format \"?\" output and deal with leading tabs.\n \n Example:\n \n >>> d = new Differ\n >>> d._qformat('\\tabcDefghiJkl\\n', '\\tabcdefGhijkl\\n',\n [ '- \\tabcDefghiJkl\\n',\n '? \\t ^ ^ ^\\n',\n '+ \\tabcdefGhijkl\\n',\n '? \\t ^ ^ ^\\n' ]\n */\n\n var common, lines\n lines = []\n common = min(_countLeading(aline, '\\t'), _countLeading(bline, '\\t'))\n common = min(common, _countLeading(atags.slice(0, common), ' '))\n common = min(common, _countLeading(btags.slice(0, common), ' '))\n atags = atags.slice(common).replace(/\\s+$/, '')\n btags = btags.slice(common).replace(/\\s+$/, '')\n lines.push('- ' + aline)\n if (atags.length) {\n lines.push(\"? \" + (Array(common + 1).join('\\t')) + atags + \"\\n\")\n }\n lines.push('+ ' + bline)\n if (btags.length) {\n lines.push(\"? \" + (Array(common + 1).join('\\t')) + btags + \"\\n\")\n }\n return lines\n }\n\n return Differ\n\n })()\n\n IS_LINE_JUNK = function(line, pat) {\n if (pat == null) {\n pat = /^\\s*#?\\s*$/\n }\n /*\n Return 1 for ignorable line: iff `line` is blank or contains a single '#'.\n \n Examples:\n \n >>> IS_LINE_JUNK('\\n')\n true\n >>> IS_LINE_JUNK(' # \\n')\n true\n >>> IS_LINE_JUNK('hello\\n')\n false\n */\n\n return pat.test(line)\n }\n\n IS_CHARACTER_JUNK = function(ch, ws) {\n if (ws == null) {\n ws = ' \\t'\n }\n /*\n Return 1 for ignorable character: iff `ch` is a space or tab.\n \n Examples:\n >>> IS_CHARACTER_JUNK(' ').should.be.true\n true\n >>> IS_CHARACTER_JUNK('\\t').should.be.true\n true\n >>> IS_CHARACTER_JUNK('\\n').should.be.false\n false\n >>> IS_CHARACTER_JUNK('x').should.be.false\n false\n */\n\n return __indexOf.call(ws, ch) >= 0\n }\n\n _formatRangeUnified = function(start, stop) {\n /*\n Convert range to the \"ed\" format'\n */\n\n var beginning, length\n beginning = start + 1\n length = stop - start\n if (length === 1) {\n return \"\" + beginning\n }\n if (!length) {\n beginning--\n }\n return \"\" + beginning + \",\" + length\n }\n\n unifiedDiff = function(a, b, _arg) {\n var file1Range, file2Range, first, fromdate, fromfile, fromfiledate, group, i1, i2, j1, j2, last, line, lines, lineterm, n, started, tag, todate, tofile, tofiledate, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6\n _ref = _arg != null ? _arg : {}, fromfile = _ref.fromfile, tofile = _ref.tofile, fromfiledate = _ref.fromfiledate, tofiledate = _ref.tofiledate, n = _ref.n, lineterm = _ref.lineterm\n /*\n Compare two sequences of lines; generate the delta as a unified diff.\n \n Unified diffs are a compact way of showing line changes and a few\n lines of context. The number of context lines is set by 'n' which\n defaults to three.\n \n By default, the diff control lines (those with ---, +++, or @@) are\n created with a trailing newline. \n \n For inputs that do not have trailing newlines, set the lineterm\n argument to \"\" so that the output will be uniformly newline free.\n \n The unidiff format normally has a header for filenames and modification\n times. Any or all of these may be specified using strings for\n 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.\n The modification times are normally expressed in the ISO 8601 format.\n \n Example:\n \n >>> unifiedDiff('one two three four'.split(' '),\n ... 'zero one tree four'.split(' '), {\n ... fromfile: 'Original'\n ... tofile: 'Current',\n ... fromfiledate: '2005-01-26 23:30:50',\n ... tofiledate: '2010-04-02 10:20:52',\n ... lineterm: ''\n ... })\n [ '--- Original\\t2005-01-26 23:30:50',\n '+++ Current\\t2010-04-02 10:20:52',\n '@@ -1,4 +1,4 @@',\n '+zero',\n ' one',\n '-two',\n '-three',\n '+tree',\n ' four' ]\n */\n\n if (fromfile == null) {\n fromfile = ''\n }\n if (tofile == null) {\n tofile = ''\n }\n if (fromfiledate == null) {\n fromfiledate = ''\n }\n if (tofiledate == null) {\n tofiledate = ''\n }\n if (n == null) {\n n = 3\n }\n if (lineterm == null) {\n lineterm = '\\n'\n }\n lines = []\n started = false\n _ref1 = (new SequenceMatcher(null, a, b)).getGroupedOpcodes()\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n group = _ref1[_i]\n if (!started) {\n started = true\n fromdate = fromfiledate ? \"\\t\" + fromfiledate : ''\n todate = tofiledate ? \"\\t\" + tofiledate : ''\n lines.push(\"--- \" + fromfile + fromdate + lineterm)\n lines.push(\"+++ \" + tofile + todate + lineterm)\n }\n _ref2 = [group[0], group[group.length - 1]], first = _ref2[0], last = _ref2[1]\n file1Range = _formatRangeUnified(first[1], last[2])\n file2Range = _formatRangeUnified(first[3], last[4])\n lines.push(\"@@ -\" + file1Range + \" +\" + file2Range + \" @@\" + lineterm)\n for (_j = 0, _len1 = group.length; _j < _len1; _j++) {\n _ref3 = group[_j], tag = _ref3[0], i1 = _ref3[1], i2 = _ref3[2], j1 = _ref3[3], j2 = _ref3[4]\n if (tag === 'equal') {\n _ref4 = a.slice(i1, i2)\n for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n line = _ref4[_k]\n lines.push(' ' + line)\n }\n continue\n }\n if (tag === 'replace' || tag === 'delete') {\n _ref5 = a.slice(i1, i2)\n for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {\n line = _ref5[_l]\n lines.push('-' + line)\n }\n }\n if (tag === 'replace' || tag === 'insert') {\n _ref6 = b.slice(j1, j2)\n for (_m = 0, _len4 = _ref6.length; _m < _len4; _m++) {\n line = _ref6[_m]\n lines.push('+' + line)\n }\n }\n }\n }\n return lines\n }\n\n _formatRangeContext = function(start, stop) {\n /*\n Convert range to the \"ed\" format'\n */\n\n var beginning, length\n beginning = start + 1\n length = stop - start\n if (!length) {\n beginning--\n }\n if (length <= 1) {\n return \"\" + beginning\n }\n return \"\" + beginning + \",\" + (beginning + length - 1)\n }\n\n contextDiff = function(a, b, _arg) {\n var file1Range, file2Range, first, fromdate, fromfile, fromfiledate, group, i1, i2, j1, j2, last, line, lines, lineterm, n, prefix, started, tag, todate, tofile, tofiledate, _, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6\n _ref = _arg != null ? _arg : {}, fromfile = _ref.fromfile, tofile = _ref.tofile, fromfiledate = _ref.fromfiledate, tofiledate = _ref.tofiledate, n = _ref.n, lineterm = _ref.lineterm\n /*\n Compare two sequences of lines; generate the delta as a context diff.\n \n Context diffs are a compact way of showing line changes and a few\n lines of context. The number of context lines is set by 'n' which\n defaults to three.\n \n By default, the diff control lines (those with *** or ---) are\n created with a trailing newline. This is helpful so that inputs\n created from file.readlines() result in diffs that are suitable for\n file.writelines() since both the inputs and outputs have trailing\n newlines.\n \n For inputs that do not have trailing newlines, set the lineterm\n argument to \"\" so that the output will be uniformly newline free.\n \n The context diff format normally has a header for filenames and\n modification times. Any or all of these may be specified using\n strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.\n The modification times are normally expressed in the ISO 8601 format.\n If not specified, the strings default to blanks.\n \n Example:\n >>> a = ['one\\n', 'two\\n', 'three\\n', 'four\\n']\n >>> b = ['zero\\n', 'one\\n', 'tree\\n', 'four\\n']\n >>> contextDiff(a, b, {fromfile: 'Original', tofile: 'Current'})\n [ '*** Original\\n',\n '--- Current\\n',\n '***************\\n',\n '*** 1,4 ****\\n',\n ' one\\n',\n '! two\\n',\n '! three\\n',\n ' four\\n',\n '--- 1,4 ----\\n',\n '+ zero\\n',\n ' one\\n',\n '! tree\\n',\n ' four\\n' ]\n */\n\n if (fromfile == null) {\n fromfile = ''\n }\n if (tofile == null) {\n tofile = ''\n }\n if (fromfiledate == null) {\n fromfiledate = ''\n }\n if (tofiledate == null) {\n tofiledate = ''\n }\n if (n == null) {\n n = 3\n }\n if (lineterm == null) {\n lineterm = '\\n'\n }\n prefix = {\n insert: '+ ',\n \"delete\": '- ',\n replace: '! ',\n equal: ' '\n }\n started = false\n lines = []\n _ref1 = (new SequenceMatcher(null, a, b)).getGroupedOpcodes()\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n group = _ref1[_i]\n if (!started) {\n started = true\n fromdate = fromfiledate ? \"\\t\" + fromfiledate : ''\n todate = tofiledate ? \"\\t\" + tofiledate : ''\n lines.push(\"*** \" + fromfile + fromdate + lineterm)\n lines.push(\"--- \" + tofile + todate + lineterm)\n _ref2 = [group[0], group[group.length - 1]], first = _ref2[0], last = _ref2[1]\n lines.push('***************' + lineterm)\n file1Range = _formatRangeContext(first[1], last[2])\n lines.push(\"*** \" + file1Range + \" ****\" + lineterm)\n if (_any((function() {\n var _j, _len1, _ref3, _results\n _results = []\n for (_j = 0, _len1 = group.length; _j < _len1; _j++) {\n _ref3 = group[_j], tag = _ref3[0], _ = _ref3[1], _ = _ref3[2], _ = _ref3[3], _ = _ref3[4]\n _results.push(tag === 'replace' || tag === 'delete')\n }\n return _results\n })())) {\n for (_j = 0, _len1 = group.length; _j < _len1; _j++) {\n _ref3 = group[_j], tag = _ref3[0], i1 = _ref3[1], i2 = _ref3[2], _ = _ref3[3], _ = _ref3[4]\n if (tag !== 'insert') {\n _ref4 = a.slice(i1, i2)\n for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n line = _ref4[_k]\n lines.push(prefix[tag] + line)\n }\n }\n }\n }\n file2Range = _formatRangeContext(first[3], last[4])\n lines.push(\"--- \" + file2Range + \" ----\" + lineterm)\n if (_any((function() {\n var _l, _len3, _ref5, _results\n _results = []\n for (_l = 0, _len3 = group.length; _l < _len3; _l++) {\n _ref5 = group[_l], tag = _ref5[0], _ = _ref5[1], _ = _ref5[2], _ = _ref5[3], _ = _ref5[4]\n _results.push(tag === 'replace' || tag === 'insert')\n }\n return _results\n })())) {\n for (_l = 0, _len3 = group.length; _l < _len3; _l++) {\n _ref5 = group[_l], tag = _ref5[0], _ = _ref5[1], _ = _ref5[2], j1 = _ref5[3], j2 = _ref5[4]\n if (tag !== 'delete') {\n _ref6 = b.slice(j1, j2)\n for (_m = 0, _len4 = _ref6.length; _m < _len4; _m++) {\n line = _ref6[_m]\n lines.push(prefix[tag] + line)\n }\n }\n }\n }\n }\n }\n return lines\n }\n\n ndiff = function(a, b, linejunk, charjunk) {\n if (charjunk == null) {\n charjunk = IS_CHARACTER_JUNK\n }\n /*\n Compare `a` and `b` (lists of strings); return a `Differ`-style delta.\n \n Optional keyword parameters `linejunk` and `charjunk` are for filter\n functions (or None):\n \n - linejunk: A function that should accept a single string argument, and\n return true iff the string is junk. The default is null, and is\n recommended; \n \n - charjunk: A function that should accept a string of length 1. The\n default is module-level function IS_CHARACTER_JUNK, which filters out\n whitespace characters (a blank or tab; note: bad idea to include newline\n in this!).\n \n Example:\n >>> a = ['one\\n', 'two\\n', 'three\\n']\n >>> b = ['ore\\n', 'tree\\n', 'emu\\n']\n >>> ndiff(a, b)\n [ '- one\\n',\n '? ^\\n',\n '+ ore\\n',\n '? ^\\n',\n '- two\\n',\n '- three\\n',\n '? -\\n',\n '+ tree\\n',\n '+ emu\\n' ]\n */\n\n return (new Differ(linejunk, charjunk)).compare(a, b)\n }\n\n restore = function(delta, which) {\n /*\n Generate one of the two sequences that generated a delta.\n \n Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract\n lines originating from file 1 or 2 (parameter `which`), stripping off line\n prefixes.\n \n Examples:\n >>> a = ['one\\n', 'two\\n', 'three\\n']\n >>> b = ['ore\\n', 'tree\\n', 'emu\\n']\n >>> diff = ndiff(a, b)\n >>> restore(diff, 1)\n [ 'one\\n',\n 'two\\n',\n 'three\\n' ]\n >>> restore(diff, 2)\n [ 'ore\\n',\n 'tree\\n',\n 'emu\\n' ]\n */\n\n var line, lines, prefixes, tag, _i, _len, _ref\n tag = {\n 1: '- ',\n 2: '+ '\n }[which]\n if (!tag) {\n throw new Error(\"unknow delta choice (must be 1 or 2): \" + which)\n }\n prefixes = [' ', tag]\n lines = []\n for (_i = 0, _len = delta.length; _i < _len; _i++) {\n line = delta[_i]\n if (_ref = line.slice(0, 2), __indexOf.call(prefixes, _ref) >= 0) {\n lines.push(line.slice(2))\n }\n }\n return lines\n }\n\n exports._arrayCmp = _arrayCmp\n\n exports.SequenceMatcher = SequenceMatcher\n\n exports.getCloseMatches = getCloseMatches\n\n exports._countLeading = _countLeading\n\n exports.Differ = Differ\n\n exports.IS_LINE_JUNK = IS_LINE_JUNK\n\n exports.IS_CHARACTER_JUNK = IS_CHARACTER_JUNK\n\n exports._formatRangeUnified = _formatRangeUnified\n\n exports.unifiedDiff = unifiedDiff\n\n exports._formatRangeContext = _formatRangeContext\n\n exports.contextDiff = contextDiff\n\n exports.ndiff = ndiff\n\n exports.restore = restore\n\n}).call(this)\n","module.exports = require('./lib/difflib');\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp(\n '(next|weiter|continue|>([^|]|$)|»([^|]|$))',\n 'i'\n);\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import URL from 'url';\n\nimport { getAttrs, isWordpress } from 'utils/dom';\nimport { removeAnchor, pageNumFromUrl } from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr(\n 'id'\n ) || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (\n !shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)\n ) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${\n possiblePages[href].linkText\n }|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","import URL from 'url';\n\nimport { DIGIT_RE, EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE, CAP_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (\n !negativeMatch &&\n NEGATIVE_SCORE_RE.test(parentData) &&\n EXTRANEOUS_LINK_HINTS_RE.test(parentData)\n ) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(\n null,\n articleUrl,\n href\n ).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","import URL from 'url';\n\nimport { articleBaseUrl, removeAnchor } from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce(\n (acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n },\n { score: -100 }\n );\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = ['og:url'];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n};\n\nexport default GenericUrlExtractor;\n","'use strict';\n\nvar defaults = {\n ellipse: '…',\n chars: [' ', '-'],\n max: 140,\n truncate: true\n};\n\nfunction ellipsize(str, max, ellipse, chars, truncate) {\n if (str.length < max) return str;\n\n var last = 0,\n c = '',\n midMax = Math.floor(max / 2),\n computedMax = truncate === 'middle' ? midMax : max;\n\n for (var i = 0, len = str.length; i < len; i++) {\n c = str.charAt(i);\n\n if (chars.indexOf(c) !== -1 && truncate !== 'middle') {\n last = i;\n }\n\n if (i < computedMax) continue;\n if (last === 0) {\n return !truncate ? \n '' : \n str.substring(0, computedMax - 1) + ellipse + (\n truncate === 'middle' ? \n str.substring(str.length - midMax, str.length) : \n ''\n );\n }\n\n return str.substring(0, last) + ellipse;\n }\n\n return str;\n}\n\nmodule.exports = function(str, max, opts) {\n if (typeof str !== 'string' || str.length === 0) return '';\n if (max === 0) return '';\n\n opts = opts || {};\n\n for (var key in defaults) {\n if (opts[key] === null || typeof opts[key] === 'undefined') {\n opts[key] = defaults[key];\n }\n }\n\n opts.max = max || opts.max;\n\n return ellipsize(str, opts.max, opts.ellipse, opts.chars, opts.truncate);\n};\n","export const EXCERPT_META_SELECTORS = ['og:description', 'twitter:description'];\n","import ellipsize from 'ellipsize';\n\nimport { extractFromMeta, stripTags } from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst getWordCount = content => {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n};\n\nconst getWordCountAlt = content => {\n content = content.replace(/<[^>]*>/g, ' ');\n content = content.replace(/\\s+/g, ' ');\n content = content.trim();\n return content.split(' ').length;\n};\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n let count = getWordCount(content);\n if (count === 1) count = getWordCountAlt(content);\n return count;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n","import { MediumExtractor, BloggerExtractor } from './custom';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\nimport { apiExtractors } from './add-extractor';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname\n .split('.')\n .slice(-2)\n .join('.');\n\n return (\n apiExtractors[hostname] ||\n apiExtractors[baseDomain] ||\n Extractors[hostname] ||\n Extractors[baseDomain] ||\n detectByHtml($) ||\n GenericExtractor\n );\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo, makeLinksAbsolute } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach(key => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml, allowMultiple) {\n return selectors.find(selector => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return (\n (allowMultiple || (!allowMultiple && $(s).length === 1)) &&\n $(s).attr(attr) &&\n $(s)\n .attr(attr)\n .trim() !== ''\n );\n }\n\n return (\n (allowMultiple || (!allowMultiple && $(selector).length === 1)) &&\n $(selector)\n .text()\n .trim() !== ''\n );\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true, allowMultiple } = extractionOpts;\n\n const overrideAllowMultiple = type === 'lead_image_url' || allowMultiple;\n\n const matchingSelector = findMatchingSelector(\n $,\n selectors,\n extractHtml,\n overrideAllowMultiple\n );\n\n if (!matchingSelector) return null;\n\n function transformAndClean($node) {\n makeLinksAbsolute($node, $, opts.url || '');\n cleanBySelectors($node, $, extractionOpts);\n transformElements($node, $, extractionOpts);\n return $node;\n }\n\n function selectHtml() {\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((_, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n $content = transformAndClean($content);\n if (Cleaners[type]) {\n Cleaners[type]($content, { ...opts, defaultCleaner });\n }\n\n if (allowMultiple) {\n return $content\n .children()\n .toArray()\n .map(el => $.html($(el)));\n }\n\n return $.html($content);\n }\n\n if (extractHtml) {\n return selectHtml(matchingSelector);\n }\n\n let $match;\n let result;\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr, transform] = matchingSelector;\n $match = $(selector);\n $match = transformAndClean($match);\n result = $match.map((_, el) => {\n const item = $(el)\n .attr(attr)\n .trim();\n return transform ? transform(item) : item;\n });\n } else {\n $match = $(matchingSelector);\n $match = transformAndClean($match);\n result = $match.map((_, el) =>\n $(el)\n .text()\n .trim()\n );\n }\n\n result =\n Array.isArray(result.toArray()) && allowMultiple\n ? result.toArray()\n : result[0];\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner && Cleaners[type]) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nexport function selectExtendedTypes(extend, opts) {\n const results = {};\n Reflect.ownKeys(extend).forEach(t => {\n if (!results[t]) {\n results[t] = select({ ...opts, type: t, extractionOpts: extend[t] });\n }\n });\n return results;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title,\n });\n const lead_image_url = extractResult({\n ...opts,\n type: 'lead_image_url',\n content,\n });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } = extractResult({\n ...opts,\n type: 'url_and_domain',\n }) || { url: null, domain: null };\n\n let extendedResults = {};\n if (extractor.extend) {\n extendedResults = selectExtendedTypes(extractor.extend, opts);\n }\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n ...extendedResults,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages({\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n}) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n // eslint-disable-next-line no-await-in-loop\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${\n nextPageResult.content\n }`,\n };\n\n // eslint-disable-next-line prefer-destructuring\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({\n content: `<div>${result.content}</div>`,\n });\n return {\n ...result,\n total_pages: pages,\n rendered_pages: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\nimport TurndownService from 'turndown';\n\nimport Resource from 'resource';\nimport { validateUrl } from 'utils';\nimport addCustomExtractor from 'extractors/add-extractor';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor, { selectExtendedTypes } from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Parser = {\n async parse(url, { html, ...opts } = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n contentType = 'html',\n headers = {},\n extend,\n customExtractor,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return {\n error: true,\n message:\n 'The url parameter passed does not look like a valid URL. Please check your URL and try again.',\n };\n }\n\n const $ = await Resource.create(url, html, parsedUrl, headers);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // Add custom extractor via cli.\n if (customExtractor) {\n addCustomExtractor(customExtractor);\n }\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // if html still has not been set (i.e., url passed to Parser.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta')\n .map((_, node) => $(node).attr('name'))\n .toArray();\n\n let extendedTypes = {};\n if (extend) {\n extendedTypes = selectExtendedTypes(extend, { $, url, html });\n }\n\n let result = RootExtractor.extract(Extractor, {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n contentType,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages({\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n });\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n if (contentType === 'markdown') {\n const turndownService = new TurndownService();\n result.content = turndownService.turndown(result.content);\n } else if (contentType === 'text') {\n result.content = $.text($(result.content));\n }\n\n return { ...result, ...extendedTypes };\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n fetchResource(url) {\n return Resource.create(url);\n },\n\n addExtractor(extractor) {\n return addCustomExtractor(extractor);\n },\n};\n\nexport default Parser;\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n"],"names":["global","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","module","exports","wrap","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","call","Gp","GeneratorFunctionPrototype","Generator","create","GeneratorFunction","constructor","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","arg","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","self","tryLocsList","iter","next","then","result","done","value","toString","keys","object","key","push","reverse","length","pop","Context","reset","skipTempReset","prev","sent","_sent","delegate","method","tryEntries","forEach","resetTryEntry","charAt","isNaN","slice","stop","rootRecord","completion","type","rval","dispatchException","exception","context","handle","loc","caught","record","i","entry","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","iterable","resultName","nextLoc","state","protoGenerator","generator","_invoke","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","fn","obj","err","previousPromise","callInvokeWithMethodAndArg","Promise","resolve","reject","invoke","unwrapped","error","return","TypeError","info","pushTryEntry","locs","iteratorMethod","Function","g","hadRuntime","getOwnPropertyNames","indexOf","oldRuntime","require","e","it","propertyIsEnumerable","cof","split","IObject","defined","bitmap","enumerable","configurable","writable","S","isObject","val","valueOf","exec","defineProperty","get","a","window","Math","__g","document","is","createElement","gOPD","getOwnPropertyDescriptor","O","P","toIObject","toPrimitive","IE8_DOM_DEFINE","has","createDesc","pIE","f","core","version","__e","that","aFunction","b","c","apply","arguments","dP","Attributes","anObject","PROTOTYPE","$export","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","target","ctx","C","virtual","R","hide","U","KEY","exp","fails","$getOwnPropertyDescriptor","IS_INCLUDES","$Object","id","px","random","concat","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","SHARED","store","mode","copyright","USE_SYMBOL","uid","def","TAG","tag","stat","wksExt","ceil","floor","min","toInteger","max","shared","arrayIndexOf","$this","el","fromIndex","index","toLength","IE_PROTO","names","$keys","enumBugKeys","getOwnPropertySymbols","Array","isArray","defineProperties","Properties","getKeys","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","dPs","hiddenKeys","gOPN","windowNames","getWindowNames","$GOPD","$DP","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","wks","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","ObjectProto","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","DESCRIPTORS","$fails","_create","D","protoDesc","sym","_k","isSymbol","$defineProperty","$defineProperties","getSymbols","gOPS","symbols","enumKeys","l","$propertyIsEnumerable","E","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","redefine","$set","set","es6Symbols","j","wellKnownSymbols","k","wksDefine","keyFor","useSetter","useSimple","replacer","$replacer","args","toObject","desc","_Object$defineProperty","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","excluded","sourceKeys","objectWithoutPropertiesLoose","sourceSymbolKeys","TO_STRING","ITERATOR","BUGGY","VALUES","returnThis","Base","NAME","Constructor","DEFAULT","IS_SET","FORCED","descriptor","setToStringTag","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","Iterators","$at","pos","s","String","charCodeAt","iterated","_t","_i","point","step","Arguments","TO_STRING_TAG","DOMIterables","Collection","defer","channel","port","ARG","T","tryGet","callee","forbiddenField","ret","ArrayProto","getIteratorMethod","classof","BREAK","RETURN","iterFn","getIterFn","isArrayIter","SPECIES","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","ONREADYSTATECHANGE","run","listener","event","data","un","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","clear","macrotask","Observer","MutationObserver","WebKitMutationObserver","isNode","PromiseCapability","promise","$$resolve","$$reject","v","navigator","userAgent","x","promiseCapability","newPromiseCapability","safe","SAFE_CLOSING","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","skipClosing","arr","task","microtask","head","last","notify","flush","parent","domain","exit","enter","standalone","toggle","node","createTextNode","observe","characterData","PROMISE","versions","v8","$Promise","empty","newPromiseCapabilityModule","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","anInstance","onFulfilled","onRejected","speciesConstructor","r","capability","promiseResolve","all","remaining","forOf","$index","alreadyCalled","race","onFinally","isFunction","callbackfn","asyncGeneratorStep","gen","_next","_throw","_Promise","root","freeExports","nodeType","freeModule","freeGlobal","punycode","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","stringFromCharCode","fromCharCode","RangeError","map","array","mapDomain","string","parts","replace","join","ucs2decode","extra","output","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","decode","input","basic","oldi","t","baseMinusT","codePoint","inputLength","n","bias","lastIndexOf","splice","encode","handledCPCount","basicLength","m","q","currentValue","handledCPCountPlusOne","qMinusT","test","toLowerCase","isString","isNull","isNullOrUndefined","qs","sep","eq","options","regexp","maxKeys","prop","len","kstr","vstr","idx","substr","decodeURIComponent","stringifyPrimitive","isFinite","ks","encodeURIComponent","urlParse","relative","resolveObject","util","Url","format","protocol","slashes","auth","host","hostname","hash","search","query","pathname","path","href","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","url","parseQueryString","slashesDenoteHost","u","parse","queryIndex","splitter","uSplit","rest","trim","simplePath","querystring","lowerProto","match","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","unshift","toASCII","p","h","ae","esc","escape","qm","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","up","isAbsolute","PARSING_NODE","flat","o","y","item","nonce","noModule","text","getAttribute","setAttribute","parentNode","init","jquery","toArray","pushStack","merge","prevObject","each","first","even","grep","odd","end","sort","extend","isPlainObject","expando","isReady","noop","isEmptyObject","globalEval","makeArray","inArray","guid","support","d","Date","ue","A","N","L","H","M","I","RegExp","$","_","z","X","V","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","Y","Q","J","K","Z","ee","te","ne","re","ie","oe","be","disabled","nodeName","dir","childNodes","se","ownerDocument","getElementById","getElementsByTagName","getElementsByClassName","qsa","ye","scope","xe","querySelectorAll","removeAttribute","cacheLength","le","ce","fe","attrHandle","pe","sourceIndex","nextSibling","de","he","ge","isDisabled","ve","isXML","namespaceURI","setDocument","defaultView","top","attachEvent","attributes","className","createComment","getById","getElementsByName","find","getAttributeNode","innerHTML","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","contains","sortDetached","attr","specified","uniqueSort","detectDuplicates","sortStable","getText","textContent","firstChild","nodeValue","selectors","createPseudo","preFilter","lastChild","uniqueID","pseudos","setFilters","not","lang","location","focus","activeElement","hasFocus","tabIndex","enabled","checked","selected","selectedIndex","header","button","gt","nth","radio","checkbox","file","password","image","submit","me","we","Te","Ce","Ee","filters","tokenize","compile","selector","select","defaultValue","expr","unique","isXMLDoc","escapeSelector","ready","parseHTML","children","contents","closest","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","Callbacks","once","stopOnFalse","memory","remove","disable","lock","locked","fireWith","fire","fired","Deferred","always","pipe","progress","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","when","warn","message","stack","readyException","removeEventListener","readyWait","readyState","doScroll","toUpperCase","cache","access","hasData","removeData","_data","_removeData","dequeue","_queueHooks","clearQueue","composed","getRootNode","css","cur","cssNumber","unit","start","body","show","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","thead","col","tr","td","_default","tbody","tfoot","colgroup","caption","th","optgroup","htmlPrefilter","off","Se","namespace","isTrigger","special","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","events","triggered","dispatch","bindType","origType","delegateCount","setup","teardown","removeEvent","fix","delegateTarget","preDispatch","handlers","isPropagationStopped","currentTarget","elem","isImmediatePropagationStopped","rnamespace","handleObj","postDispatch","addProp","originalEvent","load","noBubble","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","code","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","on","one","ke","Ae","Ne","je","De","qe","Le","He","clone","_evalUrl","Oe","cleanData","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","Pe","Re","opener","getComputedStyle","Me","Ie","We","getPropertyValue","pixelBoxStyles","width","minWidth","maxWidth","Fe","cssText","marginLeft","right","position","offsetWidth","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","Be","$e","_e","ze","cssProps","Ue","Xe","Ve","visibility","Ge","letterSpacing","fontWeight","Ye","Qe","Je","getClientRects","Ke","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","setProperty","getBoundingClientRect","left","margin","padding","border","expand","Tween","easing","propHooks","duration","fx","scrollTop","scrollLeft","linear","swing","cos","PI","Ze","et","tt","nt","rt","ot","hidden","requestAnimationFrame","interval","tick","at","st","ut","tweeners","prefilters","startTime","tweens","props","opts","specialEasing","originalProperties","originalOptions","createTween","bind","timer","anim","Animation","tweener","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","old","fadeTo","animate","timers","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","clearTimeout","checkOn","optSelected","radioValue","ct","ft","removeAttr","attrHooks","pt","dt","ht","vt","removeProp","propFix","addClass","removeClass","toggleClass","hasClass","yt","valHooks","focusin","mt","xt","parentWindow","simulate","triggerHandler","bt","wt","Tt","parseXML","DOMParser","parseFromString","Ct","Et","St","kt","At","param","serialize","serializeArray","Nt","jt","Dt","qt","Lt","Ht","Ot","Pt","Rt","Mt","It","Wt","dataTypes","Ft","ajaxSettings","flatOptions","active","lastModified","etag","isLocal","processData","contentType","accepts","xml","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","statusCode","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","dataType","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","success","timeout","send","dataFilter","statusText","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","visible","xhr","XMLHttpRequest","Bt","$t","cors","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","response","script","scriptAttrs","charset","scriptCharset","zt","Ut","jsonp","jsonpCallback","createHTMLDocument","implementation","animated","offset","setOffset","using","pageYOffset","pageXOffset","offsetParent","scrollTo","Height","Width","unbind","undelegate","hover","Xt","proxy","holdReady","parseJSON","isWindow","camelCase","isNumeric","Vt","jQuery","Gt","noConflict","rootjQuery","removeUnusedTags","$node","cloneHtml","browser","isContainer","tagName","repeat","character","count","$body","$head","returnHtml","Node","COMMENT_NODE","blockElements","isBlock","voidElements","isVoid","meaningfulWhenBlankElements","tagNames","some","rules","cleanAttribute","attribute","Rules","_keep","_remove","blankRule","replacement","blankReplacement","keepReplacement","defaultRule","defaultReplacement","findRule","rule","filterValue","current","isPre","paragraph","lineBreak","br","heading","hLevel","Number","headingStyle","blockquote","list","lastElementChild","listItem","prefix","bulletListMarker","indentedCodeBlock","codeBlockStyle","fencedCodeBlock","language","fenceChar","fence","fenceSize","fenceInCodeRegex","horizontalRule","hr","inlineLink","linkStyle","title","referenceLink","reference","linkReferenceStyle","references","emphasis","emDelimiter","strong","strongDelimiter","hasSiblings","previousSibling","isCodeBlock","extraSpace","alt","keep","forNode","isBlank","Parser","_htmlParser","HTMLParser","canParse","canParseHTMLNatively","useActiveX","ActiveXObject","shouldUseActiveX","doc","designMode","RootNode","element","prevText","keepLeadingWs","nextNode","collapseWhitespace","preformattedCode","isPreOrCode","isCode","flankingWhitespace","leading","trailing","edges","leadingAscii","leadingNonAscii","trailingNonAscii","trailingAscii","isFlankedByWhitespace","side","sibling","regExp","isFlanked","reduce","escapes","TurndownService","defaults","outerHTML","destination","whitespace","s1","indexEnd","substring","trimTrailingNewlines","s2","nls","turndown","use","plugin","addRule","accumulator","iconv","NORMALIZE_RE","normalizeSpaces","space","spaces","ltrim","rtrim","exporter","ALIAS","FORCE","TYPE","$parseInt","$trim","hex","ws","str","radix","PAGE_IN_HREF_RE","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","removeAnchor","_Array$isArray","getIterator","_arr","_getIterator","arrayWithHoles","iterableToArrayLimit","nonIterableRest","articleBaseUrl","parsed","parsedUrl","URL","firstSegmentHasLetters","cleanedSegments","acc","rawSegment","segment","goodSegment","includes","possibleSegment","fileExt","SENTENCE_END_RE","excerptContent","words","getEncoding","encoding","i1","i2","i3","extract","skip","line","startLine","requestLine","statusLine","onlyHeaders","_header","normalize","nl","parseHeaders","major","minor","statusMessage","nextLine","addHeaderLine","field","dest","XHR","request","log","callback","options_onResponse","onResponse","verbose","level","logger","levels","formatted","getLogger","uri","unsupported_options","DEFAULT_TIMEOUT","accept","form","multi","boundry","lines","multipart","authorization","o1","o2","o3","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","b64_enc","timed_out","is_cors","ajaxLocation","rurl","ajaxLocParts","is_crossDomain","supports_cors","req_seq","seq_id","_id","cors_err","timeoutTimer","er","did","debug","OPENED","HEADERS_RECEIVED","on_response","LOADING","on_loading","DONE","httpHeaders","on_end","withCredentials","loading","run_xhr","requester","params","post","put","shortcut","couch","resp","REQUEST_HEADERS","cheerio","FETCH_TIMEOUT","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","validateResponse","parseNon200","contentLength","fetchResource","encodeURI","jar","gzip","followAllRedirects","followRedirect","_context","convertMetaProp","from","to","Reflect","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","WHITELIST_ATTRS_RE","CLEAN_CONDITIONALLY_TAGS","HEADER_TAG_LIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","brsToPs","collapsing","$element","nextElement","paragraphize","convertToParagraphs","div","$div","convertNodeTo","span","$span","attrs","getAttrs","attribString","_Reflect$ownKeys","cleanImages","$article","img","$img","_parseInt","arr2","arrayLike","aLen","mapfn","mapping","createProperty","isIterable","_isIterable","_Array$from","arrayWithoutHoles","iterableToArray","nonIterableSpread","removeAllButWhitelist","attribs","setAttrs","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS_RE","READABILITY_ASSET","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","getWeight","classes","score","$parseFloat","Infinity","getScore","_parseFloat","scoreCommas","idkRe","scoreParagraph","textLength","lengthBonus","chunks","scoreLength","setScore","addScore","amount","getOrInitScore","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","contentBonus","density","linkDensity","siblingContent","siblingContentLength","cleanTags","weight","imgCount","previousNode","removeUnlessContent","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","common","IS_WEAK","ADDER","SIZE","getEntry","_f","getConstructor","_l","redefineAll","validate","setStrong","$iterDefine","setSpecies","original","asc","res","IS_ADDER","size","toJSON","COLLECTION","of","cb","mapFn","nextItem","Set","makeLinksAbsolute","$content","rootUrl","baseUrl","absoluteUrl","setAttr","urlSet","srcset","candidates","absoluteCandidates","candidate","_toConsumableArray","totalTextLength","linkLength","_typeof2","_Symbol","_Symbol$iterator","_typeof","extractFromMeta","metaNames","cachedNames","foundNames","metaValue","stripTags","isGoodNode","maxChildren","nodeClass","class","classAndId","extractFromSelectors","textOnly","nodes","cleanText","nodeIsSufficient","IS_LINK","IMAGE_RE","IS_IMAGE","IS_SRCSET","TAGS_TO_REMOVE","convertLazyLoadedImages","existingSrc","extractSrcFromJSON","isComment","clean","Resource","preparedResponse","alreadyDecoded","failed","generateDoc","encodeDoc","decodedContent","metaContentType","properEncoding","range","$assign","assign","extractor","domains","mergeSupportedDomains","supportedDomains","apiExtractors","addExtractor","BloggerExtractor","transforms","noscript","author","date_published","NYMagExtractor","$children","dek","ApartmentTherapyExtractor","sources","lead_image_url","next_page_url","excerpt","MediumExtractor","$text","ytRe","thumb","youtubeId","$caption","figure","WwwMsnbcComExtractor","GeniusComExtractor","song","release_date","album","cover_art_url","WiredJpExtractor","dataOriginal","WwwAbendblattDeExtractor","defaultCleaner","tweets","$tweetContainer","timezone","videoId","description","imgHtml","$imgSrc","$imageParent","$dataAttrContainer","imgPath1","imgPath2","$figure","figcaption","bgImg","table","innerHtml","byline","linkbox","reporter","ul","ol","li","CustomExtractors","LTR_MARK","RTL_MARK","LTR","RTL","BIDI","NODI","rtlSciriptRanges","Hebrew","Arabic","NKo","Syriac","Thaana","Tifinagh","getDirection","hasRtl","hasDirectionCharacters","hasLtr","direction","char","charIsRtl","hasDigit","fromCode","toCode","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","TIME_NOW_STRING","allTimeUnits","TIME_AGO_STRING","allMonths","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","is_uri","is_iri","is_http_uri","is_http_iri","is_https_uri","is_https_iri","is_web_uri","is_web_iri","isUri","isHttpUri","isHttpsUri","isWebUri","splitUri","splitted","authority","fragment","scheme","allowHttps","leadImageUrl","validUrl","hookCallback","hooks","hasOwnProp","isObjectEmpty","isUndefined","isNumber","isDate","arrLen","createUTC","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","deprecationHandler","argLen","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","number","targetLength","forceSign","absNumber","abs","zerosToFill","sign","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","formatMoment","expandFormat","mom","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","getSetYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","shiftWeekdays","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","configFromRFC2822","parsedArray","weekdayStr","parsedInput","weekdayProvided","weekdayActual","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","configFromArray","currentDate","expectedWeekday","yearToUse","weekYear","temp","weekdayOverflow","curWeek","nowValue","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","GG","createLocal","_week","gg","_dayOfYear","_nextDay","ms","setFullYear","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","meridiemHour","isPm","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","utcOffset","offsetFromString","chunkOffset","matcher","chunk","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","period","tmp","addSubtract","isAdding","invalid","subtract","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","preParsePostFormat","time","formats","arrayTest","dataTypeTest","property","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","isCalendarSpec","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","prioritizedLen","toDate","toISOString","keepOffset","inspect","suffix","zone","for","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","posNegDuration","withSuffix","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","default","abbrs","offsets","untils","population","_set","zones","toTimeString","offsetScore","abbrScore","localeCompare","links","countries","dataVersion","tz","_index","moveAmbiguousForward","moveInvalidForward","scoreOffsetAt","_zones","_links","_names","_countries","link","zoneExists","didShowError","guess","Intl","DateTimeFormat","resolvedOptions","timeZone","Zone","unpack","unpackBase60","needsOffset","zonesForCountry","_z","defaultZone","setDefault","moment","dateString","replaceWithAmPm","amPm","preferredOrder","defaultOrder","regexUnixMillisecondTimestamp","regexUnixTimestamp","regexFillingWords","regexDayNames","regexAbbreviatedDayNames","regexShortestDayNames","regexFirstSecondThirdFourth","regexMonthNames","regexAbbreviatedMonthNames","regexEndian","matchedPart","third","hasSingleDigit","hasQuadDigit","regexTimezone","regexISO8601HoursWithLeadingZeroMinutesSecondsMilliseconds","regexISO8601HoursWithLeadingZeroMinutesSecondsCentiSeconds","regexISO8601HoursWithLeadingZeroMinutesSecondsDeciSeconds","regexHoursWithLeadingZeroDigitMinutesSecondsAmPm","regexHoursMinutesSecondsAmPm","regexHoursWithLeadingZeroDigitMinutesAmPm","regexHoursMinutesAmPm","regexHoursWithLeadingZeroDigitAmPm","regexHoursAmPm","regexHoursWithLeadingZeroMinutesSeconds","regexHoursMinutesSecondsMilliseconds","regexHoursMinutesSecondsCentiSeconds","regexHoursMinutesSecondsDeciSeconds","regexHoursMinutesSeconds","regexHoursWithLeadingZeroMinutes","regexHoursMinutes","regexYearLong","regexDayShortMonthShort","regexDayShortMonth","regexDayMonthShort","regexDayMonth","regexMonthShortYearShort","regexMonthYearShort","formatIncludesMonth","regexDayLeadingZero","regexDay","regexYearShort","amOrPm","parseFormat","createDate","fragments","cleanDatePublished","extractCleanNode","article","$hOnes","cleanConditionally","tags","markToKeep","stripJunkTags","$header","cleanHeaders","$p","cleanTitle","splitTitle","newTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","extractBreadcrumbTitle","nakedDomain","startSlug","wuzzy","levenshtein","endSlug","cleanDomainFromTitle","resolveSplitTitle","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","\\","'","\n","\r","
","
","freeParseFloat","freeParseInt","freeSelf","moduleExports","freeProcess","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","escapeHtmlChar","&","<",">","\"","escapeStringChar","chr","hasUnicode","mapToArray","overArg","transform","replaceHolders","placeholder","setToArray","stringSize","unicodeSize","stringToArray","unescapeHtmlChar","&","<",">",""","'","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","getTag","isFunc","cloneBuffer","initCloneObject","keysIn","getSymbolsIn","symbol","dataView","buffer","Ctor","cloneArrayBuffer","byteOffset","byteLength","cloneTypedArray","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","evaluate","interpolate","variable","imports","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","depth","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","guard","isIterateeCall","createCaseFirst","methodName","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","arrLength","oldArray","reorder","createInverter","toIteratee","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","pair","createToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","shortOut","details","insertWrapDetails","lastCalled","stamp","rand","memoize","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","timeWaiting","trailingEdge","debounced","isInvoking","cancel","resolver","memoized","Cache","negate","overArgs","funcsLength","partial","partialRight","rearg","gte","isError","isInteger","lte","iteratorToArray","remainder","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","omit","CLONE_DEEP_FLAG","toPairs","toPairsIn","word","capitalize","upperFirst","kebabCase","lowerFirst","snakeCase","startCase","upperCase","pattern","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","rangeRight","augend","addend","divide","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","compact","cond","conforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","pad","strLength","padEnd","padStart","floating","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","ensureArr","mi","xi","xn","c1","mIdx","mFlg","si","ma","mb","trans","cost","mlen","weights","v0","v1","vlen","ng","ni","ti","tn","ec","al","bl","sa","t_j","sk","sb","sas","sbs","num","den","sqrt","both","Cleaners","cleanImage","dekText","cleanContent","extractBestNode","stripUnlikelyCandidates","parentSelector","childSelector","scoreContent","GenericContentExtractor","defaultOpts","getContentNode","cleanAndReturnNode","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","matchRe","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","scoreImageUrl","$gParent","scoreByParents","area","scoreByDimensions","topUrl","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","lastelt","returnitem","_ref","_j","_ref1","_results","_results1","_len","los","startpos","newitem","parentpos","childpos","endpos","rightpos","pushpop","peek","heap","insert","front","Differ","IS_CHARACTER_JUNK","IS_LINE_JUNK","SequenceMatcher","contextDiff","getCloseMatches","ndiff","restore","unifiedDiff","_any","_arrayCmp","_calculateRatio","_countLeading","_formatRangeContext","_formatRangeUnified","_has","__indexOf","la","lb","items","isjunk","autojunk","setSeqs","setSeq1","setSeq2","matchingBlocks","opcodes","fullbcount","_chainB","b2j","elt","junk","ntest","popular","_len1","isbjunk","isbpopular","findLongestMatch","alo","ahi","blo","bhi","besti","bestj","bestsize","j2len","newj2len","_ref2","_ref3","_ref4","_ref5","getMatchingBlocks","j1","j2","k1","k2","nonAdjacent","getOpcodes","ai","answer","bj","getGroupedOpcodes","codes","groups","nn","ratio","quickRatio","avail","numb","realQuickRatio","possibilities","cutoff","ch","linejunk","charjunk","compare","_fancyReplace","_dump","_plainReplace","aelt","ai1","ai2","atags","belt","bestRatio","bj1","btags","cruncher","eqi","eqj","_len2","_len3","_len4","_m","_o","_ref10","_ref11","_ref12","_ref6","_ref7","_ref8","_ref9","_fancyHelper","_qformat","aline","bline","pat","beginning","_arg","file1Range","file2Range","fromdate","fromfile","fromfiledate","lineterm","started","todate","tofile","tofiledate","equal","prefixes","DIGIT_RE","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreLinks","articleUrl","previousUrls","baseRegex","isWp","scoredPages","possiblePages","$link","linkText","shouldScore","linkData","positiveMatch","negativeMatch","possiblePage","pageNum","pageNumFromUrl","parentData","linkTextAsNum","scoreLinkText","difflib","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","GenericUrlExtractor","$canonical","metaUrl","ellipse","midMax","computedMax","ellipsize","EXCERPT_META_SELECTORS","GenericExcerptExtractor","GenericWordCountExtractor","GenericExtractor","url_and_domain","word_count","stringDirection","loaded","Detectors","getExtractor","baseDomain","Extractors","extractionOpts","extractHtml","allowMultiple","matchingSelector","transformAndClean","$matches","$wrapper","selectHtml","selectExtendedTypes","results","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","extendedResults","collectAllPages","Extractor","pages","extractorOpts","nextPageResult","total_pages","rendered_pages","fetchAllPages","customExtractor","addCustomExtractor","extendedTypes","turndownService"],"mappings":"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CA,OACA,SACA,QACA,OACA,OACA,UACA,WACA,OACA,SACA,WACA,OACA,OACA,OACA,WACA,oBACA,OACA,YACA,OACA,WACA,QACA,OACA,QACA,WACA,QACA,MACA,UACA,UACA,eACA,SACA,YACA,QACA,WACA,WACA,OACA,UACA,UACA,QACA,MACA,UACA,OACA,QACA,UAIqBnL,KAAK,KAC1B,KAIWgjC,GAAiB,yCA6BjBC,GAAU,IAAI93B,OAAO,kBAAmB,KAyExC+3B,GAAsB,IAAI/3B,mBAjDP,CAC9B,UACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,MACA,WACA,KACA,MACA,KACA,KACA,QACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,KACA,KACA,MACA,SACA,KACA,SACA,IACA,MACA,WACA,UACA,QACA,QACA,WACA,QACA,KACA,QACA,KACA,KACA,SAGsBnL,KAAK,WAC3B,KAOImjC,GAjVuC,CAC3C,WACA,QACA,SACA,UACA,UACA,MACA,iBACA,QACA,UACA,eACA,SACA,kBACA,QACA,OAEA,SACA,SACA,SACA,QACA,OACA,OACA,MACA,WACA,QACA,aACA,WACA,4BACA,QACA,gBACA,UACA,SACA,SACA,MACA,QACA,WACA,UACA,WACA,UACA,UACA,SAySwDnjC,KAAK,KAClDojC,GAAuB,IAAIj4B,OAAOg4B,GAAqB,KAE9DE,GA9RuC,CAC3C,MACA,UACA,OACA,YACA,SACA,UACA,sBACA,SACA,QACA,SACA,QACA,OACA,OACA,QACA,UA+QwDrjC,KAAK,KAClDsjC,GAAuB,IAAIn4B,OAAOk4B,GAAqB,KC1ZrD,SAASE,GAAQn4B,OAC1Bo4B,GAAa,SACjBp4B,EAAE,MAAM5B,KAAK,SAAC7c,EAAOwpC,OACbsN,EAAWr4B,EAAE+qB,GACbuN,EAAcD,EAASzjD,OAAO0G,IAAI,GAEpCg9C,GAAqD,OAAtCA,EAAY7S,QAAQ5uB,eACrCuhC,GAAa,EACbC,EAASjvB,UACAgvB,GCPA,SAAsBppC,EAAMgR,OA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"} \ No newline at end of file diff --git a/fixtures/247sports.com.html b/fixtures/247sports.com.html new file mode 100644 index 000000000..d484d7003 --- /dev/null +++ b/fixtures/247sports.com.html @@ -0,0 +1,822 @@ + + +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" data-template="responsive" class="twofourseven-site" lang="en-US"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" value="IE=edge,chrome=1"> + <meta name="viewport" value="width=device-width, initial-scale=1"> + <meta name="format-detection" value="telephone=no"> + <meta name="application-name" value="247Sports"> + <meta name="msapplication-TileColor" value="#004B82"> + <meta name="msapplication-TileImage" value="https://s3media.247sports.com/Content/Img/logo_win8.png"> + <title> + Breaking: Houston hires Major Applewhite as head coach + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +
+ + + + +
+
+ +
+ +
+ +
+ +
+ + + + + +
+ Manage +
+ +
+
+
+ + + +
+ + + + +
+

Breaking: Houston hires Major Applewhite as head coach

+ +
+ + + + ByTravis Haney + + + + +
+ + +
+ +
+
+ + + +
+
(Photo: Brett Davis, USA TODAY Sports)
+

+

Houston has promoted offensive coordinator Major Applewhite to become the school’s next head coach, the school announced Friday morning.

+

A source told 247Sports that Applewhite won the job over interim coach Todd Orlando and Alabama offensive coordinator Lane Kiffin.

+

The 38-year-old Applewhite had been the Cougars’ offensive coordinator the past two seasons under Tom Herman. Prior to that, Applewhite spent six seasons as an assistant coach at Texas, where he earlier set several school records as an All-Big 12 quarterback.

+

Kiffin was at one point thought to be the leader, sources told 247Sports as late as Thursday, but Houston administrators ultimately went with an internal candidate due to hesitation regarding Kiffin’s ability to bond with Texas high school coaches.

+

Continuity was also important after Herman and his staff led the Cougars to a 22-4 record in two seasons. Applewhite’s offenses finished an averaged of third in the American conference in scoring and sixth in yards per play.

+

Houston (9-3) plays Mountain West champ San Diego State (10-3) in the Dec. 17 Las Vegas Bowl. Applewhite will coach the team in the bowl game, per the release. 

+ + +
+ +
+ + + + ">247Sports +
+ + +
+
+
+ + + + + +
+
+ + + + + + + Timer List +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fixtures/247sports.com/1481309665090.html b/fixtures/247sports.com/1481309665090.html deleted file mode 100644 index 0d6f387ea..000000000 --- a/fixtures/247sports.com/1481309665090.html +++ /dev/null @@ -1 +0,0 @@ - Breaking: Houston hires Major Applewhite as head coach
All NFL Scores

Trending

List

Headlines

Breaking: Houston hires Major Applewhite as head coach

(Photo: Brett Davis, USA TODAY Sports)

Houston has promoted offensive coordinator Major Applewhite to become the school’s next head coach, the school announced Friday morning.

A source told 247Sports that Applewhite won the job over interim coach Todd Orlando and Alabama offensive coordinator Lane Kiffin.

The 38-year-old Applewhite had been the Cougars’ offensive coordinator the past two seasons under Tom Herman. Prior to that, Applewhite spent six seasons as an assistant coach at Texas, where he earlier set several school records as an All-Big 12 quarterback.

Kiffin was at one point thought to be the leader, sources told 247Sports as late as Thursday, but Houston administrators ultimately went with an internal candidate due to hesitation regarding Kiffin’s ability to bond with Texas high school coaches.

Continuity was also important after Herman and his staff led the Cougars to a 22-4 record in two seasons. Applewhite’s offenses finished an averaged of third in the American conference in scoring and sixth in yards per play.

Houston (9-3) plays Mountain West champ San Diego State (10-3) in the Dec. 17 Las Vegas Bowl. Applewhite will coach the team in the bowl game, per the release.

Discuss

Sign In with your 247Sports ID or Register to comment

\ No newline at end of file diff --git a/fixtures/abcnews.go.com.html b/fixtures/abcnews.go.com.html new file mode 100644 index 000000000..d8ccdca7d --- /dev/null +++ b/fixtures/abcnews.go.com.html @@ -0,0 +1,687 @@ + + + + + + + + Hillary Clinton: Putin's Alleged Involvement in Democratic Hack Stems From + 'Personal Beef' - ABC News + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+

Hillary Clinton: Putin's Alleged Involvement in + Democratic Hack Stems From 'Personal Beef'

+

The former presidential candidate made the + comments at an event in NYC.

+
+
+
+
+
Byby JOSH HASKELL, DAVID CAPLAN and PATRICK + REEVELL
+
+
December 16, 2016, 4:19 PM
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+

&#151; -- Hillary + Clinton has an explanation for Vladimir + Putin's alleged involvement in the hacking of Democratic organizations during the + 2016 presidential election: The Russian leader has a longtime grudge against her, dating + back to 2011 when she was secretary of state and made comments that were critical of + Russia's parliamentary elections.

+

Two Clinton donors tell ABC News that Clinton made the + claim Thursday night at Manhattan's Plaza Hotel during an event dubbed a "thank + you" party, at which she expressed her gratitude to donors. Her former running mate Tim + Kaine was in attendance, as was New York Gov. Andrew Cuomo.

+

In an audio recording from the event obtained by The + New York Times, Clinton can be heard saying that the hacking attacks were ordered by + Putin "because he has a personal beef against me.”

+

“Putin publicly blamed me for the outpouring of + outrage by his own people, and that is the direct line between what he said back then and + what he did in this election,” Clinton said, The New York Times reported.

+

The donors who spoke to ABC News also say there is growing + anger in the Clinton camp toward the FBI, saying + they played a monumental role in allegedly handing the election to Donald Trump, in regards + to FBI Director James Comey's handling of Clinton's email scandal.

+
+
+
+
+
+
+
+

Clinton campaign chairman John Podesta wrote an op-ed in + the Washington + Post Thursday with the headline "Something is deeply broken at the FBI," + calling the department out for what he said was a "lackadaisical response to the very + real Russian plot to subvert a national election."

+

At Thursday's event, some attendees were spotted + crying while Clinton spoke. Looking upbeat and greeting guests, she encouraged attendees to + help elect Democrats to office and stay involved in the party's future.

+

The Basis Behind the Alleged Grudge

+

There is a widespread perception among followers of + U.S.-Russia relations that Putin holds a grudge against Clinton over what he sees as her + efforts to have him pushed out when she was secretary of state.

+

In 2011, massive street demonstrations broke out in Moscow + protesting the blatant rigging of Russia’s parliamentary elections in favor of + Putin’s party.

+

The demonstrations, which saw as many as 100,000 people + march, morphed into a larger protest against Putin and became the most serious popular + threat to his presidency he has ever faced. The spontaneous protests were a genuine outcry + by Russia’s liberal middle class against the corruption among Putin’s elite + and his control of a political system that has smothered most opposition to him.

+
+
+
+
+
+
+
+
+

Putin blamed Clinton for the protests, accusing her of + inciting them and saying she immediately tried to egg them on.

+

"I looked at the first reaction of our U.S. + partners," Putin said at the time. "The first thing that the secretary of state + did was say that they [the elections] were not honest and not fair, but she had not even yet + received the material from the observers.

+

"She set the tone for some actors in our country and + gave them a signal," Putin continued. "They heard the signal and with the support + of the U.S. State Department began active work."

+

Political Implications

+

The Kremlin believes that the U.S. has seized on + demonstrations in former Soviet countries and elsewhere to try to effect regime change in + the name of Western democratic values, followers of U.S.-Russia relations say.

+

The 2011 protests against Putin arose without any + involvement from the U.S., but is widely believed that Putin thinks Clinton and her State + Department were out to get him. Putin does have some basis for this: In 2008, he stepped + down as president for a term as a means of dodging a constitutional limit on consecutive + terms, placing his longtime collaborator Dmitry Medvedev in the presidency while he kept + much of the real power as prime minister.

+
+
+
+
+
+
+
+

Nonetheless, the U.S. hoped it might be an opportunity to + keep the more liberal Medvedev, whom they considered more Western in his values, in power + and have Putin relinquish the presidency for good. The U.S. appeared to make efforts to + persuade Medvedev to stay on and called on Putin to let him stay in power. Vice President + Joe Biden among others made this suggestion while on a trip to Moscow in 2011.

+

When Putin returned to the presidency in 2012, many + observers believe he still felt Clinton's State Department had tried to meddle in + Russian politics and specifically to threaten his presidency. From this perspective, + allegedly interfering in Clinton’s own presidential race was a taste of her own + medicine for Putin.

+

Of course, it is not publicly known how much of this + speculation over bruised relations is really personal for Putin. More certain is there were + reasons Putin might have wanted to delegitimize Clinton if she won or prevent her from + winning if he could: As a candidate, Clinton had made it clear that she would take a hard + line with Russia on sanctions over Ukraine and Syria and would continue to criticize + Putin’s rule as illegitimate and authoritarian

+

Of course, publicly it’s not known how much of this + speculation over bruised relations is really personal for Putin. But what is known is that + Putin had every reason to want to delegitimize Clinton if she won or prevent her from + winning if he could: She had made it very clear that she would take a hard line with Russia + on sanctions and would continue to attack Putin’s presidency as illegitimate and + authoritarian.

+
+
+
Related Topics
+ +
+ +
+
+
+
+
+ + +
+
+
+

ABC News Live

+
+
+
+
ABC News Live +
+
+

24/7 coverage of breaking news and live events

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + \ No newline at end of file diff --git a/fixtures/abcnews.go.com/1481922563840.html b/fixtures/abcnews.go.com/1481922563840.html deleted file mode 100644 index 79e814008..000000000 --- a/fixtures/abcnews.go.com/1481922563840.html +++ /dev/null @@ -1 +0,0 @@ - Hillary Clinton: Putin's Alleged Involvement in Democratic Hack Stems From Longtime Grudge - ABC News

Hillary Clinton: Putin's Alleged Involvement in Democratic Hack Stems From Longtime Grudge

PHOTO: Hillary Clinton speaks during a ceremony to unveil a portrait of Senate Minority Leader Harry Reid, Dec. 8, 2016, in Washington.PlayEvan Vucci/AP Photo
WATCH Clinton: Putin's Alleged Involvement in Hack Stems From Grudge

Hillary Clinton has an explanation for Vladimir Putin's alleged involvement in the hacking of Democratic organizations during the 2016 presidential election: The Russian leader has a longtime grudge against her, dating back to 2011 when she was secretary of state and made comments that were critical of Russia's parliamentary elections.

Two Clinton donors tell ABC News that Clinton made the claim Thursday night at Manhattan's Plaza Hotel during an event dubbed a "thank you" party, at which she expressed her gratitude to donors. Her former running mate Tim Kaine was in attendance, as was New York governor Andrew Cuomo.

The donors also say there is growing anger in the Clinton camp toward the FBI, saying they played a monumental role in allegedly handing the election to Donald Trump, in regards to FBI Director James Comey's handling of Clinton's email scandal.

Clinton campaign chairman John Podesta wrote an op-ed in the Washington Post Thursday with the headline "Something is deeply broken at the FBI," calling the department out for what he said was a "lackadaisical response to the very real Russian plot to subvert a national election."

At Thursday's event, some attendees were spotted crying while Clinton spoke. Looking upbeat and greeting guests, she encouraged attendees to help elect Democrats to office and stay involved in the party's future.

The Basis Behind the Alleged Grudge

There is a widespread perception among followers of U.S.-Russia relations that Putin holds a grudge against Clinton over what he sees as her efforts to have him pushed out when she was secretary of state.

In 2011, massive street demonstrations broke out in Moscow protesting the blatant rigging of Russia’s parliamentary elections in favor of Putin’s party.

The demonstrations, which saw as many as 100,000 people march, morphed into a larger protest against Putin and became the most serious popular threat to his presidency he has ever faced.

Putin blamed Clinton for the protests, accusing her of inciting them and saying she immediately tried to egg them on.

"I looked at the first reaction of our U.S. partners," Putin said at the time. "The first thing that the secretary of state did was say that they [the elections] were not honest and not fair, but she had not even yet received the material from the observers.

"She set the tone for some actors in our country and gave them a signal," Putin continued. "They heard the signal and with the support of the U.S. State Department began active work."

Political Implications

The Kremlin believes that the U.S. has seized on demonstrations in former Soviet countries and elsewhere to try to effect regime change in the name of Western democratic values, followers of U.S.-Russia relations say.

It is widely believed that Putin thinks that Clinton and her State Department were out to get him and Putin has some basis for this: In 2008, he stepped down as president for a term as a means of dodging a constitutional limit on consecutive terms, placing his longtime collaborator Dmitry Medvedev in the presidency while he kept much of the real power as prime minister.

Nonetheless, the U.S. hoped it might be an opportunity to keep the more liberal Medvedev, whom they considered more Western in his values, in power and have Putin relinquish the presidency for good. The U.S. appeared to make efforts to persuade Medvedev to stay on and called on Putin to let him stay in power. Vice President Joe Biden among others made this suggestion while on a trip to Moscow in 2011.

When Putin returned to the presidency in 2012, many observers believe he still felt Clinton's State Department had tried to meddle in Russian politics and specifically to threaten his presidency. From this perspective, allegedly interfering in Clinton’s own presidential race was a taste of her own medicine for Putin.

Of course, it is not publicly known how much of this speculation over bruised relations is really personal for Putin. More certain is there were reasons Putin might have wanted to delegitimize Clinton if she won or prevent her from winning if he could: As a candidate, Clinton had made it clear that she would take a hard line with Russia on sanctions over Ukraine and Syria and would continue to criticize Putin’s rule as illegitimate and authoritarian

Of course, publicly it’s not known how much of this speculation over bruised relations is really personal for Putin. But what is known is that Putin had every reason to want to delegitimize Clinton if she won or prevent her from winning if he could: She had made it very clear that she would take a hard line with Russia on sanctions and would continue to attack Putin’s presidency as illegitimate and authoritarian.

\ No newline at end of file diff --git a/fixtures/ars.html b/fixtures/ars.html deleted file mode 100644 index 2459adffa..000000000 --- a/fixtures/ars.html +++ /dev/null @@ -1,540 +0,0 @@ - - - -The connected renter: How to make your apartment smarter | Ars Technica - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- -
- -
-
-

- Gear & Gadgets — -

-

The connected renter: How to make your apartment smarter

-

Turning your rented space into a smart home can be tricky; we have some advice.

-
- -
-
- -
- -
Valentina Palladino
- - - - - -

-

Name a home appliance or product, and there's probably a smart version of it today. But for the renters among us, it can be tricky to navigate the aisles of smart light bulbs, thermostats, air conditioners, and vacuums to pick out devices that won't jeopardize your security deposit. When you don't own your home, there’s a different set of rules dictating modifications, and some smart home products don't take that into account.

-

Luckily these days, an increasing number of smart home devices can cater to apartment dwellers that want to avoid ripping open walls and trussing up wires. And as a NYC-based Ars staffer, I had a particularly perfect rental laboratory to recently test and explore what kinds of smart home devices fit renters' needs.

-

What protocols should/can you use?

-

When picking out accessories, for convenience's sake you'll probably want to decide ahead of time which of the many competing smart home ecosystems you'd like those products to come from. If you want to control all of your smart home products from the same app or want every product to be able to "talk" to each other, brand or protocol lock-in is the easiest current approach.

-

HomeKit

-

Let's start with the one everyone has heard of: HomeKit. Apple's IoT framework lets you control HomeKit-compatible devices via your iPhone or iPad. This framework tries to make it easier for users to control all smart home products by allowing the devices to talk to each other over a home's Wi-Fi network. With HomeKit, you can use Siri voice commands to control smart products—with iOS 10 in fact, an official "Home" app will make it easier to control HomeKit devices and group them together. After setting devices up, you can control them using simple phrases like, "Siri, turn off the living room lights." You can also make nuanced commands that control only certain devices. For example, the voice command "Good morning" could initiate a group of actions including turning on the bedroom and bathroom lights and opening the blinds.

-

The thing to remember about HomeKit is that manufacturers must integrate compatible hardware into their products under the terms of Apple's MFi licensing program . For example, a year or so ago Philips came out with a HomeKit-enabled Hue bridge for its smart lighting systems. The Philips Hue bridge already existed, but the company needed to make a new one that worked specifically with HomeKit. So far, companies including Belkin, Honeywell, and iHome among others have made HomeKit-ready devices. But still, the overall number of HomeKit-compatible devices is dwarfed by the number of smart home products available. HomeKit is also only available on Apple devices running iOS 8.2 or later, and watchOS 2 allows you to control devices via your Apple Watch.

-

Video shot/edited by Jennifer Hahn.

-

Alexa

-

Amazon's Alexa voice assistant is tied to Amazon's products, namely the Echo, and you can ask it questions about basically anything. Along the same lines as Siri, you can also control some smart home products by asking Alexa to turn things on and off. Through the Alexa mobile app, users can create batch commands similar to those available through Siri, and this option makes it possible to control entire rooms filled with devices. Unlike with Siri and HomeKit, though, manufacturers can create Alexa compatibility with software updates rather than implementing entirely new hardware—that's why companies like Nest and Haiku have been able to add Alexa support to their smart home products.

-

The convenience of HomeKit and Alexa is that you can control all of your devices using your voice—Alexa and Siri handle the communication from there. Otherwise, most smart home devices instead rely on dedicated apps that act like remote controls. HomeKit has the added benefit that devices can "talk" to one another, much like compatible devices under the Works with Nest framework. If, for example, you leave your home and lock your smart door lock behind you, that action could trigger turning off the lights inside a home.

-

Zigbee and Z-Wave

-

While HomeKit and Alexa have a lot of growing to do in terms of compatibility, Zigbee and Z-Wave have already linked to hundreds of working smart home devices. Both are mesh networking systems that send information between all devices on a network bound together by a hub. Zigbee runs on the universal 2.4GHz ISM frequency band, meaning its products are country-agnostic. By contrast, Z-Wave runs on the 915 MHz ISM band in the United States and the 868 MHz RFID band in the UK.

-

Both of these protocols, especially Zigbee, are suited for those who want to fiddle around with their devices and set unique commands and controls. However, keep in mind that hubs and devices on Zigbee and Z-Wave tend to have shorter ranges, meaning you'll need to keep individual devices relatively close to each other. For apartment dwellers, that might actually work to your advantage if you have only a few small rooms to connect.

-

Which products are off-limits?

-

The best way to know what can and can’t work within your rental is decidedly analogue—read your lease and any other renter's agreements you may have signed upon moving in. Check the official documentation to see what you have access to and what you don't. For example, my apartment came with a refrigerator, oven, and microwave, and my lease forbids me from installing any different ones without notifying the landlord's office first. I'm also not allowed to have washer or dryer units in my apartment. You don't want to buy any smart home product only to realize its installation or very existence violates your lease agreements.

-

As a general rule of thumb, smart thermostats are typically off-limits for renters. These products require rewiring stuff that's hidden behind walls, after all. Another category you'll want to be careful with is smart locks. Many (not all—we'll get to some examples) replace the locks on your doors, which renters typically cannot do without a specific reason or without informing management.

- -
- - - - -
- -
- -
-
- - - -
-
- -
- -
-
- - - -
-
-
-
- - -
-
-
- -
-
-

You must to comment.

-
-
-
-
- -
- -
-
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fixtures/arstechnica.com/1587927767738.html b/fixtures/arstechnica.com.html similarity index 70% rename from fixtures/arstechnica.com/1587927767738.html rename to fixtures/arstechnica.com.html index 293ce90d3..b6abc767e 100644 --- a/fixtures/arstechnica.com/1587927767738.html +++ b/fixtures/arstechnica.com.html @@ -4,7 +4,7 @@ The connected renter: How to make your apartment smarter | Ars Technica - + @@ -77,10 +77,14 @@ - - - + + + + + + + @@ -97,10 +101,10 @@
- +
- -
- - + -
+
@@ -409,20 +417,27 @@

Share this story

-
- +
+
+ +
-
+
+
+ +
+
+
-
+

Channel Ars Technica

- +
@@ -454,30 +466,30 @@

Today on Ars

@@ -491,7 +503,7 @@

- - - - + + + + + + + + + + diff --git a/fixtures/arstechnica.com/1587929444000.html b/fixtures/arstechnica.com/1587929444000.html deleted file mode 100644 index 6e9a4e1d3..000000000 --- a/fixtures/arstechnica.com/1587929444000.html +++ /dev/null @@ -1,615 +0,0 @@ - - - -Face masks for COVID-19: A deep dive into the data | Ars Technica - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - -
-
- -
-
-

- Last resort — -

-

Face masks for COVID-19: A deep dive into the data

-

With all the talk of masks, here's what the data really says.

-
- -
-
- - - - - - -
Aurich Lawson / Getty
-

Filtration by N95 respirators, surgical masks, and homemade masks

-

N95 respirators get their name from their National Institute for Occupational Safety and Health (NIOSH) designation. They contain filter material that uses electrostatic attraction to thwart particles of all sizes. The N in the name means the masks are not resistant to oil and the 95 refers to their efficiency. To get a 95 designation, a mask has to filter out at least 95 percent of all particles. Specifically, the designation is granted if the mask proves to filter out at least 95 percent of particles in the size range it is least efficient at filtering out in standard conditions. This is considered “worst case” testing.

-

In one 2014 study, researchers compared the effectiveness of 44 masks, including N95 equivalent respirators, surgical and dental masks, general cotton masks, and handkerchiefs. They used particle penetration tests similar to those used by NIOSH and the European Union.

-

They found that the N95 equivalent mask blocked more than 95 percent of all particles, as expected. The surgical mask was around 40 percent effective, with the dental masks coming in at around 60 percent. Cotton masks were around 30 percent effective and cotton handkerchiefs ranged from 2 percent (one layer) to 13 percent (four layers).

-

A similar study in 2010 by NIOSH researchers looked at masks made of different types of fabrics. They found that masks made from t-shirts blocked about 10 percent of particles in a wide range, masks made from sweatshirt fabric blocked 20 to 40 percent, masks made from towels blocked around 40 percent, and scarves blocked 10 to 20 percent.

-

In a study published April 3, 2020 in Nature Medicine, researchers found that surgical masks reduced the detection of respiratory viruses in aerosols generated by infected people breathing or coughing in a breath-collecting machine.

-

Masks in the real world

-

Overall, the body of research on mask efficacy in real-world settings is small and scattershot. And because SARS-CoV-2 was completely unknown to humanity just five (extremely long) months ago, there is no data on the efficacy of any type of mask wearing in any setting (healthcare or home) for this virus.

-

As such, any relevant data has to be gleaned from studies looking at other respiratory illnesses and how various masks in various settings play a role.

-

Masks on healthy people

-

In a 2011 randomized clinical trial, researchers monitored 1,441 healthcare workers in 15 Beijing hospitals to compare the rates of respiratory infections if they wore either a surgical mask or an N95 respirator during their shifts. They compared infection rates in the two masked groups to a convenience sample of 481 healthcare workers who didn’t wear masks.

-

Overall, both masked groups had fewer respiratory symptoms, influenza-like illnesses, and confirmed viral infections than the control group. The rates of illness were approximately double in those who wore surgical masks compared with those who wore N95 respirators, though. For instance, about 9 percent of non-mask wearers reported respiratory symptoms compared with about 7 percent of surgical mask wearers and 4 percent of N95 wearers.

-

But with such small infection rates overall, there was limited power to detect differences, and the authors note that the findings may not hold up in other settings.

-
Dawn Canova, clinical manager for outpatient wound care at Carroll Hospital, takes samples from people to test them for the coronavirus at a drive-thru station in the hospital's parking garage while wearing a medical grade mask.
Enlarge / Dawn Canova, clinical manager for outpatient wound care at Carroll Hospital, takes samples from people to test them for the coronavirus at a drive-thru station in the hospital's parking garage while wearing a medical grade mask.
-

Masks on sick people

-

The push to preserve medical-grade masks for healthcare workers is intended to try to protect them from contracting illnesses from their patients. But the push for public face mask use is powered by the desire to prevent sick people from spraying respiratory droplets around and potentially sicken others.

-

This has become a greater concern as more evidence has pointed to apparent symptomless spread of COVID-19. That is, people who don’t show symptoms (either asymptomatic or pre-symptomatic) may be able to pass on the infection without knowing it. While there is evidence that this is happening in some cases, it’s still very unclear how often it happens. Estimates of how many cases are spreading stealthily like this have ranged from between 25 percent of cases to over 60 percent. Experts at the WHO, though, continue to say that people who are coughing or sneezing are still most likely to be the ones passing on the virus.

-

In a 2016 randomized controlled trial, researchers examined whether wearing a surgical mask could keep people with influenza-like illnesses (ILI) from passing the infection on to members of their household. Those household members were not asked to wear masks and the researchers didn’t collect data on it. The study included 123 ILI patients who were instructed to wear masks at home around other household members and 122 ILI patients who didn’t wear masks. The masked and unmasked ILI patients were in households with, on average, 2.5 or 2.4 members, respectively.

-

While the infection rates in home of masks-wearing patients were consistently lower than those in the homes of unmasked patients, the numbers were too small to be statistically significant.

-

“The study indicates a potential benefit of medical masks for source control but is limited by small sample size and low secondary attack rates [subsequent infections],” the authors concluded. “Larger trials are needed to confirm efficacy of medical masks as source control.”

-

Masks on everyone

-

With the new recommendations, everyone may be wearing masks, which has also been examined in a number of studies.

-

In 2008, a randomized controlled trial led by researchers in Hong Kong looked at the effect of blanket mask wearing on the spread of flu within households. They started with 198 households with one confirmed case at the beginning. Of those households, 127 were told that all household members should wear masks around each other. In 35 households, members were instructed to adhere to hand hygiene protocols and the remaining 36 households were controls.The researchers found little difference in infection spread among all three groups.

-

In 2009, researchers led by a group in Australia followed up with a similar randomized controlled study. The group looked at the spread of influenza-like illness to 286 adults in 143 households with a sick child. Participants were either assorted into a control group, a surgical mask group, or a more protective mask. Overall, they detected no difference in infection rates among the three groups. They noted that at least half of masked participants didn’t adhere to wearing the mask.

-

Another randomized controlled trial in 2009 followed people in 259 households in Hong Kong. Collectively, the households started with 407 household members with flu and 794 uninfected contacts. The households were randomly assorted to either all wear surgical masks, practice hand hygiene, or act as controls. Overall, the interventions didn’t lead to statistically significant differences in the spread of infections within the households. But when they looked at households that started using masks quickly (within 36 hours) after the onset of flu symptoms in a member, they did see a statistically significant reduction in infection spread.

-

Likewise, in a 2012 randomized controlled trial involving 84 households in Germany, researchers again found no difference in disease spread among household members that used masks, masks and hand hygiene, or were in a control group. However, when they did a separate analysis just looking at the households who fully implemented mask wearing or mask wearing and hygiene within 36 hours of onset of symptoms in their first case, they did note a lower chance of transmission than what was seen in controls.

-

Cloth masks

-

While most studies have looked at the effectiveness of surgical masks and other medical-grade masks, a few have ventured to look at cloth and homemade masks.

-

In a 2015 randomized controlled trial involving 1,607 healthcare workers, researchers compared the rate of influenza-like illness in healthcare workers wearing cloth masks or medical masks to those in a control group (which sometimes used masks). Wearing cloth masks resulted in significantly higher rates of infection, the authors found. They also noted that in their test, the cloth masks were only 3 percent effective at blocking particles.

-

Potential risks of masks

-

There is evidence that virus particles hang out on the outside of masks—particularly among healthcare workers who likely have high exposure. Among 59 healthcare workers who had their protective gear, clothes, and skin sampled in a 2019 study, many were contaminated with virus. Overall, 31 percent of gloves, 21 percent of gowns, and 12 percent of face masks were positive for virus. Moreover, 11 percent had viral particles on their scrubs and 7 percent had them on their bare faces.

-

A similar study, also in 2019, confirmed that respiratory viruses are often found on the outside surface of medical masks and can be a source of self-contamination.

-

In yet another study from last year, researchers in Chicago observed healthcare workers taking off their person protective equipment (masks, gloves, gowns, etc)—the removal is called doffing. This is a time when healthcare workers can easily self-contaminate by taking gear off incorrectly. The researchers found that healthcare workers incorrectly removed their protective gear 90 percent of the time.

-

If you do wear a mask, be sure to remove it from behind your head. Don’t touch the surface of the mask. If you do touch the surface, immediately wash your hands or use hand sanitizer.

-

Update 4/3/2020, 6:20pm ET: This post was updated to include the new federal recommendation for the public to wear cloth masks.

- - -
-
- - - - -
-
- -
-
- - - - - -
-
- -
- -
-
- - -
-
-
- - -
- - - -
-
- -
-
-

You must to comment.

-
-
-
-
- -
-
-
-
-
-

Channel Ars Technica

-
-
-
- -
- -
-
-
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fixtures/biorxiv.org/1565356858754.html b/fixtures/biorxiv.org.html similarity index 100% rename from fixtures/biorxiv.org/1565356858754.html rename to fixtures/biorxiv.org.html diff --git a/fixtures/blisterreview.com.html b/fixtures/blisterreview.com.html new file mode 100644 index 000000000..b4a59baca --- /dev/null +++ b/fixtures/blisterreview.com.html @@ -0,0 +1,1530 @@ + + + + + + + + + 2021-2022 Line Outline | Blister + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +
+
+
+
+
+ +
+
+ +
+
+
+

2021-2022 Line Outline

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Ski: 2021-2022 Line Outline, 186 cm

Available Lengths: 178, 186 cm

Blister’s Measured Tip-to-Tail Length: 184.1 cm

Stated Weight per Ski: 2030 grams

Blister’s Measured Weight per Ski: 2024 & 2031 grams

Stated Dimensions: 150-117-142 mm

Blister’s Measured Dimensions: 152.5-117.5-141 mm

Stated Sidecut Radius (186 cm): 18.5 meters

Measured Tip & Tail Splay (ski decambered): 68 mm / 74 mm

Measured Traditional Camber Underfoot: ~5 mm

Core: Paulownia/Maple + Fiberglass Laminate

Base: “Fatty” 1.7 mm Sintered

Factory Recommended Mount Point: -4.2 cm from center; 87.9 cm from tail

Boots / Bindings: Nordica Strider 120; Dalbello Lupo SP I.D. / Tyrolia AAAttack 13

Test Locations: Crested Butte, CO; Wasatch Range, UT

Days Skied: ~12

[Note: Our review was conducted on the 19/20 Outline, which was not changed for 20/21 or 21/22, apart from graphics.]

+
+
+
+
+
+
+
+
+
+
+
+
+ Luke Koppa and Sam Shaheen review the Line Outline for Blister.
Line Outline, 19/20 Graphic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Review Navigation:  + +Specs //  +First Look //  +Full Review //  +Bottom Line //  +Rocker Pics + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Intro

When it comes to playful powder skis, Eric Pollard is arguably one of the most influential and important figures in the industry. With his help, Line was able to create iconic skis like the Elizabeth, Sir Francis Bacon, EP Pro, Mr. Pollard’s Opus, Pescado, and many other skis designed to let skiers slash, spin, flip, and butter their way through deep snow.

The newest ski that Eric’s been working on is the Outline, which will be Line’s widest freestyle ski for 19/20.

The Outline effectively replaces the current Line Magnum Opus and Mordecai, and, like the 19/20 Sir Francis Bacon, the Outline features convex tips and tails. We’ve already talked a bit about the Outline and Sir Francis Bacon on our GEAR:30 podcast, but here we’ll go over the Outline’s design and how it compares to the skis it replaces, and others on the market.

What Line says about the Outline

“Equipped with Convex Base Technology to open up new possibilities in turn shape, the LINE Outline Skis are the ultimate development of freestyle powder ski design. Slarve, drift, and plane in any snow condition. Building on years of twin-tip ski design, the LINE Outline is the ultimate collaboration between Eric Pollard and LINE Skis.”

First, saying that the Outline is the “ultimate collaboration between Eric Pollard and LINE Skis” is a very bold statement. Eric and Line have made a lot of very good skis, so the Outline has a lot to live up to.

+
+
+
+
+
+
+ Blister discusses notable trends and products at the 2019 Outdoor Retailer + Snow Show SIA trade show on the GEAR:30 podcast
Line Outline Ski w/ Convex Tips & Tails
+
+
+
+
+
+
+
+

But the Outline’s Convex Base Tech does set its design apart from previous Line skis. And after our initial time on the Outline and Sir Francis Bacon, we do think that Line has a reason to be hyping up these ski’s ability to slarve, drift, and plane (you can listen to our GEAR:30 podcast for more on that).

Shape / Rocker Profile

Apart from its convex tips and tails, the Outline looks very similar to many of Eric Pollard’s recent pow skis like the Mordecai and Magnum Opus. The Outline has fat tips and tails, with a bit of early taper. But unlike many current playful pow skis like the Prior CBC, Salomon QST 118, J Skis Friend, and Armada ARV 116 JJ, the Outline’s tips and tails don’t start tapering very early, and they also don’t taper to much of a point.

Compared to the new Sir Francis Bacon, the Outline actually has slightly less tip and tail taper, presumably to increase float in deep snow.

The Outline’s longitudinal rocker profile is also very reminiscent of the Magnum Opus and Mordecai. The Outline has pretty deep tip and tail rocker lines, but they’re not crazy deep by today’s standards. The Outline’s rocker lines also rise pretty gradually until you get to the ends of the ski, where the tips and tails splay out significantly.

Flex Pattern

Here’s how we’d characterize the flex pattern of the Outline:

Tips: 6-6.5
Shovels: 7-7.5
In Front of Toe Piece: 8-9.5
Underfoot: 9.5
Behind the Heel Piece: 9.5-8.5
Tails: 8-6

Unlike the Mordecai (especially the 193 cm version), the Outline is not a very stiff ski. Its tips and tails are pretty soft, and they slowly ramp up in stiffness as you get to the center of the ski. Overall, the Outline has a nearly symmetrical flex pattern with smooth transitions and no noticeable hinge points.

Compared to the 19/20 Sir Francis Bacon, the Outline is similarly soft at the ends, but ramps up quicker and is noticeably stiffer around the bindings.

Compared to the J Skis Friend, the Outline’s extremities are a bit softer, but the Outline’s flex pattern ramps up quicker. Compared to the 4FRNT Inthayne and Moment Wildcat / Blister Pro, the Outline is similarly soft at the very ends of the ski, but both the Wildcat and Inthayne stiffen up quicker and, apart from the ends, are significantly stiffer throughout.

Weight

Like the new Sir Francis Bacon, current SFB, Mordecai, and Magnum Opus, the Outline is a pretty light ski. At just over 2000 grams per ski for the 186 cm version, the Outline is one of the lightest pow skis we’ve reviewed.

For reference, here are a number of our measured weights (per ski, in grams) for some notable skis. As always, note the length differences to keep things apples to apples.

1710 & 1744 Atomic Bent Chetler 120, 184 cm (18/19–19/20)
1910 & 1941 Scott Scrapper 115, 189 cm (17/18–18/19)
2013 & 2099 Moment Wildcat / Blister Pro, 184 cm (18/19–19/20)
2024 & 2031 Line Outline, 186 cm (19/20)
2034 & 2052 Blizzard Rustler 11, 188 cm (17/18–19/20)
2043 & 2046 4FRNT Inthayne, 188 cm (18/19-19/20)
2042 & 2105 Line Mordecai, 186 cm (16/17–18/19)
2083 & 2097 Line Magnum Opus, 188 cm (15/16–18/19)
2102 & 2137 Line Sick Day 114, 190 cm (17/18–19/20)
2126 & 2173 Rossignol Super 7 RD, 190 cm (17/18–19/20)
2130 & 2130 Moment Wildcat / Blister Pro, 190 cm (18/19–19/20)
2133 & 2133 Salomon QST 118, 192 cm (17/18–18/19)
2183 & 2190 Black Crows Anima, 188.4 cm (17/18–19/20)
2196 & 2199 Icelantic Nomad 115, 191 cm (17/18–18/19)
2220 & 2252 Faction Prodigy 4.0, 186 cm (17/18–19/20)
2212 & 2215 Armada ARV 116 JJ, 185 cm (17/18–19/20)
2222 & 2278 Prior CBC, 184 cm (17/18–19/20)
2228 & 2231 Blizzard Spur, 192 cm (17/18–19/20)
2230 & 2250 Black Diamond Boundary Pro 115, 185 cm (17/18–19/20)
2246 & 2265 Fischer Ranger 115 FR, 188 cm (17/18–18/19)
2267 & 2270 Whitedot Ragnarok 118, 190 cm (16/17–18/19)
2296 & 2309 Liberty Origin Pro, 192 cm (17/18–19/20)
2297 & 2317 K2 Catamaran, 184 cm (17/18–19/20)
2341 & 2357 Dynastar PR-OTO Factory, 189 cm (18/19–19/20)
2343 & 2360 J Skis Friend, 189 cm (18/19)
2346 & 2351 Nordica Enforcer Pro, 191 cm (17/18–19/20)
2382 & 2395 ON3P Billy Goat, 184 cm (17/18–18/19)
2408 & 2421 ON3P Kartel 116, 186 cm (17/18–18/19)
2429 & 2437 Kingswood SMB, 188 cm (16/17–18/19)
2438 & 2492 Rossignol Black Ops 118, 186 cm (16/17–19/20)
2490 & 2529 K2 Catamaran, 191 cm (17/18–19/20)

Bottom Line (For Now)

The Line Outline follows a long line of prolific and iconic playful pow skis. The Outline’s design doesn’t stray too far from its ancestors’, but we’re already pretty psyched about the result. Blister Members can read our initial on-snow impressions in our Flash Review linked below, and then stay tuned for our full review.

Flash Review

Blister Members can now check out our Flash Review of the Outline for our initial impressions. Become a Blister member now to check out this and all of our Flash Reviews, plus get exclusive deals and discounts on skis, and personalized gear recommendations from us.

+
+
+
+
+
+
+
+
+
+
+

FULL REVIEW

This year we tested a lot of pow skis, and man, it was a good year to test them. Crested Butte had a lot of big storm days — so many that our memory of mid-January to mid-March is pretty blurred. But Sam Shaheen’s and my days on Line’s new pow ski, the Outline, definitely stood out. Here’s why:

Powder

The Outline is 117 mm wide, has a lot of rocker, and a pretty forgiving flex pattern. So it didn’t come as much of a surprise that it was a ton of fun in fresh snow.

As someone who takes more of a playful approach to the mountain — looking for drops, lips, and stashes to slash — the Outline felt really intuitive from the start. It’s super easy to steer from the middle, throw sideways, and pop off of anything.

+
+
+
+
+
+
+ Sam Shaheen and Luke Koppa review the Line Outline for Blister
Sam Shaheen on the Line Outline, Crested Butte, CO.
+
+
+
+
+
+
+
+

The Outline definitely feels like it’s designed for a more playful / freestyle-oriented skier. If I tried to pressure the tips really hard, I could get bucked forward. But if I skied it from a more centered stance and just put a bit of pressure on the front of my boots, the Outline felt loose, balanced, surfy, and just fun.

While we were skeptical at first, Sam and I both agree that the new Sir Francis Bacon and Outline’s convex tips and tails do play into the skis’ loose feels. When pressuring the front or back of the ski, the tips and tails feel super easy to smear around. In deep powder, that can make for a really fun experience. And as we’ll get to later, it doesn’t really seem to have a negative impact when the snow isn’t deep.

All in all, the Outline just feels like a very playful, easy powder ski.

Soft Chop

Luke: The Outline is light and fairly soft. It’s not a charger. There are plenty of better skis out there if you want to ski really fast after the pow is cut up (see the “Powder Skis” sections of our Winter Buyer’s Guide).

But again, if you like to play all over the mountain and tend to take things a bit slower when the snow isn’t super clean and forgiving, the Outline is still a lot of fun. Its loose feel means you can slash those hidden stashes easily, shut down speed quickly when needed, and the ski’s energetic flex makes even the smallest of hits more exciting.

+
+
+
+
+
+
+ Sam Shaheen and Luke Koppa review the Line Outline for Blister
Sam Shaheen on the Line Outline, Crested Butte, CO.
+
+
+
+
+
+
+
+

And unlike some other lighter skis, I’d say the Outline is still very predictable in chop. It doesn’t make me want to blast through cut-up snow, but it does make me want to arc turns through the clean patches, boost off the set-up ones, and it won’t send me flying if I end up unexpectedly hitting a firm spot or get knocked backseat (like stiffer skis tend to do).

Firm Chop / Crud

Luke: When chop sets up more and / or turns into straight-up crud, the Outline’s low weight and softer flex become even more obvious. In really rough snow, I have to ski pretty conservatively on the Outline. It’s still predictable and doesn’t demand that I be 100% on my game all the time, but there are plenty of skis out there that stay more composed and let me ski much faster when the snow is really nasty.

Groomers

Luke: For a ski of its size, the Outline is a ton of fun on groomers. Like the Sir Francis Bacon, the Outline feels best when skied from the middle of the ski, rather than driving the tips super hard. That said, I could still pressure the front of the Outline hard enough to bend it into pretty tight turns, and it held an edge quite well for its width.

As I noted above, the Outline’s convex tips and tails aren’t really noticeable on firm snow (unless you’re doing a nose or tail press). Instead, it just feels good on edge, engages turns easily, and produces lots of pop coming out of a turn.

It’s definitely not the most stable ski, and I wouldn’t want to take it out on super firm days when it hasn’t snowed in a while. But for a playful pow ski, the Outline makes taking a groomer back to the lift less of a boring in-between stage between face shots, and more of an opportunity to have even more fun on your way to the next pow stash.

Moguls, Trees, & Tight Terrain

Luke: Remember that talk of how loose and easy the Outline is in pow? Well, that transfers over pretty well to bumps, trees, and other tight terrain. The ski is super easy to slide around, still holds an edge pretty well when you want it to, and is very forgiving when you end up moving your stance around a lot in techy terrain.

Again, there are plenty of better options out there for directional skiers who drive the front of their skis really hard and appreciate things like stiff, flat tails over a surfy and playful feel. But for skiers who are accustomed to a more forward-mounted ski and who like to slash, butter, and spin, the Outline is very competent in tight terrain.

+
+
+
+
+
+
+ Sam Shaheen and Luke Koppa review the Line Outline for Blister
Sam Shaheen on the Line Outline, Crested Butte, CO.
+
+
+
+
+
+
+
+

It’s not particularly damp, and therefore isn’t a great choice for when the snow is super firm. But for skiing through trees, bumps, or steeps when the snow was fairly soft, I loved how easy and surfy the Outline was when the terrain got tight.

Playfulness

Luke: While there are many skis out there that are playful in certain regards (e.g., poppy, loose, balanced in the air, etc.), the Outline is a ski that’s basically playful in every regard.

+
+
+
+
+
+
+ Sam Shaheen and Luke Koppa review the Line Outline for Blister
Sam Shaheen on the Line Outline, Crested Butte, CO.
+
+
+
+
+
+
+
+

The Outline is super easy to throw sideways, it feels very comfortable in the air, is easy to spin and butter, and produces a lot of energy on takeoffs. I’m bad at butters, but the Outline (and Sir Francis Bacon) make them significantly easier as their tips and tails are super easy to slide around and don’t catch unexpectedly. And its low weight (for its size) makes spins much easier than on many other similarly wide skis. Overall, the Outline is probably one of the most playful pow skis I’ve ever been on. So if that’s a priority for you, take note.

+
+
+
+
+
+
+
+
+
+
+

Who’s It For?

Skiers who want a pow ski that will let them almost effortlessly slash their way through deep snow, butter every roller, and spin off of everything.

Don’t buy the Outline if your favorite part of a “powder” day is mobbing through chop. There are a lot of stiffer, heavier skis out there that are much better for that. But if you prioritize playfulness over stability, the Outline is worth a good look.

And due to its low weight, the Outline is an excellent option if you’re a playful skier looking for a ski that you can use in the resort and in the backcountry.

Bottom Line

The Line Outline seems to embody it’s designer’s skiing style, which makes a lot of sense. Just like Eric Pollard, the Outline makes us want to surf around powder with a fluid, playful style, throwing slashes, spins, and butters wherever possible. If that sounds appealing to you, check it out.

Deep Dive: Line Outline

Become a Blister Member or Deep Dive subscriber to check out our Deep Dive comparisons of the Line Outline to the Line Sir Francis Bacon, Atomic Bent Chetler 120, K2 Catamaran, Moment Wildcat / Blister Pro, Blizzard Spur, Folsom Trophy Carbon, Prior CBC, Icelantic Nomad 115, Rossignol Black Ops 118, and Dynastar PR-OTO Factory.

+
+
+
+
+
+
+
+
+
+
+
+ Share this post:
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+

Rocker Pics:

+
+
+
+
+
+
+
Full Profile
Tip Profile
Tail Profile
Top Sheet
Base
+
+
+ Previous +
+
+ Next +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
2021-2022 Line Outline, BLISTER
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +

+ 22 comments on “2021-2022 Line Outline”

+ + +
    + +
  1. +
    + + +
    +

    “the LINE Outline Skis are the ultimate development of freestyle powder ski design…the LINE Outline is the penultimate collaboration between Eric Pollard and LINE Skis.”

    +

    So, these are the best freestyle powder skis ever, but EP + Line are going to make one ski after them?

    +
    +
    +
      + +
    • + +
    • +
    +
  2. + +
  3. +
    + + +
    +

    Hey guys – I’m probably a bit behind the curve in terms of ski news, but if Line are describing this ski as “the penultimate” collaboration with Eric it seems to indicate that there’s only one more EP / Line collaboration left. Does this mean that Line and EP are going to be parting ways? Or do you think they meant something else?

    +
    +
    +
      + +
    • + + +
    • + +
    • +
      + + +
      +

      Of course with the benefit of hindsight, seems it may not have been a typo after all. How many more skis did EP collaborate with Line on after the Outline and before leaving to set up Season Eqpt?

      +
      +
      +
    • +
    +
  4. + +
  5. +
    + + +
    +

    The best powder freestyle ski Line and Pollard have made was the EP Pro, the rest of his skis have just been chasing the lasted trends, the EP Pro was unique

    +
    +
    +
  6. + +
  7. +
    + + +
    +

    First, saying that the Outline is the “penultimate collaboration between Eric Pollard and LINE Skis” is a very bold statement.

    +

    I think “penultimate” means second to last….

    +
    +
    + +
  8. + +
  9. +
    + + +
    +

    Hey! Doesn’t “penultimate” mean…..just kidding.

    +

    I got on these in Japan for a few days when JAL lost my ski bag and Pollard graciously loaned me a pair with Dukes so I could still get some touring in. I’m more of a Pescado kinda guy, so I wasn’t overly excited for this new shape. I was actually blown away by how playful and accessible (for an advanced skier with admittedly bad technique) they were. And night skiing soft groomers was waaaay more fun that I expected. These carve tight turns like they are on rails and the physics of my 215# frame was going to wash out way before the edges were. Just when I thought I was all set for skis in the quiver for next year the Outline has me rubbing my chin.

    +

    One quirk worth mentioning: I used with a Line skin on a touring day and the top corners of the skin didn’t want to stay stuck on the convex tip geometry very well. We did a couple quick hit laps and I didn’t find this to be a huge problem for that usage, however. I’m thinking skins like the newer G3 with the thin plastic ribbon in the first few inches before you get the glue/plush might be well-suited to pair with this unique tip shape. Just a consideration for anyone considering this ski for tour-heavy duty and building out their kit.

    +
    +
    +
  10. + +
  11. +
    + + +
    +

    You could not have described a ski that fits more perfectly what I’m after (to replace beat up Rossi S3s). Where can I buy them?

    +
    +
    +
  12. + +
  13. + +
  14. + +
  15. +
    + + +
    +

    How does the convex base hold up against tuning? My recollection is that Atomic and Fischer both scrapped convex base shapes because they got mobbed in tuning.

    +
    +
    +
  16. + +
  17. +
    + + +
    +

    Has anyone around 6’2″ skied the 186cm Outline and loved it? The ski sounds perfect but I’m 183lbs used to 193cm Automatics, so hesitant to to buy shorter without feedback.

    +
    +
    +
      + +
    • +
      + + +
      +

      I have the same question… I’m 195lbs and 6’2” as well and love the look of this ski but wish it came in a 190. Wondering if a 186 is enough ski. Anyone have thoughts on this?

      +
      +
      +
    • +
    +
  18. + +
  19. +
    + + +
    +

    I absolutely love my Mordecais but they are beginning to de-lam after two seasons, sadly. Sounds like these wouldn’t charge quite as hard as the mordecais, is that safe to assume?

    +

    Thanks!

    +
    +
    +
  20. + +
  21. +
    + + +
    +

    Just got a pair of these (Line Outline 112, 186cm 2020 – Grey with graphic from up above…), and the ski says “Radii 16” (with a degrees sign after the 16). I am/was assuming this is the turn radius, but everywhere I can find (here, Line’s site, and elsewhere) it is listed at 18.5m. Any ideas what this means?

    +
    +
    +
      + +
    • +
      + + +
      +

      Huh, that’s pretty odd. I’ll see if someone at Line can explain that, but my guess is that it’s either a typo (I bet the 178 cm length might have a sidecut radius of 16 meters), or maybe referring to the bevel of the convexity at the tips and tails?

      +
      +
      +
    • +
    +
  22. + +
  23. +
    + + +
    +

    The Outline and Sir Francis Bacon are similar skis that have pretty different suggested mount points: -4.2 and -1.9 respectively. Do you think they are both solid recommendations?

    +

    I really like the way the SFB skis but haven’t mounted my Outlines yet.

    +
    +
    +
      + +
    • +
      + + +
      +

      Overall, I’d say they still feel extremely similar overall. Both encourage a similarly centered stance, though you can drive the Outline slightly harder through the shovels (in part due to its mount point, but also because of its slightly stiffer flex). If you love the SFB on the recommended line, you could probably mount the Outline at about -2 cm from true center and be fine. Or, if you want a bit more flotation and the ability to drive it a bit harder through the shovels in chop, then you should mount the Outline on its recommended line.

      +
      +
      +
    • +
    +
  24. +
+ +
+

Leave a Comment

+ +
+
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/blisterreview.com/1551128228532.html b/fixtures/blisterreview.com/1551128228532.html deleted file mode 100644 index 13c3b97ec..000000000 --- a/fixtures/blisterreview.com/1551128228532.html +++ /dev/null @@ -1,1009 +0,0 @@ - - - - - - - 2019-2020 Line Outline – BLISTER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -
-
-
-
-
- -
-
- -
-
- -
-

2019-2020 Line Outline

-
- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Ski: 2019-2020 Line Outline, 186 cm

Available Lengths: 178, 186 cm

Blister’s Measured Tip-to-Tail Length: 184.1 cm

Stated Weight per Ski: 2030 grams

Blister’s Measured Weight per Ski: 2024 & 2031 grams

Stated Dimensions: 150-117-142 mm

Blister’s Measured Dimensions: 152.5-117.5-141 mm

Stated Sidecut Radius (186 cm): 18.5 meters

Measured Tip & Tail Splay (ski decambered): 68 mm / 74 mm

Measured Traditional Camber Underfoot: ~5 mm

Core: Paulownia/Maple + Fiberglass Laminate

Base: “Fatty” 1.7 mm Sintered

Factory Recommended Mount Point: -4.2 cm from center; 87.9 cm from tail

-
-
-
-
-
-
-
-
-
-
-
-
- Luke Koppa and Sam Shaheen review the Line Outline for Blister.
Line Outline
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - Share on facebook - -
-
-
-
- - - Share on twitter - -
-
-
-
- - - Share on pinterest - -
-
-
-
- - - Share on reddit - -
-
-
-
- - - Share on email - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Review Navigation:  - -Specs //  -First Look //  -Bottom Line //  -Rocker Pics - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Intro

When it comes to playful powder skis, Eric Pollard is arguably one of the most influential and important figures in the industry. With his help, Line was able to create iconic skis like the Elizabeth, Sir Francis Bacon, EP Pro, Mr. Pollard’s Opus, Pescado, and many other skis designed to let skiers slash, spin, flip, and butter their way through deep snow.

The newest ski that Eric’s been working on is the Outline, which will be Line’s widest freestyle ski for 19/20.

The Outline effectively replaces the current Line Magnum Opus and Mordecai, and, like the 19/20 Sir Francis Bacon, the Outline features convex tips and tails. We’ve already talked a bit about the Outline and Sir Francis Bacon on our GEAR:30 podcast, but here we’ll go over the Outline’s design and how it compares to the skis it replaces, and others on the market.

What Line says about the Outline

“Equipped with Convex Base Technology to open up new possibilities in turn shape, the LINE Outline Skis are the ultimate development of freestyle powder ski design. Slarve, drift, and plane in any snow condition. Building on years of twin-tip ski design, the LINE Outline is the ultimate collaboration between Eric Pollard and LINE Skis.”

First, saying that the Outline is the “ultimate collaboration between Eric Pollard and LINE Skis” is a very bold statement. Eric and Line have made a lot of very good skis, so the Outline has a lot to live up to.

-
-
-
-
-
-
- Blister discusses notable trends and products at the 2019 Outdoor Retailer + Snow Show SIA trade show on the GEAR:30 podcast
Line Outline Ski w/ Convex Tips & Tails
-
-
-
-
-
-
-

But the Outline’s Convex Base Tech does set its design apart from previous Line skis. And after our initial time on the Outline and Sir Francis Bacon, we do think that Line has a reason to be hyping up these ski’s ability to slarve, drift, and plane (you can listen to our GEAR:30 podcast for more on that).

Shape / Rocker Profile

Apart from its convex tips and tails, the Outline looks very similar to many of Eric Pollard’s recent pow skis like the Mordecai and Magnum Opus. The Outline has fat tips and tails, with a bit of early taper. But unlike many current playful pow skis like the Prior CBC, Salomon QST 118, J Skis Friend, and Armada ARV 116 JJ, the Outline’s tips and tails don’t start tapering very early, and they also don’t taper to much of a point.

Compared to the new Sir Francis Bacon, the Outline actually has slightly less tip and tail taper, presumably to increase float in deep snow.

The Outline’s longitudinal rocker profile is also very reminiscent of the Magnum Opus and Mordecai. The Outline has pretty deep tip and tail rocker lines, but they’re not crazy deep by today’s standards. The Outline’s rocker lines also rise pretty gradually until you get to the ends of the ski, where the tips and tails splay out significantly.

Flex Pattern

Here’s how we’d characterize the flex pattern of the Outline:

Tips: 6-6.5
Shovels: 7-7.5
In Front of Toe Piece: 8-9.5
Underfoot: 9.5
Behind the Heel Piece: 9.5-8.5
Tails: 8-6

Unlike the Mordecai (especially the 193 cm version), the Outline is not a very stiff ski. Its tips and tails are pretty soft, and they slowly ramp up in stiffness as you get to the center of the ski. Overall, the Outline has a nearly symmetrical flex pattern with smooth transitions and no noticeable hinge points.

Compared to the 19/20 Sir Francis Bacon, the Outline is similarly soft at the ends, but ramps up quicker and is noticeably stiffer around the bindings.

Compared to the J Skis Friend, the Outline’s extremities are a bit softer, but the Outline’s flex pattern ramps up quicker. Compared to the 4FRNT Inthayne and Moment Wildcat / Blister Pro, the Outline is similarly soft at the very ends of the ski, but both the Wildcat and Inthayne stiffen up quicker and, apart from the ends, are significantly stiffer throughout.

Weight

Like the new Sir Francis Bacon, current SFB, Mordecai, and Magnum Opus, the Outline is a pretty light ski. At just over 2000 grams per ski for the 186 cm version, the Outline is one of the lightest pow skis we’ve reviewed.

For reference, here are a number of our measured weights (per ski, in grams) for some notable skis. As always, note the length differences to keep things apples to apples.

1710 & 1744 Atomic Bent Chetler 120, 184 cm (18/19–19/20)
1910 & 1941 Scott Scrapper 115, 189 cm (17/18–18/19)
2013 & 2099 Moment Wildcat / Blister Pro, 184 cm (18/19–19/20)
2024 & 2031 Line Outline, 186 cm (19/20)
2034 & 2052 Blizzard Rustler 11, 188 cm (17/18–19/20)
2043 & 2046 4FRNT Inthayne, 188 cm (18/19-19/20)
2042 & 2105 Line Mordecai, 186 cm (16/17–18/19)
2083 & 2097 Line Magnum Opus, 188 cm (15/16–18/19)
2102 & 2137 Line Sick Day 114, 190 cm (17/18–19/20)
2126 & 2173 Rossignol Super 7 RD, 190 cm (17/18–19/20)
2130 & 2130 Moment Wildcat / Blister Pro, 190 cm (18/19–19/20)
2133 & 2133 Salomon QST 118, 192 cm (17/18–18/19)
2183 & 2190 Black Crows Anima, 188.4 cm (17/18–19/20)
2196 & 2199 Icelantic Nomad 115, 191 cm (17/18–18/19)
2220 & 2252 Faction Prodigy 4.0, 186 cm (17/18–19/20)
2212 & 2215 Armada ARV 116 JJ, 185 cm (17/18–19/20)
2222 & 2278 Prior CBC, 184 cm (17/18–19/20)
2228 & 2231 Blizzard Spur, 192 cm (17/18–19/20)
2230 & 2250 Black Diamond Boundary Pro 115, 185 cm (17/18–19/20)
2246 & 2265 Fischer Ranger 115 FR, 188 cm (17/18–18/19)
2267 & 2270 Whitedot Ragnarok 118, 190 cm (16/17–18/19)
2296 & 2309 Liberty Origin Pro, 192 cm (17/18–19/20)
2297 & 2317 K2 Catamaran, 184 cm (17/18–19/20)
2341 & 2357 Dynastar PR-OTO Factory, 189 cm (18/19–19/20)
2343 & 2360 J Skis Friend, 189 cm (18/19)
2346 & 2351 Nordica Enforcer Pro, 191 cm (17/18–19/20)
2382 & 2395 ON3P Billy Goat, 184 cm (17/18–18/19)
2408 & 2421 ON3P Kartel 116, 186 cm (17/18–18/19)
2429 & 2437 Kingswood SMB, 188 cm (16/17–18/19)
2438 & 2492 Rossignol Black Ops 118, 186 cm (16/17–19/20)
2490 & 2529 K2 Catamaran, 191 cm (17/18–19/20)

-
-
-
-
-
-
-
-
-
-

Bottom Line (For Now)

The Line Outline follows a long line of prolific and iconic playful pow skis. The Outline’s design doesn’t stray too far from its ancestors’, but we’re already pretty psyched about the result. Blister Members can read our initial on-snow impressions in our Flash Review linked below, and then stay tuned for our full review.

Flash Review

Blister Members can now check out our Flash Review of the Outline for our initial impressions. Become a Blister member now to check out this and all of our Flash Reviews, plus get exclusive deals and discounts on skis, and personalized gear recommendations from us.

-
-
-
-
-
Share this post:
-
-
-
-
-
-
-
- - - Share on facebook - -
-
-
-
- - - Share on twitter - -
-
-
-
- - - Share on pinterest - -
-
-
-
- - - Share on reddit - -
-
-
-
- - - Share on email - -
-
-
-
-
-
-
-
-
-
-
-
-

Rocker Pics:

-
-
-
-
-
-
Full Profile
Tip Profile
Tail Profile
Top Sheet
Base
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - -
-
- -
-
- -

- 10 comments on “2019-2020 Line Outline”

- - -
    - -
  1. -
    - - -
    -

    “the LINE Outline Skis are the ultimate development of freestyle powder ski design…the LINE Outline is the penultimate collaboration between Eric Pollard and LINE Skis.”

    -

    So, these are the best freestyle powder skis ever, but EP + Line are going to make one ski after them?

    -
    -
    -
      - -
    • - -
    • -
    -
  2. - -
  3. -
    - - -
    -

    Hey guys – I’m probably a bit behind the curve in terms of ski news, but if Line are describing this ski as “the penultimate” collaboration with Eric it seems to indicate that there’s only one more EP / Line collaboration left. Does this mean that Line and EP are going to be parting ways? Or do you think they meant something else?

    -
    -
    - -
  4. - -
  5. -
    - - -
    -

    The best powder freestyle ski Line and Pollard have made was the EP Pro, the rest of his skis have just been chasing the lasted trends, the EP Pro was unique

    -
    -
    -
  6. - -
  7. -
    - - -
    -

    First, saying that the Outline is the “penultimate collaboration between Eric Pollard and LINE Skis” is a very bold statement.

    -

    I think “penultimate” means second to last….

    -
    -
    - -
  8. -
- -
-

Leave a Comment

-
- -
-
- -
-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fixtures/bookwalker.jp.html b/fixtures/bookwalker.jp.html new file mode 100644 index 000000000..fe936cbb6 --- /dev/null +++ b/fixtures/bookwalker.jp.html @@ -0,0 +1,1035 @@ + + + + + 異世界おもいで食堂 ~偉人と和食のあったかゴハン~ - 新文芸・ブックス お米ゴハン/汐街コナ:電子書籍試し読み無料 - BOOK☆WALKER - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+ +
+
+ + はじめてのお客さまへ + +
+
+ + +
+
+
+ + + +
+ +
+
+
新文芸 +
+

異世界おもいで食堂 ~偉人と和食のあったかゴハン~

+
+
+ +
+
+
+
+ + + + + + +
+ + + + 異世界おもいで食堂 ~偉人と和食のあったかゴハン~-電子書籍 + +
+ +
+
+
+ + + +
+ + + + + + + + + + 試し読み + + + + +
+ +

51ページ

+ + +
+ +
+ + + +
+ +
+
+
著者
+ お米ゴハン +
+
イラスト
+ 汐街コナ +
+
+
+ +
+

あらすじ・内容

+
+
+

偉人の“おもいで”が紡ぐ、心あたたまるストーリーを召し上がれ!

+

+  古今東西の偉人たちが転生し、暮らしている異世界――さくら小町。その一角に「おもいで食堂」と呼ばれる和食店があった。
+ 板前の天宮勇士(あまみや・ゆうじ)は、この世界に転生してきた、平凡な青年。
+ ただの料理好きだった彼は、オーナーである《勝海舟》との奇妙な縁からこの食堂で働くことになり、現代ではなれなかった料理人としての人生を謳歌する。
+ 味はもとより、料理で客の“おもいで”を刺激し、懐かしさを想起させる事もあって、店は徐々に知られていき、今ではすっかりさくら小町の隠れた名店となっていた。
+ 気取らない、型にはまらない彼の料理を求めて、あるいは忘れてしまった何かを取り戻すきっかけを求めて、今日も様々な人が店を訪れる。
+ 今や勇士とプライベートでも親しい《織田信長》に、常連である《清少納言》が抱える秘密。そして勇士の噂を聞きつけた旅の寿司職人《華屋与兵衛》が勝負を挑んできて……。
+「異世界×偉人×グルメ」全部まとめて、いただきます!
+ 食と偉人を巡るほっこりストーリー、ただいま開店! +

+
+
+
+
+
+ + + +
+ +
+
+ 電子書籍 + + + 読み放題 + + + + + + + + コイン + + めがイラスト + +
+ +
+
+
価格
+ +
+ +

1,320(税込) +

1,200円 (+消費税120円)

+ +
+
付与コイン
+
+

8/15 (月) 09:59まで

+ 480(*詳細) +
+
+ + + + + + + + + + + + + + +
+ + +
+ +

+ 月額836円(税込)~ +

+ 文庫・ラノベ読み放題で読む +
+ + + + + + + + + +
+ +
+
+ +
+ +
+

作品情報

+
+
+
+ +
シリーズ
+
異世界おもいで食堂 ~偉人と和食のあったかゴハン~
+ +
著者
+
+ +
+ +
レーベル
+
――
+ +
出版社
+
+ KADOKAWA +
+ +
カテゴリ
+
新文芸
+ +
ページ概数
+
258
+ +
配信開始日
+
2019/3/5
+ +
底本発行日
+
2019/3/5
+ +
対応端末
+
+
    +
  • PCブラウザ
    ビューア
  • +
  • Android
    (スマホ/タブレット)
  • +
  • iPhone / iPad
  • +
  • 推奨環境
  • +
+
+
+ + + + +
+
+ + + +
+ ページ概数 +
+
+

一般的なスマートフォンにてBOOK☆WALKERアプリの標準文字サイズで表示したときのページ数です。お使いの機種、表示の文字サイズによりページ数は変化しますので参考値としてご利用ください。

+
+
+
+
+ +
+ + +
+ + + +
+ +
    +
  • シェア:
  • +
  • + +
  • +
  • + +
  • + + +
  • + +
  • +
  • + +
  • +
+
+ +
    +
  • キャンペーンの内容や期間は予告なく変更する場合があります。
  • +
  • サイトに記載の日時は日本標準時 (Japan Standard Time) です。
  • +
+
+
+
+ + +
+
+

+
+
+ + + +
+
+

フォローリストを編集しました

+
+
+
+ + + + + + + +
+
+

+ 「異世界おもいで食堂 ~偉人と和食のあったかゴハン~」シリーズ作品一覧(全1冊) +

+ +
+

+ 各1,320円 + (税込)

+ + + +
+
+ +
+
    +
  • +
    + + +
    + + + +
    +
    +
    + + + + + + + + + + + + + + + +
    + + + 異世界おもいで食堂 ~偉人と和食のあったかゴハン~ + + +
    +
    + +
    +
    + +

    + + 新文芸 + 異世界おもいで食堂 ~偉人と和食のあったかゴハン~ +

    + + + +
    +
    +

     古今東西の偉人たちが転生し、暮らしている異世界――さくら小町。その一角に「おもいで食堂」と呼ばれる和食店があった。
    + 板前の天宮勇士(あまみや・ゆうじ)は、この世界に転生してきた、平凡な青年。
    + ただの料理好きだった彼は、オーナーである《勝海舟》との奇妙な縁からこの食堂で働くことになり、現代ではなれなかった料理人としての人生を謳歌する。
    + 味はもとより、料理で客の“おもいで”を刺激し、懐かしさを想起させる事もあって、店は徐々に知られていき、今ではすっかりさくら小町の隠れた名店となっていた。
    + 気取らない、型にはまらない彼の料理を求めて、あるいは忘れてしまった何かを取り戻すきっかけを求めて、今日も様々な人が店を訪れる。
    + 今や勇士とプライベートでも親しい《織田信長》に、常連である《清少納言》が抱える秘密。そして勇士の噂を聞きつけた旅の寿司職人《華屋与兵衛》が勝負を挑んできて……。
    +「異世界×偉人×グルメ」全部まとめて、いただきます!
    + 食と偉人を巡るほっこりストーリー、ただいま開店!

    +
    +
    +
    +
    + +
    + + + +
    + + +

    コイン8/15 (月) 09:59まで

    +
    + +
    +
    価格
    +
    +

    + 1,320(税込)

    + +

    1,200円 (+消費税120円)

    + +
    +
    + + + + + + +
    +
    +
    +
    +
  • +
+ +
+
+ + + +
+ +
+

おすすめ特集

+ +
+ +
+
+ +
+ + +
+
+
+ +
+
+

付与コインの内訳

+

480コイン

+
+
+
    +
  • +

    会員ランク(今月ランクなし)

    +

    0%

    +
  • + +
  • +

    コインUPキャンペーン

    +

    40%

    +
  • + +
+

+ 複数商品の購入で付与コイン数に変動があります。
+ クーポンご利用時はキャンペーンコイン付与の対象外です。
+ 詳しくは決済ページにてご確認ください。
+
+ 会員ランクの付与率は購入処理完了時の会員ランクに基づきます。
+ そのため、現在表示中の付与率から変わる場合があります。 +

+
+
+
+ +
+ +
+
+ +
+
+

「異世界おもいで食堂 ~偉人と和食のあったかゴハン~」評価・レビュー

+
+
+
+
+

+ 評価 +

+ +

※評価がないか、表示数に達していません。

+
+
+ + +
+
+ +
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/fixtures/bookwalker.jp/1554821842273.html b/fixtures/bookwalker.jp/1554821842273.html deleted file mode 100644 index cdd502f04..000000000 --- a/fixtures/bookwalker.jp/1554821842273.html +++ /dev/null @@ -1,913 +0,0 @@ - - - - - 異世界おもいで食堂 ~偉人と和食のあったかゴハン~ - ライトノベル(ラノベ) お米ゴハン/汐街コナ:電子書籍試し読み無料 - BOOK☆WALKER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - -
-
-
    -
  • 新潮社マンガ 1日限定・コイン40%還元
  • -
-
-
- -
-
はじめてのお客さまへ
-
- - - - -
-
-
-
-
- - - -
電子書籍(ラノベ) -

異世界おもいで食堂 ~偉人と和食のあったかゴハン~

- -
-
-
著者
お米ゴハン
-
-
-
イラスト
汐街コナ
-
- -
- - -
-
税込価格
-
- - 1,296 - - (1,200円+消費税96円) - - -
-
- - -
- -
付与コイン
-
- - 12 - コイン - - - -
- -
-

付与コイン12コインの内訳 -

-
-
-
会員ランク(今月ランクなし) -
-
1%
-
-
-

複数商品の購入で付与コイン数に変動があります。
クーポンご利用時はキャンペーンコイン付与の対象外です。
詳しくは決済ページにてご確認ください。

-

会員ランクの付与率は購入処理完了時の会員ランクに基づきます。
そのため、現在表示中の付与率から変わる場合があります。

-
-
- -
-
-
-
-
- - - - - - -

注意(購入前に必ずご確認ください。)

-
-
    -
  • ・この商品は電子書籍です。(紙の書籍ではありません)
  • -
  • ・iOS・Android アプリをご利用される場合は、ご利用の端末にてあらかじめBOOK☆WALKERアプリが動作するか無料書籍などでご確認ください。
  • -
  • ・この商品がキャンペーン対象の場合、その内容や期間は予告なく変更する場合があります。
  • -
  • 端末の推奨環境もご確認ください。
  • -
  • ・このサイトに記述されている日時は、日本標準時(Japan Standard Time)の時間です。配信日時等を確認の際はお気をつけください。
  • -
  • ・決済時に商品の合計税抜金額に対して課税するため、作品詳細ページの表示価格と差が生じる場合がございます。
  • -
  • ・コインUP表示がある場合、ご購入時に付与されるキャンペーン分のコインは期間限定コインです。
  • -
-

詳しくはこちら

-
-
-
- - - -
-
-
あらすじ・内容
-
-

偉人の“おもいで”が紡ぐ、心あたたまるストーリーを召し上がれ!

 古今東西の偉人たちが転生し、暮らしている異世界――さくら小町。その一角に「おもいで食堂」と呼ばれる和食店があった。
- 板前の天宮勇士(あまみや・ゆうじ)は、この世界に転生してきた、平凡な青年。
- ただの料理好きだった彼は、オーナーである《勝海舟》との奇妙な縁からこの食堂で働くことになり、現代ではなれなかった料理人としての人生を謳歌する。
- 味はもとより、料理で客の“おもいで”を刺激し、懐かしさを想起させる事もあって、店は徐々に知られていき、今ではすっかりさくら小町の隠れた名店となっていた。
- 気取らない、型にはまらない彼の料理を求めて、あるいは忘れてしまった何かを取り戻すきっかけを求めて、今日も様々な人が店を訪れる。
- 今や勇士とプライベートでも親しい《織田信長》に、常連である《清少納言》が抱える秘密。そして勇士の噂を聞きつけた旅の寿司職人《華屋与兵衛》が勝負を挑んできて……。
-「異世界×偉人×グルメ」全部まとめて、いただきます!
- 食と偉人を巡るほっこりストーリー、ただいま開店! -
-

(C)Okome Gohan 2019

-
-
-
-
-
- -
- - - - - - - - - - -
- - - -
新規会員登録をする(無料) -
- - - デジタルで読書を始めよう。 - - -
-

BOOK☆WALKERでデジタルで読書を始めよう。

-

BOOK☆WALKERではパソコン、スマートフォン、タブレットで電子書籍をお楽しみいただけます。

- -

購入した電子書籍は(無料本でもOK!)いつでもどこでも読める!

-
-
-
- - - - - -
-
- -
-
- - - - - - -
-
-
-
-
-

「異世界おもいで食堂 ~偉人と和食のあったかゴハン~」の作品情報

-
- -
レーベル
- - -
出版社
- - -
著者
- - -
シリーズ
- - -
ページ概数
-
258 -
- -
-
-

一般的なスマートフォンにてBOOK☆WALKERアプリの標準文字サイズで表示したときのページ数です。お使いの機種、表示の文字サイズによりページ数は変化しますので参考値としてご利用ください。

-
-
-
-
-
-
配信開始日
-
2019/3/5
- -
- - - - - -
-
対応端末
-
-
    -
  • PCブラウザ
    ビューア
  • -
  • Android
    (スマホ/タブレット)
  • -
  • iPhone / iPad
  • -
-
-
- -
- - -
-
- -
-
この作品を共有
-
-
-
- -
-
-
-
-
- - - -
-
-
-

「異世界おもいで食堂 ~偉人と和食のあったかゴハン~」シリーズ作品一覧(1冊)

- - - - -
-

- 各1,296円 - (税込)

- - - -
-
-
-
- -
-
- -
- - -
- -
-
-

- 異世界おもいで食堂 ~偉人と和食のあったかゴハン~のシリーズ詳細ページへ -

-
-
- - -
- - -
-
- -
-

「異世界おもいで食堂 ~偉人と和食のあったかゴハン~」に関連した特集&キャンペーン

-
- -
-
-
- -
-
- -
-

BOOK☆WALKERでデジタルで読書をしてみよう

-
-

BOOK☆WALKERではパソコン、スマートフォン、タブレットで気軽にマンガ、ライトノベル、小説などの電子書籍を楽しめます。

-
-

購入した書籍はブラウザ、またはアプリで読めます。

-
    -
  • -

    パソコン
    (Win、Mac)

    -

    ブラウザビューア
    で読書できます。

    -
  • -
  • -

    iPhone/iPad版アプリ

    -
    QRコード
    -
    App Storeからダウンロード
    -
    -
  • -
  • -

    Android版アプリ

    -
    QRコード
    -
    Google Playで手に入れよう
    -
    -
  • -
-
- スマートフォンイメージ画面
- -
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fixtures/buzzap.jp/1551497136221.html b/fixtures/buzzap.jp.html similarity index 100% rename from fixtures/buzzap.jp/1551497136221.html rename to fixtures/buzzap.jp.html diff --git a/fixtures/clinicaltrials.gov.html b/fixtures/clinicaltrials.gov.html new file mode 100644 index 000000000..5603e09df --- /dev/null +++ b/fixtures/clinicaltrials.gov.html @@ -0,0 +1,1262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Changes in Circulating Tumor-Specific DNA in Patients With Non-Metastatic Non-Small Cell Lung Cancer - Full Text View - ClinicalTrials.gov + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+Try the modernized ClinicalTrials.gov beta website. +Learn more about the modernization effort. +
+ + + +
+ + + + + + + +
+
+ Working… +
+
+ +
+
ClinicalTrials.gov + +
+ ClinicalTrials.gov Menu +
+ + + +
+ +
+
+ +
+ +
+ +
+ + +
+

Changes in Circulating Tumor-Specific DNA in Patients With Non-Metastatic Non-Small Cell Lung Cancer

+ +
+
+ + + + + +
+ + + The safety and scientific validity of this study is the responsibility of the study sponsor and investigators. Listing a study does not mean it has been evaluated by the U.S. Federal Government. + Read our disclaimer for details. +
+
+ +
 
+
+ + + + +
ClinicalTrials.gov Identifier: NCT03746262
+ + +
+ Recruitment Status : + Completed + + +
+ First Posted : November 19, 2018
+
+ Last Update Posted : November 21, 2018
+ + +
+
+
+
+ + +
Sponsor:
+ +
Collaborators:
+
Guardant Health, Inc.
+
National Cancer Institute (NCI)
+ +
Information provided by (Responsible Party):
+
Wake Forest University Health Sciences
+
+
+ + + + +
+
+ + +
+ + + +
+ +
Brief Summary:
+
The purpose of this research study is to evaluate a blood test to measure circulating tumor DNA (ctDNA). It is hypothesized that ctDNA may identify patients who can be considered for additional therapy. 40 People with non-metastatic non-small cell lung cancer will be asked to take part in this study. Participants will have approximately 3 teaspoons of blood withdrawn from a vein at three different times. These times will be before primary treatment (either surgery or radiation therapy), 1 month after primary treatment, and 4 months after primary treatment.

+ + + + + + + + + +
+Condition or disease
+ Non Small Cell Lung Cancer +
+
+ + + + + + +
+
Detailed Description:
+
The purpose of this research study is to evaluate a blood test to measure circulating tumor DNA (ctDNA). It is hypothesized that ctDNA may identify patients who can be considered for additional therapy. 40 People with non-metastatic non-small cell lung cancer will be asked to take part in this study. Participants will have approximately 3 teaspoons of blood withdrawn from a vein at three different times. These times will be before primary treatment (either surgery or radiation therapy), 1 month after primary treatment, and 4 months after primary treatment. The total amount of blood withdrawn during the study will be approximately 9 teaspoons. Participants will be followed every 3 months for 12 months to determine if a confirmed recurrence or progression has occurred. Participants will also be asked to complete questionnaires on their quality of life and their smoking behaviors. As part of this study, a blood sample will be obtained and DNA from participants blood sample will be purified. DNA, or deoxyribonucleic acid, stores and transmits inherited traits, such as eye color or blood type. As part of this research project, participant's DNA will be studied in an effort to find out if there are genes that contribute to medical conditions like their cancer that are part of the study. If participants have surgery to have tumor removed or if participants have a biopsy of their tumor, the study would like to take some of the leftover tissue to purify and study the DNA from the tissue sample.
+
+
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Layout table for study information
+Study Type : + Observational + + +
Actual +Enrollment :40 participants
Observational Model: Cohort
Time Perspective: Prospective
Official Title:A Pilot Study of Changes in Circulating Tumor-Specific DNA (ctDNA) in Patients With Non-Metastatic Non-Small Cell Lung Cancer
Actual Study Start Date :May 13, 2016
Actual Primary Completion Date :August 10, 2018
Actual Study Completion Date :August 10, 2018
+ + +

+

+
+ Resource links provided by the National Library of Medicine + +

+

+ + +

+ MedlinePlus Genetics related topics: + Lung cancer +
+ + +
+ MedlinePlus related topics: + Lung Cancer +
+ + + + + + + + + +

+
+ + + +
+

+ + + + +
+

+ + + + + + + + + + + + + + + + + + + + +
+ Group/Cohort
+ Patients - Stage I treated with surgery +
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations, and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
+
+ Patients - Stage I treated with radiotherapy +
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
+
+ Patients - Stage II treated with surgery & chemotherapy +
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
+
+ Patients - Stage III treated with chemoradiotherapy +
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
+
+

+
+ + + +
+ +
+
+ + +
+Primary Outcome Measures : +
    +
  1. Change in ctDNA levels in patients with Stage I or II (Non-small cell lung cancer) NSCLC [ Time Frame: up to 12 months ]
    ctDNA levels in patients with Stage I or II NSCLC treated with surgery compared with ctDNA levels in the rest of the cohort. Comparisons will be made at the following time points: Pre-treatment, Post-treatment, and Follow-up.

    +
  2. Change in ctDNA levels in patients with Stage III NSCLC [ Time Frame: up to 12 months ]
    ctDNA levels in patients with Stage III NSCLC treated with chemoradiotherapy compared with ctDNA levels in the rest of the cohort. Comparisons will be made at the following time points: Pre-treatment, Post-treatment , and Follow-up.

    +
  3. Change in ctDNA by treatment group [ Time Frame: up to 12 months ]
    To determine the change in ctDNA by treatment group at the following time points: change from Pre-treatment to Post-treatment, and change from Pre-treatment to Follow-up.

    +
+
+
+ + +
+Secondary Outcome Measures : +
    +
  1. Health Related Quality of Life- (HRQL) [ Time Frame: up to 12 months ]
    A two part questionnaire, will be used to assess HRQL: (1) QLQ-C30, a core questionnaire covering general aspects of HRQL, and (2) QLQ-LC13, a lung cancer specific questionnaire. For the QLQ-C30 - All of the scales and single-item measures range in score from 0 to 100. A high scale score represents a higher response level. For the QLQ-LC13 - All of the scales and single-item measures range in score from 0 to 100. A high score for the scales and single items represents a high level of symptomatology or problems.

    +
  2. Number of Packs Smoked Per Day [ Time Frame: up to 12 months ]
    The number of packs of tobacco participants smoked per day will be assessed and recorded

    +
  3. Number of Years Smoked [ Time Frame: up to 12 months ]
    The number of years participants smoked will be recorded.

    +
  4. Number of Participants that have a Smoking Status [ Time Frame: up to 12 months ]
    Participants will be asked about their current smoking status (yes/no). These answers will be recorded.

    +
+
+
+ + + Biospecimen Retention:   Samples With DNA
+
+ whole blood and tissue when available +
+
+ +
+ + + +
+ +
+ +

+

+ Information from the National Library of Medicine + +

+

+ Choosing to participate in a study is an important personal decision. Talk with your doctor and family members or friends about deciding to join a study. To learn more about this study, you or your doctor may contact the study research staff using the contacts provided below. For general information, Learn About Clinical Studies. + +

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Layout table for eligibility information
Ages Eligible for Study:   18 Years and older   (Adult, Older Adult)
Sexes Eligible for Study:   All
Accepts Healthy Volunteers:   No
Sampling Method:   Non-Probability Sample
+ +
Study Population
+
Men and women of all races and ethnicities who meet the above-described eligibility criteria are eligible to participate in this study.
+ +
Criteria
+

Inclusion Criteria:

+
    +
  • Patients with histologically confirmed or clinically suspected stage I, II or III NSCLC, provided such patients will be scheduled for a procedure that will provide histologic confirmation of the diagnosis (if the procedure does not provide histologic confirmation of the diagnosis of NSCLC the particular patient will be removed from the study and replaced).
  • +
  • Scheduled for treatment with surgery or radiotherapy (Stage I), surgery and chemotherapy (Stage II), or chemoradiotherapy (Stage III). For stage I receiving radiotherapy, treatment must be stereotactic body radiation therapy (SBRT) consisting of 3-5 fractions.
  • +
  • Ability to provide blood sample at the following time points: pre-treatment, 1 month post definitive treatment, and 4 post definitive treatment.
  • +
  • Ability to understand and the willingness to sign an IRB-approved informed consent document.
  • +
  • Staging studies including PET-CT for all patients prior to the initiation of primary treatment, as a pretreatment requirement. For patients with Stage II and III, MRI or CT of the brain is needed prior to the initiation of primary treatment. Patients, however, may be registered and have the pretreatment blood sample collected, provided that the staging studies are being scheduled. Registered patients who are found, after screening tests, to have Stage IV disease will be removed from the study and replaced.
  • +
+

Exclusion Criteria:

+
    +
  • Females who are pregnant
  • +
  • History of organ transplant.
  • +
  • For stage II and III patients, must be able to receive chemotherapy.
  • +
  • Active cardiovascular issues in the past 6 months.
  • +
+ +
+ +

+ + + + +
+ +
+ + +
+ + + + +
+ Information from the National Library of Medicine + +

+

+ + To learn more about this study, you or your doctor may contact the study research staff using the contact information provided by the sponsor. + +

+ + Please refer to this study by its ClinicalTrials.gov identifier (NCT number): NCT03746262 + +

+
+ + + + + +
Locations
+ + +
+
+ + + + + + + + + + + + + + + + +
Layout table for location information
United States, North Carolina
Wake Forest Baptist Medical Center
Winston-Salem, North Carolina, United States, 27157
+
+
+ + +
Sponsors and Collaborators
+
Wake Forest University Health Sciences
+
Guardant Health, Inc.
+
National Cancer Institute (NCI)
+ + +
Investigators
+
+ + + + + + + + + + + + + + + + +
Layout table for investigator information
Principal Investigator:Stefan Grant, MDWake Forest University Health Sciences
+
+ + +
+
+ + + + + + + + +
+ + +
+ + + + + + + + + + + Publications: +
+ + + + + + + + + + + + + + + + + + + +
+ Collisson E, Mortimer S, Sebisanovic D, et al. Biopsy-free comprehensive tumor profiling of 1,000+ consecutive cancer patients using CLIA-certified commercial test and its clinical utility. Paper presented at: 2015 AACR Annual Meeting. Abstract #2403. 2015. +
+
+ Talasaz A, Mortimer S, Sebisanovic D, et al. Use of the GUARDANT360 noninvasive tumor sequencing assay on 300 patients across colorectal, melanoma, lung, breast, and prostate cancers and its clinical utility. J Clin Oncol 32, 2014 (suppl; abstr e22041). +
+
+ Austin LK, Avery T, Jaslow R, et al. Concordance of circulating tumor DNA (ctDNA) and next-generation sequencing (NGS) as molecular monitoring tools in metastatic breast cancer (MBC). Paper presented at: 2015 AACR Annual Meeting. Abstract #4918. 2015. +
+
+ Austin LK, Jaslow R, Avery T, et al. Clinical utility of circulating tumor DNA (ctDNA) in advanced and metastatic breast cancer. Paper presented at: 2015 AACR Annual Meeting. Abstract #4928. 2015. +
+
+ Piccioni DE, Lanman RB, Nagy RJ, Talasaz A, Pingle SC, Kesari S. Analysis of cell-free circulating tumor DNA in patients with glioblastoma and other primary brain tumors. Paper presented at: 2015 ASCO Annual Meeting. J Clin Oncol 33, 2015 (suppl; abstr 11072). 2015. +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Layout table for additonal information
Responsible Party:Wake Forest University Health Sciences
ClinicalTrials.gov Identifier: + NCT03746262     + + + +
Other Study ID Numbers: + IRB00036520
+ + P30CA012197 ( U.S. NIH Grant/Contract )
+ CCCWFU 62A15 ( Other Identifier: NCI )
+
First Posted:November 19, 2018 +    + Key Record Dates +
Last Update Posted:November 21, 2018 +
Last Verified:November 2018 +
Individual Participant Data (IPD) Sharing Statement:
Plan to Share IPD:No
+ +
+ + + + + + + + + + + + + + + + + + +
Layout table for additional information
Studies a U.S. FDA-regulated Drug Product:No
Studies a U.S. FDA-regulated Device Product:No
+ + + + +
Keywords provided by Wake Forest University Health Sciences:
+
+ + + + + + + + + + + +
+ Non-Metastatic Non-Small Cell Lung Cancer
+ Cancer
+ Lung Cancer
+ circulating tumor-specific DNA (ctDNA)
+ non-invasive diagnostic
+
+
+ + +
Additional relevant MeSH terms:
+
+ + + + + + + + + + + + +
Layout table for MeSH terms
+ Lung Neoplasms
+ Carcinoma, Non-Small-Cell Lung
+ Respiratory Tract Neoplasms
+ Thoracic Neoplasms
+ Neoplasms by Site
+
+ Neoplasms
+ Lung Diseases
+ Respiratory Tract Diseases
+ Carcinoma, Bronchogenic
+ Bronchial Neoplasms
+
+
+ +
+ + +
+
+
+ + + +
+
+
+
+ + + +
+ + + + + + + + + + diff --git a/fixtures/clinicaltrials.gov/1551708504719.html b/fixtures/clinicaltrials.gov/1551708504719.html deleted file mode 100644 index 72a9e5f1f..000000000 --- a/fixtures/clinicaltrials.gov/1551708504719.html +++ /dev/null @@ -1,1302 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Changes in Circulating Tumor-Specific DNA in Patients With Non-Metastatic Non-Small Cell Lung Cancer - Full Text View - ClinicalTrials.gov - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- Working... -
-
- - - -
-
ClinicalTrials.gov - -
- ClinicalTrials.gov Menu -
- - -
- -
-
-
- -
-
- -
- -
- -
- - -
-

Changes in Circulating Tumor-Specific DNA in Patients With Non-Metastatic Non-Small Cell Lung Cancer

- -
-
-
- - - - - -
- - - The safety and scientific validity of this study is the responsibility of the study sponsor and investigators. Listing a study does not mean it has been evaluated by the U.S. Federal Government. - Read our disclaimer for details. -
-
- -
- - - - - -
ClinicalTrials.gov Identifier: NCT03746262
- - -
- Recruitment Status : - Completed - - -
- First Posted : November 19, 2018
-
- Last Update Posted : November 21, 2018
- - -
-
-
-
- - -
Sponsor:
- -
Collaborators:
-
Guardant Health, Inc.
-
National Cancer Institute (NCI)
- -
Information provided by (Responsible Party):
-
Wake Forest University Health Sciences
-
-
- - - - -
-
- - -
- - - -
- -
Brief Summary:
-
The purpose of this research study is to evaluate a blood test to measure circulating tumor DNA (ctDNA). It is hypothesized that ctDNA may identify patients who can be considered for additional therapy. 40 People with non-metastatic non-small cell lung cancer will be asked to take part in this study. Participants will have approximately 3 teaspoons of blood withdrawn from a vein at three different times. These times will be before primary treatment (either surgery or radiation therapy), 1 month after primary treatment, and 4 months after primary treatment.

- - - - - - - - - -
-Condition or disease
- Non Small Cell Lung Cancer -
-
- - - - - - - -
Detailed Description:
-
The purpose of this research study is to evaluate a blood test to measure circulating tumor DNA (ctDNA). It is hypothesized that ctDNA may identify patients who can be considered for additional therapy. 40 People with non-metastatic non-small cell lung cancer will be asked to take part in this study. Participants will have approximately 3 teaspoons of blood withdrawn from a vein at three different times. These times will be before primary treatment (either surgery or radiation therapy), 1 month after primary treatment, and 4 months after primary treatment. The total amount of blood withdrawn during the study will be approximately 9 teaspoons. Participants will be followed every 3 months for 12 months to determine if a confirmed recurrence or progression has occurred. Participants will also be asked to complete questionnaires on their quality of life and their smoking behaviors. As part of this study, a blood sample will be obtained and DNA from participants blood sample will be purified. DNA, or deoxyribonucleic acid, stores and transmits inherited traits, such as eye color or blood type. As part of this research project, participant's DNA will be studied in an effort to find out if there are genes that contribute to medical conditions like their cancer that are part of the study. If participants have surgery to have tumor removed or if participants have a biopsy of their tumor, the study would like to take some of the leftover tissue to purify and study the DNA from the tissue sample.
-
-
- - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Layout table for study information
-Study Type : - Observational - - -
Actual -Enrollment :40 participants
Observational Model: Cohort
Time Perspective: Prospective
Official Title:A Pilot Study of Changes in Circulating Tumor-Specific DNA (ctDNA) in Patients With Non-Metastatic Non-Small Cell Lung Cancer
Actual Study Start Date :May 13, 2016
Actual Primary Completion Date :August 10, 2018
Actual Study Completion Date :August 10, 2018
- - -

-

-
- Resource links provided by the National Library of Medicine - -

-

- - -

- Genetics Home Reference related topics: - Lung cancer -
- - -
- MedlinePlus related topics: - Lung Cancer -
- - - - - - - - - -
-
- - - -
-
- - - - -
-

- - - - - - - - - - - - - - - - -
- Group/Cohort
- Patients - Stage I treated with surgery -
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations, and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
-
- Patients - Stage I treated with radiotherapy -
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
-
- Patients - Stage II treated with surgery & chemotherapy -
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
-
- Patients - Stage III treated with chemoradiotherapy -
ctDNA measures will be taken and descriptive statistics will be estimated. These include means, standard deviations and 95% confidence intervals. Next, within group changes in ctDNA levels will be measured for each of the four groups. These change values will be estimated with 95% confidence intervals. In addition, paired t-tests will be performed to determine whether there were statistically significant changes in ctDNA levels at time points post-treatment or follow-up. After these paired analyses are performed, an exploratory longitudinal mixed model will be fit to examine the change in ctDNA levels.
-
-

-
- - - -
- -
-
- - -
-Primary Outcome Measures : -
    -
  1. Change in ctDNA levels in patients with Stage I or II (Non-small cell lung cancer) NSCLC [ Time Frame: up to 12 months ]
    ctDNA levels in patients with Stage I or II NSCLC treated with surgery compared with ctDNA levels in the rest of the cohort. Comparisons will be made at the following time points: Pre-treatment, Post-treatment, and Follow-up.

    -
  2. Change in ctDNA levels in patients with Stage III NSCLC [ Time Frame: up to 12 months ]
    ctDNA levels in patients with Stage III NSCLC treated with chemoradiotherapy compared with ctDNA levels in the rest of the cohort. Comparisons will be made at the following time points: Pre-treatment, Post-treatment , and Follow-up.

    -
  3. Change in ctDNA by treatment group [ Time Frame: up to 12 months ]
    To determine the change in ctDNA by treatment group at the following time points: change from Pre-treatment to Post-treatment, and change from Pre-treatment to Follow-up.

    -
-
-
- - -
-Secondary Outcome Measures : -
    -
  1. Health Related Quality of Life- (HRQL) [ Time Frame: up to 12 months ]
    A two part questionnaire, will be used to assess HRQL: (1) QLQ-C30, a core questionnaire covering general aspects of HRQL, and (2) QLQ-LC13, a lung cancer specific questionnaire. For the QLQ-C30 - All of the scales and single-item measures range in score from 0 to 100. A high scale score represents a higher response level. For the QLQ-LC13 - All of the scales and single-item measures range in score from 0 to 100. A high score for the scales and single items represents a high level of symptomatology or problems.

    -
  2. Number of Packs Smoked Per Day [ Time Frame: up to 12 months ]
    The number of packs of tobacco participants smoked per day will be assessed and recorded

    -
  3. Number of Years Smoked [ Time Frame: up to 12 months ]
    The number of years participants smoked will be recorded.

    -
  4. Number of Participants that have a Smoking Status [ Time Frame: up to 12 months ]
    Participants will be asked about their current smoking status (yes/no). These answers will be recorded.

    -
-
-
- - - Biospecimen Retention:   Samples With DNA
-
- whole blood and tissue when available -
-
- -
- - - -
- -
- -

-

-
- Information from the National Library of Medicine - -

-

- Choosing to participate in a study is an important personal decision. Talk with your doctor and family members or friends about deciding to join a study. To learn more about this study, you or your doctor may contact the study research staff using the contacts provided below. For general information, Learn About Clinical Studies. - -

-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
Layout table for eligibility information
Ages Eligible for Study:   18 Years and older   (Adult, Older Adult)
Sexes Eligible for Study:   All
Accepts Healthy Volunteers:   No
Sampling Method:   Non-Probability Sample
- -
Study Population
-
Men and women of all races and ethnicities who meet the above-described eligibility criteria are eligible to participate in this study.
- -
Criteria
-

Inclusion Criteria:

-
    -
  • Patients with histologically confirmed or clinically suspected stage I, II or III NSCLC, provided such patients will be scheduled for a procedure that will provide histologic confirmation of the diagnosis (if the procedure does not provide histologic confirmation of the diagnosis of NSCLC the particular patient will be removed from the study and replaced).
  • -
  • Scheduled for treatment with surgery or radiotherapy (Stage I), surgery and chemotherapy (Stage II), or chemoradiotherapy (Stage III). For stage I receiving radiotherapy, treatment must be stereotactic body radiation therapy (SBRT) consisting of 3-5 fractions.
  • -
  • Ability to provide blood sample at the following time points: pre-treatment, 1 month post definitive treatment, and 4 post definitive treatment.
  • -
  • Ability to understand and the willingness to sign an IRB-approved informed consent document.
  • -
  • Staging studies including PET-CT for all patients prior to the initiation of primary treatment, as a pretreatment requirement. For patients with Stage II and III, MRI or CT of the brain is needed prior to the initiation of primary treatment. Patients, however, may be registered and have the pretreatment blood sample collected, provided that the staging studies are being scheduled. Registered patients who are found, after screening tests, to have Stage IV disease will be removed from the study and replaced.
  • -
-

Exclusion Criteria:

-
    -
  • Females who are pregnant
  • -
  • History of organ transplant.
  • -
  • For stage II and III patients, must be able to receive chemotherapy.
  • -
  • Active cardiovascular issues in the past 6 months.
  • -
- -
- -
- - - - -
- -
- - -
- - - - -
-
- Information from the National Library of Medicine - -

-

- - To learn more about this study, you or your doctor may contact the study research staff using the contact information provided by the sponsor. - -

- - Please refer to this study by its ClinicalTrials.gov identifier (NCT number): NCT03746262 - -

-
- -
- - - - - - - - -
Locations
-
- - - - - - - - - - - - - - -
Layout table for location information
United States, North Carolina
Wake Forest Baptist Medical Center
Winston-Salem, North Carolina, United States, 27157
-
- - - -
Sponsors and Collaborators
-
Wake Forest University Health Sciences
-
Guardant Health, Inc.
-
National Cancer Institute (NCI)
- - -
Investigators
-
- - - - - - - - - - - - - - - - -
Layout table for investigator information
Principal Investigator:Stefan Grant, MDWake Forest University Health Sciences
-
- - -
-
- - - - - - - - -
- - -
-
- - - - - - - - - - - - Publications: -
- - - - - - - - - - - - - - - - - - - -
- Collisson E, Mortimer S, Sebisanovic D, et al. Biopsy-free comprehensive tumor profiling of 1,000+ consecutive cancer patients using CLIA-certified commercial test and its clinical utility. Paper presented at: 2015 AACR Annual Meeting. Abstract #2403. 2015. -
-
- Talasaz A, Mortimer S, Sebisanovic D, et al. Use of the GUARDANT360 noninvasive tumor sequencing assay on 300 patients across colorectal, melanoma, lung, breast, and prostate cancers and its clinical utility. J Clin Oncol 32, 2014 (suppl; abstr e22041). -
-
- Austin LK, Avery T, Jaslow R, et al. Concordance of circulating tumor DNA (ctDNA) and next-generation sequencing (NGS) as molecular monitoring tools in metastatic breast cancer (MBC). Paper presented at: 2015 AACR Annual Meeting. Abstract #4918. 2015. -
-
- Austin LK, Jaslow R, Avery T, et al. Clinical utility of circulating tumor DNA (ctDNA) in advanced and metastatic breast cancer. Paper presented at: 2015 AACR Annual Meeting. Abstract #4928. 2015. -
-
- Piccioni DE, Lanman RB, Nagy RJ, Talasaz A, Pingle SC, Kesari S. Analysis of cell-free circulating tumor DNA in patients with glioblastoma and other primary brain tumors. Paper presented at: 2015 ASCO Annual Meeting. J Clin Oncol 33, 2015 (suppl; abstr 11072). 2015. -
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Layout table for additonal information
Responsible Party:Wake Forest University Health Sciences
ClinicalTrials.gov Identifier: - NCT03746262     - History of Changes -
Other Study ID Numbers: - IRB00036520
- - P30CA012197 ( U.S. NIH Grant/Contract )
- CCCWFU 62A15 ( Other Identifier: NCI )
-
First Posted:November 19, 2018 -    - Key Record Dates -
Last Update Posted:November 21, 2018 -
Last Verified:November 2018 -
Individual Participant Data (IPD) Sharing Statement:
Plan to Share IPD:No
- -
- - - - - - - - - - - - - - - - - -
Layout table for additional information
Studies a U.S. FDA-regulated Drug Product:No
Studies a U.S. FDA-regulated Device Product:No
- - - -
- Keywords provided by Wake Forest University Health Sciences: -
- - - - - - - - - - - -
- Non-Metastatic Non-Small Cell Lung Cancer
- Cancer
- Lung Cancer
- circulating tumor-specific DNA (ctDNA)
- non-invasive diagnostic
-
-
- - -
- Additional relevant MeSH terms: -
- - - - - - - - - - - - -
Layout table for MeSH terms
- Lung Neoplasms
- Carcinoma, Non-Small-Cell Lung
- Respiratory Tract Neoplasms
- Thoracic Neoplasms
- Neoplasms by Site
-
- Neoplasms
- Lung Diseases
- Respiratory Tract Diseases
- Carcinoma, Bronchogenic
- Bronchial Neoplasms
-
-
- - -
- - -
- -
-
- - - -
-
-
-
- - - -
- - - - - - - - diff --git a/fixtures/deadline.com/1556104756617.html b/fixtures/deadline.com.html similarity index 57% rename from fixtures/deadline.com/1556104756617.html rename to fixtures/deadline.com.html index 99f9d6b2a..6db1a200a 100644 --- a/fixtures/deadline.com/1556104756617.html +++ b/fixtures/deadline.com.html @@ -1,94 +1,44 @@ - + - - - - + - - - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - + Donald Trump Advises Boeing, Tweeting “But What The Hell Do I Know?”; Twitter Answers – Deadline @@ -97,31 +47,31 @@ - - - - + + + + + + + - - - - - - - - + + + + + + + - - - - + + - + @@ -144,50 +94,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + - + @@ -195,57 +146,86 @@ - -The U.S. was one of the last countries to ground the plane last month after a second deadly crash in Ethiopia, following by months a crash in Indonesia. Since the second Ethiopian Airlines crash, the stock has plunged 12% and cutting back production, lost 24$ from its market cap. -"What do I know about branding, maybe nothing (but I did become President!)," Trump simpered in a morning tweet. + + + + -"[B]ut if I were Boeing, I would FIX the Boeing 737 MAX, add some additional great features, & REBRAND the plane with a new name," he advised. + -"No product has suffered like this one. But again, what the hell do I know?" Trump said which, given his history with defunct Trump Airlines and other projects, triggered shooting-fish-in-barrel responses on Twitter, predictably taking "Trump Airlines" to Top-10 trending status worldwide. Among the responses: + -https://twitter.com/BrianKarem/status/1117767646961963009 -https://twitter.com/EdKrassen/status/1117773751217795078 -Trump's tweet: -https://twitter.com/realDonaldTrump/status/1117736685721223168"> + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + - - + - + - +

+ -
-
-
-
- -
-
-
@@ -2305,198 +2865,45 @@

ad -
-
-
-

- - - Must Read Stories -

- -
- -
-
- - - -
-
- @@ -2512,7 +2919,6 @@

- @@ -2522,10 +2928,6 @@

- - - - - - - - + diff --git a/fixtures/deadspin.com--video.html b/fixtures/deadspin.com--video.html new file mode 100644 index 000000000..40211038b --- /dev/null +++ b/fixtures/deadspin.com--video.html @@ -0,0 +1,39 @@ +Remember When Donald Trump Got Booed For Butchering "Take Me Out To The Ballgame”?

Advertisement

Remember When Donald Trump Got Booed For Butchering "Take Me Out To The Ballgame”?

The day: July 9, 2000. The place: Wrigley Field. A young, 54-year-old fake billionaire with wild aspirations had been practicing singing “Take Me Out to the Ballgame” for two full weeks in preparation for his big debut. And as Donald Trump gleefully tore into the mic, an entire stadium began to boo.

The video above, which was mercifully resurfaced by Chicago’s WGN last week, shows Trump in a rare state of extreme self-consciousness. Because not only had he been supposedly practicing the song for weeks, and not only was he “very confident he would bring the house down” (according to the Chicago Tribune), but he apparently wasn’t even willing to risk a performance without eyes glued to the lyrics—all 57 words of them. And then, of course, there’s the fact that he sounds like shit.

Adding insult to injury, a New York Post article at the time quoted a fan who didn’t even know who Trump was. “‘Donald Trump, who’s that again?’ asked Millie Tracer of Skokie. ‘I came to see the game.’”

Advertisement

Don’t worry, 2000-era Donald. One day, 16 years from now, they’ll see. They’ll all see.

\ No newline at end of file diff --git a/fixtures/deadspin.com.html b/fixtures/deadspin.com.html new file mode 100644 index 000000000..f8e43c3d7 --- /dev/null +++ b/fixtures/deadspin.com.html @@ -0,0 +1,39 @@ +The Nationals Are Stuck With Danny Espinosa Tonight, Unless They Opt For The Only Thing Worse

Advertisement

The Nationals Are Stuck With Danny Espinosa Tonight, Unless They Opt For The Only Thing Worse

Washington’s Danny Espinosa problem is inextricably linked to its long-running center-field problem. If they had a credible fourth outfielder on the roster, Danny Espinosa would be nailed to the bench, and we would all be spared his nightly terribleness.

The Espinosa problem is this: The Nats’ everyday shortstop is having a hysterically, legendarily bad NLDS. Through Tuesday’s Game 4, he is 1-11 at the plate, with eight strikeouts. In the eight at-bats that ended in strikeouts, Espinosa saw a total of just 34 pitches, just a hair over four per at-bat. In those eight at-bats, he has seen just 10 pitches that were not strikes one, two, or three. That is incredible. Through four games, he has been about as bad a hitter as is possible without accidentally leaving your bat in the dugout.

It’s even worse—the only thing worse, perhaps—than what he did in the regular season, when he hit just .209 and struck out 174 times, good for 7th most in baseball. Danny Espinosa is not a professional hitter, if the qualifications of a professional hitter include knowledge of the strike zone, any measure of plate discipline, and a certain aptitude for making the bat touch the baseball. He is a flailing mess at the plate, and he is at his worst right now, when the games matter most.

Advertisement

This is a bummer, in no small part because Danny Espinosa has been around the Nationals his entire career and is an easy guy to like. He’s a twitchy, ferocious athlete with a bazooka of a throwing arm, and he grows cool and weird facial hair in the offseason in order to troll Nationals team photos in spring training. And, for a guy who has an almost impossible time putting the bat on the damn ball, he’s got some pop (26 dingers in the regular season) in those rare instances when one of his mighty chops makes contact.

He is also a very good and rangy defensive shortstop, an important asset for a team with the defensively challenged Daniel Murphy as the everyday second baseman. The good news is, the Nationals have another good and rangy defensive shortstop, one who also happens to be maybe the team’s best offensive weapon now that Bryce Harper has turned into a sulking, slap-hitting everyman. His name is Trea Turner, he is the prize prospect of the Nationals organization, and he produced a sizzling .342/.370/.567 slash line this year, with 13 homers and 33 stolen bases in just 73 games. Seems like the decision here should be pretty simple: instead of running out an awful hitter at an important infield spot, run out a fucking brilliant hitter instead.

Advertisement

Problem is, the Nats have Trea Turner playing center field, a position that is notably not the one he’s spent his entire career (to this point) learning and mastering. The Nats have Trea Turner playing center field because the two natural center fielders on the roster—Ben Revere and Michael Taylor—are close to useless at the plate. Revere is a corkscrewing mess whose signature move is popping the ball up in the infield, and Taylor has no command of the strike zone whatsoever and is far enough along in his career, now, that we can say with some confidence that he is probably a tomato can.

Still, you’d have to be pretty fucking horrible to have been a worse option than Danny Espinosa this season, and so bad that replacing you with a guy who has never played your position—and in the playoffs, no less—is preferable. Unbelievably, the numbers actually support this: Revere’s .217/.260/.300 slash in 375 plate appearances is only marginally worse than Taylor’s .231/.278/.376 in 237. And Taylor strikes out a lot: on 32.5 percent of his plate appearances, in fact—significantly worse than even Espinosa’s depressing 29 percent. And neither are remotely the defensive player Espinosa is.

Advertisement

Underwhelming center-field play (boy, that’s a charitable way of putting it, can you tell I’m a Nats fan?) has become something of a norm in Washington during the team’s contending years. It was also a feature of their plucky but miserable years—in the mid-aughts the likes of Brad Wilkerson, Marlon Byrd, and Lastings Milledge were out there—but has lately become something like the baseball version of the Dark Arts professor at Hogwarts. People are moved into the role for hazy, possibly superstitious reasons, and then, as if predestined, they fall apart and move on.

This may have to do with an antiquated idea of what a center fielder must be. GM Mike Rizzo shipped out Milledge and reliever Joel Hanrahan in a 2009 trade for Nyjer Morgan, in a move that was celebrated at the time for solidifying the leadoff spot in the everyday lineup. Morgan had only become an everyday player that year, and Rizzo’s enthusiasm was misplaced—the hyped leadoff man hit .251 with a .633 OPS in his first full season in DC, and was caught stealing an MLB-worst 17 times. The team traded him the following off-season for scraps and cash, in what would be the start of an embarrassing pattern: use assets to acquire a veteran center fielder and leadoff man, watch his performance crater, and lose him for next to nothing.

Advertisement

The next notable example came in 2013, when they traded a valuable pitching prospect for Denard Span and immediately named him the everyday center fielder and leadoff man. Span did his job—he hit well in 2013 and even better in 2014—until nagging back injuries caused him to miss nearly two-thirds of Washington’s disastrous 2015 season, leaving rookie Michael Taylor to attempt and fail to approximate the kind of production needed from a leadoff hitter. Fearing that Span’s bad back would be a lingering, long-term problem, the Nats let Span leave in free agency after the season.

The organization’s response to Span’s demise and departure was telling. They cast about for someone in the same very specific mold, the quick and small slap-hitter traditionally socked into the leadoff spot from sheer lack of imagination. This led them to Ben Revere, whose qualifications for the spot look good on paper: He’s a light-hitting speedster with a deceptively high career batting average that distracts from the fact that he’s never walked more than 32 times in a season and has virtually no power. The Nats sent homegrown Drew Storen to the Blue Jays in the trade—maybe it worked out okay, so long as the lone criterion is whether Storen has been any better than Revere this season. He has not. They have both been awful.

Advertisement

It’s worth pointing out, here, that conventional wisdom about the role of the leadoff man in an ideal lineup has been slowly eroding for years, now. One of the most specific lessons of the first iteration of Moneyball was the overvaluing of base-running speed as a necessary quality of a leadoff hitter, the position in the lineup where on-base percentage is most important. That the Nats targeted and grabbed up Ben Revere, whose history of production suits him much better to the conventional wisdom-version of a leadoff man, perhaps says uncomfortable things about the organization’s interest in these newfangled analytics. All of Morgan, Span, Revere, Taylor, and other somewhat-recent leadoff placeholders such as Roger Bernadina, for example look the part, in terms both basic (they are all fast and underpowered) and jarringly specific—(they all played center field). It’s almost enough to make you wonder whether Trea Turner wound up in center not out of necessity, but because he was batting leadoff.

Which brings us to this season. The Nats scored Turner in a one-sided deal in which they fleeced the Padres for a can’t-miss infielder and a promising young starting pitcher (Joe Ross). Turner was immediately the heir apparent to lame-duck shortstop Ian Desmond, and spent spring training this year lighting up every pitcher in sight. But then Revere went to shit, and Michael Taylor was no better, and plans changed in a hurry. Revere hasn’t been a regular in the lineup since mid-August, and he hasn’t had a plate appearance in these playoffs.

Advertisement

So now their placeholder shortstop is having a historically bad playoff series, and they have neither the outfielders nor the infielders to make the obvious switch. For all the success Mike Rizzo has had building this Nationals roster, filling out a strong farm system, and keeping the organization relatively stable through a few years of turnover at the skipper level, he’s been unable to lock up any kind of stability in center field, and the position has become a revolving door. And this is the latest consequence: With their season on the line, their best shortstop will be in center field, their worst batter will be at shortstop, and the bottom of their lineup will be a gaping sore. And we will be stuck watching poor, hopeless Danny Espinosa repeatedly corkscrew himself into the ground in an elimination game. Joy of joys.

\ No newline at end of file diff --git a/fixtures/deadspin.com/1476389931786.html b/fixtures/deadspin.com/1476389931786.html deleted file mode 100644 index 5d139109a..000000000 --- a/fixtures/deadspin.com/1476389931786.html +++ /dev/null @@ -1 +0,0 @@ - The Nationals Are Stuck With Danny Espinosa Tonight, Unless They Opt For The Only Thing Worse

The Nationals Are Stuck With Danny Espinosa Tonight, Unless They Opt For The Only Thing Worse

Photo credit: Rob Carr/Getty

Washington’s Danny Espinosa problem is inextricably linked to its long-running center-field problem. If they had a credible fourth outfielder on the roster, Danny Espinosa would be nailed to the bench, and we would all be spared his nightly terribleness.

Advertisement

The Espinosa problem is this: The Nats’ everyday shortstop is having a hysterically, legendarily bad NLDS. Through Tuesday’s Game 4, he is 1-11 at the plate, with eight strikeouts. In the eight at-bats that ended in strikeouts, Espinosa saw a total of just 34 pitches, just a hair over four per at-bat. In those eight at-bats, he has seen just 10 pitches that were not strikes one, two, or three. That is incredible. Through four games, he has been about as bad a hitter as is possible without accidentally leaving your bat in the dugout.

It’s even worse—the only thing worse, perhaps—than what he did in the regular season, when he hit just .209 and struck out 174 times, good for 7th most in baseball. Danny Espinosa is not a professional hitter, if the qualifications of a professional hitter include knowledge of the strike zone, any measure of plate discipline, and a certain aptitude for making the bat touch the baseball. He is a flailing mess at the plate, and he is at his worst right now, when the games matter most.

Advertisement

This is a bummer, in no small part because Danny Espinosa has been around the Nationals his entire career and is an easy guy to like. He’s a twitchy, ferocious athlete with a bazooka of a throwing arm, and he grows cool and weird facial hair in the offseason in order to troll Nationals team photos in spring training. And, for a guy who has an almost impossible time putting the bat on the damn ball, he’s got some pop (26 dingers in the regular season) in those rare instances when one of his mighty chops makes contact.

He is also a very good and rangy defensive shortstop, an important asset for a team with the defensively challenged Daniel Murphy as the everyday second baseman. The good news is, the Nationals have another good and rangy defensive shortstop, one who also happens to be maybe the team’s best offensive weapon now that Bryce Harper has turned into a sulking, slap-hitting everyman. His name is Trea Turner, he is the prize prospect of the Nationals organization, and he produced a sizzling .342/.370/.567 slash line this year, with 13 homers and 33 stolen bases in just 73 games. Seems like the decision here should be pretty simple: instead of running out an awful hitter at an important infield spot, run out a fucking brilliant hitter instead.

Problem is, the Nats have Trea Turner playing center field, a position that is notably not the one he’s spent his entire career (to this point) learning and mastering. The Nats have Trea Turner playing center field because the two natural center fielders on the roster—Ben Revere and Michael Taylor—are close to useless at the plate. Revere is a corkscrewing mess whose signature move is popping the ball up in the infield, and Taylor has no command of the strike zone whatsoever and is far enough along in his career, now, that we can say with some confidence that he is probably a tomato can.

Sponsored

Still, you’d have to be pretty fucking horrible to have been a worse option than Danny Espinosa this season, and so bad that replacing you with a guy who has never played your position—and in the playoffs, no less—is preferable. Unbelievably, the numbers actually support this: Revere’s .217/.260/.300 slash in 375 plate appearances is only marginally worse than Taylor’s .231/.278/.376 in 237. And Taylor strikes out a lot: on 32.5 percent of his plate appearances, in fact—significantly worse than even Espinosa’s depressing 29 percent. And neither are remotely the defensive player Espinosa is.

Underwhelming center-field play (boy, that’s a charitable way of putting it, can you tell I’m a Nats fan?) has become something of a norm in Washington during the team’s contending years. It was also a feature of their plucky but miserable years—in the mid-aughts the likes of Brad Wilkerson, Marlon Byrd, and Lastings Milledge were out there—but has lately become something like the baseball version of the Dark Arts professor at Hogwarts. People are moved into the role for hazy, possibly superstitious reasons, and then, as if predestined, they fall apart and move on.

Advertisement

Advertisement

This may have to do with an antiquated idea of what a center fielder must be. GM Mike Rizzo shipped out Milledge and reliever Joel Hanrahan in a 2009 trade for Nyjer Morgan, in a move that was celebrated at the time for solidifying the leadoff spot in the everyday lineup. Morgan had only become an everyday player that year, and Rizzo’s enthusiasm was misplaced—the hyped leadoff man hit .251 with a .633 OPS in his first full season in DC, and was caught stealing an MLB-worst 17 times. The team traded him the following off-season for scraps and cash, in what would be the start of an embarrassing pattern: use assets to acquire a veteran center fielder and leadoff man, watch his performance crater, and lose him for next to nothing.

The next notable example came in 2013, when they traded a valuable pitching prospect for Denard Span and immediately named him the everyday center fielder and leadoff man. Span did his job—he hit well in 2013 and even better in 2014—until nagging back injuries caused him to miss nearly two-thirds of Washington’s disastrous 2015 season, leaving rookie Michael Taylor to attempt and fail to approximate the kind of production needed from a leadoff hitter. Fearing that Span’s bad back would be a lingering, long-term problem, the Nats let Span leave in free agency after the season.

The organization’s response to Span’s demise and departure was telling. They cast about for someone in the same very specific mold, the quick and small slap-hitter traditionally socked into the leadoff spot from sheer lack of imagination. This led them to Ben Revere, whose qualifications for the spot look good on paper: He’s a light-hitting speedster with a deceptively high career batting average that distracts from the fact that he’s never walked more than 32 times in a season and has virtually no power. The Nats sent homegrown Drew Storen to the Blue Jays in the trade—maybe it worked out okay, so long as the lone criteria is whether Storen has been any better than Revere this season. He has not. They have both been awful.

Advertisement

It’s worth pointing out, here, that conventional wisdom about the role of the leadoff man in an ideal lineup has been slowly eroding for years, now. One of the most specific lessons of the first iteration of Moneyball was the overvaluing of base-running speed as a necessary quality of a leadoff hitter, the position in the lineup where on-base percentage is most important. That the Nats targeted and grabbed up Ben Revere, whose history of production suits him much better to the conventional wisdom-version of a leadoff man, perhaps says uncomfortable things about the organization’s interest in these newfangled analytics. All of Morgan, Span, Revere, Taylor, and other somewhat-recent leadoff placeholders such as Roger Bernadina, for example look the part, in terms both basic (they are all fast and underpowered) and jarringly specific—(they all played center field). It’s almost enough to make you wonder whether Trea Turner wound up in center not out of necessity, but because he was batting leadoff.

Which brings us to this season. The Nats scored Turner in a one-sided deal in which they fleeced the Padres for a can’t-miss infielder and a promising young starting pitcher (Joe Ross). Turner was immediately the heir apparent to lame-duck shortstop Ian Desmond, and spent spring training this year lighting up every pitcher in sight. But then Revere went to shit, and Michael Taylor was no better, and plans changed in a hurry. Revere hasn’t been a regular in the lineup since mid-August, and he hasn’t had a plate appearance in these playoffs.

So now their placeholder shortstop is having a historically bad playoff series, and they have neither the outfielders nor the infielders to make the obvious switch. For all the success Mike Rizzo has had building this Nationals roster, filling out a strong farm system, and keeping the organization relatively stable through a few years of turnover at the skipper level, he’s been unable to lock up any kind of stability in center field, and the position has become a revolving door. And this is the latest consequence: With their season on the line, their best shortstop will be in center field, their worst batter will be at shortstop, and the bottom of their lineup will be a gaping sore. And we will be stuck watching poor, hopeless Danny Espinosa repeatedly corkscrew himself into the ground in an elimination game. Joy of joys.

Reply77 replies
Leave a reply

\ No newline at end of file diff --git a/fixtures/deadspin.com/1477505848605.html b/fixtures/deadspin.com/1477505848605.html deleted file mode 100644 index 51ca4b57f..000000000 --- a/fixtures/deadspin.com/1477505848605.html +++ /dev/null @@ -1 +0,0 @@ -Remember When Donald Trump Got Booed For Butchering "Take Me Out To The Ballgame”?

Remember When Donald Trump Got Booed For Butchering "Take Me Out To The Ballgame”?

The day: July 9, 2000. The place: Wrigley Field. A young, 54-year-old fake billionaire with wild aspirations had been practicing singing “Take Me Out to the Ballgame” for two full weeks in preparation for his big debut. And as Donald Trump gleefully tore into the mic, an entire stadium began to boo.

Advertisement

The video above, which was mercifully resurfaced by Chicago’s WGN last week, shows Trump in a rare state of extreme self-consciousness. Because not only had he been supposedly practicing the song for weeks, and not only was he “very confident he would bring the house down” (according to the Chicago Tribune), but he apparently wasn’t even willing to risk a performance without eyes glued to the lyrics—all 57 words of them. And then, of course, there’s the fact that he sounds like shit.

Adding insult to injury, a New York Post article at the time quoted a fan who didn’t even know who Trump was. “‘Donald Trump, who’s that again?’ asked Millie Tracer of Skokie. ‘I came to see the game.’”

Advertisement

Don’t worry, 2000-era Donald. One day, 16 years from now, they’ll see. They’ll all see.

Senior Writer at Deadspin


PGP Fingerprint: 1B2B 2229 8096 1A6E 7744 8847 F32A CCC5 1E69 7FED|PGP Key

Reply100 replies
Leave a reply

\ No newline at end of file diff --git a/fixtures/epaper.zeit.de/1566927390034.html b/fixtures/epaper.zeit.de.html similarity index 99% rename from fixtures/epaper.zeit.de/1566927390034.html rename to fixtures/epaper.zeit.de.html index bd6c78ee8..c82256c83 100644 --- a/fixtures/epaper.zeit.de/1566927390034.html +++ b/fixtures/epaper.zeit.de.html @@ -11,7 +11,7 @@
- +
@@ -28,4 +28,4 @@
- + \ No newline at end of file diff --git a/fixtures/fandom.wikia.com/1475595373938.html b/fixtures/fandom.wikia.com.html similarity index 100% rename from fixtures/fandom.wikia.com/1475595373938.html rename to fixtures/fandom.wikia.com.html diff --git a/fixtures/fortune.com/1485216994169.html b/fixtures/fortune.com.html similarity index 100% rename from fixtures/fortune.com/1485216994169.html rename to fixtures/fortune.com.html diff --git a/fixtures/forward.com.html b/fixtures/forward.com.html new file mode 100644 index 000000000..376f7a82b --- /dev/null +++ b/fixtures/forward.com.html @@ -0,0 +1,858 @@ + + + + + + + Why Does Slack Say Hummus? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Skip To Content + + + + + + + + +
+
+ + + +
+ + + Get Our Newsletter
+ + + +
+ + JEWISH. INDEPENDENT. NONPROFIT. +
+ + + +
+
+ +

Support the Forward

+ Funded by readers like you + DonateSubscribe +
+ +
+
+ + + + + + +
+ + + + +
+ +
+ + + +
+ + + +
+ +
+
+ +
+ + + + + + + +
+ The Schmooze

The Adorable Reason You Can Set Your Alert Sound to “Hummus” on Slack

+ + +
+ + + + + +
+ + + +

Sometimes (okay, a lot of the time), if I’m in the middle of editing or writing, I don’t always notice when someone else on my team is trying to communicate with me via Slack, the popular work messaging app.

+

Thinking I could fix things by tinkering with the notification settings (perhaps more popups, a louder noise?), I made an amusing discovery. Amongst the options of “Ding,” “Boing,” “Woah!” and even “Knock Brush” (the default and our News editor’s favorite), Slack also offers the option of getting your attention by saying “hummus.”

+

A lover of all things chummus (chickpeas), I decided to investigate.

+

The reason Slack has this feature, it seems, is super adorable:

+

+ +

+

+Who is Anna? Anna Pickard is Slack’s editorial director who apparently delighted her coworkers with her (now readily accessible) pronunciation of the word hummus. In June, Anna tweeted a photo of her Slack notification options, adding, “Fact: My notification noise on Slack is set to Hummus’, a notification only available to us. Of me, saying hummus.”

+

+ +

+

+Soon after, like the best whipped chickpea spread, the plot thickened: Paul Betts, a software developer for Slack, jumped in to inform her that the setting wasn’t as exclusive as she thought:

+

+ +

+

+

Some people, not content with an already beautiful thing, asked: why hummus?

+

The answer, as those of us who work with Brits (or have ever watched the BBC) know, was obvious — but Slack’s Senior Content Director Matt Haughey stated it for good measure:

+

+ +

+
+Update: On December 28, I reached out to Slack’s PR team for the inside scoop. On December 29, I got a reply from Julia Blystone, who confirmed that the voice does indeed belong to Pickard, “one of Slack’s earliest employees, who helped create Slack’s brand personality and voice.”

+

Blystone added that “One of our colleagues, Myles Grant, who’s an engineer and another of Slack’s first employees, loved the way she said ‘hummus’, so they recorded it and made it an option for the notification tone. It has been available for 18 months internally only (and was really an Easter Egg even within Slack) and was just released recently to all teams.”

+

Sounds like another audibly delectable mystery solved.

+

Laura E. Adkins is the Forward’s contributing network editor. Contact her at adkins@forward.com or on Twitter, @Laura_E_Adkins.

+

+ +
+
+
+ + + + +
+
+ + +
+
+ + + Explore + +

Most Popular

+ + + +

In Case You Missed It

+ + + +
+
+ +
+
+ + +

Engage

+ +
+
    + + + +
  • + + +

    SHARE YOUR FEEDBACK

    + + + + +
  • + + + +
  • +

    UPCOMING EVENT

    NY-12 Candidate Forum

    + +
    +
    +

    THE TEMPLE EMANU-EL STREICKER CENTER and Virtual

    +

    Aug 10, 2022

    +

    7 pm ET · 

    +
    +
    + +

    Will the last Jew left in New York’s congressional delegation be reelected? Will New York’s senior congresswoman receive another term? Or will one of the newcomers upend Manhattan politics?

    +
  • + + + + +
+
+
+
+
+
+ + + + + + + + + +
+
+ + +
+ +
+ +

Republish This Story

+
+
+

Please read before republishing

+

We’re happy to make this story available to republish for free under an Attribution-Non Commercial-No Derivatives Creative Commons license as long as you follow our republishing guidelines, which require that you credit the Foward and retain our pixel. See our full guidelines for more information.

+

To republish, copy the HTML, which includes our tracking pixel, all paragraph styles and hyperlinks, the author byline, images, and credit to the Foward. Have questions? Please email us at editorial@forward.com.

+
+ +
+
+
+ + +
+ + + + + + + + +
+
+

We don't support Internet Explorer

+

Please use Chrome, Safari, Firefox, or Edge to view this site.

+
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/forward.com/1488392273490.html b/fixtures/forward.com/1488392273490.html deleted file mode 100644 index 8a8a294e6..000000000 --- a/fixtures/forward.com/1488392273490.html +++ /dev/null @@ -1,602 +0,0 @@ - - - - - - -Why Does Slack Say Hummus? - The Schmooze – Forward.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
-
-

The Adorable Reason You Can Set Your Alert Sound to “Hummus” on Slack

- -
- - -

Sometimes (okay, a lot of the time), if I’m in the middle of editing or writing, I don’t always notice when someone else on my team is trying to communicate with me via Slack, the popular work messaging app.

- -

Thinking I could fix things by tinkering with the notification settings (perhaps more popups, a louder noise?), I made an amusing discovery. Amongst the options of “Ding,” “Boing,” “Woah!” and even “Knock Brush” (the default and our News editor’s favorite), Slack also offers the option of getting your attention by saying “hummus.”

- -

A lover of all things chummus (chickpeas), I decided to investigate.

- -
-

The reason Slack has this feature, it seems, is super adorable:

- - - -
-
- - - - -


-Who is Anna? Anna Pickard is Slack’s editorial director who apparently delighted her coworkers with her (now readily accessible) pronunciation of the word hummus. In June, Anna tweeted a photo of her Slack notification options, adding, “Fact: My notification noise on Slack is set to Hummus’, a notification only available to us. Of me, saying hummus.”

- - - -
-
- - - - -


-Soon after, like the best whipped chickpea spread, the plot thickened: Paul Betts, a software developer for Slack, jumped in to inform her that the setting wasn’t as exclusive as she thought:

- - - -
-
- - -

-

- -

Some people, not content with an already beautiful thing, asked: why hummus?

- -

The answer, as those of us who work with Brits (or have ever watched the BBC) know, was obvious — but Slack’s Senior Content Director Matt Haughey stated it for good measure:

- - - -
-
- - -

-
-Update: -On December 28, I reached out to Slack’s PR team for the inside scoop. On December 29, I got a reply from Julia Blystone, who confirmed that the voice does indeed belong to Pickard, “one of Slack’s earliest employees, who helped create Slack’s brand personality and voice.”

- -

Blystone added that “One of our colleagues, Myles Grant, who’s an engineer and another of Slack’s first employees, loved the way she said ‘hummus’, so they recorded it and made it an option for the notification tone. It has been available for 18 months internally only (and was really an Easter Egg even within Slack) and was just released recently to all teams.”

- -

Sounds like another audibly delectable mystery solved.

- -

Laura E. Adkins is the Forward’s contributing network editor. Contact her at adkins@forward.com or on Twitter, @Laura_E_Adkins.

- - -
-

Tagged as:

- -
-
-
-
-
- -
-
-
Recommend this article
-

The Adorable Reason You Can Set Your Alert Sound to “Hummus” on Slack

- -
-
-
Thank you!
-

This article has been sent!

-Close -
-
- -
-
Close
-
-
-
-
-
-
- -
-
-
-
- - -
-
-
- - - - diff --git a/fixtures/fusion.net/1482529202024.html b/fixtures/fusion.net/1482529202024.html deleted file mode 100644 index 51178744b..000000000 --- a/fixtures/fusion.net/1482529202024.html +++ /dev/null @@ -1 +0,0 @@ - ‘La La Land’ might win an Oscar but it’s got some bizarre racial politics | Fusion
Hollywood musical history

‘La La Land’ might win an Oscar but it’s got some bizarre racial politics

Lionsgate

Warning: this piece contains spoilers.

I love musicals. Like, love them love them. So you can imagine my trepidation about La La Land, the recently released musical from director Damien Chazelle that’s a frontrunner for the Best Picture Oscar. Hollywood tries to bring the musical back roughly every two years, and it almost never works. Could La La Land be the one to break the streak?

First, let me say that there is a great deal to love in La La Land. It is never less than entertaining, and it frequently reaches moments of dizzying rapture that come closer to matching the heights of the American musical than anything I can remember in ages. Stars Ryan Gosling and Emma Stone can’t sing particularly well (he sounds like Chet Baker trying to find a note, she’s a little better) and they can’t dance particularly well either, but it doesn’t much matter. The movie captures us anyway. What it does—at first tentatively, then with increasing self-confidence—that precious few modern-day musicals do is tap into the glorious artifice that most golden age musicals were built on.

The very foundation of musicals—the idea that the world can burst into song at a moment’s notice, that dancing can have the expressive power of speech, that the boundaries of time and space can be collapsed on command—turns them into magical realist fantasies without even trying. Old musicals are able to conjure all of this with an unabashed, uncompromised sincerity, but you can almost always feel the strain in modern ones. Even the really good ones, like Chicago, have an element of pastiche, of mugging. La La Land, remarkably, almost never does. When Stone and Gosling are suddenly, joyously lifted off the ground in a planetarium, or, in a stunning, divine sequence at the end of the film, evoke about a million different musical classics, it’s just blissful. The movie is wonderfully unashamed of itself. You swoon.

But all is not well in La La Land. It’s so good at emulating old musicals that it stumbles into one of the more troublesome corners of the genre: race.

It’s no secret, or surprise, that old Hollywood musicals always had problems with race. All old movies (and, for that matter, a hell of a lot of new ones) have had problems with race. Racism is a pretty big thing in America! But what’s interesting about La La Land is how neatly it fits into a very specific set of patterns that pop up all throughout old Hollywood musicals when it comes to race. Broadly speaking, you can put them into three categories: ones that pretend race doesn’t exist, ones that awkwardly shoehorn race in, and ones that are blatantly racist.

There are plenty of examples of the last one. The first blockbuster film of any kind with sound, after all, was The Jazz Singer—a musical whose triumphant climax features Al Jolson in blackface. Everyone from Fred Astaire to Judy Garland to Bing Crosby has had a turn in blackface numbers.

When musicals weren’t openly mocking people of color, they were fitting them in in the least obtrusive way possible. The most famous example of this is Lena Horne, one of the most iconic black jazz singers of the 20th century. She appeared in a string of musicals for MGM in the 1940s, but only in discrete solo scenes that could be easily snipped out of the films when they played in the South. (Horne would only get juicier parts in all-black musicals like Cabin in the Sky or Stormy Weather. Similarly, the Nicholas Brothers—a black dance duo who performed some of the most dazzling numbers in film history—were a perennial feature in 1940s musicals—but never as actual characters. They’d show up, do their thing, and make their exit, leaving the white people to carry the actual plot forward.

Then there are musicals that just pretend people of color aren’t a thing. This comes off as especially weird now given that jazz music sits at the center of most Hollywood musicals. Watch a musical and there’s a good chance that you’ll get some white people using black idioms to hail jazz—with no black people around. (Again, remember The Jazz Singer.) You’ll even, in some extreme circumstances, get numbers like “I Left My Hat In Haiti,” from 1951’s Royal Wedding, where Fred Astaire ventures down to one of the most historically important black countries in the world and encounters…a bunch of white people. (We won’t even get into movies like West Side Story, which just cast white people as Puerto Ricans.)

There are exceptions to these patterns—the complicated career of Brazilian screen legend Carmen Miranda, for instance, or some of the adaptations of more liberal stage shows—but not many.

La La Land never reaches these lows, but its racial politics are bizarre in ways that unnervingly echo some of its predecessors. It’s 2016, so of course the main characters—Sebastian, the jazz musician played by Gosling, and Mia, the actress played by Stone—exist in a more diverse milieu than their forerunners. Sebastian’s sister marries a black man, for instance, and one of Mia’s roommates is a person of color. Neither of these ancillary characters have more than a few lines, but it’s something, I suppose.

Yet the movie’s relationship to race is nevertheless shot through with a tension that Chazelle and his stars appear completely oblivious to. It manifests itself most conspicuously in the way it handles Gosling’s character. Sebastian is presented as a deeply passionate classicist struggling to save a dying genre. In one scene, he takes Mia to an empty jazz club where, in front of an all-black band, he explains the power of the music to her in mystical and rather torturously written terms. Beyond the male condescension inherent in the scene, the use of a white man as a portal into what is, unambiguously, a black art form lands with a uncomfortable thud. The actual black people playing the music in the scene are not asked to share their thoughts.

I was reminded strongly of a scene in the 1956 film High Society, where Bing Crosby and Louis Armstrong hold forth on roughly the same topic. Ironically, the interplay between the two is actually on a much more equal footing than the nonexistent contact Sebastian has with the players in La La Land. By 1956, Armstrong had long been a crossover icon of popular culture, so you couldn’t just park him in the corner—but even so, Crosby is the key messenger, a white man transmitting jazz to a presumably white audience, while flanked by a black band.

That scene in La La Land is nothing, though, compared to the way the movie handles its most important black character, a bandleader named Keith, played by John Legend. If La La Land has a villain, it’s Keith. He and Sebastian have some sort of fraught history, but he still convinces Sebastian to join his new band—a plot point on which the whole rest of the movie hinges. When Sebastian turns up to rehearsal and discovers that Keith wants to play jazz in a style tinged with soul and hip hop influences, he freezes, clearly shocked. Keith sternly tells him that jazz has to face the future, and he grimly accepts. Later, Mia attends a performance of the band and is openly horrified by the backup dancers and razzle-dazzle she sees. What happened to the purity of Sebastian’s music?

Again, the film appears unaware of what it’s implying—that it will take a white man to rescue a sacred black art form from a black man intent on degrading it. The rest of the plot will go unmentioned here, but suffice it to say that Keith is not redeemed by the end of La La Land.

Chazelle’s last film, Whiplash, was also about white people engaged in an obsessive relationship with jazz, so he clearly has a theme. La La Land comes very close to a masterpiece, which is why it’s such a shame that, just like so many Hollywood musicals before it, it struggles so mightily to include people of color in a way that is both just and dramatically sound.

×
To Watch This Video

Select your TV provider, sign in and watch!

More providers to come soon.
\ No newline at end of file diff --git a/fixtures/genius.com/1550609084053.html b/fixtures/genius.com.html similarity index 100% rename from fixtures/genius.com/1550609084053.html rename to fixtures/genius.com.html diff --git a/fixtures/getnews.jp.html b/fixtures/getnews.jp.html new file mode 100644 index 000000000..7457bd151 --- /dev/null +++ b/fixtures/getnews.jp.html @@ -0,0 +1,609 @@ + + + + + +気軽に新聞をスクラップできる「ペン」、CUTPEN | ガジェット通信 GetNews + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ + + +
+
+
+
+ +
+ +
+
+
+
+
+

気軽に新聞をスクラップできる「ペン」、CUTPEN

+
+access_time +create +folder生活・趣味 +
+ + + +
+1904212 +

ネット社会の現代でも、多くの人に読まれている新聞。そんな新聞を読んでいる時に気になった記事を気軽にデータとして残したい人もいるだろう。そんな中、スマートフォンを活用することによって、簡単に新聞記事をスクラップ化することが可能となった。

+

CUTPENは「新聞を切り抜く」ということにフォーカスした、新聞スクラップ用ペンとスマートフォンアプリ。

+

CUTPENの一番の特徴は、専用ペンとスマートフォンと連携することで、気になる新聞記事を簡単に切り抜くことができることだ。線が引きやすい専用ペンで囲った箇所を、アプリを使い撮影すると、囲った部分を認識してデータ化。気になった新聞記事を簡単にスクラップできる上に、スクラップした記事は画像に変化しているため、スマホからPCへのデータ移動なども簡単。また、文字を綺麗に見やすくする画像補正や、気になる単語や箇所をチェックできるマーカー機能等を搭載しており、スクラップした記事を快適に読むことが可能だ。

+

それだけでなく、CUTPENはAIとアルゴリズムを活用することで、新聞記事のデータ化も簡単にできるようになった。

+1904213 +

スクラップした記事は文字を認識して重要キーワードを抽出するだけでなく、インターネットから関連情報を表示することができる。これにより、気になった記事を深く把握することが容易になるというわけだ。

+

CUTPENは専用ボールペンにスマートフォンアプリの全機能が使用できるシリアルIDを付属。対応OSはiOS8以降を搭載したiPhone5S以降のスマートフォン。価格は1年間分のシリアルコード付きで850円(税抜き)

+
+
+
+
+ +
+
+ + +
+
+ +
+ +
+
+access_time +create +folder生活・趣味 +
+
+local_offer +
+ +
+
+
+
+

NeoL/ネオエル

+

都市で暮らす女性のためのカルチャーWebマガジン。最新ファッションや映画、音楽、 占いなど、創作を刺激する情報を発信。アーティスト連載も多数。

+

ウェブサイト: http://www.neol.jp/

+
+ +
    +
  • ガジェット通信編集部への情報提供はこちら +
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。 +
+ + +
+
+
+
+
+ + +
+ +
+
+
+
+
+ + +
+ +
+
+
+ + +
+
+
+
+
+ + +
+ +
+
+
+ +
+ + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + diff --git a/fixtures/getnews.jp/1555846693544.html b/fixtures/getnews.jp/1555846693544.html deleted file mode 100644 index b7451ca42..000000000 --- a/fixtures/getnews.jp/1555846693544.html +++ /dev/null @@ -1,437 +0,0 @@ - - - - -気軽に新聞をスクラップできる「ペン」、CUTPEN | ガジェット通信 GetNews - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- -ガジェット通信 GetNews - -

-見たことのないものを見に行こう - -
- - -
- -
-
-
- -
-
- -サイトジャック特集pc - -
-
- -
-
-
- -
-
- -
- -
-
-
-
-
- -
- -
-
-
-

体験を伝える―『ガジェット通信』の考え方

-
-面白いものを探しにいこう -本物を体験し体感しよう -会いたい人に会いに行こう -見たことのないものを見に行こう -そしてそれをやわらかくみんなに伝えよう -[→ガジェ通についてもっと詳しく] -[→ガジェット通信フロアについて] -
-
-
-
- -
-
-

気軽に新聞をスクラップできる「ペン」、CUTPEN

- - -
-
    -
  • - -
  • -- -
  • - -
  • - -
  • - -
  • - -
  • - -
-
-
-1904212 -

ネット社会の現代でも、多くの人に読まれている新聞。そんな新聞を読んでいる時に気になった記事を気軽にデータとして残したい人もいるだろう。そんな中、スマートフォンを活用することによって、簡単に新聞記事をスクラップ化することが可能となった。

-

CUTPENは「新聞を切り抜く」ということにフォーカスした、新聞スクラップ用ペンとスマートフォンアプリ。

-

CUTPENの一番の特徴は、専用ペンとスマートフォンと連携することで、気になる新聞記事を簡単に切り抜くことができることだ。線が引きやすい専用ペンで囲った箇所を、アプリを使い撮影すると、囲った部分を認識してデータ化。気になった新聞記事を簡単にスクラップできる上に、スクラップした記事は画像に変化しているため、スマホからPCへのデータ移動なども簡単。また、文字を綺麗に見やすくする画像補正や、気になる単語や箇所をチェックできるマーカー機能等を搭載しており、スクラップした記事を快適に読むことが可能だ。

-

それだけでなく、CUTPENはAIとアルゴリズムを活用することで、新聞記事のデータ化も簡単にできるようになった。

-1904213 -

スクラップした記事は文字を認識して重要キーワードを抽出するだけでなく、インターネットから関連情報を表示することができる。これにより、気になった記事を深く把握することが容易になるというわけだ。

-

CUTPENは専用ボールペンにスマートフォンアプリの全機能が使用できるシリアルIDを付属。対応OSはiOS8以降を搭載したiPhone5S以降のスマートフォン。価格は1年間分のシリアルコード付きで850円(税抜き)

-
- -
- -
-
-
- - - - -
-NeoL/ネオエルの記事一覧をみる - -
    -
  • 誤字を発見した方はこちらからご連絡ください。 -
  • ガジェット通信編集部への情報提供はこちらから -
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。 -
-
-
    -
  • - -
  • -- -
  • - -
  • - -
  • - -
  • - -
  • - -
-
-
- - -
-
- -
- -
- - - - - - - - - - - - - diff --git a/fixtures/github.com.html b/fixtures/github.com.html new file mode 100644 index 000000000..c0f8d3049 --- /dev/null +++ b/fixtures/github.com.html @@ -0,0 +1,3025 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + steventroughtonsmith/marzipanify: Convert an iOS Simulator app bundle to an iOSMac (Marzipan) one (Unsupported & undocumented, WIP) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + steventroughtonsmith  /   + marzipanify  /   + +
+
+ + + +
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + +
+ + +
+
+
+ + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + marzipanify + + + Public +
+ + +
+ +
    + + + +
  • + +
    + + + + + + + Watch + + + 24 + + + +
    +
    +

    Notifications

    + +
    + +
    +
    + + + + + + + + +
    + + +
    + + + + + Get push notifications on iOS or Android. + +
    +
    +
    +
    + + + + +
    +
    +
    + + + +
  • + +
  • +
    + Fork + 50 + +
    + + + +
    + +
    +
    + + + + + + + +
    + +
    +
    +
    +
    +
  • + +
  • + + +
    +
    + + +
    +
    + +
    + + + +
    + +
    +
    + + + + + + + +
    + +
    +
    +
    +
    +
    +
  • + + + +
+ +
+ +
+
+

+ Convert an iOS Simulator app bundle to an iOSMac (Marzipan) one (Unsupported & undocumented, WIP) +

+ +

License

+ + + + + +
+
+ + +
+
+ + +
+
+ +
+
+
+ +
+ + + + + + + Watch + + + + + +
+
+

Notifications

+ +
+ +
+
+ + + + + + + + +
+ + +
+ + + + + Get push notifications on iOS or Android. + +
+
+
+
+ + + + +
+
+
+ + + +
+
+
+ +
+ + + + + + +
+ + + + +
+ Open in github.dev + Open in a new github.dev tab + + + + + + +

steventroughtonsmith/marzipanify

+
+ + +
+ + +
+ +
+ + + + + + + +
+
+ + +
+ +
+
+ + + master + + + + +
+
+
+ Switch branches/tags + +
+ + + +
+ +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+ + + + +
+ + + Go to file + +
+ + Add file + + + + + + + + +
+
+
+ + + + + + + +
+ Code +
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + +
+
+

Latest commit

+
+ + +
+ +
+
+ + @steventroughtonsmith +
+
+ +
+ +
+ +
Update for building with Xcode 11
+
+ 3735276 +
+
+
+

Git stats

+ +
+
+
+

Files

+ + + + + + + Permalink + +
+ + + Failed to load latest commit information. + + + +
+
+
+
Type
+
Name
+
Latest commit message
+
Commit time
+
+ + +
+
+ +
+ + + + + +
+ 2 years ago +
+ +
+
+
+ +
+ + + + + +
+ 4 years ago +
+ +
+
+
+ +
+ +
+ README.md +
+ + + +
+ 4 years ago +
+ +
+
+ +
+ + + + + + +
+ + + + +
+ +
+
+ + +

+ README.md +

+
+
+ +
+

marzipanify

+

marzipanify is an unsupported commandline tool to take an existing iOS Simulator binary (with minimum deployment target of iOS 12.0) and statically convert it and its embedded libraries & frameworks to run on macOS 10.14's UIKit runtime (Marzipan).

+

This isn't a tool to automatically port your iOS app to the Mac — moreso something to get you up and running quickly.

+

As an iOS Simulator app links against the iOS Simulator version of UIKit, it won't contain Marzipan-specific APIs like menu & window toolbar support. It's up to the user to know how to class-dump UIKitCore from /System/iOSSupport/System/Library/PrivateFrameworks and check for the macOS-specific UIKit APIs at runtime so the app can be a good Mac citizen.

+

N.B. You will still need all the relevant Marzipan-related enabler steps (like disabling SIP & AMFI) before a converted app will run with your signature.

+

Usage

+

marzipanify MyApp.app|MyFramework.framework|MyBinary

+

Screenshot

+

screenshot

+
+
+
+ +
+ + +
+
+ +
+
+
+

About

+ +

+ Convert an iOS Simulator app bundle to an iOSMac (Marzipan) one (Unsupported & undocumented, WIP) +

+ + +

Resources

+ + +

License

+ + + + + + + +

Stars

+ + +

Watchers

+ + +

Forks

+ + +
+
+ + + +
+
+

+ + Releases +

+ +
No releases published
+ +
+
+ + + +
+
+

+ + Packages +

+ + +
+ No packages published
+
+ + + +
+
+ + + + + + + + + +
+
+

Languages

+
+ + +
+ + +
+
+
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ diff --git a/fixtures/github.com/1551742565097.html b/fixtures/github.com/1551742565097.html deleted file mode 100644 index 4cd4c6160..000000000 --- a/fixtures/github.com/1551742565097.html +++ /dev/null @@ -1,822 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GitHub - steventroughtonsmith/marzipanify: Convert an iOS Simulator app bundle to an iOSMac (Marzipan) one (Unsupported & undocumented, WIP) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - -
-
- -
-
-
Please note that GitHub no longer supports your web browser.
-

We recommend upgrading to the latest Google Chrome or Firefox.

-
- -
-
-
- - - - - - -
- -
- -
- -
- - - -
-
-
- - - - - - - - -
-
- - - - - - -
- - Convert an iOS Simulator app bundle to an iOSMac (Marzipan) one (Unsupported & undocumented, WIP) - -
-
- - - - - - - - - - - - - -
- -
- - Branch: - master - - - - - - - -
- - - - - - - - - -
- - Clone or download - - -
- -
-
- -
- - - - - -
- -
-
- - @steventroughtonsmith -
-
- - -
- Latest commit - - c61eae8 - - Mar 4, 2019 -
-
- - - -
- Permalink - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameLatest commit messageCommit time
Failed to load latest commit information.
- - - - marzipanify.xcodeproj - - - Added a little more context for incompatible binaries now that 10.14b… - - - Jul 4, 2018 -
- - - - marzipanify - - - Merge pull request #2 from AndrianBdn/master - - - Jul 12, 2018 -
- - - - LICENSE.md - - - Added Unlicense license - - - Mar 4, 2019 -
- - - - README.md - - - Create README.md - - - Jul 3, 2018 -
- -
- - - -
-
-

- - README.md -

-
-
-

marzipanify

-

marzipanify is an unsupported commandline tool to take an existing iOS Simulator binary (with minimum deployment target of iOS 12.0) and statically convert it and its embedded libraries & frameworks to run on macOS 10.14's UIKit runtime (Marzipan).

-

This isn't a tool to automatically port your iOS app to the Mac — moreso something to get you up and running quickly.

-

As an iOS Simulator app links against the iOS Simulator version of UIKit, it won't contain Marzipan-specific APIs like menu & window toolbar support. It's up to the user to know how to class-dump UIKitCore from /System/iOSSupport/System/Library/PrivateFrameworks and check for the macOS-specific UIKit APIs at runtime so the app can be a good Mac citizen.

-

N.B. You will still need all the relevant Marzipan-related enabler steps (like disabling SIP & AMFI) before a converted app will run with your signature.

-

Usage

-

marzipanify MyApp.app|MyFramework.framework|MyBinary

-

Screenshot

-

screenshot

-
-
-
- - - -
- -
- -
-
- - -
- - - - - - -
- - - You can’t perform that action at this time. -
- - - -
- - You signed in with another tab or window. Reload to refresh your session. - You signed out in another tab or window. Reload to refresh your session. -
- - - - -
- - - - diff --git a/fixtures/gothamist.com.html b/fixtures/gothamist.com.html new file mode 100644 index 000000000..4efdd0a0e --- /dev/null +++ b/fixtures/gothamist.com.html @@ -0,0 +1,1060 @@ + + + + + Helter Shelter: NYC's Fallout Shelters Basically Don't Exist Anymore - Gothamist + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ Advertisement +
+
+
+ +
+
+
+
+
+
+ +
+

Helter Shelter: NYC's Fallout Shelters Basically Don't Exist Anymore +

+ +
+ +
+
+
+
+
The basement at 80 New York Avenue in Crown Heights is one of many once-certified fallout shelters that you probably wouldn't want to spend much time in.
+
+
+

+ The basement at 80 New York Avenue in Crown Heights is one of many once-certified fallout + shelters that you probably wouldn't want to spend much time in. +

+
+
+
+
+ arrow + + +
+
+ The basement at 80 New York Avenue in Crown Heights is one of many once-certified fallout + shelters that you probably wouldn't want to spend much time in. +
+ Scott Heins/Gothamist + +
+
+
+
+
+
+
+
+
+

+

+

You've seen the placards around town, beside the front door on apartment buildings, post + offices, and schools. 50 years ago, when Nelson A. Rockefeller was governor and fear of imminent + nuclear annihilation was running high, New York boasted tens of thousands, possibly even + hundreds of thousands—no one is exactly sure—of nuclear fallout shelters. 2017 is + not exactly Cold War Pt. II, but now that some Democrats are suddenly intent on saber-rattling with Russia and the newly + elected president is a longtime conspiracy + theorist who as + commander-in-chief has repeatedly called for expanding the U.S.'s nuke + arsenal, you'd be forgiven for having a bit more of a paranoid mindset at the moment.

+

So what shape are these shelters in? Exactly how safe would we be in the event of some sort of + nuclear attack?

+

+
170307AtomicWarNYC1.jpg
Propaganda looked cooler in 1952. + (Public domain)
+

The "good news," and one of the many reasons the fallout shelter program was + scrapped, is that New York is the U.S.'s densest and most populous urban center and, as + such, would be high on the list of targets for a nuclear attack. In other words, if the U.S. was + attacked by one of the world's nuclear superpowers, rather than having to hide out + underground for weeks, then trek through the irradiated landscape ducking air strikes and + keeping up with the doings of the remaining members of the Freedom Caucus operating out of a + shipping container in Annapolis, we'd probably all be vaporized instantly.

+

+

But what if somebody dropped a smaller bomb, or New York somehow dodged the bullet?

+

First, it's probably good to have some background.

+

In the late 1950s and early 1960s, paranoia ran so high that the feds conducted compulsory air raid drills around the country, including in + New York City, having police arrest those who refused to duck inside when the sirens sounded. + John F. Kennedy created a nationwide shelter program as president in 1961, and in 1963, the + Cuban missile crisis kicked off the proliferation of shelters in the city in earnest.

+

Under the program, inspectors surveyed buildings to see if they could withstand the + after-effects of a nuclear blast. In the beginning, identifying and certifying shelters was the + domain of local civil defense authorities. Once certified, the government would provide a + placard and some goodies to tide over the huddled masses.

+

By 1963, as the New York Times explains:

+
+

[T]he Army Corps of Engineers had identified 17,448 buildings with shelter spaces that could + accommodate a total of 11,703,090 New Yorkers. The spaces were equipped with federally + provided survival kits -- costing roughly $2.40 per person -- that featured aspirin, toilet + paper, tongue depressors, appetite-suppressing hard candies and ''Civil Defense + Survival Rations,'' i.e., animal crackerlike biscuits. + +

+

While most landlords took part in the fallout shelter drive, even they still had to navigate + bureaucracy. By 1966, the city's civil defense director found that most of the shelters + had no supplies. ''Personally, I have grave doubts that shelter-stocking is a + meaningful answer for New York City in the event of nuclear war,'' he said.

+

Money was a key issue. Early on in the cold war, the federal government had decided not to + build mass bomb shelters in urban areas, opting instead to promote the suburban backyard + shelter.

+
+

+

+
170308NelsonARockefeller.jpg
As governor of New York, Nelson A. Rockefeller was big on fallout + shelters. (Harry Benson/Getty)
+

+

Rockefeller was a big proponent of shelters, so much so that he reportedly had shelters built + under the Executive Mansion in Albany, and at his homes in Maine and Westchester County, as well as his three-story + apartment on Fifth Avenue overlooking Central Park (representatives of two of the former + Rockefeller estates in Westchester say they are unaware of such a shelter on the grounds of + either). As governor, Rockefeller was able to shake loose $15 million in state funding for + shelters, but the program was still essentially based on building owners opting in.

+

The results, according to Jeff Schlegelmilch, deputy director of the National Center for + Disaster Preparedness at the Earth Institute of Columbia University, were mixed.

+

"An ideal shelter would be a room enclosed in a building, no windows or anything like + that. It would basically keep certain kinds of radiation from penetrating," he said. + "So if you're in a big concrete building, something towards the center. Some of the + more advanced ones would have a ventilation system, some of them would have sleeping areas, and + food and water on shelves."

+

However, there were no federal standards that Schlegelmilch has been able to find in his + research, and there was not a lot of communication between local defense authorities.

+

"It's all over the map in terms of how well they were designed," he said. + "I've heard stories of some where they were in the basement with sewage pipes dripping + down and rats running around...The public ones are probably just large enclosed spaces where + they're able to accommodate a large number of people in a very municipal fashion."

+

+
170308CooperStationFalloutShelter.jpg
The Cooper Station post office's fallout shelter is now + a mail room. (Robbing Peter/Flickr)
+

+

Shelters that could accommodate thousands included ones under the Cooper Station post office, on the 43rd + floor of the Waldorf Astoria (!), under the Lindsay Park cooperative complex in Williamsburg, + and under the Chase Manhattan headquarters at 28 Liberty Street. We tried getting access to + these neat-sounding spaces, without luck, but a Postal Service spokesman informs us that the + basement space at Cooper Station has been turned over to mail operations. Rockefeller's + Manhattan apartment has been carved up, and we couldn't reach the owners, nor could we get + the Chinese investors who own the Waldorf or the Liberty Street building. As a general rule, + Schlegelmilch pointed out, Manhattan floorspace doesn't stay vacant for long.

+

In 2006, workers fixing the Brooklyn Bridge stumbled into a + vault stocked with boxes of high-calorie crackers and water barrels that could be reused as + toilets. The Department of Transportation wouldn't let us take a peek at that space, + either. The DOT says it has donated the goods to a civil defense museum (spokespeople + wouldn't specify which one).

+

We did get access to the fallout-shelter-designated basement at 80 New + York Avenue in Crown Heights, where tenants are in a pitched but unrelated battle with + their landlords, and what we found did not exactly inspire confidence.

+

"I don't think we would last very long," said resident Nathan Pensler, looking + around the half-finished space. "I could see a lot of downsides."

+

For one, the basement is actually a sub-basement, with windows coming around three feet down + from the ceiling. If there was an enclosed concrete room down there once, it's not there + now. Now storage for bicycles, construction materials, and some non-working washing machines, + the basement also takes on water when it rains, possibly through an air-shaft that inexplicably + has wires strung up through it. The cellar has served as shelter for at least one person, + though: Pensler said that until recently, a door to the basement didn't lock and a homeless + man took up residence down there. He seems to have left behind a cellphone and two suitcases. +

+

+
030717FalloutShelter80NY-21.jpg
The basement at 80 New York. (Scott Heins/Gothamist) +
+

+

Before my visit, Pensler hadn't given the role of the space in a nuclear holocaust much + thought.

+

"I remember seeing the [fallout shelter] sign and thinking, 'That looks like the kind + of sign that somebody would steal and put in their bedroom,'" he said. + "That's literally the only thing I've thought about it."

+

Most city fallout shelters seem to have shared the same fate—even if they were once + fully stocked with All-Purpose Survival Crackers and barrel commodes, they've long since + been returned to use as laundry rooms, storage areas, and illegal basement apartments. Even in + 1976, the shelters were largely forgotten. A Times reporter surveying them that year described them in bemused, + hey-didja-know-about-this-old-thing terms:

+
+

Of course, the shelter areas could, if worse came to worse, still be used. But the Government + makes no effort to keep them supplied with food or other necessities. And officials no longer + keep an up‐to‐date list. If, for example, a building is torn down, the + Government has no record to indicate the loss of a designated shelter.

+
+

In the years leading up to that story, the city, defense authorities, and federal government, + lacking money to restock the shelters, had faced bureaucratic hurdles in trying to sell off or donate the food—a lot had already gone + bad—medical supplies, and toilet paper, which were technically government property and + subject to stringent rules. In 1975, the city sent workers into 13,000 shelters to take + the phenobarbital (downers) out of first aid kits, because junkies and good-time seekers had + been breaking in and stealing the drugs. The feds did eventually consolidate control over the + civil defense authorities into a central agency, but by 1969, Congress stopped appropriating + money for the program, and in 1979, that agency was formally disbanded. Nobody much noticed. +

+

In addition to questions about the wisdom of pouring millions of dollars into urban + infrastructure that was likely to be annihilated, as fallout shelters fell out of favor, experts + began to question the psychological repercussions of large groups of people living in a small + space for an extended period of time.

+

"Even if you are lucky enough that you were able to get to a fallout shelter and it was in + the zone where it was protected but not in the fireball of the explosion itself, you then had to + live in very confined spaces for what could be a couple of weeks," Schlegelmilch said.

+

+
170307HBombCircumferenceADayCalledX1.jpg
A still from the 1957 TV movie A Day Called X, about + a nuclear attack on Portland, Oregon. (Boing Boing)
+

+

Nowadays, federal disaster officials advise survivors near nuclear bomb blasts to shelter in + place to avoid fallout—the further down and towards the center of the building the + better—and evacuate at a time to be announced by officials based on the post-nuke + conditions. The official guidelines on this stuff make for hair-raising reading. For + example:

+
+

Outside of the most hazardous areas of the [Dangerous Fallout] zone, early evacuation (t < + 24 hours) should be discouraged by response officials. However, guidance can be provided to + those who choose to evacuate in spite of these warnings. Information concerning route + conditions (e.g., rubble and debris in streets, collapsed bridges, and other obstacles to + mobility) will assist those who decide to evacuate, and perhaps dissuade those who might + choose a risky departure from shelter. When planned evacuations are initiated, these should be + staged. Attempting to evacuate an excessively large area could divert resources from the + higher dose rate regions closer to the detonation that deserve the greatest attention. A + poorly planned evacuation could result in excessive radiation dose and even unnecessary + fatalities due to radiation or other unforeseen hazards.

+
+

Schlegelmilch said that the information the disaster preparedness information the feds have + compiled and made publicly available is solid, but public awareness is sorely lacking.

+

"The availability of information isn’t the issue, it’s having a conversation + about it," he said, adding, "How would you as a City Council member or as a mayor say, + 'Hey, let's talk about what our city would do in the event of a nuclear + attack'?...These are extremely rare, extremely unlikely, but extremely high-consequence + events...And then layering in all the added politics with nuclear proliferation and terrorism + and election cycles just makes it that much harder to have that conversation."

+

For what it's worth, Schlegelmilch says there are roughly three tiers of nuclear attacks: + those carried out with the largest nuclear weapons, possessed only by state actors, which + "would basically wipe out the whole city"; nuclear bombs that are 10 kilotons or + smaller, including suitcase bombs, which could outright destroy several blocks + to several square miles of the city; and so-called dirty bombs, which would do a relatively + small amount of damage but throw off some radiation. Also, the Indian Point nuclear power plant is 20 miles + north of the Bronx and notoriously creaky. It is on track to be closed down by 2021.

+

The immediate reaction to officials broaching the subject of nuclear preparedness, + Schlegelmilch said, is, "What do you know that I don't know?" Well, now at least + you know what's going on with those placards on buildings.

+
+
+
+
+
+
+
+
+

+ NYC news never sleeps. Get the Gothamist Daily newsletter and don't miss a moment. +

+
+ +
Do you know the + scoop? + Comment + + below or + Send us a Tip +
+
+
+
+
+ +
+
+
+
+
+

+ Recent in News +

+ +
+
+ +
+ +
+
+
+ +
+
+

+ Featured in News +

+
+
+ +
+ "It puts more of a burden on New York — puts more of a burden on 49 other + states." +
+
+ +
+
+
+
+
+
+
+ Read More In: +
+ +
+
+
+
+
+
+ arrow + + Back To Top + + +
+
+
+
+
+ + + \ No newline at end of file diff --git a/fixtures/gothamist.com/1489073770258.html b/fixtures/gothamist.com/1489073770258.html deleted file mode 100644 index 9373449f0..000000000 --- a/fixtures/gothamist.com/1489073770258.html +++ /dev/null @@ -1,442 +0,0 @@ - - - - - Helter Shelter: NYC's Fallout Shelters Basically Don't Exist Anymore: Gothamist - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
-
- - -
-
-
-
-
- -
-
-
- - - -
-
-
-
-
-
- -
-
- -
- - - - - - - -
-
-
-
-
- - - -
-
-
- -
-
-
-
-
-
-
- - - -
-

Helter Shelter: NYC's Fallout Shelters Basically Don't Exist Anymore

- -
- -
-
-
-
-
- -
-
-
- -
-
-
-

030717FalloutShelter80NY-5.jpg
The basement at 80 New York Avenue in Crown Heights is one of many once-certified fallout shelters that you probably wouldn't want to spend much time in. (Scott Heins/Gothamist)

- -

You've seen the placards around town, beside the front door on apartment buildings, post offices, and schools. 50 years ago, when Nelson A. Rockefeller was governor and fear of imminent nuclear annihilation was running high, New York boasted tens of thousands, possibly even hundreds of thousands—no one is exactly sure—of nuclear fallout shelters. 2017 is not exactly Cold War Pt. II, but now that some Democrats are suddenly intent on saber-rattling with Russia and the newly elected president is a longtime conspiracy theorist who as commander-in-chief has repeatedly called for expanding the U.S.'s nuke arsenal, you'd be forgiven for having a bit more of a paranoid mindset at the moment.

- -

So what shape are these shelters in? Exactly how safe would we be in the event of some sort of nuclear attack?

- -

170307AtomicWarNYC1.jpg
Propaganda looked cooler in 1952. (Public domain)
The "good news," and one of the many reasons the fallout shelter program was scrapped, is that New York is the U.S.'s densest and most populous urban center and, as such, would be high on the list of targets for a nuclear attack. In other words, if the U.S. was attacked by one of the world's nuclear superpowers, rather than having to hide out underground for weeks, then trek through the irradiated landscape ducking air strikes and keeping up with the doings of the remaining members of the Freedom Caucus operating out of a shipping container in Annapolis, we'd probably all be vaporized instantly.

- -

But what if somebody dropped a smaller bomb, or New York somehow dodged the bullet?

- -

First, it's probably good to have some background.

- -

In the late 1950s and early 1960s, paranoia ran so high that the feds conducted compulsory air raid drills around the country, including in New York City, having police arrest those who refused to duck inside when the sirens sounded. John F. Kennedy created a nationwide shelter program as president in 1961, and in 1963, the Cuban missile crisis kicked off the proliferation of shelters in the city in earnest.

- -

Under the program, inspectors surveyed buildings to see if they could withstand the after-effects of a nuclear blast. In the beginning, identifying and certifying shelters was the domain of local civil defense authorities. Once certified, the government would provide a placard and some goodies to tide over the huddled masses.

- -

By 1963, as the New York Times explains:

- -
[T]he Army Corps of Engineers had identified 17,448 buildings with shelter spaces that could accommodate a total of 11,703,090 New Yorkers. The spaces were equipped with federally provided survival kits -- costing roughly $2.40 per person -- that featured aspirin, toilet paper, tongue depressors, appetite-suppressing hard candies and ''Civil Defense Survival Rations,'' i.e., animal crackerlike biscuits. - -

While most landlords took part in the fallout shelter drive, even they still had to navigate bureaucracy. By 1966, the city's civil defense director found that most of the shelters had no supplies. ''Personally, I have grave doubts that shelter-stocking is a meaningful answer for New York City in the event of nuclear war,'' he said.

- -

Money was a key issue. Early on in the cold war, the federal government had decided not to build mass bomb shelters in urban areas, opting instead to promote the suburban backyard shelter.
-

- -

170308NelsonARockefeller.jpg
As governor of New York, Nelson A. Rockefeller was big on fallout shelters. (Harry Benson/Getty)

- -

Rockefeller was a big proponent of shelters, so much so that he reportedly had shelters built under the Executive Mansion in Albany, and at his homes in Maine and Westchester County, as well as his three-story apartment on Fifth Avenue overlooking Central Park (representatives of two of the former Rockefeller estates in Westchester say they are unaware of such a shelter on the grounds of either). As governor, Rockefeller was able to shake loose $15 million in state funding for shelters, but the program was still essentially based on building owners opting in.

- -

The results, according to Jeff Schlegelmilch, deputy director of the National Center for Disaster Preparedness at the Earth Institute of Columbia University, were mixed.

- -

"An ideal shelter would be a room enclosed in a building, no windows or anything like that. It would basically keep certain kinds of radiation from penetrating," he said. "So if you're in a big concrete building, something towards the center. Some of the more advanced ones would have a ventilation system, some of them would have sleeping areas, and food and water on shelves."

- -

However, there were no federal standards that Schlegelmilch has been able to find in his research, and there was not a lot of communication between local defense authorities.

- -

"It's all over the map in terms of how well they were designed," he said. "I've heard stories of some where they were in the basement with sewage pipes dripping down and rats running around...The public ones are probably just large enclosed spaces where they're able to accommodate a large number of people in a very municipal fashion."

- -

170308CooperStationFalloutShelter.jpg
The Cooper Station post office's fallout shelter is now a mail room. (Robbing Peter/Flickr)

- -

Shelters that could accommodate thousands included ones under the Cooper Station post office, on the 43rd floor of the Waldorf Astoria (!), under the Lindsay Park cooperative complex in Williamsburg, and under the Chase Manhattan headquarters at 28 Liberty Street. We tried getting access to these neat-sounding spaces, without luck, but a Postal Service spokesman informs us that the basement space at Cooper Station has been turned over to mail operations. Rockefeller's Manhattan apartment has been carved up, and we couldn't reach the owners, nor could we get the Chinese investors who own the Waldorf or the Liberty Street building. As a general rule, Schlegelmilch pointed out, Manhattan floorspace doesn't stay vacant for long.

- -

In 2006, workers fixing the Brooklyn Bridge stumbled into a vault stocked with boxes of high-calorie crackers and water barrels that could be reused as toilets. The Department of Transportation wouldn't let us take a peek at that space, either. The DOT says it has donated the goods to a civil defense museum (spokespeople wouldn't specify which one).

- -

We did get access to the fallout-shelter-designated basement at 80 New York Avenue in Crown Heights, where tenants are in a pitched but unrelated battle with their landlords, and what we found did not exactly inspire confidence.

- -

"I don't think we would last very long," said resident Nathan Pensler, looking around the half-finished space. "I could see a lot of downsides."

- -

For one, the basement is actually a sub-basement, with windows coming around three feet down from the ceiling. If there was an enclosed concrete room down there once, it's not there now. Now storage for bicycles, construction materials, and some non-working washing machines, the basement also takes on water when it rains, possibly through an air-shaft that inexplicably has wires strung up through it. The cellar has served as shelter for at least one person, though: Pensler said that until recently, a door to the basement didn't lock and a homeless man took up residence down there. He seems to have left behind a cellphone and two suitcases.

- -

030717FalloutShelter80NY-21.jpg
The basement at 80 New York. (Scott Heins/Gothamist)

- -

Before my visit, Pensler hadn't given the role of the space in a nuclear holocaust much thought.

- -

"I remember seeing the [fallout shelter] sign and thinking, 'That looks like the kind of sign that somebody would steal and put in their bedroom,'" he said. "That's literally the only thing I've thought about it."

- -

Most city fallout shelters seem to have shared the same fate—even if they were once fully stocked with All-Purpose Survival Crackers and barrel commodes, they've long since been returned to use as laundry rooms, storage areas, and illegal basement apartments. Even in 1976, the shelters were largely forgotten. A Times reporter surveying them that year described them in bemused, hey-didja-know-about-this-old-thing terms:

- -
Of course, the shelter areas could, if worse came to worse, still be used. But the Government makes no effort to keep them supplied with food or other necessities. And officials no longer keep an up‐to‐date list. If, for example, a building is torn down, the Government has no record to indicate the loss of a designated shelter.
- -

In the years leading up to that story, the city, defense authorities, and federal government, lacking money to restock the shelters, had faced bureaucratic hurdles in trying to sell off or donate the food—at lot had already gone bad—medical supplies, and toilet paper, which were technically government property and subject to stringent rules. In 1975, the city sent workers into 13,000 shelters to take the phenobarbital (downers) out of first aid kits, because junkies and good-time seekers had been breaking in and stealing the drugs. The feds did eventually consolidate control over the civil defense authorities into a central agency, but by 1969, Congress stopped appropriating money for the program, and in 1979, that agency was formally disbanded. Nobody much noticed.

- -

In addition to questions about the wisdom of pouring millions of dollars into urban infrastructure that was likely to be annihilated, as fallout shelters fell out of favor, experts began to question the psychological repercussions of large groups of people living in a small space for an extended period of time.

- -

"Even if you are lucky enough that you were able to get to a fallout shelter and it was in the zone where it was protected but not in the fireball of the explosion itself, you then had to live in very confined spaces for what could be a couple of weeks," Schlegelmilch said.

- -

170307HBombCircumferenceADayCalledX1.jpg
A still from the 1957 TV movie A Day Called X, about a nuclear attack on Portland, Oregon. (Boing Boing)

- -

Federal disaster officials now advise survivors near nuclear bomb blasts to shelter in place to avoid fallout—the further down and towards the center of the building the better—and evacuate at a time to be announced by officials based on the post-nuke conditions. The official guidelines on this stuff make for hair-raising reading. For example:

- -
Outside of the most hazardous areas of the [Dangerous Fallout] zone, early evacuation (t < 24 hours) should be discouraged by response officials. However, guidance can be provided to those who choose to evacuate in spite of these warnings. Information concerning route conditions (e.g., rubble and debris in streets, collapsed bridges, and other obstacles to mobility) will assist those who decide to evacuate, and perhaps dissuade those who might choose a risky departure from shelter. When planned evacuations are initiated, these should be staged. Attempting to evacuate an excessively large area could divert resources from the higher dose rate regions closer to the detonation that deserve the greatest attention. A poorly planned evacuation could result in excessive radiation dose and even unnecessary fatalities due to radiation or other unforeseen hazards.
- -

Schlegelmilch said that the information the disaster preparedness information the feds have compiled and made publicly available is solid, but public awareness is sorely lacking.

- -

"The availability of information isn’t the issue, it’s having a conversation about it," he said, adding, "How would you as a City Council member or as a mayor say, 'Hey, let's talk about what our city would do in the event of a nuclear attack'?...These are extremely rare, extremely unlikely, but extremely high-consequence events...And then layering in all the added politics with nuclear proliferation and terrorism and election cycles just makes it that much harder to have that conversation."

- -

For what it's worth, Schlegelmilch says there are roughly three tiers of nuclear attacks: those carried out with the largest nuclear weapons, possessed only by state actors, which "would basically wipe out the whole city"; nuclear bombs that are 10 kilotons or smaller, including suitcase bombs, which could outright destroy several blocks to several square miles of the city; and so-called dirty bombs, which would do a relatively small amount of damage but throw off some radiation. Also, the Indian Point nuclear power plant is 20 miles north of the Bronx and notoriously creaky. It is on track to be closed down by 2021.

- -

The immediate reaction to officials broaching the subject of nuclear preparedness, Schlegelmilch said, is, "What do you know that I don't know?" Well, now at least you know what's going on with those placards on buildings.

- - -
-
- - - -
- - - -
-
- -
-
- - -
- - - -
- - - -
- - -
-
- -
-
-
- -
-
-
-
- -
-
-
- - -
-
- - -
- - - - - - diff --git a/fixtures/hellogiggles.com.html b/fixtures/hellogiggles.com.html new file mode 100644 index 000000000..55bcf3fe1 --- /dev/null +++ b/fixtures/hellogiggles.com.html @@ -0,0 +1,1613 @@ + + + + + + + + + Your comfy-chic holiday outfit, illustrated - HelloGigglesHelloGiggles + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + +
+
+
+
+

Your comfy-chic holiday outfit, illustrated

+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+

It’s almost that time! The time to quietly panic and throw all the clothing you own into a massive pile + on your mattress because you’re unsure of what to wear for all the holiday parties and dinners coming + up, that is. If you live in most places in the Northern Hemisphere, you’re probably really cold and + dreading wearing anything that isn’t heavy fleece. And just the thought of wearing a dress (even with + tights!) is most likely making you SOB right now, and we get it.

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
00:38 / 01:22
+
+
+
+
+
+
+
+
Holiday and Christmas Shopping
+
+
+
+
+
+ +

Which is why we put together an illustrated guide for all your holiday party and life needs!

+
+

HG-Xmas-NY-Cindy-Mangomini1.jpg

+

Shop the illustration here:

+

1. Wrap blouse, Net-A-Porter, + $167

+

2. Feline festive socks, Modcloth, $8

+

3. Wedgie fit jeans, Levi’s, $89.50 +

+

4. Christmas tree mug, Etsy, + $8

+

5. Vila real leather mittens, ASOS, + $30

+

6. Green faux suede heels, Go + Jane, $29

+

7. Holiday earrings, Kohl’s, + $7

+
+ + + +
+ +
+
+
+ + + + +
+
+
+ +
+ +
+
+ +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/fixtures/hellogiggles.com/1482437663500.html b/fixtures/hellogiggles.com/1482437663500.html deleted file mode 100644 index 64a2c5d00..000000000 --- a/fixtures/hellogiggles.com/1482437663500.html +++ /dev/null @@ -1,234 +0,0 @@ - Your comfy-chic holiday outfit, illustrated Your comfy-chic holiday outfit, illustrated
— Mangomini's Illustrated How-Tos

Your comfy-chic holiday outfit, illustrated

It’s almost that time! The time to quietly panic and throw all the clothing you own into a massive pile on your mattress because you’re unsure of what to wear for all the holiday parties and dinners coming up, that is. If you live in most places in the Northern Hemisphere, you’re probably really cold and dreading wearing anything that isn’t heavy fleece. And just the thought of wearing a dress (even with tights!) is most likely making you SOB right now, and we get it.

Which is why we put together an illustrated guide for all your holiday party and life needs!

hg-xmas-ny-cindy-mangomini
Cindy Mangomini

Shop the illustration here:

1. Wrap blouse, Net-A-Porter, $167

2. Feline festive socks, Modcloth, $8

3. Wedgie fit jeans, Levi’s, $89.50

4. Christmas tree mug, Etsy, $8

5. Vila real leather mittens, ASOS, $30

6. Green faux suede heels, Go Jane, $29

7. Holiday earrings, Kohl’s, $7

\ No newline at end of file diff --git a/fixtures/ici.radio-canada.ca.html b/fixtures/ici.radio-canada.ca.html new file mode 100644 index 000000000..3e70fede3 --- /dev/null +++ b/fixtures/ici.radio-canada.ca.html @@ -0,0 +1,57 @@ + + + + + Affaire KPMG : un juge se récuse | Radio-Canada.ca + + + + + + + + + + + + + +

Vous naviguez sur le site de Radio-Canada

Aide à la navigation
Début du contenu principal
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Affaire KPMG : un juge se récuse

Le juge Randall Bocock se retire d'une cause liée à KPMG.

Le juge Randall Bocock se retire d'une cause liée à KPMG.

Photo : Radio-Canada

Radio-Canada
Prenez note que cet article publié en 2017 pourrait contenir des informations qui ne sont plus à jour.

Un juge de la Cour de l'impôt se récuse d'un dossier mettant en cause un stratagème du cabinet comptable KPMG. Selon les émissions Enquête et The Fifth Estate, le juge Bocock avait participé à une soirée cocktail organisée par un cabinet d'avocats lié à l'affaire.

Un texte de Frédéric Zalac d'Enquête

+

Jusqu’à la semaine dernière, le juge Randall Bocock gérait la seule cause devant la Cour de l’impôt concernant le stratagème mis au point par KPMG qui consistait à permettre à des gens d’affaires canadiens de cacher des actifs derrière une société de l’île de Man, un paradis fiscal situé entre l’Irlande et l’Angleterre.

+

Les autorités fiscales ont imposé 6 millions de dollars en pénalités à une famille de Victoria, les Cooper, qui a fait appel de cette décision devant le tribunal.

+
+

Lors du congrès de l’Association de fiscalité internationale à Madrid en septembre dernier, le juge Bocock a assisté à une soirée privée sur une des terrasses les plus exclusives de la capitale espagnole. Les caméras de Radio-Canada l’ont filmé à sa sortie.

+

Ce cocktail privé était entièrement payé par Dentons, anciennement Fraser Milner, le cabinet d’avocats qui a fourni à KPMG un avis juridique validant son stratagème de l’île de Man en 1999. Selon l’Agence du revenu du Canada, ce stratagème visait à tromper le fisc.

+

« Même si on peut croire que le juge n’a eu aucune conversation dans ce cocktail [...], il ne doit pas se placer dans une situation où il risque d’être soumis à une influence ou même à une apparence d’influence », dit André Lareau, professeur en fiscalité à l’Université Laval.

+

La semaine dernière, le Conseil canadien de la magistrature a déposé une plainte contre le juge Bocock et deux autres juges canadiens dans la foulée du reportage d’Enquête.

+

« Dans les trois cas, il y aura un examen du Conseil sur les allégations ou la possibilité d’inconduite de la part de ces juges », a mentionné le directeur général du Conseil, Norman Sabourin.

+
+

Vous avez des renseignements à nous faire parvenir sur ce sujet? Vous pouvez joindre Frédéric Zalac par courriel à frederic.zalac@radio-canada.ca ou par téléphone au 604 662-6882.

+
+

Apparence de justice

+
+

Dans un document déposé en cour pour expliquer sa décision, le juge Bocock estime que l’enquête du Conseil canadien de la magistrature est suffisante pour qu’il se récuse. Il dit qu’il n’était pas au courant que le cabinet Dentons était lié à l’affaire KPMG.

+

« Ma conjointe et moi avons brièvement assisté à la réception qui était ouverte à tous les participants du congrès et à leurs invités », écrit-il. « J’étais conscient de tous ces faits mais j’ignorais que Fraser Milner (maintenant Dentons) était cité en référence dans les causes. »

+

Pourtant, le lien entre Dentons et l’affaire KPMG n’était pas un secret. Un article sur ce sujet  (Nouvelle fenêtre)avait été publié en juin dernier par CBC alors que le juge Bocock était déjà saisi du dossier.

+

Le juge Bocock ajoute qu’il est non seulement important que justice se fasse, mais aussi qu’il y ait apparence de justice.

+

« Bien que je n’aie pas eu encore à rendre de décisions relatives à ces causes, je pourrais être appelé à le faire à l’avenir. C’est une autre raison pour laquelle je me récuse. »

— Une citation de  +Le juge Randall Bocock +
+

C’est le juge en chef de la Cour de l’impôt, Eugene Rossiter, qui nommera un remplaçant au juge Bocock dans ce dossier. Or, le juge Rossiter fait lui-même l’objet d’une plainte du Conseil concernant des propos controversés qu’il a tenus au sujet de la participation de la magistrature à des soirées cocktail.

+

« Je peux vous dire qu’après que j’ai vu les reportages à Radio-Canada, j’ai décidé d’instituer une plainte, comme il est de mon devoir, en vertu de nos procédures, contre le juge en chef Rossiter et le juge Bocock », a mentionné Norman Sabourin.

+

Lors d’une conférence sur la fiscalité à Calgary en novembre dernier, loin de condamner la pratique, le juge en chef Rossiter l’a même encouragée. Il a dit qu’il allait lui-même continuer à assister à des réceptions.

+

« Nous mangerons de la pizza. Nous boirons du vin et nous en boirons beaucoup », a-t-il affirmé, suivi d’applaudissements.

+

Avant la diffusion du reportage, le juge en chef avait déclaré à CBC/Radio-Canada que « le juge Bocock ne s’est pas placé en situation de conflit d’intérêts en assistant brièvement à une réception ouverte à tous les participants de la conférence ».

+

Vos commentaires

Veuillez noter que Radio-Canada ne cautionne pas les opinions exprimées. Vos commentaires seront modérés, et publiés s’ils respectent la nétiquette. Bonne discussion !

+ \ No newline at end of file diff --git a/fixtures/ici.radio-canada.ca/1489433621634.html b/fixtures/ici.radio-canada.ca/1489433621634.html deleted file mode 100644 index 9e06e8e35..000000000 --- a/fixtures/ici.radio-canada.ca/1489433621634.html +++ /dev/null @@ -1,1530 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Affaire KPMG: un juge se récuse | ICI.Radio-Canada.ca - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Aller au menu principal -Aller au contenu principal - Aller au formulaire de recherche -Aller au pied de page - - - - - - -
- - - - - -
- - -
- - - - - - - -
- - - -
-
- - - - - - - - - - - - - - -
-
- -
-
- - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Affaire KPMG: un juge se récuse

- - -
- -
- - - - -
- Le juge Randall Bocock se retire d'une cause liée à KPMG - -
-Le juge Randall Bocock se retire d'une cause liée à KPMG Photo : Radio-Canada/Radio-Canada
-
-
- - - - - -
-
-
- -
- - - - - -
-
- - -
- - - - - - - - - -
- -
- -
- - -
- - - - - -
-

- - - - - Justice et faits divers en continu - - -

-
- - -
-
-
    -
  • -
  • -
-
-
- -
- - - - - - - - - -
- -
- -
- - -
-
-
-
- -
-
- - - - - - - -
-
-

-Justice et faits divers

-
- - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- - - - -
-
- - - - - - - - - - - - -
- - - - -
- - - - - - - - diff --git a/fixtures/japan.cnet.com.html b/fixtures/japan.cnet.com.html new file mode 100644 index 000000000..f34a75c72 --- /dev/null +++ b/fixtures/japan.cnet.com.html @@ -0,0 +1,948 @@ + + + + + + +セキュリティとAI進化の両立なるか?--Appleニュース一気読み - CNET Japan + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+ + + +
+
+ + logo + +
+
+ + CNET ID + + + +
+ + + +
+ + + + + + +
+ + + +
+ +
+ + + +
+ +
+
+
+

セキュリティとAI進化の両立なるか?--Appleニュース一気読み

+
+
+ + +
+ +
+
+
+ + +
+
+
+ +

 4月1日~4月7日のAppleに関連するCNET Japanのニュースをまとめた「今週のAppleニュース一気読み」。

+ +

 Appleは日本でも、プライバシーをテーマにしたコマーシャルを放映し始めた。iPhoneのプライバシー性能の高さを、街中で身近に起きうるプライバシーを守りたい場面を映し出しながら訴求する。毎日使うスマートフォンこそ、プライバシー性能を追求すべきと言うメッセージだ。

+ + +
+
+
+ + + +

 Appleは3月25日に開催したサービスに関する発表会でも、それぞれのサービスごとに必ず「プライバシーとセキュリティ」と書かれたスライドを掲出し、Appleはユーザーの視聴データを収集しないと繰り返しアピールしてきた。まるで、他のサービスはそうしている、と訴えているようでもあった。

+ +

 その一方で、シリコンバレーにおいては非常にコンサバティブと言えるユーザーデータの取り扱いの弊害として、人工知能アシスタントの発展の遅れが指摘されている。

+ +

 ユーザーデータをフル活用して賢くなる他のアシスタントに対して、Appleは匿名化やプライバシー製を除外する加工などを行うと同時に、ユーザーデータを極力デバイス、すなわちiPhoneから出さずに扱う方法に取り組んできた。

+ +

 この取り組みはSiriが登場する2年も前、2009年に発売されたiPhone 3GSの頃から、個人情報をデバイス内で処理する方針が、スティーブ・ジョブズによって方向付けられていたことになる。

+ +

 Appleはチップを内製化し、非常に高い処理能力と省電力性を両立するAシリーズのチップをiPhoneに搭載するようになった。2017年には機械学習処理を担当するニューラルエンジンが搭載され、2018年モデルのA12 Bionicでは毎秒5兆回の処理を行えるまでになった。

+ +

 こうして、中央集権的にクラウドにデータを集めなくても、優れた機械学習処理をiPhone内で行い、これを各アプリや人工知能アシスタントであるSiriを通じて活用できるように進めている真っ最中だ。

+ +

 例えば、iPhoneで撮影した写真は、キーワードで検索できるが、これはiPhoneの中で画像認識のモデルを走らせ、写真の被写体を解析してタグ付けした結果だ。機械学習処理はiPhoneが充電されている夜に行われるため、昼間のバッテリーの心配もいらないという。

+ +

 Appleは自社チップとそれを搭載するiPhoneで、エッジ、すなわちデバイス側で機械学習処理を行う体制を整えつつある。その上で、Appleは機械学習人材の獲得に動いてきた。

+ +

 2018年にはGoogleで検索・人工知能の責任者だったJohn Giannandrea氏を雇い入れたことで話題となったが、今度は同じくGoogleのシニア・スタッフ・リサーチ・サイエンティストで、機械学習モデルを訓練させるアルゴリズム「敵対的生成ネットワーク(GAN)」を発明したことで知られるIan Goodfellow氏を雇った模様だ。

+ +ログインせずにパーソナライズできるiPhoneの背景--アップルが取り組むプライバシー(4/4) +元グーグルのAI専門家イアン・グッドフェロー氏がアップルに入社(4/5) + +

Appleが目論む、Appleエコシステムの「外」

+ +

 Appleは3月25日のイベントで、雑誌の読み放題サービス「Apple News+」、ゲーム遊び放題サービス「Apple Arcade」、オリジナル映像作品見放題サービス「Apple TV+」を発表した。また、Apple Cardなるクレジットカードを発表した。

+ +

 筆者がこれらの発表を報じていく中で、どうしても個人的に払拭できない1つの『矛盾』があった。それは、iPhone脱却と言いながら、iPhoneの10億人のユーザーベースをアテにしている点だった。

+ +

 2019年第1四半期、Appleの売上高の6割を占めるiPhoneは15%減となり、絶好調となったその他のカテゴリの足を引っ張る形となった。言い方を変えれば、iPhoneの減速を見越して、Mac、iPad、ウェアラブル&ホーム、そしてサービスの各種部門がその穴埋めを急いだが、結果的には売上高は5%減と、マイナス成長を免れることはなかった。

+ +

 そうした中で、サービス群は、あるいはiPhoneのエコシステムを脱却し、10億人以外の人々に対してビジネスを展開しようと目論んでいるかもしれない。実際、成功しているかどうか具体的な評価ができないが、Apple MusicはAndroid向けのアプリが用意されており、iTunesを通じてWindowsユーザーも利用可能だ。

+ +

 ケーブルテレビ局を1局から視聴できるようにする「Apple TV channels」や、オリジナル映像のサブスクリプション「Apple TV+」は、Apple TVアプリを通じて提供される。

+ +

 iPhone・iPad、Apple TVに加えて新たにMac向けに配信されることが決まったが、さらにSonyやSamsung、LG、Vizioのスマートテレビや、Amazon Fire TV、Rokuといったセットトップボックス向けにも配信されることになった。あるいは、Windows向けApple TVアプリも登場するかもしれない。

+ +

 雑誌サブスクリプションにしても、Appleに縛っておく道理はない。ゲームサブスクリプションはApp Storeエコシステムと紐付いているため、期待は薄いが。

+ +

 Appleは完全なユーザー体験を目指し、ハード・ソフト・サービスの三位一体の開発を行っていることは、3月25日にも冒頭で触れられたことだった。しかし、着々と、サービス部門はiPhoneユーザー以外の人たちを狙い始めている。

+ +アップル、「Texture」を5月に終了へ--「Apple News+」アピール(4/1) +「iPhone」依存から脱却できる日はくるのか--発表イベントに見るアップルの今後(4/4) + +

その他

+ +2019年版「iPhone」は双方向ワイヤレス充電に対応か--著名アナリストのクオ氏(4/2) +アップル、「HomePod」を値下げ(4/5)
+
+ + +
+

CNET Japanの記事を毎朝メールでまとめ読み(無料)

+ +
+ + +
+ +
+ + + + + + +
+

-PR-企画特集

+ +
+ + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ +
+ + + +

+ + + +
+
+ +
+
+ +
+
+ このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 + これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
+ Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
+ [ 閉じる ] +
+
+ + + \ No newline at end of file diff --git a/fixtures/japan.cnet.com/1555118717655.html b/fixtures/japan.cnet.com/1555118717655.html deleted file mode 100644 index ac3596d17..000000000 --- a/fixtures/japan.cnet.com/1555118717655.html +++ /dev/null @@ -1,961 +0,0 @@ - - - - - - -セキュリティとAI進化の両立なるか?--Appleニュース一気読み - CNET Japan - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - -
-
- - - - - - -
-
logo
- - - - - - - -
- - - - - -
- - - -
- -
- - - -
- -
-
-
-

セキュリティとAI進化の両立なるか?--Appleニュース一気読み

-
-
- - -
- -
    -
  • -
  • -
  • -このエントリーをはてなブックマークに追加 - -
  • -
  • -
  • -
- - -
- -
-
- - -
- -

 4月1日~4月7日のAppleに関連するCNET Japanのニュースをまとめた「今週のAppleニュース一気読み」。

- -

 Appleは日本でも、プライバシーをテーマにしたコマーシャルを放映し始めた。iPhoneのプライバシー性能の高さを、街中で身近に起きうるプライバシーを守りたい場面を映し出しながら訴求する。毎日使うスマートフォンこそ、プライバシー性能を追求すべきと言うメッセージだ。

- - -
-
-
- - - -

 Appleは3月25日に開催したサービスに関する発表会でも、それぞれのサービスごとに必ず「プライバシーとセキュリティ」と書かれたスライドを掲出し、Appleはユーザーの視聴データを収集しないと繰り返しアピールしてきた。まるで、他のサービスはそうしている、と訴えているようでもあった。

- -

 その一方で、シリコンバレーにおいては非常にコンサバティブと言えるユーザーデータの取り扱いの弊害として、人工知能アシスタントの発展の遅れが指摘されている。

- -

 ユーザーデータをフル活用して賢くなる他のアシスタントに対して、Appleは匿名化やプライバシー製を除外する加工などを行うと同時に、ユーザーデータを極力デバイス、すなわちiPhoneから出さずに扱う方法に取り組んできた。

- -

 この取り組みはSiriが登場する2年も前、2009年に発売されたiPhone 3GSの頃から、個人情報をデバイス内で処理する方針が、スティーブ・ジョブズによって方向付けられていたことになる。

- -

 Appleはチップを内製化し、非常に高い処理能力と省電力性を両立するAシリーズのチップをiPhoneに搭載するようになった。2017年には機械学習処理を担当するニューラルエンジンが搭載され、2018年モデルのA12 Bionicでは毎秒5兆回の処理を行えるまでになった。

- -

 こうして、中央集権的にクラウドにデータを集めなくても、優れた機械学習処理をiPhone内で行い、これを各アプリや人工知能アシスタントであるSiriを通じて活用できるように進めている真っ最中だ。

- -

 例えば、iPhoneで撮影した写真は、キーワードで検索できるが、これはiPhoneの中で画像認識のモデルを走らせ、写真の被写体を解析してタグ付けした結果だ。機械学習処理はiPhoneが充電されている夜に行われるため、昼間のバッテリーの心配もいらないという。

- -

 Appleは自社チップとそれを搭載するiPhoneで、エッジ、すなわちデバイス側で機械学習処理を行う体制を整えつつある。その上で、Appleは機械学習人材の獲得に動いてきた。

- -

 2018年にはGoogleで検索・人工知能の責任者だったJohn Giannandrea氏を雇い入れたことで話題となったが、今度は同じくGoogleのシニア・スタッフ・リサーチ・サイエンティストで、機械学習モデルを訓練させるアルゴリズム「敵対的生成ネットワーク(GAN)」を発明したことで知られるIan Goodfellow氏を雇った模様だ。

- -ログインせずにパーソナライズできるiPhoneの背景--アップルが取り組むプライバシー(4/4) -元グーグルのAI専門家イアン・グッドフェロー氏がアップルに入社(4/5) - -

Appleが目論む、Appleエコシステムの「外」

- -

 Appleは3月25日のイベントで、雑誌の読み放題サービス「Apple News+」、ゲーム遊び放題サービス「Apple Arcade」、オリジナル映像作品見放題サービス「Apple TV+」を発表した。また、Apple Cardなるクレジットカードを発表した。

- -

 筆者がこれらの発表を報じていく中で、どうしても個人的に払拭できない1つの『矛盾』があった。それは、iPhone脱却と言いながら、iPhoneの10億人のユーザーベースをアテにしている点だった。

- -

 2019年第1四半期、Appleの売上高の6割を占めるiPhoneは15%減となり、絶好調となったその他のカテゴリの足を引っ張る形となった。言い方を変えれば、iPhoneの減速を見越して、Mac、iPad、ウェアラブル&ホーム、そしてサービスの各種部門がその穴埋めを急いだが、結果的には売上高は5%減と、マイナス成長を免れることはなかった。

- -

 そうした中で、サービス群は、あるいはiPhoneのエコシステムを脱却し、10億人以外の人々に対してビジネスを展開しようと目論んでいるかもしれない。実際、成功しているかどうか具体的な評価ができないが、Apple MusicはAndroid向けのアプリが用意されており、iTunesを通じてWindowsユーザーも利用可能だ。

- -

 ケーブルテレビ局を1局から視聴できるようにする「Apple TV channels」や、オリジナル映像のサブスクリプション「Apple TV+」は、Apple TVアプリを通じて提供される。

- -

 iPhone・iPad、Apple TVに加えて新たにMac向けに配信されることが決まったが、さらにSonyやSamsung、LG、Vizioのスマートテレビや、Amazon Fire TV、Rokuといったセットトップボックス向けにも配信されることになった。あるいは、Windows向けApple TVアプリも登場するかもしれない。

- -

 雑誌サブスクリプションにしても、Appleに縛っておく道理はない。ゲームサブスクリプションはApp Storeエコシステムと紐付いているため、期待は薄いが。

- -

 Appleは完全なユーザー体験を目指し、ハード・ソフト・サービスの三位一体の開発を行っていることは、3月25日にも冒頭で触れられたことだった。しかし、着々と、サービス部門はiPhoneユーザー以外の人たちを狙い始めている。

- -アップル、「Texture」を5月に終了へ--「Apple News+」アピール(4/1) -「iPhone」依存から脱却できる日はくるのか--発表イベントに見るアップルの今後(4/4) - -

その他

- -2019年版「iPhone」は双方向ワイヤレス充電に対応か--著名アナリストのクオ氏(4/2) -アップル、「HomePod」を値下げ(4/5)
-
- - -
-

CNET Japanの記事を毎朝メールでまとめ読み(無料)

- -
- - -
- -
- - - - - - -
-

-PR-企画特集

- -
- - - -
-
- - - - - - -
-
- - - - - - -
-
- -
- - - -

- - - -
-
- -
-
- -
-
- このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 - これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
- Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
- [ 閉じる ] -
-
- - - \ No newline at end of file diff --git a/fixtures/japan.zdnet.com/1556591023244.html b/fixtures/japan.zdnet.com.html similarity index 100% rename from fixtures/japan.zdnet.com/1556591023244.html rename to fixtures/japan.zdnet.com.html diff --git a/fixtures/jvndb.jvn.jp.html b/fixtures/jvndb.jvn.jp.html new file mode 100644 index 000000000..169f9f9bf --- /dev/null +++ b/fixtures/jvndb.jvn.jp.html @@ -0,0 +1,236 @@ + + + JVNDB-2018-013542 - JVN iPedia - 脆弱性対策情報データベース + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

JVNDB-2018-013542

+
+

NETWAVE MNG6200 デバイスにおける証明書・パスワードの管理に関する脆弱性

+
+概要 +
+
+
+NETWAVE MNG6200 デバイスには、証明書・パスワードの管理に関する脆弱性が存在します。 +
+
+CVSS による深刻度 (CVSS とは?) +
+
+
+
+
+CVSS v3 による深刻度
基本値: 9.8 (緊急) [NVD値]
+
    +
  • 攻撃元区分: ネットワーク
  • +
  • 攻撃条件の複雑さ: 低
  • +
  • 攻撃に必要な特権レベル: 不要
  • +
  • 利用者の関与: 不要
  • +
  • 影響の想定範囲: 変更なし
  • +
  • 機密性への影響(C): 高
  • +
  • 完全性への影響(I): 高
  • +
  • 可用性への影響(A): 高
  • +
+
+
+CVSS v2 による深刻度
基本値: 5.0 (警告) [NVD値]
+
    +
  • 攻撃元区分: ネットワーク
  • +
  • 攻撃条件の複雑さ: 低
  • +
  • 攻撃前の認証要否: 不要
  • +
  • 機密性への影響(C): 部分的
  • +
  • 完全性への影響(I): なし
  • +
  • 可用性への影響(A): なし
  • +
+
+
+
+ +
+
+
+影響を受けるシステム +
+
+
+ +
+
+
+
+NETWAVE Networks, Inc. +
    +
  • MNG6200 ファームウェア C4835805jrc12FU121413.cpr
  • +
+
+
+
+
+ +
+
+想定される影響 +
+
+
+情報を取得される、情報を改ざんされる、およびサービス運用妨害 (DoS) 状態にされる可能性があります。 +
+
+対策 +
+
+
+参考情報を参照して適切な対策を実施してください。 +
+
+ベンダ情報 +
+
+
+
+
+CWEによる脆弱性タイプ一覧  CWEとは? +
+
+
+
    +
  1. 証明書・パスワードの管理(CWE-255) [NVD評価]
  2. +
+
+
+共通脆弱性識別子(CVE)  CVEとは? +
+
+
+
    +
  1. CVE-2018-20395
  2. +
+
+
+参考情報 +
+
+
+
    +
  1. National Vulnerability Database (NVD) : CVE-2018-20395
  2. +
  3. 関連文書 : sensitivesOids/oidpassswordleaks.csv
  4. +
+
+
+更新履歴 +
+
+
+
    +
  • [2019年02月22日]
    +  掲載
  • +
+
+
+
+ + + + + + + +
+
+
+
+ +

Original text


+ +
\ No newline at end of file diff --git a/fixtures/jvndb.jvn.jp/1550906544985.html b/fixtures/jvndb.jvn.jp/1550906544985.html deleted file mode 100644 index 281d7c2d3..000000000 --- a/fixtures/jvndb.jvn.jp/1550906544985.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - JVNDB-2018-013542 - JVN iPedia - 脆弱性対策情報データベース - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

JVNDB-2018-013542

-
-

NETWAVE MNG6200 デバイスにおける証明書・パスワードの管理に関する脆弱性

-
-概要 -
-
-
-NETWAVE MNG6200 デバイスには、証明書・パスワードの管理に関する脆弱性が存在します。 -
-
-CVSS による深刻度 (CVSS とは?) -
-
-
-
-
- CVSS v3 による深刻度
基本値: 9.8 (緊急) [NVD値]
-
    -
  • 攻撃元区分: ネットワーク
  • -
  • 攻撃条件の複雑さ: 低
  • -
  • 攻撃に必要な特権レベル: 不要
  • -
  • 利用者の関与: 不要
  • -
  • 影響の想定範囲: 変更なし
  • -
  • 機密性への影響(C): 高
  • -
  • 完全性への影響(I): 高
  • -
  • 可用性への影響(A): 高
  • -
-
-
- CVSS v2 による深刻度
基本値: 5.0 (警告) [NVD値]
-
    -
  • 攻撃元区分: ネットワーク
  • -
  • 攻撃条件の複雑さ: 低
  • -
  • 攻撃前の認証要否: 不要
  • -
  • 機密性への影響(C): 部分的
  • -
  • 完全性への影響(I): なし
  • -
  • 可用性への影響(A): なし
  • -
-
-
-
- -
-
-
-影響を受けるシステム -
-
-
- -
-
-
-
- NETWAVE Networks, Inc. -
    -
  • MNG6200 ファームウェア C4835805jrc12FU121413.cpr
  • -
-
-
-
-
- -
-
-想定される影響 -
-
-
-情報を取得される、情報を改ざんされる、およびサービス運用妨害 (DoS) 状態にされる可能性があります。 -
-
-対策 -
-
-
-参考情報を参照して適切な対策を実施してください。 -
-
-ベンダ情報 -
-
-
-
-
-CWEによる脆弱性タイプ一覧  CWEとは? -
-
-
-
    -
  1. 証明書・パスワードの管理(CWE-255) [NVD評価]
  2. -
-
-
-共通脆弱性識別子(CVE)  CVEとは? -
-
-
-
    -
  1. CVE-2018-20395
  2. -
-
-
-参考情報 -
-
-
-
    -
  1. National Vulnerability Database (NVD) : CVE-2018-20395
  2. -
  3. 関連文書 : sensitivesOids/oidpassswordleaks.csv
  4. -
-
-
-更新履歴 -
-
-
-
    -
  • [2019年02月22日]
    -  掲載
  • -
-
-
-
- - - - - - - -
-
-
-
- - - -
-
- -
- - \ No newline at end of file diff --git a/fixtures/latimes.html b/fixtures/latimes.html deleted file mode 100644 index 9dc15d338..000000000 --- a/fixtures/latimes.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - - - - California appears poised to be first to ban power-guzzling big-screen TVs - latimes - -
Advertisement
- - - -

California appears poised to be first to ban power-guzzling big-screen TVs

Industry lobbying efforts appear to elicit little sympathy from the state Energy Commission, which may vote as soon as Nov. 4.

October 14, 2009|Marc Lifsher
- - -

SACRAMENTO — The influential lobby group Consumer Electronics Assn. is fighting what appears to be a losing battle to dissuade California regulators from passing the nation's first ban on energy-hungry big-screen televisions.

On Tuesday, executives and consultants for the Arlington, Va., trade group asked members of the California Energy Commission to instead let consumers use their wallets to decide whether they want to buy the most energy-saving new models of liquid-crystal display and plasma high-definition TVs.

"Voluntary efforts are succeeding without regulations," said Doug Johnson, the association's senior director for technology policy. Too much government interference could hamstring industry innovation and prove expensive to manufacturers and consumers, he warned.

But those pleas didn't appear to elicit much support from commissioners at a public hearing on the proposed rules that would set maximum energy-consumption standards for televisions to be phased in over two years beginning in January 2011. A vote could come as early as Nov. 4.

The association's views weren't shared by everyone in the TV business. Representatives of some TV makers, including top-seller Vizio Inc. of Irvine, said they would have little trouble complying with tighter state standards without substantially increasing prices.

"We're comfortable with our ability to meet the proposed levels and implementation dates," said Kenneth R. Lowe, Vizio's co-founder and vice president.

Last month, the commission formally unveiled its proposal to require manufacturers to limit television energy consumption in a way that has been done with refrigerators, air conditioners and dozens of other products since the 1970s.

"We would not propose TV efficiency standards if we thought there was any evidence in the record that they will hurt the economy," said Commissioner Julia Levin, who has been in charge of the two-year rule-making procedure. "This will actually save consumers money and help the California economy grow and create new clean, sustainable jobs."

Tightening efficiency ratings by using new technology and materials should result in "zero increase in cost to consumers," said Harinder Singh, an Energy Commission staffer on the TV regulation project.

California's estimated 35 million TVs and related electronic devices account for about 10% of all household electricity consumption, the Energy Commission staff reported. But manufacturers quickly are coming up with new technologies that are making even 50-inch-screen models much more economical to operate.

New features, such as light-emitting diodes that consume tiny amounts of power, special reflective films and sensors that automatically adjust TV brightness to a room's viewing conditions, are driving down electricity consumption, experts said.

The payoff could be big for TV owners, said Ken Rider, a commission staff engineer. Average first-year savings from reduced electricity use would be an estimated $30 per set and $912 million statewide, he said.

If all TVs met state standards, Rider added, California could avoid the $600-million cost of building a natural-gas-fired power plant. Switching to more-efficient TVs could have an estimated net benefit to the state of $8.1 billion, the commission staff reported.

Consumer Electronics Assn. officials disputed that figure, arguing that it was based on out-of-date numbers that fail to account for recent industry innovations. "With voluntary compliance, manufacturers can meet the targets over time, managing the cost impact, yet not in any way impeding innovation," said Seth Greenstein, an association consultant.

--

marc.lifsher@latimes.com

- - - -
- -
Advertisement
- - - -
Los Angeles Times Articles
|
|
|
- - - - - - - - - - - - - - - - -
- - - - - - \ No newline at end of file diff --git a/fixtures/ma.ttias.be/1587659928239.html b/fixtures/ma.ttias.be.html similarity index 57% rename from fixtures/ma.ttias.be/1587659928239.html rename to fixtures/ma.ttias.be.html index 03515ab69..7b07fe1db 100644 --- a/fixtures/ma.ttias.be/1587659928239.html +++ b/fixtures/ma.ttias.be.html @@ -1,5 +1,5 @@ - + @@ -42,15 +42,15 @@ - + - +
@@ -186,7 +186,7 @@

- Image of Mattias Geniar + Image of Mattias Geniar

Mattias Geniar, April 19, 2020 @@ -202,149 +202,79 @@

- - -

Hi everyone! 👋

- +

Hi everyone! 👋

Welcome to cron.weekly issue #130.

-

There’s quite a bit of news from Github this week, together with Windows 10 (I know, on a Linux-focussed newsletter no less!) and ARM servers. I should have some content for everyone to enjoy.

-

Stay strong, stay home, stay alive.

-

Oh, and ☕️, of course.

- -

News & general 🗞

- -

Is BGP safe yet? No.

- +

News & general 🗞

+

Is BGP safe yet? No.

Did you know the internet is held together with duct tape? BGP is one of those pieces of tape. Resource Public Key Infrastructure (RPKI) can help authenticate routes, but is only seeing slow adoption.

- -

GitHub is now free for teams

- +

GitHub is now free for teams

This is a pretty big move on their part: you can now create teams and host unlimited private git repositories at Github for free!

-

We’ve wanted to make this change for the last 18 months, but needed our Enterprise business to be big enough to enable the free use of GitHub by the rest of the world. - Nat Friedman

-

Big players pay for the little ones, I appreciate that.

- -

Academics steal data from air-gapped systems using PC fan vibrations

- +

Academics steal data from air-gapped systems using PC fan vibrations

Even your computer fan can leak your personal data. tl;dr: don’t use computers. Ever.

- -

ICANN delays .org sell off

- +

ICANN delays .org sell off

Good news, for now - as the .org sale announced late last year is put on hold. Question is, for how long?

- -

npm has joined GitHub

- +

npm has joined GitHub

GitHub has completed its acquisition of npm. Which is a bit of a weird announcement from Github, as npm already announced it last month? Oh well, corporate stuff. 😄

- -

Scaleway ARM64 instances reach end-of-life

- +

Scaleway ARM64 instances reach end-of-life

Scaleway is sunsetting its ARM64 instances at the end of this year. This is a bit of a surprise move, as they reached their fame (I believe?) mostly because they did ARM server hosting at scale.

-

In an age where Apple is supposed to release ARM laptops within the year, I’d be very curious to learn why Scaleway is terminating their ARM support.

- -

Windows WSL2 & Explorer integration for Linux

- +

Windows WSL2 & Explorer integration for Linux

Two interesting stories that caught my attention last week from the Windows front:

- -

The new Windows Subsystem for Linux 2 (WSL2) will run as a lightweight VM running a full Linux kernel, which means it’ll support things like Docker and FUSE.

-

The new Explorer integration means you’ll be able to access the files on that tiny Linux VM much easier.

- -

Tools & Projects 🛠

- -

Learning-to-See-in-the-Dark

- +

Tools & Projects 🛠

+

Learning-to-See-in-the-Dark

This is crazy: a machine learning dataset that can turn just about any (really) dark image into a bright-as-day version. The video blew my mind.

- -

ProtonMail Bridge

- +

ProtonMail Bridge

The ProtonMail Bridge is an application that runs on your computer in the background and seamlessly encrypts and decrypts your mail as it enters and leaves your computer.

- -

Simplify Complexity in Containerized Environments

- +

Simplify Complexity in Containerized Environments

Enhance visibility into containers and container orchestration with Datadog. Automatically track containerized services with Autodiscovery and receive smarter alerts that won’t panic as customers scale down. Easily monitor the health of all your containers with granular, real-time metrics and visualize performance from a bird’s eye view with Datadog’s live container map. Start your free Datadog trial today! Sponsored

- -

Phoenix LiveDashboard

- +

Phoenix LiveDashboard

LiveDashboard provides real-time performance monitoring and debugging tools for Phoenix developers.

- -

prestissimo

- +

prestissimo

This is a composer plugin (PHP’s package manager) that downloads packages in parallel to speed up the installation process.

- -

Kanboard

- +

Kanboard

Kanboard is a free and open-source Kanban project management software.

- -

Hund: versatile service monitoring

- +

Hund: versatile service monitoring

Monitor your services every 30 seconds, get notified the way you want! Slack, Email, Webhooks, … your pick. See rich metrics and use our customizable status pages to keep all your customers informed. Try us for free for 30 days! Sponsored

- -

regex2fat

- -

“Did you ever want to match a regex, but all you had was a fat32 driver? Ever wanted to serialize your regex DFAs into one of the most widely supported formats used by over 3 billion devices?”

- +

regex2fat

+

“Did you ever want to match a regex, but all you had was a fat32 driver? Ever wanted to serialize your regex DFAs into one of the most widely supported formats used by over 3 billion devices?"

I have no idea how any of this works, but it got shared far & wide on the internet, so I figure I’ll do the same here. But really … even the tagline confuses me. 🙈

- -

falcon

- +

falcon

Falcon is a free, open-source SQL editor with inline data visualization. It currently supports connecting to RedShift, MySQL, PostgreSQL, IBM DB2, Impala, MS SQL, Oracle, SQLite.

- -

keycloak

- +

keycloak

Keycloak is an Open Source Identity and Access Management solution for modern Applications and Services. It allows you to add authentication to applications and secure services with minimum fuss. No need to deal with storing users or authenticating users. It’s all available out of the box. You’ll even get advanced features such as User Federation, Identity Brokering and Social Login.

- -

mdBook

- +

mdBook

Ever wanted to write a book (You’re crazy)? Ever wanted to do it in Markdown (OK, maybe you’re not crazy)? You can use mdBook to take Markdown files, parse them & create online books.

- -

3mux

- +

3mux

3mux is a terminal multiplexer with out-of-the-box support for search, mouse-controlled scrollback, and i3-like keybindings. Imagine tmux with a smaller learning curve and more sane defaults.

- -

Guides & Tutorials 🎓

- -

Now I Understand why Almost No One uses Encrypted Email

- +

Guides & Tutorials 🎓

+

Now I Understand why Almost No One uses Encrypted Email

It’s true, using PGP with email isn’t very user friendly, to this day. This post contains the commands used to send encrypted e-mails, and it’s enough to put you off - honestly.

- -

Troubleshoot using the proc filesystem on Linux

- +

Troubleshoot using the proc filesystem on Linux

A good overview of the basics when looking at the /proc filesystem. I use this all the time when debugging, it’s a good place to start a lot of debug-quests.

- -

Comparing the new Redis6 multithreaded I/O to Elasticache & KeyDB

- +

Comparing the new Redis6 multithreaded I/O to Elasticache & KeyDB

The team at KeyDB compares its key/value daemon (originally a fork of Redis) with the latest Redis 6. Surprise surprise, KeyDB wins. 😅 But the metrics & numbers are interesting enough to share the post regardless.

- -

Why does cron only offer minute granularity?

- +

Why does cron only offer minute granularity?

In short, compatibility. The format that crontab uses is described in minute detail as part of the POSIX Specification.

- -

How to Boost UDP Transaction Performance

- +

How to Boost UDP Transaction Performance

A nice in-depth set of slides to optimize UDP traffic on a Linux server. This might come in handy when HTTP/3 takes off and you want to optimise your throughput.

- -

Rename files in linux without typing the full name twice

- +

Rename files in linux without typing the full name twice

This is clever use of a Bash alias and the read method in Bash to prompt for input.

- -

Technical reasons to choose FreeBSD over GNU/Linux

- +

Technical reasons to choose FreeBSD over GNU/Linux

This post covers some of the technical reasons to choose FreeBSD over GNU/Linux.

- -

Wireguard VPN: Typical Setup

- +

Wireguard VPN: Typical Setup

This guide helps you set up Wireguard VPN on your Linux box with step-by-step instructions.

@@ -353,44 +283,47 @@

- + @@ -456,7 +389,7 @@

Table of contents

Want to subscribe to the cron.weekly newsletter?

- I write a weekly-ish newsletter on Linux, open source & webdevelopment called cron.weekly. + I write a weekly-ish newsletter on Linux, open source & webdevelopment called cron.weekly.

@@ -484,7 +417,7 @@

Want to subscribe to the cron.weekly newsletter?

Who dis? 🤔

- Hi! I'm Mattias Geniar, an independent developer, Linux sysadmin & general problem solver. Looking for help? I'm available for hire as a consultant. Want to get in touch? Have a look at my contact page. + Hi! I'm Mattias Geniar, an independent developer, Linux sysadmin & general problem solver. Looking for help? I'm available for hire as a consultant. Want to get in touch? Have a look at my contact page.

diff --git a/fixtures/mashable.com.html b/fixtures/mashable.com.html new file mode 100644 index 000000000..93ed443e9 --- /dev/null +++ b/fixtures/mashable.com.html @@ -0,0 +1,806 @@ + + + +Mysterious plane circling Manhattan sparks concern and intrigue | Mashable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Mysterious plane circling Manhattan sparks concern and intrigue

+
We have answers.
+ +
+
+Mysterious plane circling Manhattan sparks concern and intrigue +
+Credit: lili sams/mashable +
+
+
+
+
+
+
+
+
+
+ + + +> +Life +
+
+
+
+

A large military-style plane, which looked remarkably like a C-130, circled Manhattan for at least 30 minutes on Tuesday afternoon, causing quite the commotion online.

Despite the concern from New Yorkers, Eric Durr, Director of Public Affairs at New York State Division of Military and Naval Affairs told Mashable the plane was simply an HC-130, a search and rescue plane, conducting routine training.

Durr explained that the folks flying the plane and helicopters around mid-town Manhattan on Tuesday, a crew based out of Gabreski Air National Guard Base in Westhampton, "specialize in retrieving people who are down behind enemy lines."

+

Though Durr knew what was going on, the rest of New York, and even some in the military, was left in the dark. A spokesperson at Air Mobility Command told Mashable they didn't know why the plane was there and were not sure if it was theirs. They were not made aware of any flight mission in the area today.

+
+Mashable Image +
+
+ +Credit: lili sams/mashable +
+
+
+
+Mashable Image +
+
+ +Credit: lili sams/mashable +
+
+
+
+Mashable Image +
+
+ +Credit: lili sams//mashable +
+
+

According to Tom Namako, Deputy News Director at Buzzfeed, the NYPD was initially unaware of the reasoning behind the plane, though they later said the planes were part of a military training exercise.

+

Mashable later confirmed that the plane was part of the 102nd Rescue Squadron of the New York Air National Guard, which is a unit of the New York Air National Guard 106th rescue wing.

+

Curious and concerned New Yorkers, completely unaware of why the plane was hovering so close did a little online freaking out and began posting photos and video of the plane on Twitter, along with possible explanations.

+ + + + + + + + + +

An Air Mobility spokesperson told Mashable they've been trying to get in touch with the New York National Guard but, "We've been unable to get a hold of them at this point."

On Dec. 22, NBC 4 New York reported that law enforcement officials confirmed the low-flying military planes and helicopters spotted on Dec. 13 were for there for a training exercise involving the president-elect.

According to the news site, the planes were practicing how to land near Trump Tower and safely airlift the future president out of New York City.

Retired Army Maj. Mike Lyons and a current military analyst told NBC 4 New York that the mission may have also served as an opportunity to seek out rooftops in the city that could assist in future evacuations.

UPDATE: Dec. 22, 2016, 2:16 p.m. EST Updated with further clarification from NBC 4 New York.

Additional reporting by Colin Daileda.

+
+
+ +
+
+
+
+
+
+
+
+
+

Recommended For You

+
+
+
+
+ +No more Teslas in California? It's possible, but not likely. + +
+ + +
+
+ +
+
+
+
+
+
+ +Steam games are coming to Tesla cars soon + +
+ + +
+
+ +
+
+
+
+
+
+ +Tesla's head of AI and Autopilot is leaving the company + +
+ + +
+
+ +
+
+
+
+
+
+ +Anti-speeding tech is now mandatory for new car models in the EU + +
+ + +
+
+ +
+
+
+
+
+
+ +FCC approves Starlink use in moving vehicles + +
+ + +
+
+ +
+
+
+
+
+
+

Trending on Mashable

+
+
+
+
+ +'Wordle' today: Here's the answer, hints for August 10 + +
+ + +
+
+ +
+
+
+
+
+
+ +'Wordle' today: Here's the answer, hints for August 9 + +
+ + +
+
+ +
+
+
+ +
+ +
+
+
+
+ +Google changed Gmail's design and some people are furious. Here's how to change it back. + +
+ + +
+
+ +
+
+
+
+
+
+ +
+
+
+
The biggest stories of the day delivered to your inbox.
+
+ +
+ +
+
+
+
+
+By signing up to the Mashable newsletter you agree to receive electronic communications +from Mashable that may sometimes include advertisements or sponsored content. +
+
+ +
Thanks for signing up. See you at your inbox!
+
+
+ + + + + + diff --git a/fixtures/mashable.com/1481670648585.html b/fixtures/mashable.com/1481670648585.html deleted file mode 100644 index 4350fb4ad..000000000 --- a/fixtures/mashable.com/1481670648585.html +++ /dev/null @@ -1,16 +0,0 @@ - Mysterious plane circling Manhattan sparks concern and intrigue

Mashable

World

Mysterious plane circling Manhattan sparks concern and intrigue

Image: lili sams/mashable

A large military-style plane, which looked remarkably like a C-130, circled Manhattan for at least 30 minutes on Tuesday afternoon, causing quite the commotion online.

Despite the concern from New Yorkers, Eric Durr, Director of Public Affairs at New York State Division of Military and Naval Affairs told Mashable the plane was simply an HC-130, a search and rescue plane, conducting routine training.

Durr explained that the folks flying the plane and helicopters around mid-town Manhattan on Tuesday, a crew based out of Gabreski Air National Guard Base in Westhampton, "specialize in retrieving people who are down behind enemy lines."

Though Durr knew what was going on, the rest of New York, and even some in the military, was left in the dark. A spokesperson at Air Mobility Command told Mashable they didn't know why the plane was there and were not sure if it was theirs. They were not made aware of any flight mission in the area today.

Image: lili sams/mashable

Image: lili sams/mashable

Image: lili sams//mashable

According to Tom Namako, Deputy News Director at Buzzfeed, the NYPD was initially unaware of the reasoning behind the plane, though they later said the planes were part of a military training exercise.

Mashable later confirmed that the plane was part of the 102nd Rescue Squadron of the New York Air National Guard, which is a unit of the New York Air National Guard 106th rescue wing.

Curious and concerned New Yorkers, completely unaware of why the plane was hovering so close did a little online freaking out and began posting photos and video of the plane on Twitter, along with possible explanations.

An Air Mobility spokesperson told Mashable they've been trying to get in touch with the New York National Guard but, "We've been unable to get a hold of them at this point."

Additional reporting by Colin Daileda.

\ No newline at end of file diff --git a/fixtures/medium.com--another.html b/fixtures/medium.com--another.html new file mode 100644 index 000000000..30d8f8015 --- /dev/null +++ b/fixtures/medium.com--another.html @@ -0,0 +1,37 @@ +Flag Attributes in Android — How to Use Them | by Jakob Ulbrich | Medium

Flag Attributes in Android — How to Use Them

attribute="option1|option2"

What Are Bit Flags?

110
0 = 0*2³ + 0*2² + 0*2¹ + 0*2⁰ = 0000
1 = 0*2³ + 0*2² + 0*2¹ + 1*2⁰ = 0001
2 = 0*2³ + 0*2² + 1*2¹ + 0*2⁰ = 0010
4 = 0*2³ + 1*2² + 0*2¹ + 0*2⁰ = 0100
8 = 1*2³ + 0*2² + 0*2¹ + 0*2⁰ = 1000

Declaring XML Flag Attributes

<resources>
<declare-styleable name="MyView">
<attr name="drawBorder">
<flag name="none" value="0" />
<flag name="top" value="1" />
<flag name="right" value="2" />
<flag name="bottom" value="4" />
<flag name="left" value="8" />
<flag name="all" value="15" />
</attr>
...
</declare-styleable>
</resources>
  • Every value has exactly one bit which is set to 1. All other bits are 0.
  • None of the values have the same bit set to 1.
<my.package.name.MyView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:drawBorder="bottom|top" />

Read XML Flag Attributes

public MyView extends View{    // Constants for the flags
private static final int BORDER_NONE_DEFAULT = 0;
private static final int BORDER_TOP = 1;
private static final int BORDER_RIGHT = 2;
private static final int BORDER_BOTTOM = 4;
private static final int BORDER_LEFT = 8;
// Variable for the current value
private int mDrawBorder = BORDER_NONE_DEFAULT;
public MyView(Context context){
// Delegate to next constructor
this(context, null);
}
public MyView(Context context, AttributeSet attrs){
// Delegate to next constructor
this(context, attrs, 0);
}
public MyView(Context context, AttributeSet attrs,
int defStyleAttr){
super(context, attrs, defStyleAttr);
// Read attributes
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs, R.styleable.MyView);
try {
mDrawBorder = a.getInteger(
R.styleable.MyView_drawBorder,
BORDER_NONE_DEFAULT);
} finally {
a.recycle();
}

}
...
}

Working With Bit Flags

| (bitwise logically or)
Example: 100 | 001 = 101
The result has a 1 on the position where at least one value has a 1.
& (bitwise logically and)
Example: 100 & 101 = 100
The result has a 1 on the position where both values have a 1.
~ (bitwise inverse)
Example: ~100 = 011
All bits get inverted.
^ (bitwise exclusive or)
Example: 100^101 = 001
The result has a 1 on the position where one value has a 1 whereas the other value has a 0.
Example 1: app:drawBorder="none|top"
Example 2: app:drawBorder="bottom|all"

Check If a Flag is Contained in The Set

private boolean containsFlag(int flagSet, int flag){
return (flagSet|flag) == flagSet;
}
// Method call
boolean drawBorderTop = containsFlag(mDrawBorder, BORDER_TOP);

Add a Flag to The Set

private int addFlag(int flagSet, int flag){
return flagSet|flag;
}
// Method call
mDrawBorder = addFlag(mDrawBorder, BORDER_LEFT);

Toggle a Flag in The Set

private int toggleFlag(int flagSet, int flag){
return flagSet^flag;
}
// Method call
mDrawBorder = toggleFlag(mDrawBorder, BORDER_LEFT);
Example 1: 110^010 = 100 (Binary)
6 ^ 2 = 4 (Decimal)
Example 2: 100^010 = 110 (Binary)
4 ^ 2 = 6 (Decimal)

Remove a Flag From the Set

private int removeFlag(int flagSet, int flag){
return flagSet&(~flag);
}
// Method call
mDrawBorder = removeFlag(mDrawBorder, BORDER_LEFT);
110&(~010) = 110&101 = 100 (Binary)
6 &(~ 2 ) = 6 & 5 = 4 (Decimal)

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/medium.com/1477523363921.html b/fixtures/medium.com.html similarity index 100% rename from fixtures/medium.com/1477523363921.html rename to fixtures/medium.com.html diff --git a/fixtures/medium.com/1485902752952.html b/fixtures/medium.com/1485902752952.html deleted file mode 100644 index e29645fc3..000000000 --- a/fixtures/medium.com/1485902752952.html +++ /dev/null @@ -1 +0,0 @@ -Flag Attributes in Android — How to Use Them - Jakob Ulbrich - Medium

Flag Attributes in Android — How to Use Them

JakobUlbrich
Follow

I’m sure you have seen something like the following line very often while writing the XML attributes for your views or layouts.

attribute="option1|option2"

Notice the | between the options. It is not only a fancy separator, it is a bitwiseoperator merging the two options into one single value.

The following will explain whatexactly Bit Flags are, how to declare custom XML flag attributes and how to read and work with them inthe code.


What Are Bit Flags?

Generally you can see Bit Flags asa number of boolean values stored in one single value.

In the binary system a bit has twostates:on and off. Now think about a rowof bits where every bit is an indicator for one of your options. When the option is set, the bit has thevalue 1. If not, it has the value 0.

110

We read this from right to left.
The bit for our first option is 0. That means the option is not set. Whereas thebits for the second and third options are 1. This means they are set.

Every integer value has arepresentation in the binary system and and vice versa.

0 = 0*2³ + 0*2² + 0*2¹ + 0*2⁰ = 0000
1 = 0*2³ + 0*2² + 0*2¹ + 1*2⁰ = 0001
2 = 0*2³ + 0*2² + 1*2¹ + 0*2⁰ = 0010
4 = 0*2³ + 1*2² + 0*2¹ + 0*2⁰ = 0100
8 = 1*2³ + 0*2² + 0*2¹ + 0*2⁰ = 1000

This means we can store our BitFlag value as a plain integer value. And we can use the bitwise operators (more about them later)directly on integer values.


Declaring XML Flag Attributes

Now, let’s assume that we want tocreate a custom view called MyView which can draw a border around itself,and that we want to specify on which sites (top, right, bottom, left) it should draw the borders usingan XML flag attribute.
I will not explain how to actually drawsomething, I will only explain how to work with flags.

We can declare XML flag attributeslike any other attribute. You can find an official documentation here.

In our values/attrs.xml file we declare the new attribute called drawBorder for our view called MyView.

<resources>
<declare-styleable name="MyView">
<attr name="drawBorder">
<flag name="none" value="0" />
<flag name="top" value="1" />
<flag name="right" value="2" />
<flag name="bottom" value="4" />
<flag name="left" value="8" />
<flag name="all" value="15" />
</attr>
...
</declare-styleable>
</resources>

Look exactly at the values we haveset for the options.
We essentially have 4 options (top, right, bottom, left). The other twooptions are used to specify that no option is set or that all options are set.
The values for the 4options are chosen, so that when you write them in the binary system, these two statements arefulfilled:

  • Every value has exactlyone bit which is set to 1. All other bits are 0.
  • None of the values havethe same bit set to 1.

The option none is used to indicate that none of the 4 options is set.And the option all is the sum of the values of the 4options and indicates that all of the 4 options are set.

We can now use our custom attributelike this in our custom View:

<my.package.name.MyView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:drawBorder="bottom|top" />

Read XML Flag Attributes

Let’s start with the basic classfor our custom View. We should declare a constant for each of our options with an equal value asdeclared above. And a variable for the value that we get from reading the XML attribute. You can have alook about how to read attributes here.

public MyView extends View{// Constants for the flags
private static final int BORDER_NONE_DEFAULT = 0;
private static final int BORDER_TOP = 1;
private static final int BORDER_RIGHT = 2;
private static final int BORDER_BOTTOM = 4;
private static final int BORDER_LEFT = 8;
// Variable for the current value
private int mDrawBorder = BORDER_NONE_DEFAULT;
public MyView(Context context){
// Delegate to next constructor
this(context, null);
}
public MyView(Context context, AttributeSet attrs){
// Delegate to next constructor
this(context, attrs, 0);
}
public MyView(Context context, AttributeSet attrs,
int defStyleAttr){
super(context, attrs, defStyleAttr);
// Read attributes
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs, R.styleable.MyView);
try{
mDrawBorder = a.getInteger(
R.styleable.MyView_drawBorder,
BORDER_NONE_DEFAULT);
} finally{
a.recycle();
}

}
...
}

We have now assigned the valuespecified in the XML layout file to the mDrawBordervariable. If the attribute does not exists in the layout the BORDER_NONE_DEFAULT value is used.


Working With Bit Flags

Okay, how do we know which of ouroptions were set when we only get one value? That’s why we have defined the constants for our options.

There are bitwise operators we canuse to check if an option is contained in the current mDrawBorder valueand to enable or disable or toggle an option. Let’s have a look at them:

| (bitwise logically or)
Example:100 | 001 = 101
The result has a 1 on the position where at least one value has a 1.
& (bitwise logically and)
Example:100 & 101 = 100
The result has a 1 on the position where both values have a 1.
~ (bitwise inverse)
Example:~100 = 011
All bits get inverted.
^ (bitwise exclusive or)
Example:100^101 = 001
The result has a 1 on the position where one value has a 1 whereas the other value has a 0.

Let’s assume we have used theattribute in the following two ways. Yes, technically they are correct, but they may look weird 😵.

Example 1: app:drawBorder="none|top"

In this first example the values ofnone (0 = 000) and top (1 = 001) get combined by the logically or-operator | to the value (001 = 1). The result still contains the flag value for top (which is 1). And also for none (which is 0) because every flag-set contains the 0-flag at every time.

Example 2: app:drawBorder="bottom|all"

In this second example the valuesof bottom (3 =0011) and all (15 = 1111) get combined to (1111 = 15). The result still contains theflag for bottom since all enables the bits for all of the 4 options.

Check If a Flag is Contained inThe Set

Now we need to check which optionis contained in the value of the mDrawBordervariable. We do this by calling the following method:

private boolean containsFlag(int flagSet, int flag){
return (flagSet|flag) == flagSet;
}
// Method call
boolean drawBorderTop = containsFlag(mDrawBorder, BORDER_TOP);

We try to add the flag to theexisting flag-set and if the value of the flag-set does not change, we can combine that the flag wasalready contained.

Add a Flag to The Set

Adding a flag is pretty simple. Weuse the same operator (The logically or-operator) like in the XML attributes:

private int addFlag(int flagSet, int flag){
return flagSet|flag;
}
// Method call
mDrawBorder = addFlag(mDrawBorder, BORDER_LEFT);

We do not need to check if theflag-set already contains the flag that we want to add. When it is already contained, the value simplystays the same.

Toggle a Flag in The Set

Toggling is also very simple.

private int toggleFlag(int flagSet, int flag){
return flagSet^flag;
}
// Method call
mDrawBorder = toggleFlag(mDrawBorder, BORDER_LEFT);

Since the exclusive or-operator^ only keeps the bits where both bits are different, it will remove thebits that are set in the flag when they are also already set in the flag-set. And it will add them ifthey are not set in the flag-set.

Example 1: 110^010 = 100 (Binary)
6 ^ 2=4(Decimal)
Example 2: 100^010 = 110 (Binary)
4 ^ 2=6(Decimal)

Remove a Flag From the Set

Removing a flag is a bit morecomplicated (we need two bitwise operators), but still easy.

private int removeFlag(int flagSet, int flag){
return flagSet&(~flag);
}
// Method call
mDrawBorder = removeFlag(mDrawBorder, BORDER_LEFT);

First we invert the flag that wewant to remove. Then we combine this with the current flag-set. This means only where the bit in theflag was set, we now have a 0. And that’s why we also have a 0 at this position in the final result. Therest of the result is the same as in the original flag-set. Have a look at this example:

110&(~010) = 110&101 = 100 (Binary)
6 &(~ 2 ) =6 & 5=4(Decimal)

Bit Flags are also a goodalternative if you have a lot of boolean values and especially if you want to store them somehow.Instead of saving a lot of booleans you only need to save one integer value.

You should now be able to defineyour own flag attributes and work with them in your application. You should also be able to use BitFlags as an alternative to a number of booleans.
When you found this tutorial useful feel free tohit the 💚.


If you have any suggestions on howto improve this tutorial or found a mistake, you can leave a private note at the specific position.

Happy coding 💻.

Thanks to

Written by

Follow
See responses (5)

Discover

Welcome to a place where words matter. Onhref="https://medium.com/about?autoplay=1&source=post_page-----ac4ec8aee7d1----------------------"class="bb bc bd be bf bg bh bi bj bk bn bo hr hs ia">Watch

Make

Follow all the topics you care about, and we’lldeliver the best stories for you to your homepage and inbox.class="bb bc bd be bf bg bh bi bj bk bn bo hr hs ia">Explore

Become a member

Get unlimited access to the best stories onhref="https://medium.com/membership?source=post_page-----ac4ec8aee7d1----------------------"class="bb bc bd be bf bg bh bi bj bk bn bo hr hs ia">Upgrade
AboutHelpLegal
\ No newline at end of file diff --git a/fixtures/money.cnn.com.html b/fixtures/money.cnn.com.html new file mode 100644 index 000000000..db9879f53 --- /dev/null +++ b/fixtures/money.cnn.com.html @@ -0,0 +1,461 @@ + Hundreds of Chicago O'Hare airport workers go on strike + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+

+ thanks for visiting cnnmoney. +

+

+ We're no longer maintaining this page. +

+

+ For the latest business news and markets data, please visit CNN + Business +

+
+ + + +
+
+ + +

Hundreds of Chicago O'Hare airport workers go on strike

+
+
Nationwide demonstrations for a $15 minimum wage
Nationwide demonstrations for a $15 minimum wage
+

Heads up, travelers: Hundreds of workers are striking at Chicago O'Hare International Airport on Tuesday.

Janitors, baggage handlers, cabin cleaners and wheelchair attendants are asking for a $15 hourly wage. Some currently make $10.50 an hour, which is the minimum wage in Chicago.

The effort is part of a broader "Day of Disruption" planned by activist group Fight for $15, which advocates for raising the minimum wage. Uber drivers, fast food workers and home care aides will also walk out on Tuesday.

The Chicago Department of Aviation said that despite the work stoppage operations at the nation's second busiest airport continued to run smoothly. Federal employees, including air traffic controllers and security screeners, are not joining the strike.

Related: Chicago O'Hare airport workers plan strike November 29

The striking workers aren't aiming to disrupt travel, a spokeswoman for the Service Employees International Union said at a press conference last week.

"They do want to gain public support," she said. The airport workers aren't part of the Service Employees International Union, but the group is backing them.

Though the walkout isn't likely to strand passengers, it could cause some operational hiccups.

"Some planes may not get fully cleaned, and bag handling may have some snafus," said Joseph Schwieterman, a transportation expert and professor at DePaul University in Chicago.

Get up-to-the-minute updates: Download CNN MoneyStream

Those participating in the strike are contracted by Prospect Airport Services, AirScrub Inc. and the city of Chicago. They haven't decided how long the strike will last yet, SEIU spokesman Marc Goumbri said.

Kisha Rivera, who works as a cabin cleaner at O'Hare, said she has coworkers who sleep in the airport because they can't afford apartments.

"We work so hard and we hardly even get breaks," she said. "When we go from plane to plane, we can't even go to the bathroom."

O'Hare is a hub for both American Airlines (AAL) and United Airlines (UAL). Both airlines said they prepped for the strike to avoid inconveniencing fliers.

"We are working closely with our vendors to ensure there is no disruption to our operation," American said in a statement.

United said it is "taking the necessary steps to ensure a safe and on-time operation for our customers."

The striking workers will be joined by others protesting low wages at a 12 p.m. rally outside the airport. Concurrent rallies will take place at nearly 20 airports around the country, including Los Angeles International Airport and Newark-Liberty International Airport, Goumbri said.

-- CNN's Bill Kirkos contributed to this report.

+
+ + +
+
+ +
+
+
+

Personal Finance

+ +
+ + +
+
+ +
+
+

CNNMoney Sponsors

+
+
    +
  • +
    + +
    +
  • +
  • +
    + +
    +
  • +
  • +
    + +
    +
  • +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+ +
+ + +

+ Most stock quote data provided by BATS. Market indices are shown in real time, except for the DJIA, which is delayed by two minutes. All times are ET. Disclaimer. Morningstar: © 2018 + Morningstar, Inc. All Rights Reserved. Factset: FactSet Research Systems Inc. 2018. All rights reserved. Chicago Mercantile Association: Certain market data is the property of Chicago Mercantile Exchange Inc. and its licensors. All rights reserved. Dow Jones: The Dow Jones branded indices are proprietary to and are calculated, distributed and marketed by DJI Opco, a subsidiary of S&P Dow Jones Indices LLC and have been licensed for use to S&P Opco, LLC and CNN. Standard & Poor's and S&P are registered trademarks of Standard & Poor's Financial Services LLC and Dow Jones is a registered trademark of Dow Jones Trademark Holdings LLC. All content of the Dow Jones branded indices © S&P Dow Jones Indices LLC 2018 + and/or its affiliates. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/fixtures/money.cnn.com/1480437611330.html b/fixtures/money.cnn.com/1480437611330.html deleted file mode 100644 index 57f80138e..000000000 --- a/fixtures/money.cnn.com/1480437611330.html +++ /dev/null @@ -1,23 +0,0 @@ - Hundreds of Chicago O'Hare airport workers go on strike - Nov. 29, 2016

Hundreds of Chicago O'Hare airport workers go on strike

Chicago O'Hare employees vote to strike

Heads up, travelers: Hundreds of workers are striking at Chicago O'Hare International Airport on Tuesday.

Janitors, baggage handlers, cabin cleaners and wheelchair attendants are asking for a $15 hourly wage. Some currently make $10.50 an hour, which is the minimum wage in Chicago.

The effort is part of a broader "Day of Disruption" planned by activist group Fight for $15, which advocates for raising the minimum wage. Uber drivers, fast food workers and home care aides will also walk out on Tuesday.

The Chicago Department of Aviation said it does not believe the work stoppage will affect flights in or out of the nation's second busiest airport. Federal employees, including air traffic controllers and security screeners, are not joining the strike.

Related: Chicago O'Hare airport workers plan strike November 29

The striking workers aren't aiming to disrupt travel, a spokeswoman for the Service Employees International Union said at a press conference last week.

"They do want to gain public support," she said. The airport workers aren't part of the Service Employees International Union, but the group is backing them.

Though the walk out isn't likely to strand passengers, it could cause some operational hiccups.

"Some planes may not get fully cleaned, and bag handling may have some snafus," said Joseph Schwieterman, a transportation expert and professor at DePaul University in Chicago.

Get up-to-the-minute updates: Download CNN MoneyStream

Those participating in the strike are contracted by Prospect Airport Services, AirScrub Inc. and the city of Chicago. They haven't decided how long the strike will last yet, SEIU spokesman Marc Goumbri said.

Kisha Rivera, who works as a cabin cleaner at O'Hare, said she has coworkers who sleep in the airport because they can't afford apartments.

"We work so hard and we hardly even get breaks," she said. "When we go from plane to plane, we can't even go to the bathroom."

O'Hare is a hub for both American Airlines (AAL) and United Airlines (UAL). Both airlines said they prepped for the strike to avoid inconveniencing fliers.

"We are working closely with our vendors to ensure there is no disruption to our operation," American said in a statement.

United said it is "taking the necessary steps to ensure a safe and on-time operation for our customers."

The striking workers will be joined by others protesting low wages at a 12 p.m. rally outside the airport. Concurrent rallies will take place at nearly 20 airports around the country, including Los Angeles International Airport and Newark-Liberty International Airport, Goumbri said.

-- CNN's Bill Kirkos contributed to this report.

Social Surge - What's Trending

Mortgage & Savings

Terms & Conditions apply

NMLS #1136

CNNMoney Sponsors

Partner Offers

\ No newline at end of file diff --git a/fixtures/newrepublic.com--minutes.html b/fixtures/newrepublic.com--minutes.html new file mode 100644 index 000000000..29c5fb4da --- /dev/null +++ b/fixtures/newrepublic.com--minutes.html @@ -0,0 +1,6518 @@ + + + + + + Maybe Donald Trump’s Twitter account is more than just a smoke screen. | The New Republic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
You are using an outdated browser.
Please upgrade your browser
and improve your visit to our site.
+
+
+ + + +
+
+
+ +
+
+
You’ve reached your free article limit. +
+
+ Special offer: Midterm elections package.3 months for $10. + Subscribe +
+ +
+ Are you already a subscriber? + Sign in +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+ +
+

Maybe Donald Trump’s Twitter account is + more than just a smoke screen.

+
+
+ + + + + + +
Spencer Platt/Getty
+
+
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + + + + +
+
+
+ + +
+
+
+ +
+
+
+ + + +
+
+
+ + + + +
+
+
+
+
+
+
+
+
+
+
+
+

It’s been one of the most persistent narratives of the last year: Whenever a damaging Trump + story comes out—particularly one about Trump’s shady business practices and/or conflicts of + interest—he takes to Twitter and says something heinous, absurd, or both. When Trump tweeted + that the cast of Hamilton must apologize to Mike Pence, it was all a ploy to distract the media and the public from the + real stories. And when Trump tweeted a dozen times about Jill Stein’s recount efforts, + he was throwing sand in the eyes of the American public to keep it from + reading a long, detailed, and devastating account of his conflicts of + interest in Sunday’s New York Times. The same goes for his absurd claim on Sunday afternoon that he would have won + the popular vote if “millions” of people hadn’t voted illegally.

+

Some of Trump’s detractors reverse-engineer his personality to fit the news. Depending on + what’s most damaging, he can either be an ignoramus with a non-existent attention span or a + genius who manipulates the media and the public with ease. There are certainly psychological + explanations that help explain why Trump fixated on Hamilton and the recount—one gets at + his perceived rejection by the Manhattan establishment and the other at his constant need to be + validated as a winner; both suggest he has zero tolerance for dissent. It’s also possible that + there is no unified Trump, that he’s just a walking collection of impulses and that his tweets + reflect that.

+
+
+
+
+
+

But if there is a calculation behind Trump’s signal-boosting of seemingly negative news, I + don’t think it’s a ploy to distract the public from damaging stories. Instead, Trump seems to + choose negative stories that play well to his base. A bunch of Broadway actors lecturing the + vice president–elect plays to the us vs. them narrative that was the basis of much of Trump’s + campaign. A recount effort being led by Jill Stein (with an assist from Hillary Clinton) shows + the hypocrisy of the very same elites, after Clinton and her allies spent months attacking Trump + for refusing to say if he would accept the results of the election.

+
+
+
+
+
+
+
+
+
+
+

One of the biggest lessons of the election was that many in the media didn’t understand what + animated Trump’s supporters. Trump does, and overlooking that fact suggests that, three weeks + later, people still aren’t learning the lessons of the election.

+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+
. + + + + + + + \ No newline at end of file diff --git a/fixtures/newrepublic.com.html b/fixtures/newrepublic.com.html new file mode 100644 index 000000000..118a6e95d --- /dev/null +++ b/fixtures/newrepublic.com.html @@ -0,0 +1,801 @@ + + + + + + ‘Fantastic Beasts’: A Nice Place to Visit | The New Republic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
You are using an outdated browser.
Please upgrade your browser
and improve your visit to our site.
+
+
+ + + +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+ +
+

Fantastic Beasts: A Nice Place to + Visit

+

The glorious world-building in the first Harry Potter spin-off + isn't enough to keep viewers coming back.

+
+
+ + + + + + +
Warner Bros.
+
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ + + +
+
+
+ +
+
+
+ +
+
+
+ + +
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

The eight Harry Potter films, which stretched out over nearly a + decade, had a fantastic group of actors at its center. We watched as Daniel Radcliffe and Emma + Watson grew up to deliver skilled, subtle, and fascinating performances—who could have + known their versatility when they were cast at the age of ten? For all the lunacy and whimsy + of the Storied British Actors who surrounded these talented youths in all eight films, it was + the kids who kept us all locked into focus. We cared about these strong, + likeable characters, and their story kept us grounded among the thornier details of Hogwarts, + Quidditch, the Death Eaters, and entire mythology of Rowling’s wider wizarding + world.

+

Fantastic Beasts and Where to Find Them, the first of a promised five films to + spin-off the Potter franchise, has no such charms. Sure, all the fixings + are there—the goblins, the spells, the magical creatures—but these were always + meant to be the garnish rather than the main course. You have to care deeply about the figures + at the center of all this madness, the relatable people who navigate Rowling’s + narrative. But the stars of this film aren’t the people, it’s the world—a + world that feels less like a new, organic story than a brand extension. Now, Harry + Potter is not a terrible brand to extend; spinning off Rowling’s + universe will provide more rewards than another + Transformers movie. I looked forward to every Harry Potter + movie, even the eighth one. But judging by the first film of Fantastic + Beasts, I can’t imagine making it through four more of these + things.

+
+
+
+
+
+

Beasts takes place during the Roaring Twenties—are we going to learn that the + Depression was caused by wizards around film four?—and the plot revolves around Newt + Scamander (Eddie Redmayne), a sort of Dr. Doolittle collector of the eponymous fantastic beasts. + He tries to protect the creatures from extinction and predators, but foolishly, he decides to + take them on a trip from England to New York City. Inevitably, a few escape, and he must track + them down with Tina, a disgraced auror (Katherine Waterson), Jacob, a befuddled human (Dan + Folger), and Tina’s flapper roommate (Alison Sudol). Meanwhile—and this is movie + that is stuffed with meanwhiles—a rogue wizard is wreaking havoc on the human + world, causing major headaches for wizard President, Seraphina Picquery + (Carmen Ejogo), and her top enforcer, Graves (Colin Farrell), who may have other motives. + Meanwhile, a woman runs a cruel anti-witch orphanage that may be hiding the most + dangerous wizard of all. And meanwhile there’s some sort of newspaper baron (Jon + Voight) who I assume will figure into all this more relevantly in future movies.

+
+
+
+
+
+

The film strains considerably + under the weight of all these plot lines—it’s never fun to be the movie with the + origin story. Newt, Tina, and the gang spend an inordinate amount of time tracking down all + those creatures, which keeps them busy while the plot itself unspools, seemingly in the + background. And I’m sorry to say that their story is not particularly compelling. + Redmayne and Waterson are both terrific, charismatic actors, but they’re both tamped + down here, particularly Redmayne, who is so obligated to be “whimsical” in the + Rowling sense that he barely enunciates his dialogue, seemingly whispering all of it out the + side of his mouth. He is so good-hearted, simple, and nondescript that it’s sort of + crazy that he’s going to be the centerpiece of four or five more films. He isn’t + given more motivation than “loves animals,” and an eleventh-hour attempt to give + him a sad backstory feels more tacked on than anything else. Farrell is a potentially worthy + villain, but he has nothing much to do more than glower and, in the climax, give way to a much + more famous, but far less enjoyable, movie star. (When this “surprise” movie + star is revealed, I swear, half my theater groaned.)

+

There’s still a lot to enjoy in Fantastic Beasts. + It’s never unpleasant to luxuriate in Rowling’s wizarding world, and the movie + is full of the little side gags that always populate both her books and these movies. (The + “Niffler” is going to be filling a lot of holiday stockings.) These are + warm-hearted films that do more good than harm: The plot lines move along quickly, and they + generally make sure to provide a good lesson. But Harry Potter felt compelled to exist, + as if Rowling knew she was producing her life’s work and wanted to nail down every + detail. Here, it feels again like an extension of world that she—and Warner + Bros.—loved so much they didn’t want to leave it. I suspect you’ll want + to hang out more in this world, rather that spend time with the wizards at the center of it. + It just feels a little more wheezing than you’d like it to. You think + that’s a problem now? Just wait: We’ve got another decade of these movies left + to go.

+
+
+
+
+
+

Grade: C+.

+

Grierson & Leitch write about the movies regularly for the New Republic and host + a podcast on film. Follow them on Twitter @griersonleitch or visit their site griersonleitch.com.

+

+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/newrepublic.com/1480434805231.html b/fixtures/newrepublic.com/1480434805231.html deleted file mode 100644 index edd897db9..000000000 --- a/fixtures/newrepublic.com/1480434805231.html +++ /dev/null @@ -1 +0,0 @@ - ‘Fantastic Beasts’: A Nice Place to Visit | New Republic
Warner Bros.

Fantastic Beasts: A Nice Place to Visit

The glorious world-building in the first Harry Potter spin-off isn't enough to keep viewers coming back.

The eight Harry Potter films, which stretched out over nearly a decade, had a fantastic group of actors at its center. We watched as Daniel Radcliffe and Emma Watson grew up to deliver skilled, subtle, and fascinating performances—who could have known their versatility when they were cast at the age of ten? For all the lunacy and whimsy of the Storied British Actors who surrounded these talented youths in all eight films, it was the kids who kept us all locked into focus. We cared about these strong, likeable characters, and their story kept us grounded among the thornier details of Hogwarts, Quidditch, the Death Eaters, and entire mythology of Rowling’s wider wizarding world.

Fantastic Beasts and Where to Find Them, the first of a promised five films to spin-off the Potter franchise, has no such charms. Sure, all the fixings are there—the goblins, the spells, the magical creatures—but these were always meant to be the garnish rather than the main course. You have to care deeply about the figures at the center of all this madness, the relatable people who navigate Rowling’s narrative. But the stars of this film aren’t the people, it’s the world—a world that feels less like a new, organic story than a brand extension. Now, Harry Potter is not a terrible brand to extend; spinning off Rowling’s universe will provide more rewards than another Transformers movie. I looked forward to every Harry Potter movie, even the eighth one. But judging by the first film of Fantastic Beasts, I can’t imagine making it through four more of these things.

Beasts takes place during the Roaring Twenties—are we going to learn that the Depression was caused by wizards around film four?—and the plot revolves around Newt Scamander (Eddie Redmayne), a sort of Dr. Doolittle collector of the eponymous fantastic beasts. He tries to protect the creatures from extinction and predators, but foolishly, he decides to take them on a trip from England to New York City. Inevitably, a few escape, and he must track them down with Tina, a disgraced auror (Katherine Waterson), Jacob, a befuddled human (Dan Folger), and Tina’s flapper roommate (Alison Sudol). Meanwhile—and this is movie that is stuffed with meanwhiles—a rogue wizard is wreaking havoc on the human world, causing major headaches for wizard President, Seraphina Picquery (Carmen Ejogo), and her top enforcer, Graves (Colin Farrell), who may have other motives. Meanwhile, a woman runs a cruel anti-witch orphanage that may be hiding the most dangerous wizard of all. And meanwhile there’s some sort of newspaper baron (Jon Voight) who I assume will figure into all this more relevantly in future movies.

The film strains considerably under the weight of all these plot lines—it’s never fun to be the movie with the origin story. Newt, Tina, and the gang spend an inordinate amount of time tracking down all those creatures, which keeps them busy while the plot itself unspools, seemingly in the background. And I’m sorry to say that their story is not particularly compelling. Redmayne and Waterson are both terrific, charismatic actors, but they’re both tamped down here, particularly Redmayne, who is so obligated to be “whimsical” in the Rowling sense that he barely enunciates his dialogue, seemingly whispering all of it out the side of his mouth. He is so good-hearted, simple, and nondescript that it’s sort of crazy that he’s going to be the centerpiece of four or five more films. He isn’t given more motivation than “loves animals,” and an eleventh-hour attempt to give him a sad backstory feels more tacked on than anything else. Farrell is a potentially worthy villain, but he has nothing much to do more than glower and, in the climax, give way to a much more famous, but far less enjoyable, movie star. (When this “surprise” movie star is revealed, I swear, half my theater groaned.)

There’s still a lot to enjoy in Fantastic Beasts. It’s never unpleasant to luxuriate in Rowling’s wizarding world, and the movie is full of the little side gags that always populate both her books and these movies. (The “Niffler” is going to be filling a lot of holiday stockings.) These are warm-hearted films that do more good than harm: The plot lines move along quickly, and they generally make sure to provide a good lesson. But Harry Potter felt compelled to exist, as if Rowling knew she was producing her life’s work and wanted to nail down every detail. Here, it feels again like an extension of world that she—and Warner Bros.—loved so much they didn’t want to leave it. I suspect you’ll want to hang out more in this world, rather that spend time with the wizards at the center of it. It just feels a little more wheezing than you’d like it to. You think that’s a problem now? Just wait: We’ve got another decade of these movies left to go.

Grade: C+.

Grierson & Leitch write about the movies regularly for the New Republic and host a podcast on film. Follow them on Twitter @griersonleitch or visit their site griersonleitch.com.

\ No newline at end of file diff --git a/fixtures/newrepublic.com/1480446502259.html b/fixtures/newrepublic.com/1480446502259.html deleted file mode 100644 index 460f1d0b0..000000000 --- a/fixtures/newrepublic.com/1480446502259.html +++ /dev/null @@ -1 +0,0 @@ - Maybe Donald Trump’s Twitter account is more than just a smoke screen. | New Republic
Spencer Platt/Getty

Maybe Donald Trump’s Twitter account is more than just a smoke screen.

It’s been one of the most persistent narratives of the last year: Whenever a damaging Trump story comes out—particularly one about Trump’s shady business practices and/or conflicts of interest—he takes to Twitter and says something heinous, absurd, or both. When Trump tweeted that the cast of Hamilton must apologize to Mike Pence, it was all a ploy to distract the media and the public from the real stories. And when Trump tweeted a dozen times about Jill Stein’s recount efforts, he was throwing sand in the eyes of the American public to keep it from reading a long, detailed, and devastating account of his conflicts of interest in Sunday’s New York Times. The same goes for his absurd claim on Sunday afternoon that he would have won the popular vote if “millions” of people hadn’t voted illegally.

Some of Trump’s detractors reverse-engineer his personality to fit the news. Depending on what’s most damaging, he can either be an ignoramus with a non-existent attention span or a genius who manipulates the media and the public with ease. There are certainly psychological explanations that help explain why Trump fixated on Hamilton and the recount—one gets at his perceived rejection by the Manhattan establishment and the other at his constant need to be validated as a winner; both suggest he has zero tolerance for dissent. It’s also possible that there is no unified Trump, that he’s just a walking collection of impulses and that his tweets reflect that.

But if there is a calculation behind Trump’s signal-boosting of seemingly negative news, I don’t think it’s a ploy to distract the public from damaging stories. Instead, Trump seems to choose negative stories that play well to his base. A bunch of Broadway actors lecturing the vice president–elect plays to the us vs. them narrative that was the basis of much of Trump’s campaign. A recount effort being led by Jill Stein (with an assist from Hillary Clinton) shows the hypocrisy of the very same elites, after Clinton and her allies spent months attacking Trump for refusing to say if he would accept the results of the election.

One of the biggest lessons of the election was that many in the media didn’t understand what animated Trump’s supporters. Trump does, and overlooking that fact suggests that, three weeks later, people still aren’t learning the lessons of the election.

November 29, 2016

Mandell Ngan/Getty Images

Do millennials hate democracy?

In a forthcoming article for The Journal of Democracy, political scientists Yascha Mounk and Roberto Stefan Foa describe a disturbing global trend they call “democratic deconsolidation”—meaning a growing lack of faith in democracy. As reported in The New York Times, millennials, in particular, appear to be turning their backs on democracy:

Drawing on data from the European and World Values Surveys, the researchers found that the share of Americans who say that army rule would be a “good” or “very good” thing had risen to 1 in 6 in 2014, compared with 1 in 16 in 1995.

That trend is particularly strong among young people. For instance, in a previously published paper, the researchers calculated that 43 percent of older Americans believed it was illegitimate for the military to take over if the government were incompetent or failing to do its job, but only 19 percent of millennials agreed. The same generational divide showed up in Europe, where 53 percent of older people thought a military takeover would be illegitimate, while only 36 percent of millennials agreed.

This is worrying data but it can also be interpreted in less alarming ways. Earlier generations that had a stronger faith in democracy grew up in a period in which there were large-scale systematic alternatives to democracy (in the form of fascism and communism) that America defined itself against. As such alternatives were defeated or retreated from the world stage, the salience of democracy as a defining feature of a polity became less important.

Further, some of the supposed turn against democracy seems to be due to people being upset at gridlock. It’s worth noting the millennials were among the age cohorts least likely to vote for Donald Trump, whose campaign as an “antisystem outsider” embodies democratic disillusionment. While the expression of that disillusionment is undeniably depressing, there’s reason to think that it could be solved by a more responsive politics.

Wikimedia Commons

The center of American politics will always have David Brooks.

His answer for the coming reign of Donald Trump is, well, his answer for everything—a return to long-lost centrism. Brooks has not one, but two Bills backing him up—Bill Kristol and Bill Galston—who have come together to write a statement pushing for a “New Center.”

Brooks sees this center as somewhere “between the alt-right and the alt-left, between Trumpian authoritarianism and Sanders socialism.” But just because both Trump and Sanders aren’t moderate centrists doesn’t mean that Sanders’s social democratic politics is equal in any way to Trump’s racism, misogyny, and penchant for tyrannical tweets. As my colleague Ryu Spaeth notes, in this era of hyper-partisanship the center is more like a “blank void” than some magical spot between Trump and Sanders.

And while Brooks sees Trump ushering in a new era in which partisanship is smashed up to create new, unlikely alliances, we have yet to see any evidence of that, with moderate Republicans like Mitt Romney and Paul Ryan scrambling to take advantage of a Trump presidency to further their own partisan aims.

Instead of reflecting on the ways in which centrism has failed both in politics and in policy, Brooks sees moderation as an inherently good thing that has somehow fallen out of fashion and just needs to be reinvigorated. But Hillary Clinton—who Brooks described as someone who works “very well with Republicans”—just lost the election to Donald Trump, as did moderates like Jeb Bush and John Kasich. With no actual support other than a few people like David Brooks, it doesn’t look like the center can hold.

Alex Wong/Getty Images

Tom Price as HHS Secretary is a nightmare scenario for sick Americans.

Donald Trump has found his next Cabinet pick. According to The New York Times, the representative from Georgia will head the Department of Health and Human Services—and that’s terrible news for anyone who depends on the Affordable Care Act.

Via NBC:

“Chairman Price, a renowned physician, has earned a reputation for being a tireless problem solver and the go-to expert on healthcare policy, making him the ideal choice to serve in this capacity,” Trump said in a statement. “He is exceptionally qualified to shepherd our commitment to repeal and replace Obamacare and bring affordable and accessible healthcare to every American.”

The ACA is unquestionably flawed. Its premiums are expensive and are set to become even more expensive. But it’s still preferable to Price’s proposed alternative.

His Empowering Patients First Act would replace the ACA with a series of age-adjusted tax credits. Under Price’s plan, individuals would receive the yearly credits to subsidize the cost of their private insurance plans. Adults between the ages of 18 and 35, for example, would receive a credit of $1,200. That might be enough to subsidize the insurance needs of young adults in perfect health, but it’s no good to anyone else.

Price also supports the establishment of high-risk insurance pools on a state-by-state basis. As the Commonwealth Fund noted here, high-risk pools would penalize Americans with pre-existing conditions: It’s expensive to have a disability. Though his plan does provide block grants to states for the purposes of subsidizing expenses, they’d have significant leeway to use them as their respective governments see fit. The South’s general failure to expand Medicaid offers little hope states would act responsibly here.

Price’s policies are uniquely appalling considered in light of his profession: He is a physician. But rather than prioritize the needs of vulnerable Americans, he’s built a career by advancing right-wing dogma at their expense. He is a perfect fit for the Trump administration, and a nightmare for sick Americans.

Getty

Donald Trump wants to revoke the citizenship of flag-burners. What?

People across this proud nation are waking up. The worst among them are checking their phones immediately and the worst among that bad subset are opening Twitter, which means they are getting their just desserts: an encounter with this very bizarre tweet, which was sent by our president-elect early Tuesday morning:

So what is going on here? The most common interpretation of Trump’s Twitter outbursts is that they are provocations intended to distract from more damaging stories. But, while one could argue that Trump’s transition has been characterized by bad press, the last twelve hours or so have been characterized by relative calm. The biggest news is that Trump picked Tom Price to head Health and Human Services, a move that is being cheered by the right wing, particularly the conservative corner of it.

But as I wrote yesterday, I don’t think this interpretation is quite right. Instead, Trump is more likely trying to push the media and political elite into a frenzy, pandering to his populist base with his ability to make their enemies mad online. And there’s no bigger pander than opposing flag-burning.

Despite the fact that laws against flag-burning have been declared unconstitutional, amendments banning the practice appear perennially. Hillary Clinton co-sponsored such a bill in 2005, though hers did not declare that flag-burners should have their citizenship revoked. (Interestingly, Mitch McConnell, arguably the most important person in Washington from Trump’s perspective, was instrumental in killing that bill, though only because he wanted to protect his First Amendment right to raise boatloads of cash.) Flag-burning is protected speech under the Constitution but attempting to criminalize it pays political dividends.

Of course, Trump’s tweet is still important insofar as it includes the tyrannical possibility (“perhaps” is one of Trump’s underrated tics) of removing the citizenship of those who burn the flag. This is pernicious, because it points to a playbook for the future—one in which Trump proposes loss of citizenship for the families of suspected terrorists, for instance, or for criticizing the president.

November 28, 2016

Giphy/Bye Bye Birdie

Donald Trump can’t stop calling Barack Obama. Is that a good thing?

Trump’s entire political career is built on peddling the lie that Obama was not born in America. And much of Trump’s presidential campaign—at least the parts that weren’t devoted to claiming that Hillary Clinton should be jailed—was spent attacking Obama’s actions in office. Obamacare was a “disaster” that had to be repealed and replaced. The Iran Deal, Cuba thaw, and Paris climate accord were poorly negotiated and bad for America. Obama’s foreign policy, particularly in Libya, Syria, and Iraq, emboldened ISIS. Trump has promised to reverse Obama’s executive actions protecting the children of undocumented immigrants on day one of his administration.

And yet, since becoming president-elect, Trump has seemingly warmed to Obama. Last week he told The New York Times, I had a great meeting with President Obama. I never met him before. I really liked him a lot.” On Monday, White House Press Secretary Josh Earnest said that Trump and Obama had spoken “a handful of times,” including a 45-minute phone call that took place over the weekend.

In the Times interview and elsewhere, Trump has signaled a willingness to rethink his positions on climate change and torture, among other things. As The Huffington Post’s Sam Stein wrote on Monday, Trump may be more malleable than many believe. But Trump’s calculated reality-show battle for secretary of state has already shown tension between the establishment and anti-establishment wings that he is ostensibly trying to unite in his administration. If his thawing on Obama is genuine, it will add even more tensions between these camps—and possibly cost Trump allies in both wings.

Trump won the presidency with a very small tent, and he will be in for some pain if he rapidly tries to make that tent bigger, especially if that comes in the form of catering to Obama. Of course, Trump could also be playing a game, assuaging Obama fans during the lame duck only to throw them and Obama under the bus come January 20.

Ben Jackson / Getty Images

Is Steve Bannon’s dream of a global alt-right coming true?

Following Donald Trump’s victory in the American presidential race, pundits have warned of a domino effect in Europe, where a stuttering economic recovery, growing euro-skepticism, and the migrant crisis have stoked far-right nationalist movements. On Sunday, it seemed that another domino fell: French conservatives chose Francois Fillon over the centrist Alain Juppe in a surprise primary landslide. In the general election, Fillon—who advocates a pro-Russia foreign policy, a “clash of civilizations” approach to Islam, and legal measures to undermine gay rights—will run against the far-right National Front candidate Marine Le Pen, also known as the “French Donald Trump.” With President Francois Hollande suffering from abysmal approval ratings, the election is shaping up to be the most unpalatable French liberals have faced in recent history.

It is also not a good omen for German Chancellor Angela Merkel, who is seeking a fourth term in 2017 and will likely face opposition from the Alternative for Germany party, another iteration of the far right. If Merkel is unseated, the Western democratic establishment may find itself leaderless.

For Bannon, Trump’s anointed chief of staff and former chairman of the alt-right haven Breitbart News, it’s cause to celebrate. He has already hinted at expanding the site’s operations to new bureaus in France and Germany to help facilitate Trump-like upsets there. Merkel is taking him seriously as an opponent, issuing warnings of the potential for fake news to influence German elections. “We shouldn’t underestimate what’s happening on the internet,” Merkel said in a speech to parliament last week. “Opinions today are formed differently than 25 years ago. Fake pages, bots, and trolls can distort views.”

Alex Wong / Getty Images

When it comes to Professor Watchlist, timing is everything.

Last week, a nonprofit organization called Turning Point USA launched Professor Watchlist, a website that lists the names, schools, offenses, and sometimes photos of left-leaning academics thought to discriminate against their more conservative students. The watchlist’s mission, according to the website, is to “expose and document college professors who discriminate against conservative students and advance leftist propaganda in the classroom.” There is a user submission feature that allows visitors to submit the names and information of professors who “discriminate against conservative students and advance leftist propaganda in the classroom.”

The New York Times today wrote that the site is seen as a “threat to academic freedom.” And while Turning Point USA founder Charlie Kirk, a rising star in conservative politics, denied trying to ride the newfound popularity of the alt-right in the wake of Donald Trump’s election, it’s hard not to be concerned about the implications of such a site. When interviewed by Slate, Kirk called the whole matter a coincidence and denounced any affiliation to the alt-right, reiterating his group’s mainstream conservative bent. However, with the definition of mainstream conservatism changing every day, timing and context are everything. It’s hard not to feel as though Professor Watchlist is a one-stop shop for those with less innocent intentions, potentially threatening the ideas of free speech it seeks to protect.

Spencer Platt/Getty

Here’s how to understand Trump’s Mitt Romney subplot.

Trump has turned the fight to be his secretary of state into something you might expect on The Bachelorette. With two frontrunners (Mitt Romney and Rudy Giuliani) and a dark horse (Bob Corker), Trump and his team have been teasing out developments over the last ten days. Will Trump make nice with Romney or will he force Romney to make a humiliating public apology first? Will the debate within Trump’s team be eclipsed by the supposed behind-the-scenes fight between outsiders who hate Romney and GOP insiders who desperately want to add one of their own to the cabinet? Will anyone care that neither Romney nor Giuliani have zero meaningful foreign policy experience?

Even for Trump, the drama here seems canned. Take campaign manager Kellyanne Conway, whose new role seems to be “go on TV and act as a surrogate for Trump’s base.” Last week, she broke with tradition and weighed in on the transition publicly:

Then she hit the Sunday shows and did more of the same, telling CNN’s Dana Bash that Trump’s supporters would feel “betrayed” if he picked Romney. She added, “I’m all for party unity, but I’m not sure we have to pay for that with the secretary of state position.” She said the same thing, more or less, to ABC’s Martha Raddatz. And on Monday, Trump’s on-again, off-again BFF Joe “Morning Joe” Scarborough reported that Trump was “furious” with Conway over her comments and that, per a source, “Kellyanne went rogue at Donald Trump’s expense at the worst possible time.”

The question of whether or not Conway “went rogue” is very much an open one. Asked by Raddatz if Trump “wanted her” to tweet about his base’s feelings about Romney, Conway refused to answer. But it is telling that no one bothered to pull Conway from the Sunday shows. When it comes to explaining Trump’s motivations ineptitude is always a fair guess, but the drama here is so phony and familiar that the most plausible option is that all of this is for the ratings, so to speak.

None of this has anything to do with American foreign policy—it’s drama for drama’s sake, which is something we better get used to. But that doesn’t mean that it isn’t noteworthy. Whoever Trump choses, Conway has set it up so that he will either be seen as repudiating his base or rewarding it. The result of the pageant will tell us how much Trump thinks he needs his base.

November 26, 2016

Sven Creutzmann/Mambo Photo/Getty Images

The death of Fidel Castro is the perfect Rorschach test for our times.

What you thought of Castro, who died at the age of 90 on Friday, has always been a reflection of your politics, your nationality, and your age. He was a hero of the revolutionary left in Latin America, proving that a ragtag band of guerrillas could overthrow the Western Hemisphere’s hegemon. He was a communist stooge to the American officials who repeatedly tried to kill him, presiding over an outpost of the Soviet Union just off the coast of Florida. To Cubans themselves he was a dictator who impoverished the country, jailed and killed thousands of dissidents, and stripped citizens of their basic rights. And to those who came of age in the post-Cold War era, he was simultaneously a retro figure on a T-shirt and a cranky old man in an Adidas tracksuit.

The disintegration of the post-Cold War order—culminating in Brexit in Great Britain and the election of Donald Trump in the United States—has been mirrored in the chaotic response to Castro’s death. Jeremy Corbyn, the leader of Britain’s Labour Party, hailed Castro as a “champion of social justice,” which is decidedly more sympathetic than anything Tony Blair might have said. Paeans have poured in from predictable quarters (Brazil’s Dilma Rousseff, herself a one-time revolutionary) and those less so (Canada’s Justin Trudeau, the scion of a former prime minister). In the United States, a Democratic president who ushered in a new relationship with Cuba largely based on free market liberalization is being succeeded by a Republican businessman who has threatened to roll back this progress for a “better deal.”

What Trump and Cuban President Raul Castro plan to do now is the ultimate question hanging over Cuba in the wake of Fidel’s death. So far, Trump has indicated nothing more than that he is aware of the news, which we can all agree, even in these divided times, is a good start.

November 23, 2016

Zach Gibson / Getty Images

Republicans celebrating the overtime injunction forgot about their new working class base.

On Tuesday, U.S. District Judge Amos Mazzant of Texas blocked the Obama administration rule to extend mandatory overtime pay to more than four million salaried workers. Expected to take effect December 1, the rule would have doubled the salary limit for overtime eligible employees to $47,500 from $23,660.

In response, Republican politicians tweeted their enthusiasm and support for Mazzant’s decision, saying it was an important step in reining in the Obama administration’s egregious use of executive power. A win for small businesses and a long-disrespected Congress, most insisted.

But, as Igor Volksy pointed out, those very politicians failed to disclose the uncomfortable fact that they are far wealthier than the millions of people who would have benefited from this regulation. These politicians include Speaker Paul Ryan:

Ted Cruz:

and John McCain:

So much for being the new champions of the working class.

\ No newline at end of file diff --git a/fixtures/news.mynavi.jp.html b/fixtures/news.mynavi.jp.html new file mode 100644 index 000000000..7d5208559 --- /dev/null +++ b/fixtures/news.mynavi.jp.html @@ -0,0 +1,1510 @@ + + + + + 人気の圧縮・解凍ソフト「WinRAR」に脆弱性、アップデートを | TECH+(テックプラス) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + マイナビニュースマイナビ + + +
+
+
+
+ +
+
+
+ +
+
+ + + + + +
+
+
+
+ +
+ おすすめのキーワード + + + キーワード一覧 +
+
+ チャンネル一覧 + +
+ +
+ 関連サイト + +
+ Navi it search +
+
+ +
+ Navi seminar +
+
+
+ +
+ マイナビニュース公式SNS +
    +
  • + +
  • +
  • + +
  • +
  • + ] +
  • +
+
+
+
+
+
+ + +
+ + +
+
+ + +
+ + + + + +
+ + + + + + +
+ + + + +
+

+ 人気の圧縮・解凍ソフト「WinRAR」に脆弱性、アップデートを +

+
+
+

+ +

+ +
+ 著者:後藤大地 +
+
+ + +
+ +
+
    +
  • +
    + +
    + +
  • +
  • +
    + +
    + +
  • +
  • +
    + +
    + + +
  • +
  • +
    + +
    + +
  • +
+
+ + +
+ +
+ + + +
+ +
+

Check Point Software Technologiesは2月20日(米国時間)、「Extracting a 19 Year Old Code Execution from WinRAR - Check Point Research」において、人気の高い圧縮・解凍ソフトウェアであるWinRARに長年にわたってセキュリティ脆弱性が存在していると伝えた。

+ +

この脆弱性の影響により、細工されたファイルを展開する段階でマルウェアに感染させられる可能性があり、最終的に攻撃者によってシステムの制御権が乗っ取られる危険性があるという。

+ +

Check Point Software Technologiesがどのようにこの脆弱性を発見したか、攻撃者がどのような手口でこの脆弱性を突いてマルウェアの感染を実施するのかは次のページに詳細がまとまっている。

+ + + + +
    +
  • +Extracting a 19 Year Old Code Execution from WinRAR - Check Point Software Technologies

    「WinRAR」の操作画面

    +
  • +
+ +

WinRARは世界中に5億人のユーザーがいると見られており、かなりの数の人がこの脆弱性の影響を受けるおそれがある。この脆弱性は19年以上にわたって存在していた可能性があることも指摘されている。

+ +

WinRARの開発元はすでにこの脆弱性の原因となった形式のファイルサポートを廃止することを決定しており、WinRAR 5.70 beta 1ですでにACEフォーマットのサポートが中止されている。今後、ベンダーから提供される情報に注力するとともに、最新版が公開された場合には迅速にアップデートすることが望まれる。

+ +
+ + +
+ + + + + + + + + + + + + +
+

+ Members+ 会員限定記事 +

+ +
+ + +
+ +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + +
+ +
+ +
+ + + + +
+ +
+
+ + + +
+ +
+
+ + + +
+ +
+
+ + + + +
+ +
+ +
+
+ + +
+
+ +
+ +
+
+
+ + + +
+ +
+ + + +
    +
  • + + + +
  • +
  • + + + +
  • +
+ + + + +
+
+
+ こちらも注目 +
+
+
+
+ + + + + + + + +
+
+

このカテゴリーについて

+
+

セキュリティの最新技術を紹介します。マルウェアやフィッシングサイトはもちろん、標的型攻撃、ハクティビストなども網羅します。

+
+
+
+ + + +
+
+ + +
+ +
+ + + + +
+
+ + +
+ + +
+
+
+ + + +
+ + + +
+ + + + + + + + + + diff --git a/fixtures/news.mynavi.jp/1550913587143.html b/fixtures/news.mynavi.jp/1550913587143.html deleted file mode 100644 index ff69ab6ee..000000000 --- a/fixtures/news.mynavi.jp/1550913587143.html +++ /dev/null @@ -1,1423 +0,0 @@ - - - - - - - 人気の圧縮・解凍ソフト「WinRAR」に脆弱性、アップデートを | マイナビニュース - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- - - -
- - -
- - - - - - - - - - - - - - - - -
- - - - - -
- - - - -
- - - - - - - - -
- - -

- 2019/02/22 17:23:44 -

-

- -
- 人気の圧縮・解凍ソフト「WinRAR」に脆弱性、アップデートを -
-

-
- - - - - - -
-
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- - PR - -
- - - - -
- - - -
-

Check Point Software Technologiesは2月20日(米国時間)、「Extracting a 19 Year Old Code Execution from WinRAR - Check Point Research」において、人気の高い圧縮・解凍ソフトウェアであるWinRARに長年にわたってセキュリティ脆弱性が存在していると伝えた。

- -

この脆弱性の影響により、細工されたファイルを展開する段階でマルウェアに感染させられる可能性があり、最終的に攻撃者によってシステムの制御権が乗っ取られる危険性があるという。

- -

Check Point Software Technologiesがどのようにこの脆弱性を発見したか、攻撃者がどのような手口でこの脆弱性を突いてマルウェアの感染を実施するのかは次のページに詳細がまとまっている。

- - - -
    -
  • -Extracting a 19 Year Old Code Execution from WinRAR - Check Point Software Technologies

    「WinRAR」の操作画面

    -
  • -
- -

WinRARは世界中に5億人のユーザーがいると見られており、かなりの数の人がこの脆弱性の影響を受けるおそれがある。この脆弱性は19年以上にわたって存在していた可能性があることも指摘されている。

- -

WinRARの開発元はすでにこの脆弱性の原因となった形式のファイルサポートを廃止することを決定しており、WinRAR 5.70 beta 1ですでにACEフォーマットのサポートが中止されている。今後、ベンダーから提供される情報に注力するとともに、最新版が公開された場合には迅速にアップデートすることが望まれる。

- -
- - -
- - - - - - -

※本記事は掲載時点の情報であり、最新のものとは異なる場合があります。予めご了承ください。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - - - - - - - -
- - - -
- -
- -
- -
-
- - - - - -
- - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
- - - - -
-
- - - - - - - - - - - -
- -
- - - - - - diff --git a/fixtures/news.nationalgeographic.com/1481919545107.html b/fixtures/news.nationalgeographic.com.html similarity index 100% rename from fixtures/news.nationalgeographic.com/1481919545107.html rename to fixtures/news.nationalgeographic.com.html diff --git a/fixtures/nymag.com.html b/fixtures/nymag.com.html new file mode 100644 index 000000000..83071ef77 --- /dev/null +++ b/fixtures/nymag.com.html @@ -0,0 +1,3054 @@ + + + + + + + + + + + + + + How Fox News Women Took Down Roger Ailes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ Alert Icon +

+
+
+ + + Double Right Chevrons +
+ + +
+
+
+ +
+
+ + + +
+ + +
+
+
+ + +
+
+ +
+ + New York Magazine +

+ The Revenge of Roger’s Angels +

+

How Fox News women took down the most powerful, and predatory, man in media.

+
+ + + By + + +

+
+ +
+ +
+ Roger Ailes. + + Photo: Wesley Mann/AUGUST +
+
+ + + +
+ +
+
+
+ + + +
+ + +
+ + + +
+
+
+ + + +
+ + + + + +
+
+
+
+ + + media + +
+
+

How Fox News Women Took Down Roger Ailes

+
+
+
+
+
+
+
+
+

It took 15 days to end the mighty 20-year reign of Roger Ailes at Fox News, one of the most storied runs in media and political history. Ailes built not just a conservative cable news channel but something like a fourth branch of government; a propaganda arm for the GOP; an organization that determined Republican presidential candidates, sold wars, and decided the issues of the day for 2 million viewers. That the place turned out to be rife with grotesque abuses of power has left even its liberal critics stunned. More than two dozen women have come forward to accuse Ailes of sexual harassment, and what they have exposed is both a culture of misogyny and one of corruption and surveillance, smear campaigns and hush money, with implications reaching far wider than one disturbed man at the top.

+ +

It began, of course, with a lawsuit. Of all the people who might have brought down Ailes, the former Fox & Friends anchor Gretchen Carlson was among the least likely. A 50-year-old former Miss America, she was the archetypal Fox anchor: blonde, right-wing, proudly anti-intellectual. A memorable Daily Show clip showed Carlson saying she needed to Google the words czar and ignoramus. But television is a deceptive medium. Off-camera, Carlson is a Stanford- and Oxford-educated feminist who chafed at the culture of Fox News. When Ailes made harassing comments to her about her legs and suggested she wear tight-fitting outfits after she joined the network in 2005, she tried to ignore him. But eventually he pushed her too far. When Carlson complained to her supervisor in 2009 about her co-host Steve Doocy, who she said condescended to her on and off the air, Ailes responded that she was “a man hater” and a “killer” who “needed to get along with the boys.” After this conversation, Carlson says, her role on the show diminished. In September 2013, Ailes demoted her from the morning show Fox & Friends to the lower-rated 2 p.m. time slot.

+ +

Carlson knew her situation was far from unique: It was common knowledge at Fox that Ailes frequently made inappropriate comments to women in private meetings and asked them to twirl around so he could examine their figures; and there were persistent rumors that Ailes propositioned female employees for sexual favors. The culture of fear at Fox was such that no one would dare come forward. Ailes was notoriously paranoid and secretive — he built a multiroom security bunker under his home and kept a gun in his Fox office, according to Vanity Fair — and he demanded absolute loyalty from those who worked for him. He was known for monitoring employee emails and phone conversations and hiring private investigators. “Watch out for the enemy within,” he told Fox’s staff during one companywide meeting.

+ +

Taking on Ailes was dangerous, but Carlson was determined to fight back. She settled on a simple strategy: She would turn the tables on his surveillance. Beginning in 2014, according to a person familiar with the lawsuit, Carlson brought her iPhone to meetings in Ailes’s office and secretly recorded him saying the kinds of things he’d been saying to her all along. “I think you and I should have had a sexual relationship a long time ago, and then you’d be good and better and I’d be good and better. Sometimes problems are easier to solve” that way, he said in one conversation. “I’m sure you can do sweet nothings when you want to,” he said another time.

+ +

After more than a year of taping, she had captured numerous incidents of sexual harassment. Carlson’s husband, sports agent Casey Close, put her in touch with his lawyer Martin Hyman, who introduced her to employment attorney Nancy Erika Smith. Smith had won a sexual-harassment settlement in 2008 for a woman who sued former New Jersey acting governor Donald DiFranceso. “I hate bullies,” Smith told me. “I became a lawyer to fight bullies.” But this was riskier than any case she’d tried. Carlson’s Fox contract had a clause that mandated that employment disputes be resolved in private arbitration—which meant Carlson’s case could be thrown out and Smith herself could be sued for millions for filing.

+ +

Carlson’s team decided to circumvent the clause by suing Ailes personally rather than Fox News. They hoped that with the element of surprise, they would be able to prevent Fox from launching a preemptive suit that forced them into arbitration. The plan was to file in September 2016 in New Jersey Superior Court (Ailes owns a home in Cresskill, New Jersey). But their timetable was pushed up when, on the afternoon of June 23, Carlson was called into a meeting with Fox general counsel Dianne Brandi and senior executive VP Bill Shine, and fired the day her contract expired.* Smith, bedridden following surgery for a severed hamstring, raced to get the suit ready. Over the Fourth of July weekend, Smith instructed an IT technician to install software on her firm’s network and Carlson’s electronic devices to prevent the use of spyware by Fox. “We didn’t want to be hacked,” Smith said. They filed their lawsuit on July 6.

+ +

Carlson and Smith were well aware that suing Ailes for sexual harassment would be big news in a post-Cosby media culture that had become more sensitive to women claiming harassment; still, they were anxious about going up against such a powerful adversary. What they couldn’t have known was that Ailes’s position at Fox was already much more precarious than ever before.

+ +

When Carlson filed her suit, 21st Century Fox executive chairman Rupert Murdoch and his sons, James and Lachlan, were in Sun Valley, Idaho, attending the annual Allen & Company media conference. James and Lachlan, who were not fans of Ailes’s, had been taking on bigger and bigger roles in the company in recent years (technically, and much to his irritation, Ailes has reported to them since June 2015), and they were quick to recognize the suit as both a big problem — and an opportunity. Within hours, the Murdoch heirs persuaded their 85-year-old father, who historically has been loath to undercut Ailes publicly, to release a statement saying, “We take these matters seriously.” They also persuaded Rupert to hire the law firm Paul, Weiss, Rifkind, Wharton & Garrison to conduct an internal investigation into the matter. Making things look worse for Ailes, three days after Carlson’s suit was filed, New York published the accounts of six other women who claimed to have been harassed by Ailes over the course of three decades.

+ +

A few hours after the New York report, Ailes held an emergency meeting with longtime friend Rudy Giuliani and lawyer Marc Mukasey at his home in Garrison, New York, according to a high-level Fox source. Ailes vehemently denied the allegations. The next morning, Ailes and his wife, Elizabeth, turned his ­second-floor office at Fox News into a war room. “It’s all bullshit! We have to get in front of this,” he said to executives. “This is not about money. This is about his legacy,” said Elizabeth, according to a Fox source. As part of his counteroffensive, Ailes rallied Fox News employees to defend him in the press. Fox & Friends host Ainsley Earhardt called Ailes a “family man”; Fox Business anchor Neil Cavuto wrote, reportedly of his own volition, an op-ed labeling Ailes’s accusers “sick.” Ailes’s legal team attempted to intimidate a former Fox correspondent named Rudi Bakhtiar who spoke to New York about her harassment.

+ +

Ailes told executives that he was being persecuted by the liberal media and by the Murdoch sons. According to a high-level source inside the company, Ailes complained to 21st Century Fox general counsel Gerson Zweifach that James, whose wife had worked for the Clinton Foundation, was trying to get rid of him in order to help elect Hillary Clinton. At one point, Ailes threatened to fly to France, where Rupert was vacationing with his wife, Jerry Hall, in an effort to save his job. Perhaps Murdoch told him not to bother, because the trip never happened.

+ +

According to a person close to the Murdochs, Rupert’s first instinct was to protect Ailes, who had worked for him for two decades. The elder Murdoch can be extremely loyal to executives who run his companies, even when they cross the line. (The most famous example of this is Sun editor Rebekah Brooks, whom he kept in the fold after the U.K. phone-hacking scandal.) Also, Ailes has made the Murdochs a lot of ­money — Fox News generates more than $1 billion annually, which accounts for 20 percent of 21st Century Fox’s profits — and Rupert worried that perhaps only Ailes could run the network so successfully. “Rupert is in the clouds; he didn’t appreciate how toxic an environment it was that Ailes created,” a person close to the Murdochs said. “If the money hadn’t been so good, then maybe they would have asked questions.”

+ +

Beyond the James and Lachlan factor, the relationship between Murdoch and Ailes was becoming strained: Murdoch didn’t like that Ailes was putting Fox so squarely behind the candidacy of Donald Trump. And he had begun to worry less about whether Fox could endure without its creator. (In recent years, Ailes had taken extended health leaves from Fox and the ratings held.) Now Ailes had made himself a true liability: More than two dozen Fox News women told the Paul, Weiss lawyers about their harassment in graphic terms. The most significant of the accusers was Megyn Kelly, who is in contract negotiations with Fox and is considered by the Murdochs to be the future of the network. So important to Fox is Kelly that Lachlan personally approved her reported $6 million book advance from Murdoch-­controlled publisher HarperCollins, according to two sources.

+ +

As the inevitability of an ouster became clear, chaos engulfed Ailes’s team. After news broke on the afternoon of July 19 that Kelly had come forward, Ailes’s lawyer Susan Estrich tried to send Ailes’s denial to Drudge but mistakenly emailed a draft of Ailes’s proposed severance deal, which Drudge, briefly, published instead. Also that day, Ailes’s allies claimed to conservative news site Breitbart that 50 of Fox’s biggest personalities were prepared to quit if Ailes was removed, though in reality there was no such pact. That evening, Murdoch used one of his own press organs to fire back, with the New York Post tweeting the cover of the next day’s paper featuring Ailes’s picture and news that “the end is near for Roger Ailes.”

+ +

Indeed, that evening Ailes was banned from Fox News headquarters, his company email and phone shut off. On the afternoon of July 21, a few hours before Trump was to accept the Republican nomination in Cleveland, Murdoch summoned Ailes to his New York penthouse to work out a severance deal. James had wanted Ailes to be fired for cause, according to a person close to the Murdochs, but after reviewing his contract, Rupert decided to pay him $40 million and retain him as an “adviser.” Ailes, in turn, agreed to a multiyear noncompete clause that prevents him from going to a rival network (but, notably, not to a political campaign). Murdoch assured Ailes that, as acting CEO of Fox News, he would protect the channel’s conservative voice. “I’m here, and I’m in charge,” Murdoch told Fox staffers later that afternoon with Lachlan at his side (James had gone to Europe on a business trip). That night, Rupert and Lachlan discussed the extraordinary turn of events over drinks at Eleven Madison Park.

+ +

The Murdochs must have hoped that by acting swiftly to remove Ailes, they had averted a bigger crisis. But over the coming days, harassment allegations from more women would make it clear that the problem was not limited to Ailes but included those who enabled him — both the loyal deputies who surrounded him at Fox News and those at 21st Century Fox who turned a blind eye. “Fox News masquerades as a defender of traditional family values,” claimed the lawsuit of Fox anchor Andrea Tantaros, who says she was demoted and smeared in the press after she rebuffed sexual advances from Ailes, “but behind the scenes, it operates like a sex-­fueled, Playboy Mansion–like cult, steeped in intimidation, indecency and misogyny.”

+ +
+
+
+ + + + + +
+
+ Gretchen Carlson. + +
+ +
+ +
+ +

Murdoch knew Ailes was a risky hire when he brought him in to start Fox News in 1996. Ailes had just been forced out as president of CNBC under circumstances that would foreshadow his problems at Fox.

+ +

While his volcanic temper, paranoia, and ruthlessness were part of what made Ailes among the best television producers and political operatives of his generation, those same attributes prevented him from functioning in a corporate environment. He hadn’t lasted in a job for more than a few years. “I have been through about 12 train wrecks in my career. Somehow, I always walk away,” he told an NBC executive.

+ +

By all accounts, Ailes had been a management disaster from the moment he arrived at NBC in 1993. But by 1995, things had reached a breaking point. In October of that year, NBC hired the law firm Proskauer Rose to conduct an internal investigation after then–NBC executive David Zaslav told human resources that Ailes had called him a “little fucking Jew prick” in front of a witness.

+ +

Zaslav told Proskauer investigators he feared for his safety. “I view Ailes as a very, very dangerous man. I take his threats to do physical harm to me very, very seriously … I feel endangered both at work and at home,” he said, according to NBC documents, which I first published in my 2014 biography of Ailes. CNBC executive Andy Friendly also filed complaints. “I along with several of my most talented colleagues have and continue to feel emotional and even physical fear dealing with this man every day,” he wrote. The Proskauer report chronicled Ailes’s “history of abusive, offensive, and intimidating statements/threats and personal attacks.” Ailes left NBC less than three months later.

+ +

What NBC considered fireable offenses, Murdoch saw as competitive advantages. He hired Ailes to help achieve a goal that had eluded Murdoch for a decade: busting CNN’s cable news monopoly. Back in the mid-’90s, no one thought it could be done. “I’m looking forward to squishing Rupert like a bug,” CNN founder Ted Turner boasted at an industry conference. But Ailes recognized how key wedge issues — race, religion, class — could turn conservative voters into loyal viewers. By January 2002, Fox News had surpassed CNN as the highest-rated cable news channel. But Ailes’s success went beyond ratings: The rise of Fox News provided Murdoch with the political influence in the United States that he already wielded in Australia and the United Kingdom. And by merging news, politics, and entertainment in such an overt way, Ailes was able to personally shape the national conversation and political fortunes as no one ever had before. It is not a stretch to argue that Ailes is largely responsible for, among other things, the selling of the Iraq War, the Swift-boating of John Kerry, the rise of the tea party, the sticking power of a host of Clinton scandals, and the purported illegitimacy of Barack Obama’s presidency.

+ +

Ailes became untouchable. At News Corp., he behaved just as he had at NBC, but Murdoch tolerated Ailes’s abusiveness because he was pleased with the results.

+ +

Ailes used Fox’s payroll as a patronage tool, doling out jobs to Republican politicians, friends, and political operatives. He made his personal lawyer, Peter Johnson Jr., a regular guest on Fox shows, despite producers’ misgivings about Johnson’s on-air performance. (They nicknamed Johnson “The Must-Do.”) Manny Alvarez, whose daughter went to school with Ailes’s son, became a medical commentator.

+ +

Ailes also positioned his former secretaries in key departments where he could make use of their loyalty to him. One, Nikole King, went to the finance department, where she handled Ailes’s personal expenses, a Fox executive said. Another, Brigette Boyle, went to human resources, where she was “tasked with hiring the ‘right’ people,” a former executive recalled.

+ +

But most striking is the extent to which Ailes ruled Fox News like a surveillance state. According to executives, he instructed Fox’s head of engineering, Warren Vandeveer, to install a CCTV system that allowed Ailes to monitor Fox offices, studios, greenrooms, the back entrance, and his homes. When Ailes spotted James Murdoch on the monitor smoking a cigarette outside the office, he remarked to his deputy Bill Shine, “Tell me that mouth hasn’t sucked a cock,” according to an executive who was in the room; Shine laughed. (A Fox spokesperson said Shine did not recall this.) Fox’s IT department also monitored employee email, according to sources. When I asked Fox’s director of IT, Deborah Sadusingh, about email searches, she said, “I can’t remember all the searches I’ve done.”

+ +

When Ailes uncovered something he didn’t like, he had various means of retaliation and increased surveillance. Fox’s notorious PR department, which for years was directed by Brian Lewis and is now overseen by Irena Briganti, was known for leaking negative stories about errant employees to journalists. Fox contributor Jim Pinkerton wrote an anonymous blog called the Cable Game that attacked Ailes-selected targets, two Fox executives confirmed. Fox contributor Bo Dietl did private-investigation work for Ailes, including following former Fox producer Andrea Mackris after she sued Bill O’Reilly for sexual harassment, a Fox source said. Ailes turned these same tactics on his enemies outside the company, including journalists. CNN’s Brian Stelter recently reported on Fox’s 400-page opposition-research file on me.

+ +

Fox News also obtained the phone records of journalists, by legally questionable means. According to two sources with direct knowledge of the incident, Brandi, Fox’s general counsel, hired a private investigator in late 2010 to obtain the personal home- and cell-phone records of Joe Strupp, a reporter for the liberal watchdog group Media Matters. (Through a spokesperson, Brandi denied this.) In the fall of that year, Strupp had written several articles quoting anonymous Fox sources, and the network wanted to determine who was talking to him. “This was the culture. Getting phone records doesn’t make anybody blink,” one Fox executive told me.

+ +

What makes this practice all the more brazen is that the Guardian was already publishing articles about phone-hacking at Murdoch’s British newspaper division. About that scandal, Murdoch said, “I do not accept ultimate responsibility. I hold responsible the people that I trusted to run it and the people they trusted.” In this case, of course, the person he trusted, inexplicably, was Ailes, and Murdoch does not seem to have wanted to know how Ailes chose to spend company funds. Every year, Murdoch approved Ailes’s budgets without question. “When you have an organization making that much money, we didn’t go line by line through people’s budgets,” a former News Corp. executive said.

+ +
+
+
+ + + + + +
+
+ Megyn Kelly. + +
+ +
+ +
+ +

Ailes was born in May 1940 in Warren, Ohio, then a booming industrial town. His father, a factory foreman, abused his wife and two sons. “He did like to beat the shit out of you with that belt … It was a pretty routine fixture of childhood,” Ailes’s brother Robert told me when I was reporting my book. His parents divorced in 1960. In court papers, Ailes’s mother alleged that her husband “threatened her life and to do her physical harm.”

+ +

Perhaps as an escape, Ailes lost himself in television. He suffered from hemophilia and was often homebound from school, so he spent hours on the living-room couch watching variety shows and Westerns. “He analyzed it, and he figured it out,” his brother told me of Ailes’s fascination with TV.

+ +

After graduating from Ohio University in 1962, Ailes landed a job as a gofer on The Mike Douglas Show, a daytime variety program that at the time was broadcast from Cleveland. Within four years, he had muscled aside the show’s creator and more seasoned colleagues to become the executive producer. Ailes’s mentor at The Mike Douglas Show, Chet Collier, who would later serve as his deputy at Fox, drilled into him the notion that television is a visual medium. “I’m not hiring talent for their brainpower,” Collier would say.

+ +

Though Ailes had married his college girlfriend, he used his growing power to take advantage of the parade of beautiful women coming through his office hoping to be cast on the show. Over the past two months, I interviewed 18 women who shared accounts of Ailes’s offering them job opportunities if they would agree to perform sexual favors for him and for his friends. In some cases, he threatened to release tapes of the encounters to prevent the women from reporting him. “The feeling I got in the interview was repulsion, power-hungriness, contempt, violence, and the need to subjugate and humiliate,” says a woman who auditioned for Ailes in 1968 when she was a college student.

+ +

In August 1968, Ailes left The Mike Douglas Show to join Richard Nixon’s presidential campaign as a media strategist. Ailes’s success in reinventing the candidate for television helped propel Nixon to the White House and made Ailes a media star (he was the anti-hero of Joe McGinniss’s landmark book The Selling of the President). But even back then, Ailes’s recklessness put his thriving career at risk. A former model told me that her parents called the police on Ailes after she told them he assaulted her in a Cincinnati hotel room in 1969. “I remember Ailes sweet-talking my parents out of pressing charges,” she says.

+ +

One prominent Republican told me that it was Ailes’s well-known reputation for awful behavior toward women that prevented him from being invited to work in the Nixon White House (or, later, in the administration of Bush 41). So after the ’68 election, he moved to New York, where he continued to use his power to demand sex from women seeking career opportunities. During this time Ailes divorced, remarried, and divorced again. A former television producer described an interview with Ailes in 1975, in which he said: “If you want to make it in New York City in the TV business, you’re going to have to fuck me, and you’re going to do that with anyone I tell you to.” While running media strategy on Rudy Giuliani’s 1989 mayoral campaign, Ailes propositioned an employee of his political-consulting firm: He name-dropped his friend Barry Diller and said that if she’d have sex with him he’d ask Diller to get her a part on Beverly Hills 90210. (Diller said he never received such a request.)

+ +

In 1998, two years after launching Fox, Ailes got married for the third time, to a woman named Elizabeth Tilson, a 37-year-old producer who had worked for him at CNBC. Two years later, when Ailes was 59, the couple had a son. But neither a new marriage nor parenthood changed his predatory behavior toward the women who worked for him.

+ +

According to interviews with Fox News women, Ailes would often begin by offering to mentor a young employee. He then asked a series of personal questions to expose potential vulnerabilities. “He asked, ‘Am I in a relationship? What are my familial ties?’ It was all to see how stable or unstable I was,” said a former employee. Megyn Kelly told lawyers at Paul, Weiss that Ailes made an unwanted sexual advance toward her in 2006 when she was going through a divorce. A lawyer for former anchor Laurie Dhue told me that Ailes harassed her around 2006; at the time, she was struggling with alcoholism.

+ +

Ailes’s longtime executive assistant Judy Laterza — who became one of his top lieutenants, earning more than $2 million a year, according to a Fox executive — seemed to function as a recruiter of sorts. According to Carlson’s attorney, in 2002, Laterza remarked to a college intern she saw on the elevator about how pretty she was and invited her to meet Ailes. After that meeting, Ailes arranged for the young woman to transfer to his staff. Her first assignment was to go down to the newsstand and fetch him the latest issue of Maxim. When she returned with the magazine, Ailes asked her to stay with him in his office. He flipped through the pages. The woman told the Washington Post that Ailes said, “You look like the women in here. You have great legs. If you sleep with me, you could be a model or a newscaster.” She cut short her internship. (Laterza did not respond to a request for comment.)

+ +

I spoke with another Fox News administrative assistant who said Laterza invited her to meet Ailes in 2004. The woman, then 25, told Ailes that her ambition was to do commercials. Ailes offered to pay for voice lessons (she declined) and helped her land an agent at William Morris. A few months later, Ailes summoned her to his office for an update. She told him how excited she was about the opportunities, and Ailes invited her for a drink. She suggested happy hour, but he demurred. “For a man in my position, it would have to be alone at a hotel,” she recalls him saying. “Do you know how to play the game?” She tried to get out of the situation as tactfully as possible. “I don’t feel comfortable doing this,” she said. “I respect your family; what about your son?” She remembers Ailes’s reply: “I’m a multifaceted man. That’s one side of me.” As she left the office, she says, Ailes tried to kiss her. “I was holding a binder full of voice-over auditions that I put between us. I was terrified.” She says she never heard from the William Morris agent again.

+ +

The fact that these incidents of harassment were so common may have contributed to why no one at Fox came forward or filed a lawsuit until now. Ailes’s attitudes about women permeated the very air of the network, from the exclusive hiring of attractive women to the strictly enforced skirts-and-heels dress code to the “leg cam” that lingers on female panelists’ crossed legs on air. It was hard to complain about something that was so normalized. Other senior executives harassed women, too. “Anyone who claimed there was a hostile work environment was seen as a complainer,” says a former Fox employee who says Ailes harassed her. “Or that they can’t take a joke.”

+ +
+
+
+ + + + + +
+
+ Lachlan, Rupert, and James Murdoch in 2014. + Photo: Dan Steinberg/Invision/AP Photo +
+ +
+ +
+ +

It is unfathomable to think, given Ailes’s reputation, given the number of women he propositioned and harassed and assaulted over decades, that senior management at Fox News was unaware of what was happening. What is more likely is that their very jobs included enabling, abetting, protecting, and covering up for their boss. “No one said no to Roger,” a Fox executive said.

+ +

The story of Laurie Luhn, which I reported in July, is an example of how Ailes used Fox’s public-relations, legal, and finance departments to facilitate his behavior. Ailes met Luhn on the 1988 George H.W. Bush campaign, and soon thereafter he put her on a $500 monthly retainer with his political-consulting firm to be his “spy” in Washington, though really her job was to meet him in hotel rooms. (During their first encounter, Luhn says, Ailes videotaped her in a garter belt and told her: “I am going to put [the tape] in a safe-deposit box just so we understand each other.”) Ailes recruited Luhn to Fox in 1996, before the network even launched. Collier, then his deputy, offered her a job in guest relations in the Washington bureau.

+ +

Laterza, Shine, and Shine’s deputy Suzanne Scott would take turns summoning Luhn for “meetings” in New York. (A Fox spokesperson said executives were not aware Ailes was sexually involved with Luhn.) Ailes and Luhn would meet in the afternoons, Luhn said, at hotels near Times Square, and Ailes paid her cash for sexual favors. She was also on the payroll at Fox — at her peak, she earned $250,000 a year as an event planner for the channel; multiple sources confirmed that she was a “Friend of Roger,” with special protection within the company. But the arrangement required her to do many things that now cause her anguish, including luring young female Fox employees into one-on-one meetings with Ailes that Luhn knew would likely result in harassment. “You’re going to find me ‘Roger’s Angels,’ ” he reportedly told her. One of Luhn’s employees received a six-figure settlement after filing a harassment claim against Ailes.

+ +

By the fall of 2006, Luhn says, Ailes was worried that she might go public with her story or cause a scene of some kind. That’s when the Fox machine really kicked into gear. According to Luhn, Fox PR tried to spread a rumor to the New York Daily News that Luhn had had an affair with Lee Atwater (which she denies), a story designed to make Luhn seem promiscuous so that her credibility would be damaged. When Luhn had an emotional breakdown en route to a vacation in Mexico, it was Shine’s job to arrange to bring her home. Scott picked her up at the airport and drove her to the Warwick Hotel on Sixth Avenue, where Luhn recalls that Scott checked her in under Scott’s name. (Scott denies this.)

+ +

Luhn later moved into a Fox corporate apartment in Chelsea, during which time, she says, Laterza and Shine monitored her email. (Shine denies this.) Luhn’s father says that Shine called him several times to check up on Luhn after she moved to California while still on the Fox payroll. Eventually, Shine even recommended a psychiatrist, who medicated and hospitalized her. At one point, Luhn attempted suicide. Through a spokesperson, Shine says he “was only trying to help.”

+ +

In late 2010 or early 2011, Luhn wrote a letter to Brandi, the Fox lawyer, saying she had been sexually harassed by Ailes for 20 years. According to a source, Brandi asked Ailes about the allegations, which he denied. Brandi then worked out a settlement at Ailes’s request. On June 15, 2011, Luhn signed a $3.15 million settlement agreement with extensive nondisclosure provisions. The payment was approved by Fox News CFO Mark Kranz. The check, which I viewed, was signed by David E. Miller, a treasurer for Fox Television Stations, Inc., a division run by current Fox co-president Jack Abernethy. “I have no idea how my name ended up on the check,” says Miller, citing standard company practice of signing checks and not asking questions. The settlement documents, which Luhn also showed me, were signed by Ailes, Brandi, and Shine.

+ +

After Luhn left Fox, Ailes took additional measures to conceal his harassment of employees. In 2011, he installed a floor-to-ceiling wooden door outside his executive suite. Only his assistants could see who entered his office. According to a former Fox producer, Laterza entered fake names into Ailes’s datebook when women went into his office: “If you got ahold of his ledger, you would not know who visited him.”

+ +

Still, the whispers about Ailes and women were growing louder. Karem Alsina, a former Fox makeup artist, told me she grew suspicious when Fox anchors came to see her before private meetings with Ailes to have their makeup done. “They would say, ‘I’m going to see Roger, gotta look beautiful!’ ” she recalled. “One of them came back down after a meeting, and the makeup on her nose and chin was gone.”

+ +

In 2012, after I had been reporting my Ailes biography for a year, Megyn Kelly became so concerned about the rumors that she went to Ailes’s then–PR chief, Brian Lewis, and attempted an intervention, according to a person close to Kelly. She told Lewis that Ailes was being reckless and that I might include his behavior in my book. (I did report the stories of two women who claimed Ailes had harassed them earlier in his career, and though I heard rumors of Ailes and Fox News women, I could not confirm them at the time.) Lewis, according to the source, asked Laterza to tell Ailes to stop because he thought Ailes might listen to his longtime assistant. Instead, according to the source, Laterza told Ailes that his PR chief was being disloyal. Less than a year later, Ailes fired Lewis.

+ +

Megyn Kelly was not a household name when she started at Fox News in 2004. A former corporate lawyer, she landed at Fox when former Special Report anchor Brit Hume recommended her to Ailes. She still wasn’t well known in 2006, when she got divorced and Ailes tried to take advantage of her perceived vulnerability. She may not have been any more powerful, at the time, than the other women he preyed on, but she was one of the lucky ones: She managed to rebuff his sexual overtures in a way that didn’t alienate her boss. “She was able to navigate the relationship to a professional place,” a person close to Kelly told me. In fact, Kelly’s career flourished after this. In 2010, Ailes gave her a two-hour midday show, on which she enthusiastically fanned his right-wing agenda — for instance, hyping stories about the New Black Panthers that many thought were racist. In October 2013, Ailes promoted Kelly to Sean Hannity’s 9 p.m. prime-time slot, where she memorably declared that Jesus and Santa are “white.” When asked by a fan on Twitter to name her biggest influence, she responded, “Roger Ailes.”

+ +

By 2015, although her show was still reliably right-wing, Kelly’s brand was evolving. After several high-profile clashes with Republican men, including Dick Cheney, she was developing something of a reputation as a feminist. As she entered the final two years of her contract, she started to think about a future outside of Fox, meeting with CNN chief Jeff Zucker in 2013.

+ +

Then came Donald Trump. Kelly’s feud with the GOP nominee was one of the dominant story lines of the presidential election; it also exploded the fragile balance of relationships at the top of Fox News.

+ +

According to Fox sources, Murdoch blamed Ailes for laying the groundwork for Trump’s candidacy. Ailes had given Trump, his longtime friend, a weekly call-in segment on Fox & Friends to sound off on political issues. (Trump used Fox News to mainstream the birther conspiracy theory.) Ailes also had lunch with Trump days before he launched his presidential campaign and continued to feed him political advice throughout the primaries, according to sources close to Trump and Ailes. (And in the days after Carlson filed her lawsuit, Trump advised Ailes on navigating the crisis, even recommending a lawyer.)

+ +

Murdoch was not a fan of Trump’s and especially did not like his stance on immigration. (The antipathy was mutual: “Murdoch’s been very bad to me,” Trump told me in March.) A few days before the first GOP debate on Fox in August 2015, Murdoch called Ailes at home. “This has gone on long enough,” Murdoch said, according to a person briefed on the conversation. Murdoch told Ailes he wanted Fox’s debate moderators — Kelly, Bret Baier, and Chris Wallace — to hammer Trump on a variety of issues. Ailes, understanding the GOP electorate better than most at that point, likely thought it was a bad idea. “Donald Trump is going to be the Republican nominee,” Ailes told a colleague around this time. But he didn’t fight Murdoch on the debate directive.

+ +

On the night of August 6, in front of 24 million people, the Fox moderators peppered Trump with harder-hitting questions. But it was Kelly’s question regarding Trump’s history of crude comments about women that created a media sensation. He seemed personally wounded by her suggestion that this spoke to a temperament that might not be suited for the presidency. “I’ve been very nice to you, though I could probably maybe not be based on the way you have treated me,” he said pointedly.

+ +

After the debate, Trump called Ailes and screamed about Kelly. “How could you do this?” he said, according to a person briefed on the call. Ailes was caught between his friend Trump, his boss Murdoch, and his star Kelly. “Roger lost control of Megyn and Trump,” a Fox anchor said.

+ +

The parties only became more entrenched when Trump launched a series of attacks against Kelly, including suggesting that her menstrual cycle had influenced her debate question. Problematically for Ailes, Fox’s audience took Trump’s side in the fight; Kelly received death threats from viewers, according to a person close to her. Kelly had even begun to speculate, according to one Fox source, that Trump might have been responsible for her getting violently ill before the debate last summer. Could he have paid someone to slip something into her coffee that morning in Cleveland? she wondered to colleagues.

+ +

While Ailes released a statement defending Kelly, he privately blamed her for creating the crisis. “It was an unfair question,” he told a Fox anchor. Kelly felt betrayed, both by Ailes and by colleagues like O’Reilly and Baier when they didn’t defend her, sources who spoke with her said. “She felt she put herself out there,” a colleague said.

+ +

Frustrated at Fox, Kelly hired a powerhouse agent at CAA and began auditioning in earnest, and in public, for a job at another network. In interviews, she said her ambition was to become the next Barbara Walters and to host prime-time specials. She wanted to prove to the industry she could land a “big get” — and the biggest get of all was Trump. So Kelly went to Trump Tower to lobby the candidate for an interview. It worked — even Trump couldn’t resist the spectacle of a rematch — but in the end the show failed: The ratings were terrible and reviewers panned her generally sycophantic questions. Worse for Kelly, it eroded her burgeoning status as a tough journalist who stood up to Trump. Afterward, her relationship with Ailes further deteriorated. According to Fox sources, they barely spoke in recent months.

+ +

Kelly and Gretchen Carlson were not friends or allies, but Carlson’s lawsuit presented an opportunity. Kelly could bust up the boys’ club at Fox, put herself on the right side of a snowballing media story, and rid herself of a boss who was no longer supportive of her — all while maximizing her leverage in a contract negotiation. She also had allies in the Murdoch sons. According to a source, Kelly told James Murdoch that Ailes had made harassing comments and inappropriately hugged her in his office. James and Lachlan both encouraged her to speak to the Paul, Weiss lawyers about it. Kelly was only the third or fourth woman to speak to the lawyers, according to a source briefed on the inquiry, but she was by far the most important. After she spoke with investigators, and made calls to current and former Fox colleagues to encourage them to speak to Paul, Weiss as well, many more women came forward.

+ +

Ailes was furious with Kelly for not defending him publicly. According to a Fox source, Ailes’s wife Elizabeth wanted Fox PR to release racy photos of Kelly published years ago in GQ as a way of discrediting her. The PR department, in this instance, refused. (Elizabeth is said to be taking all of the revelations especially hard, according to four sources close to the family. Giuliani, who officiated their wedding, told Murdoch she would likely divorce Ailes, according to two sources: “This marriage won’t last,” he said.)

+ +

Two days after New York reported that Kelly had told her story to Paul, Weiss attorneys, Ailes was gone. And Kelly had made herself more important to the network than ever.

+ +

Ailes’s ouster has created a leadership vacuum at Fox News. Several staffers have described feeling like being part of a totalitarian regime whose dictator has just been toppled. “No one knows what to do. No one knows who to report to. It’s just mayhem,” said a Fox host. As details of the Paul, Weiss investigation have filtered through the offices, staffers are expressing a mixture of shock and disgust. The scope of Ailes’s alleged abuse far exceeds what employees could have imagined. “People are so devastated,” one senior executive said. Those I spoke with have also been unnerved by Shine and Brandi’s roles in covering up Ailes’s behavior.

+ +

Despite revelations of how Ailes’s management team enabled his harassment, Murdoch has so far rejected calls — including from James, according to ­sources — to conduct a wholesale housecleaning. On August 12, Murdoch promoted Shine and another Ailes loyalist, Jack Abernethy, to become co-presidents of Fox News. He named Scott executive vice-president and kept Brandi and Briganti in their jobs. Fox News’s chief financial officer, Mark Kranz, is the only senior executive to have been pushed out (officially he retired), along with Laterza and a handful of assistants, contributors, and consultants. “Of course, they are trying to isolate this to just a few bad actors,” a 21st Century Fox executive told me.

+ +

Many people I spoke with believe that the current management arrangement is just a stopgap until the election. “As of November 9, there will be a bloodbath at Fox,” predicts one host. “After the election, the prime-time lineup could be eviscerated. O’Reilly’s been talking about retirement. Megyn could go to another network. And Hannity will go to Trump TV.”

+ +

The prospect of Trump TV is a source of real anxiety for some inside Fox. The candidate took the wedge issues that Ailes used to build a loyal audience at Fox News — especially race and class — and used them to stoke barely containable outrage among a downtrodden faction of conservatives. Where that outrage is channeled after the election — assuming, as polls now suggest, Trump doesn’t make it to the White House — is a big question for the Republican Party and for Fox News. Trump had a complicated relationship with Fox even when his good friend Ailes was in charge; without Ailes, it’s plausible that he will try to monetize the movement he has galvanized in competition with the network rather than in concert with it. Trump’s appointment of Steve Bannon, chairman of Breitbart, the digital-media upstart that has by some measures already surpassed Fox News as the locus of conservative energy, to run his campaign suggests a new right-wing news network of some kind is a real possibility. One prominent media executive told me that if Trump loses, Fox will need to try to damage him in the eyes of its viewers by blaming him for the defeat.

+ +

Meanwhile, the Murdochs are looking for a permanent CEO to navigate these post-Ailes, Trump-roiled waters. According to sources, James’s preferred candidates include CBS president David Rhodes (though he is under contract with CBS through 2019); Jesse Angelo, the New York Post publisher and James’s Harvard roommate; and perhaps a television executive from London. Sources say Lachlan, who politically is more conservative than James, wants to bring in an outsider. Rupert was seen giving Rebekah Brooks a tour of the Fox offices several months ago, creating speculation that she could be brought in to run Fox. Another contender is Newsmax CEO Chris Ruddy.

+ +

As for the women who collectively brought an end to the era of Roger Ailes, their fortunes are mixed. Megyn Kelly is in a strong position in her contract talks, and sources say Gretchen Carlson will soon announce an eight-figure settlement. But because New York has a three-year statute of limitations on sexual harassment, so far just two women in addition to Carlson are said to be receiving settlements from 21st Century Fox. The many others who left or were forced out of the company before the investigation came away with far less — in some cases nothing at all.

+ +

It’s hard to say that justice has been served. But the story isn’t over: Last week, the shareholder law firm Scott & Scott announced it was investigating 21st Century Fox to “determine whether Fox’s Officers and Directors have breached their fiduciary duties.” Meanwhile, Ailes is walking away from his biggest career train wreck yet, seeking relevance and renewed power through the one person in the country who doesn’t see him as political kryptonite, the candidate he created: Donald J. Trump. Ailes may be trying to sell us another president, but now we know the truth about the salesman.

+ +

*This sentence has been updated to reflect Shine’s presence at the meeting, a detail that was confirmed after publication.

+ +

*This article appears in the September 5, 2016 issue of New York Magazine.

+ +

*An earlier version of the article inaccurately stated Manny Alvarez is Elizabeth Ailes’s doctor.

+ +
+ + + + + + + + + + How Fox News Women Took Down Roger Ailes + + + +
+ + +
+ +
+
+ +
+

Things you buy through our links may earn New York a commission.

+ + + +
+
+
+
+ +
+ +
THE FEED
+
+ +
+
+ +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
2022 Midterms: A Guide to the Races Worth Watching
+ +
A cheat sheet to keep track of all the crucial races, primary upsets, and campaign drama — Trump-fueled and otherwise — from now through Election Day.
+
+
+
+ + +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
Trump, Who Once Said ‘the Mob Takes the Fifth,’ Takes the Fifth
+ +
The former president says he has finally learned about the value of the Fifth Amendment after repeatedly mocking people who invoke it.
+
+
+
+ +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
The Heir to Bernie?
+ +
The career of America’s leading socialist has to end at some point, and he might have a worthy successor in Vermont’s own Becca Balint.
+
+
+
+
+ + + +
+ + +
+ +
the money game
+
+
+
+ +
+
+
the money game
+
Pretty Soon You’ll Be Able to Afford Things Again
+ +
July’s inflation rate saw an unexpectedly large drop, driven by the price of gas. This could be the beginning of the end of the era of high prices.
+
+
+
+ +
+ +
what we know
+
+
+
+ +
+
+
what we know
+
Trump’s Mar-a-Lago Raided by FBI: Everything We’ve Learned
+ +
Federal agents were reportedly suspicious that Team Trump was withholding information on possible classified information taken from the White House.
+
+
+
+ +
+ +
the city politic
+
+
+
+ +
+
+
the city politic
+
Dan Goldman on the Problem With Trump, Republicans, and Members of His Own Party
+ +
The veteran federal prosecutor tries politics.
+
+
+
+ +
+ +
what is elon musk?
+
+
+
+ +
+
+
what is elon musk?
+
SpaceXCadets
+ +
If you want your child to become the next billionaire industrialist, Astra Nova might be a good place to start.
+
+
+
+ +
+ +
what is elon musk?
+
+
+
+ +
+
+
what is elon musk?
+
Musk As Muse
+ +
Elon’s romantic partners keep putting him into their art.
+
+
+
+ +
+ +
2022 midterms
+
+
+
+ +
+
+
2022 midterms
+
Senate Control Could Come Down to a Georgia Runoff Once Again
+ +
If neither Raphael Warnock nor Herschel Walker wins a majority in November, which looks plausible, they’ll face off in a December runoff.
+
+
+
+ +
+ +
crime
+
+
+
+ +
+
+
crime
+
Police Arrest Suspect in Killings of Muslim Men in Albuquerque
+ +
At least three Muslim immigrants have been ambushed and killed in recent weeks, terrifying the local community.
+
+
+
+ +
+ +
exhibit a
+
+
+
+ +
+
+
exhibit a
+
Making Sense of the Trump Raid
+ +
After a summer of intense criticism, Merrick Garland’s Justice Department takes its boldest step yet in pursuit of the former president.
+
+
+
+ +
+ +
the power trip
+
+
+
+ +
+
+
the power trip
+
What’s in Trump’s Safe the FBI Raided?
+ +
Former aides consider the contents of the vault at Mar-a-Lago.
+
+
+
+
+ + + +
+ +
+ +
mar-a-lago raid
+
+
+
+ +
+
+
mar-a-lago raid
+
Convicted Felons Are Leaping to Trump’s Defense
+ +
Fellow politicians and operatives who also had run-ins with the Feds are claiming him as one of their own.
+
+
+
+ +
+ +
the national interest
+
+
+
+ +
+
+
the national interest
+
What Is Really Unprecedented Is Trump’s Criminality
+ +
Republicans are angry at the FBI, but they choose to yoke themselves to a flagrant crook.
+
+
+
+ +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
Republicans Go to the Mattresses to Defend Trump From the Feds
+ +
The gestures of loyalty to Trump and fury at law enforcement by leading Republicans with no idea of the raid’s purpose or findings are revealing.
+
+
+
+ +
+ +
goat
+
+
+
+ +
+
+
goat
+
Serena Williams Announces Her Retirement From Tennis
+ +
In a Vogue essay, she says she plans to step away from the sport after the U.S. Open wraps next month.
+
+
+
+ +
+ +
the city politic
+
+
+
+ +
+
+
the city politic
+
Yuh-Line Niou on Her Especially Personal Run for Congress
+ +
From representation to disability policy, she says there’s a common theme: Courage.
+
+
+
+ +
+ +
games
+
+
+
+ +
+
+
games
+
The Mets Are Having an Extremely Un-Mets Season
+ +
They’re overachieving their way to the playoffs — and having a great time doing it.
+
+
+
+ +
+ +
what is elon musk?
+
+
+
+ +
+
+
what is elon musk?
+
Musk and Trump and a Little Steve Jobs
+ +
The characterological origins of Tony Stark.
+
+
+
+ +
+ +
what is elon musk?
+
+
+
+ +
+
+
what is elon musk?
+
Elon’s Biggest Boondoggle
+ +
Why did the world’s richest man spend the past five years trying to sell cities a hole in the ground?
+
+
+
+ +
+ +
unsolved mysteries
+
+
+
+ +
+
+
unsolved mysteries
+
The Bodies Keep Piling Up at Lake Mead
+ +
Four sets of human remains have now been discovered in the rapidly receding reservoir since May.
+
+
+
+
+ + + +
+ +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
Will Democrats’ Sudden Legislative Success Matter in the Midterms?
+ +
With the passage of the Inflation Reduction Act and gas prices dropping, Democrats’ odds of success in November’s elections are looking up.
+
+
+
+ +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
Photos of Trump Notes in Toilet Were Better Left to the Imagination
+ +
Reporters were so preoccupied with whether they could find these pictures that they didn’t stop to think if they should.
+
+
+
+ +
+ +
early and often
+
+
+
+ +
+
+
early and often
+
The GOP Is the Party of Insulin-Gouging
+ +
In their quest for zero-sum victories — and Democratic defeats — Republicans are incapable of tackling popular issues that would benefit them.
+
+
+
+ +
+ +
the city politic
+
+
+
+ +
+
+
the city politic
+
Carlina Rivera on What Democrats Get Wrong About Latino Voters
+ +
A daughter of the Lower East Side runs to represent the district where she grew up.
+
+
+
+
+
+ + + + +
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + +
+
+ + + + +
+ + + diff --git a/fixtures/nymag.com/ailes.html b/fixtures/nymag.com/ailes.html deleted file mode 100644 index 7a4c244f0..000000000 --- a/fixtures/nymag.com/ailes.html +++ /dev/null @@ -1,2155 +0,0 @@ - - - - - - - - - - - - How Fox News Women Took Down Roger Ailes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
- -
- - - - -
-
- - - - -
- -
- - - - -
-
- - - - -
-
-
- - - - -
- -
-

Popular on Daily Intelligencer

- -
-
-
-
-
-

The Revenge of Roger’s Angels

-

How Fox News women took down the most powerful, and predatory, man in media.

- - By - -
-
-
Image
-
-
-
-
-
-
-

Photo: Wesley Mann/AUGUST

-

Roger Ailes.

-
-
-
-
-
- - - -

How Fox News Women Took Down Roger Ailes

- - - - - -
- -
-
- -

It took 15 days to end the mighty 20-year reign of Roger Ailes at Fox News, one of the most storied runs in media and political history. Ailes built not just a conservative cable news channel but something like a fourth branch of government; a propaganda arm for the GOP; an organization that determined Republican presidential candidates, sold wars, and decided the issues of the day for 2 million viewers. That the place turned out to be rife with grotesque abuses of power has left even its liberal critics stunned. More than two dozen women have come forward to accuse Ailes of sexual harassment, and what they have exposed is both a culture of misogyny and one of corruption and surveillance, smear campaigns and hush money, with implications reaching far wider than one disturbed man at the top.

-

It began, of course, with a lawsuit. Of all the people who might have brought down Ailes, the former Fox & Friends anchor Gretchen Carlson was among the least likely. A 50-year-old former Miss America, she was the archetypal Fox anchor: blonde, right-wing, proudly anti-intellectual. A memorable Daily Show clip showed Carlson saying she needed to Google the words czar and ignoramus. But television is a deceptive medium. Off-camera, Carlson is a Stanford- and Oxford-educated feminist who chafed at the culture of Fox News. When Ailes made harassing comments to her about her legs and suggested she wear tight-fitting outfits after she joined the network in 2005, she tried to ignore him. But eventually he pushed her too far. When Carlson complained to her supervisor in 2009 about her co-host Steve Doocy, who she said condescended to her on and off the air, Ailes responded that she was “a man hater” and a “killer” who “needed to get along with the boys.” After this conversation, Carlson says, her role on the show diminished. In September 2013, Ailes demoted her from the morning show Fox & Friends to the lower-rated 2 p.m. time slot.

-

Carlson knew her situation was far from unique: It was common knowledge at Fox that Ailes frequently made inappropriate comments to women in private meetings and asked them to twirl around so he could examine their figures; and there were persistent rumors that Ailes propositioned female employees for sexual favors. The culture of fear at Fox was such that no one would dare come forward. Ailes was notoriously paranoid and secretive — he built a multiroom security bunker under his home and kept a gun in his Fox office, according to Vanity Fair — and he demanded absolute loyalty from those who worked for him. He was known for monitoring employee emails and phone conversations and hiring private investigators. “Watch out for the enemy within,” he told Fox’s staff during one companywide meeting.

-

Taking on Ailes was dangerous, but Carlson was determined to fight back. She settled on a simple strategy: She would turn the tables on his surveillance. Beginning in 2014, according to a person familiar with the lawsuit, Carlson brought her iPhone to meetings in Ailes’s office and secretly recorded him saying the kinds of things he’d been saying to her all along. “I think you and I should have had a sexual relationship a long time ago, and then you’d be good and better and I’d be good and better. Sometimes problems are easier to solve” that way, he said in one conversation. “I’m sure you can do sweet nothings when you want to,” he said another time.

-
- - - - -
-
- - - - -
-
- - - - -
-

After more than a year of taping, she had captured numerous incidents of sexual harassment. Carlson’s husband, sports agent Casey Close, put her in touch with his lawyer Martin Hyman, who introduced her to employment attorney Nancy Erika Smith. Smith had won a sexual-harassment settlement in 2008 for a woman who sued former New Jersey acting governor Donald DiFranceso. “I hate bullies,” Smith told me. “I became a lawyer to fight bullies.” But this was riskier than any case she’d tried. Carlson’s Fox contract had a clause that mandated that employment disputes be resolved in private arbitration—which meant Carlson’s case could be thrown out and Smith herself could be sued for millions for filing.

-

Carlson’s team decided to circumvent the clause by suing Ailes personally rather than Fox News. They hoped that with the element of surprise, they would be able to prevent Fox from launching a preemptive suit that forced them into arbitration. The plan was to file in September 2016 in New Jersey Superior Court (Ailes owns a home in Cresskill, New Jersey). But their timetable was pushed up when, on the afternoon of June 23, Carlson was called into a meeting with Fox general counsel Dianne Brandi and senior executive VP Bill Shine, and fired the day her contract expired.* Smith, bedridden following surgery for a severed hamstring, raced to get the suit ready. Over the Fourth of July weekend, Smith instructed an IT technician to install software on her firm’s network and Carlson’s electronic devices to prevent the use of spyware by Fox. “We didn’t want to be hacked,” Smith said. They filed their lawsuit on July 6.

-

Carlson and Smith were well aware that suing Ailes for sexual harassment would be big news in a post-Cosby media culture that had become more sensitive to women claiming harassment; still, they were anxious about going up against such a powerful adversary. What they couldn’t have known was that Ailes’s position at Fox was already much more precarious than ever before.

-

When Carlson filed her suit, 21st Century Fox executive chairman Rupert Murdoch and his sons, James and Lachlan, were in Sun Valley, Idaho, attending the annual Allen & Company media conference. James and Lachlan, who were not fans of Ailes’s, had been taking on bigger and bigger roles in the company in recent years (technically, and much to his irritation, Ailes has reported to them since June 2015), and they were quick to recognize the suit as both a big problem — and an opportunity. Within hours, the Murdoch heirs persuaded their 85-year-old father, who historically has been loath to undercut Ailes publicly, to release a statement saying, “We take these matters seriously.” They also persuaded Rupert to hire the law firm Paul, Weiss, Rifkind, Wharton & Garrison to conduct an internal investigation into the matter. Making things look worse for Ailes, three days after Carlson’s suit was filed, New York published the accounts of six other women who claimed to have been harassed by Ailes over the course of three decades.

-
- - - - -
-
- - - - -
-

A few hours after the New York report, Ailes held an emergency meeting with longtime friend Rudy Giuliani and lawyer Marc Mukasey at his home in Garrison, New York, according to a high-level Fox source. Ailes vehemently denied the allegations. The next morning, Ailes and his wife, Elizabeth, turned his ­second-floor office at Fox News into a war room. “It’s all bullshit! We have to get in front of this,” he said to executives. “This is not about money. This is about his legacy,” said Elizabeth, according to a Fox source. As part of his counteroffensive, Ailes rallied Fox News employees to defend him in the press. Fox & Friends host Ainsley Earhardt called Ailes a “family man”; Fox Business anchor Neil Cavuto wrote, reportedly of his own volition, an op-ed labeling Ailes’s accusers “sick.” Ailes’s legal team attempted to intimidate a former Fox correspondent named Rudi Bakhtiar who spoke to New York about her harassment.

-

Ailes told executives that he was being persecuted by the liberal media and by the Murdoch sons. According to a high-level source inside the company, Ailes complained to 21st Century Fox general counsel Gerson Zweifach that James, whose wife had worked for the Clinton Foundation, was trying to get rid of him in order to help elect Hillary Clinton. At one point, Ailes threatened to fly to France, where Rupert was vacationing with his wife, Jerry Hall, in an effort to save his job. Perhaps Murdoch told him not to bother, because the trip never happened.

-

According to a person close to the Murdochs, Rupert’s first instinct was to protect Ailes, who had worked for him for two decades. The elder Murdoch can be extremely loyal to executives who run his companies, even when they cross the line. (The most famous example of this is Sun editor Rebekah Brooks, whom he kept in the fold after the U.K. phone-hacking scandal.) Also, Ailes has made the Murdochs a lot of ­money — Fox News generates more than $1 billion annually, which accounts for 20 percent of 21st Century Fox’s profits — and Rupert worried that perhaps only Ailes could run the network so successfully. “Rupert is in the clouds; he didn’t appreciate how toxic an environment it was that Ailes created,” a person close to the Murdochs said. “If the money hadn’t been so good, then maybe they would have asked questions.”

-

Beyond the James and Lachlan factor, the relationship between Murdoch and Ailes was becoming strained: Murdoch didn’t like that Ailes was putting Fox so squarely behind the candidacy of Donald Trump. And he had begun to worry less about whether Fox could endure without its creator. (In recent years, Ailes had taken extended health leaves from Fox and the ratings held.) Now Ailes had made himself a true liability: More than two dozen Fox News women told the Paul, Weiss lawyers about their harassment in graphic terms. The most significant of the accusers was Megyn Kelly, who is in contract negotiations with Fox and is considered by the Murdochs to be the future of the network. So important to Fox is Kelly that Lachlan personally approved her reported $6 million book advance from Murdoch-­controlled publisher HarperCollins, according to two sources.

-
- - - - -
-
- - - - -
-

As the inevitability of an ouster became clear, chaos engulfed Ailes’s team. After news broke on the afternoon of July 19 that Kelly had come forward, Ailes’s lawyer Susan Estrich tried to send Ailes’s denial to Drudge but mistakenly emailed a draft of Ailes’s proposed severance deal, which Drudge, briefly, published instead. Also that day, Ailes’s allies claimed to conservative news site Breitbart that 50 of Fox’s biggest personalities were prepared to quit if Ailes was removed, though in reality there was no such pact. That evening, Murdoch used one of his own press organs to fire back, with the New York Post tweeting the cover of the next day’s paper featuring Ailes’s picture and news that “the end is near for Roger Ailes.”

-

Indeed, that evening Ailes was banned from Fox News headquarters, his company email and phone shut off. On the afternoon of July 21, a few hours before Trump was to accept the Republican nomination in Cleveland, Murdoch summoned Ailes to his New York penthouse to work out a severance deal. James had wanted Ailes to be fired for cause, according to a person close to the Murdochs, but after reviewing his contract, Rupert decided to pay him $40 million and retain him as an “adviser.” Ailes, in turn, agreed to a multiyear noncompete clause that prevents him from going to a rival network (but, notably, not to a political campaign). Murdoch assured Ailes that, as acting CEO of Fox News, he would protect the channel’s conservative voice. “I’m here, and I’m in charge,” Murdoch told Fox staffers later that afternoon with Lachlan at his side (James had gone to Europe on a business trip). That night, Rupert and Lachlan discussed the extraordinary turn of events over drinks at Eleven Madison Park.

-
- - - - -
-

The Murdochs must have hoped that by acting swiftly to remove Ailes, they had averted a bigger crisis. But over the coming days, harassment allegations from more women would make it clear that the problem was not limited to Ailes but included those who enabled him — both the loyal deputies who surrounded him at Fox News and those at 21st Century Fox who turned a blind eye. “Fox News masquerades as a defender of traditional family values,” claimed the lawsuit of Fox anchor Andrea Tantaros, who says she was demoted and smeared in the press after she rebuffed sexual advances from Ailes, “but behind the scenes, it operates like a sex-­fueled, Playboy Mansion–like cult, steeped in intimidation, indecency and misogyny.”

-
-
-
- -
- Gretchen Carlson. - - -
-
-

Murdoch knew Ailes was a risky hire when he brought him in to start Fox News in 1996. Ailes had just been forced out as president of CNBC under circumstances that would foreshadow his problems at Fox.

-

While his volcanic temper, paranoia, and ruthlessness were part of what made Ailes among the best television producers and political operatives of his generation, those same attributes prevented him from functioning in a corporate environment. He hadn’t lasted in a job for more than a few years. “I have been through about 12 train wrecks in my career. Somehow, I always walk away,” he told an NBC executive.

-
- - - - -
-
- - - - -
-

By all accounts, Ailes had been a management disaster from the moment he arrived at NBC in 1993. But by 1995, things had reached a breaking point. In October of that year, NBC hired the law firm Proskauer Rose to conduct an internal investigation after then–NBC executive David Zaslav told human resources that Ailes had called him a “little fucking Jew prick” in front of a witness.

-

Zaslav told Proskauer investigators he feared for his safety. “I view Ailes as a very, very dangerous man. I take his threats to do physical harm to me very, very seriously … I feel endangered both at work and at home,” he said, according to NBC documents, which I first published in my 2014 biography of Ailes. CNBC executive Andy Friendly also filed complaints. “I along with several of my most talented colleagues have and continue to feel emotional and even physical fear dealing with this man every day,” he wrote. The Proskauer report chronicled Ailes’s “history of abusive, offensive, and intimidating statements/threats and personal attacks.” Ailes left NBC less than three months later.

-

What NBC considered fireable offenses, Murdoch saw as competitive advantages. He hired Ailes to help achieve a goal that had eluded Murdoch for a decade: busting CNN’s cable news monopoly. Back in the mid-’90s, no one thought it could be done. “I’m looking forward to squishing Rupert like a bug,” CNN founder Ted Turner boasted at an industry conference. But Ailes recognized how key wedge issues — race, religion, class — could turn conservative voters into loyal viewers. By January 2002, Fox News had surpassed CNN as the highest-rated cable news channel. But Ailes’s success went beyond ratings: The rise of Fox News provided Murdoch with the political influence in the United States that he already wielded in Australia and the United Kingdom. And by merging news, politics, and entertainment in such an overt way, Ailes was able to personally shape the national conversation and political fortunes as no one ever had before. It is not a stretch to argue that Ailes is largely responsible for, among other things, the selling of the Iraq War, the Swift-boating of John Kerry, the rise of the tea party, the sticking power of a host of Clinton scandals, and the purported illegitimacy of Barack Obama’s presidency.

-

Ailes became untouchable. At News Corp., he behaved just as he had at NBC, but Murdoch tolerated Ailes’s abusiveness because he was pleased with the results.

-

Ailes used Fox’s payroll as a patronage tool, doling out jobs to Republican politicians, friends, and political operatives. He made his personal lawyer, Peter Johnson Jr., a regular guest on Fox shows, despite producers’ misgivings about Johnson’s on-air performance. (They nicknamed Johnson “The Must-Do.”) Manny Alvarez, whose daughter went to school with Ailes’s son, became a medical commentator.

-

Ailes also positioned his former secretaries in key departments where he could make use of their loyalty to him. One, Nikole King, went to the finance department, where she handled Ailes’s personal expenses, a Fox executive said. Another, Brigette Boyle, went to human resources, where she was “tasked with hiring the ‘right’ people,” a former executive recalled.

-
- - - - -
-
- - - - -
-

But most striking is the extent to which Ailes ruled Fox News like a surveillance state. According to executives, he instructed Fox’s head of engineering, Warren Vandeveer, to install a CCTV system that allowed Ailes to monitor Fox offices, studios, greenrooms, the back entrance, and his homes. When Ailes spotted James Murdoch on the monitor smoking a cigarette outside the office, he remarked to his deputy Bill Shine, “Tell me that mouth hasn’t sucked a cock,” according to an executive who was in the room; Shine laughed. (A Fox spokesperson said Shine did not recall this.) Fox’s IT department also monitored employee email, according to sources. When I asked Fox’s director of IT, Deborah Sadusingh, about email searches, she said, “I can’t remember all the searches I’ve done.”

-

When Ailes uncovered something he didn’t like, he had various means of retaliation and increased surveillance. Fox’s notorious PR department, which for years was directed by Brian Lewis and is now overseen by Irena Briganti, was known for leaking negative stories about errant employees to journalists. Fox contributor Jim Pinkerton wrote an anonymous blog called the Cable Game that attacked Ailes-selected targets, two Fox executives confirmed. Fox contributor Bo Dietl did private-investigation work for Ailes, including following former Fox producer Andrea Mackris after she sued Bill O’Reilly for sexual harassment, a Fox source said. Ailes turned these same tactics on his enemies outside the company, including journalists. CNN’s Brian Stelter recently reported on Fox’s 400-page opposition-research file on me.

-

Fox News also obtained the phone records of journalists, by legally questionable means. According to two sources with direct knowledge of the incident, Brandi, Fox’s general counsel, hired a private investigator in late 2010 to obtain the personal home- and cell-phone records of Joe Strupp, a reporter for the liberal watchdog group Media Matters. (Through a spokesperson, Brandi denied this.) In the fall of that year, Strupp had written several articles quoting anonymous Fox sources, and the network wanted to determine who was talking to him. “This was the culture. Getting phone records doesn’t make anybody blink,” one Fox executive told me.

-

What makes this practice all the more brazen is that the Guardian was already publishing articles about phone-hacking at Murdoch’s British newspaper division. About that scandal, Murdoch said, “I do not accept ultimate responsibility. I hold responsible the people that I trusted to run it and the people they trusted.” In this case, of course, the person he trusted, inexplicably, was Ailes, and Murdoch does not seem to have wanted to know how Ailes chose to spend company funds. Every year, Murdoch approved Ailes’s budgets without question. “When you have an organization making that much money, we didn’t go line by line through people’s budgets,” a former News Corp. executive said.

-
-
-
- -
- Megyn Kelly. - - -
-
-

Ailes was born in May 1940 in Warren, Ohio, then a booming industrial town. His father, a factory foreman, abused his wife and two sons. “He did like to beat the shit out of you with that belt … It was a pretty routine fixture of childhood,” Ailes’s brother Robert told me when I was reporting my book. His parents divorced in 1960. In court papers, Ailes’s mother alleged that her husband “threatened her life and to do her physical harm.”

-

Perhaps as an escape, Ailes lost himself in television. He suffered from hemophilia and was often homebound from school, so he spent hours on the living-room couch watching variety shows and Westerns. “He analyzed it, and he figured it out,” his brother told me of Ailes’s fascination with TV.

-
- - - - -
-
- - - - -
-

After graduating from Ohio University in 1962, Ailes landed a job as a gofer on The Mike Douglas Show, a daytime variety program that at the time was broadcast from Cleveland. Within four years, he had muscled aside the show’s creator and more seasoned colleagues to become the executive producer. Ailes’s mentor at The Mike Douglas Show, Chet Collier, who would later serve as his deputy at Fox, drilled into him the notion that television is a visual medium. “I’m not hiring talent for their brainpower,” Collier would say.

-

Though Ailes had married his college girlfriend, he used his growing power to take advantage of the parade of beautiful women coming through his office hoping to be cast on the show. Over the past two months, I interviewed 18 women who shared accounts of Ailes’s offering them job opportunities if they would agree to perform sexual favors for him and for his friends. In some cases, he threatened to release tapes of the encounters to prevent the women from reporting him. “The feeling I got in the interview was repulsion, power-hungriness, contempt, violence, and the need to subjugate and humiliate,” says a woman who auditioned for Ailes in 1968 when she was a college student.

-

In August 1968, Ailes left The Mike Douglas Show to join Richard Nixon’s presidential campaign as a media strategist. Ailes’s success in reinventing the candidate for television helped propel Nixon to the White House and made Ailes a media star (he was the anti-hero of Joe McGinniss’s landmark book The Selling of the President). But even back then, Ailes’s recklessness put his thriving career at risk. A former model told me that her parents called the police on Ailes after she told them he assaulted her in a Cincinnati hotel room in 1969. “I remember Ailes sweet-talking my parents out of pressing charges,” she says.

-

One prominent Republican told me that it was Ailes’s well-known reputation for awful behavior toward women that prevented him from being invited to work in the Nixon White House (or, later, in the administration of Bush 41). So after the ’68 election, he moved to New York, where he continued to use his power to demand sex from women seeking career opportunities. During this time Ailes divorced, remarried, and divorced again. A former television producer described an interview with Ailes in 1975, in which he said: “If you want to make it in New York City in the TV business, you’re going to have to fuck me, and you’re going to do that with anyone I tell you to.” While running media strategy on Rudy Giuliani’s 1989 mayoral campaign, Ailes propositioned an employee of his political-consulting firm: He name-dropped his friend Barry Diller and said that if she’d have sex with him he’d ask Diller to get her a part on Beverly Hills 90210. (Diller said he never received such a request.)

-
- - - - -
-
- - - - -
-

In 1998, two years after launching Fox, Ailes got married for the third time, to a woman named Elizabeth Tilson, a 37-year-old producer who had worked for him at CNBC. Two years later, when Ailes was 59, the couple had a son. But neither a new marriage nor parenthood changed his predatory behavior toward the women who worked for him.

-

According to interviews with Fox News women, Ailes would often begin by offering to mentor a young employee. He then asked a series of personal questions to expose potential vulnerabilities. “He asked, ‘Am I in a relationship? What are my familial ties?’ It was all to see how stable or unstable I was,” said a former employee. Megyn Kelly told lawyers at Paul, Weiss that Ailes made an unwanted sexual advance toward her in 2006 when she was going through a divorce. A lawyer for former anchor Laurie Dhue told me that Ailes harassed her around 2006; at the time, she was struggling with alcoholism.

-

Ailes’s longtime executive assistant Judy Laterza — who became one of his top lieutenants, earning more than $2 million a year, according to a Fox executive — seemed to function as a recruiter of sorts. According to Carlson’s attorney, in 2002, Laterza remarked to a college intern she saw on the elevator about how pretty she was and invited her to meet Ailes. After that meeting, Ailes arranged for the young woman to transfer to his staff. Her first assignment was to go down to the newsstand and fetch him the latest issue of Maxim. When she returned with the magazine, Ailes asked her to stay with him in his office. He flipped through the pages. The woman told the Washington Post that Ailes said, “You look like the women in here. You have great legs. If you sleep with me, you could be a model or a newscaster.” She cut short her internship. (Laterza did not respond to a request for comment.)

-

I spoke with another Fox News administrative assistant who said Laterza invited her to meet Ailes in 2004. The woman, then 25, told Ailes that her ambition was to do commercials. Ailes offered to pay for voice lessons (she declined) and helped her land an agent at William Morris. A few months later, Ailes summoned her to his office for an update. She told him how excited she was about the opportunities, and Ailes invited her for a drink. She suggested happy hour, but he demurred. “For a man in my position, it would have to be alone at a hotel,” she recalls him saying. “Do you know how to play the game?” She tried to get out of the situation as tactfully as possible. “I don’t feel comfortable doing this,” she said. “I respect your family; what about your son?” She remembers Ailes’s reply: “I’m a multifaceted man. That’s one side of me.” As she left the office, she says, Ailes tried to kiss her. “I was holding a binder full of voice-over auditions that I put between us. I was terrified.” She says she never heard from the William Morris agent again.

-
- - - - -
-
- - - - -
-

The fact that these incidents of harassment were so common may have contributed to why no one at Fox came forward or filed a lawsuit until now. Ailes’s attitudes about women permeated the very air of the network, from the exclusive hiring of attractive women to the strictly enforced skirts-and-heels dress code to the “leg cam” that lingers on female panelists’ crossed legs on air. It was hard to complain about something that was so normalized. Other senior executives harassed women, too. “Anyone who claimed there was a hostile work environment was seen as a complainer,” says a former Fox employee who says Ailes harassed her. “Or that they can’t take a joke.”

-
-
-
- -
- Lachlan, Rupert, and James Murdoch in 2014. - - Photo: Dan Steinberg/Invision/AP Photo -
-
-

It is unfathomable to think, given Ailes’s reputation, given the number of women he propositioned and harassed and assaulted over decades, that senior management at Fox News was unaware of what was happening. What is more likely is that their very jobs included enabling, abetting, protecting, and covering up for their boss. “No one said no to Roger,” a Fox executive said.

-

The story of Laurie Luhn, which I reported in July, is an example of how Ailes used Fox’s public-relations, legal, and finance departments to facilitate his behavior. Ailes met Luhn on the 1988 George H.W. Bush campaign, and soon thereafter he put her on a $500 monthly retainer with his political-consulting firm to be his “spy” in Washington, though really her job was to meet him in hotel rooms. (During their first encounter, Luhn says, Ailes videotaped her in a garter belt and told her: “I am going to put [the tape] in a safe-deposit box just so we understand each other.”) Ailes recruited Luhn to Fox in 1996, before the network even launched. Collier, then his deputy, offered her a job in guest relations in the Washington bureau.

-

Laterza, Shine, and Shine’s deputy Suzanne Scott would take turns summoning Luhn for “meetings” in New York. (A Fox spokesperson said executives were not aware Ailes was sexually involved with Luhn.) Ailes and Luhn would meet in the afternoons, Luhn said, at hotels near Times Square, and Ailes paid her cash for sexual favors. She was also on the payroll at Fox — at her peak, she earned $250,000 a year as an event planner for the channel; multiple sources confirmed that she was a “Friend of Roger,” with special protection within the company. But the arrangement required her to do many things that now cause her anguish, including luring young female Fox employees into one-on-one meetings with Ailes that Luhn knew would likely result in harassment. “You’re going to find me ‘Roger’s Angels,’ ” he reportedly told her. One of Luhn’s employees received a six-figure settlement after filing a harassment claim against Ailes.

-

By the fall of 2006, Luhn says, Ailes was worried that she might go public with her story or cause a scene of some kind. That’s when the Fox machine really kicked into gear. According to Luhn, Fox PR tried to spread a rumor to the New York Daily News that Luhn had had an affair with Lee Atwater (which she denies), a story designed to make Luhn seem promiscuous so that her credibility would be damaged. When Luhn had an emotional breakdown en route to a vacation in Mexico, it was Shine’s job to arrange to bring her home. Scott picked her up at the airport and drove her to the Warwick Hotel on Sixth Avenue, where Luhn recalls that Scott checked her in under Scott’s name. (Scott denies this.)

-
- - - - -
-
- - - - -
-

Luhn later moved into a Fox corporate apartment in Chelsea, during which time, she says, Laterza and Shine monitored her email. (Shine denies this.) Luhn’s father says that Shine called him several times to check up on Luhn after she moved to California while still on the Fox payroll. Eventually, Shine even recommended a psychiatrist, who medicated and hospitalized her. At one point, Luhn attempted suicide. Through a spokesperson, Shine says he “was only trying to help.”

-

In late 2010 or early 2011, Luhn wrote a letter to Brandi, the Fox lawyer, saying she had been sexually harassed by Ailes for 20 years. According to a source, Brandi asked Ailes about the allegations, which he denied. Brandi then worked out a settlement at Ailes’s request. On June 15, 2011, Luhn signed a $3.15 million settlement agreement with extensive nondisclosure provisions. The payment was approved by Fox News CFO Mark Kranz. The check, which I viewed, was signed by David E. Miller, a treasurer for Fox Television Stations, Inc., a division run by current Fox co-president Jack Abernethy. “I have no idea how my name ended up on the check,” says Miller, citing standard company practice of signing checks and not asking questions. The settlement documents, which Luhn also showed me, were signed by Ailes, Brandi, and Shine.

-

After Luhn left Fox, Ailes took additional measures to conceal his harassment of employees. In 2011, he installed a floor-to-ceiling wooden door outside his executive suite. Only his assistants could see who entered his office. According to a former Fox producer, Laterza entered fake names into Ailes’s datebook when women went into his office: “If you got ahold of his ledger, you would not know who visited him.”

-

Still, the whispers about Ailes and women were growing louder. Karem Alsina, a former Fox makeup artist, told me she grew suspicious when Fox anchors came to see her before private meetings with Ailes to have their makeup done. “They would say, ‘I’m going to see Roger, gotta look beautiful!’ ” she recalled. “One of them came back down after a meeting, and the makeup on her nose and chin was gone.”

-

In 2012, after I had been reporting my Ailes biography for a year, Megyn Kelly became so concerned about the rumors that she went to Ailes’s then–PR chief, Brian Lewis, and attempted an intervention, according to a person close to Kelly. She told Lewis that Ailes was being reckless and that I might include his behavior in my book. (I did report the stories of two women who claimed Ailes had harassed them earlier in his career, and though I heard rumors of Ailes and Fox News women, I could not confirm them at the time.) Lewis, according to the source, asked Laterza to tell Ailes to stop because he thought Ailes might listen to his longtime assistant. Instead, according to the source, Laterza told Ailes that his PR chief was being disloyal. Less than a year later, Ailes fired Lewis.

-
- - - - -
-
- - - - -
-

Megyn Kelly was not a household name when she started at Fox News in 2004. A former corporate lawyer, she landed at Fox when former Special Report anchor Brit Hume recommended her to Ailes. She still wasn’t well known in 2006, when she got divorced and Ailes tried to take advantage of her perceived vulnerability. She may not have been any more powerful, at the time, than the other women he preyed on, but she was one of the lucky ones: She managed to rebuff his sexual overtures in a way that didn’t alienate her boss. “She was able to navigate the relationship to a professional place,” a person close to Kelly told me. In fact, Kelly’s career flourished after this. In 2010, Ailes gave her a two-hour midday show, on which she enthusiastically fanned his right-wing agenda — for instance, hyping stories about the New Black Panthers that many thought were racist. In October 2013, Ailes promoted Kelly to Sean Hannity’s 9 p.m. prime-time slot, where she memorably declared that Jesus and Santa are “white.” When asked by a fan on Twitter to name her biggest influence, she responded, “Roger Ailes.”

-

By 2015, although her show was still reliably right-wing, Kelly’s brand was evolving. After several high-profile clashes with Republican men, including Dick Cheney, she was developing something of a reputation as a feminist. As she entered the final two years of her contract, she started to think about a future outside of Fox, meeting with CNN chief Jeff Zucker in 2013.

-

Then came Donald Trump. Kelly’s feud with the GOP nominee was one of the dominant story lines of the presidential election; it also exploded the fragile balance of relationships at the top of Fox News.

-

According to Fox sources, Murdoch blamed Ailes for laying the groundwork for Trump’s candidacy. Ailes had given Trump, his longtime friend, a weekly call-in segment on Fox & Friends to sound off on political issues. (Trump used Fox News to mainstream the birther conspiracy theory.) Ailes also had lunch with Trump days before he launched his presidential campaign and continued to feed him political advice throughout the primaries, according to sources close to Trump and Ailes. (And in the days after Carlson filed her lawsuit, Trump advised Ailes on navigating the crisis, even recommending a lawyer.)

-

Murdoch was not a fan of Trump’s and especially did not like his stance on immigration. (The antipathy was mutual: “Murdoch’s been very bad to me,” Trump told me in March.) A few days before the first GOP debate on Fox in August 2015, Murdoch called Ailes at home. “This has gone on long enough,” Murdoch said, according to a person briefed on the conversation. Murdoch told Ailes he wanted Fox’s debate moderators — Kelly, Bret Baier, and Chris Wallace — to hammer Trump on a variety of issues. Ailes, understanding the GOP electorate better than most at that point, likely thought it was a bad idea. “Donald Trump is going to be the Republican nominee,” Ailes told a colleague around this time. But he didn’t fight Murdoch on the debate directive.

-
- - - - -
-
- - - - -
-

On the night of August 6, in front of 24 million people, the Fox moderators peppered Trump with harder-hitting questions. But it was Kelly’s question regarding Trump’s history of crude comments about women that created a media sensation. He seemed personally wounded by her suggestion that this spoke to a temperament that might not be suited for the presidency. “I’ve been very nice to you, though I could probably maybe not be based on the way you have treated me,” he said pointedly.

-

After the debate, Trump called Ailes and screamed about Kelly. “How could you do this?” he said, according to a person briefed on the call. Ailes was caught between his friend Trump, his boss Murdoch, and his star Kelly. “Roger lost control of Megyn and Trump,” a Fox anchor said.

-

The parties only became more entrenched when Trump launched a series of attacks against Kelly, including suggesting that her menstrual cycle had influenced her debate question. Problematically for Ailes, Fox’s audience took Trump’s side in the fight; Kelly received death threats from viewers, according to a person close to her. Kelly had even begun to speculate, according to one Fox source, that Trump might have been responsible for her getting violently ill before the debate last summer. Could he have paid someone to slip something into her coffee that morning in Cleveland? she wondered to colleagues.

-

While Ailes released a statement defending Kelly, he privately blamed her for creating the crisis. “It was an unfair question,” he told a Fox anchor. Kelly felt betrayed, both by Ailes and by colleagues like O’Reilly and Baier when they didn’t defend her, sources who spoke with her said. “She felt she put herself out there,” a colleague said.

-

Frustrated at Fox, Kelly hired a powerhouse agent at CAA and began auditioning in earnest, and in public, for a job at another network. In interviews, she said her ambition was to become the next Barbara Walters and to host prime-time specials. She wanted to prove to the industry she could land a “big get” — and the biggest get of all was Trump. So Kelly went to Trump Tower to lobby the candidate for an interview. It worked — even Trump couldn’t resist the spectacle of a rematch — but in the end the show failed: The ratings were terrible and reviewers panned her generally sycophantic questions. Worse for Kelly, it eroded her burgeoning status as a tough journalist who stood up to Trump. Afterward, her relationship with Ailes further deteriorated. According to Fox sources, they barely spoke in recent months.

-

Kelly and Gretchen Carlson were not friends or allies, but Carlson’s lawsuit presented an opportunity. Kelly could bust up the boys’ club at Fox, put herself on the right side of a snowballing media story, and rid herself of a boss who was no longer supportive of her — all while maximizing her leverage in a contract negotiation. She also had allies in the Murdoch sons. According to a source, Kelly told James Murdoch that Ailes had made harassing comments and inappropriately hugged her in his office. James and Lachlan both encouraged her to speak to the Paul, Weiss lawyers about it. Kelly was only the third or fourth woman to speak to the lawyers, according to a source briefed on the inquiry, but she was by far the most important. After she spoke with investigators, and made calls to current and former Fox colleagues to encourage them to speak to Paul, Weiss as well, many more women came forward.

-
- - - - -
-
- - - - -
-

Ailes was furious with Kelly for not defending him publicly. According to a Fox source, Ailes’s wife Elizabeth wanted Fox PR to release racy photos of Kelly published years ago in GQ as a way of discrediting her. The PR department, in this instance, refused. (Elizabeth is said to be taking all of the revelations especially hard, according to four sources close to the family. Giuliani, who officiated their wedding, told Murdoch she would likely divorce Ailes, according to two sources: “This marriage won’t last,” he said.)

-

Two days after New York reported that Kelly had told her story to Paul, Weiss attorneys, Ailes was gone. And Kelly had made herself more important to the network than ever.

-

Ailes’s ouster has created a leadership vacuum at Fox News. Several staffers have described feeling like being part of a totalitarian regime whose dictator has just been toppled. “No one knows what to do. No one knows who to report to. It’s just mayhem,” said a Fox host. As details of the Paul, Weiss investigation have filtered through the offices, staffers are expressing a mixture of shock and disgust. The scope of Ailes’s alleged abuse far exceeds what employees could have imagined. “People are so devastated,” one senior executive said. Those I spoke with have also been unnerved by Shine and Brandi’s roles in covering up Ailes’s behavior.

-

Despite revelations of how Ailes’s management team enabled his harassment, Murdoch has so far rejected calls — including from James, according to ­sources — to conduct a wholesale housecleaning. On August 12, Murdoch promoted Shine and another Ailes loyalist, Jack Abernethy, to become co-presidents of Fox News. He named Scott executive vice-president and kept Brandi and Briganti in their jobs. Fox News’s chief financial officer, Mark Kranz, is the only senior executive to have been pushed out (officially he retired), along with Laterza and a handful of assistants, contributors, and consultants. “Of course, they are trying to isolate this to just a few bad actors,” a 21st Century Fox executive told me.

-

Many people I spoke with believe that the current management arrangement is just a stopgap until the election. “As of November 9, there will be a bloodbath at Fox,” predicts one host. “After the election, the prime-time lineup could be eviscerated. O’Reilly’s been talking about retirement. Megyn could go to another network. And Hannity will go to Trump TV.”

-

The prospect of Trump TV is a source of real anxiety for some inside Fox. The candidate took the wedge issues that Ailes used to build a loyal audience at Fox News — especially race and class — and used them to stoke barely containable outrage among a downtrodden faction of conservatives. Where that outrage is channeled after the election — assuming, as polls now suggest, Trump doesn’t make it to the White House — is a big question for the Republican Party and for Fox News. Trump had a complicated relationship with Fox even when his good friend Ailes was in charge; without Ailes, it’s plausible that he will try to monetize the movement he has galvanized in competition with the network rather than in concert with it. Trump’s appointment of Steve Bannon, chairman of Breitbart, the digital-media upstart that has by some measures already surpassed Fox News as the locus of conservative energy, to run his campaign suggests a new right-wing news network of some kind is a real possibility. One prominent media executive told me that if Trump loses, Fox will need to try to damage him in the eyes of its viewers by blaming him for the defeat.

-
- - - - -
-
- - - - -
-

Meanwhile, the Murdochs are looking for a permanent CEO to navigate these post-Ailes, Trump-roiled waters. According to sources, James’s preferred candidates include CBS president David Rhodes (though he is under contract with CBS through 2019); Jesse Angelo, the New York Post publisher and James’s Harvard roommate; and perhaps a television executive from London. Sources say Lachlan, who politically is more conservative than James, wants to bring in an outsider. Rupert was seen giving Rebekah Brooks a tour of the Fox offices several months ago, creating speculation that she could be brought in to run Fox. Another contender is Newsmax CEO Chris Ruddy.

-

As for the women who collectively brought an end to the era of Roger Ailes, their fortunes are mixed. Megyn Kelly is in a strong position in her contract talks, and sources say Gretchen Carlson will soon announce an eight-figure settlement. But because New York has a three-year statute of limitations on sexual harassment, so far just two women in addition to Carlson are said to be receiving settlements from 21st Century Fox. The many others who left or were forced out of the company before the investigation came away with far less — in some cases nothing at all.

-

It’s hard to say that justice has been served. But the story isn’t over: Last week, the shareholder law firm Scott & Scott announced it was investigating 21st Century Fox to “determine whether Fox’s Officers and Directors have breached their fiduciary duties.” Meanwhile, Ailes is walking away from his biggest career train wreck yet, seeking relevance and renewed power through the one person in the country who doesn’t see him as political kryptonite, the candidate he created: Donald J. Trump. Ailes may be trying to sell us another president, but now we know the truth about the salesman.

-

*This sentence has been updated to reflect Shine’s presence at the meeting, a detail that was confirmed after publication.

-

*This article appears in the September 5, 2016 issue of New York Magazine.

-

*An earlier version of the article inaccurately stated Manny Alvarez is Elizabeth Ailes’s doctor.

- - -
- - - - - - - - - - - - - - -
-
-
- - -
-
-
- - - - -
- -
- - - - -
- -
-
- - - - -
-
-
-
-
-
-
- -
-
-
-
-
- - - - -
-
- - - - -
-
- - - - -
- -
-
-
- - - - -
- - - -
- - -
- -
- - diff --git a/fixtures/nytimes.html b/fixtures/nytimes.html deleted file mode 100644 index 0cb05eacf..000000000 --- a/fixtures/nytimes.html +++ /dev/null @@ -1,1394 +0,0 @@ - - - - - - - - A Conflicted Donald Trump Tries a New Tactic: Sticking to the Script - The New York Times - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - -
-
- - - -
-
- -
- - -
-
-
- Photo -
- - - -
-
- Donald J. Trump on Wednesday after a rally in Tampa, Fla., where he nodded to conspiracy theories about Hillary Clinton’s health. - - Credit - Damon Winter/The New York Times -
-
-

After months of flailing attempts, Donald J. Trump has begun to recast his political message in more structured terms and wrestle with his temptation to go off script, as his campaign seeks to revive his fading candidacy and turn the focus this fall to Hillary Clinton’s honesty and integrity.

Working off a script from his reshuffled team of advisers, Mr. Trump is also drastically tempering his language about the signature issue of his campaign: immigration. After winning the Republican nomination on a promise to deport all 11 million immigrants who are in the United States illegally, he indicated on Wednesday night that he was considering allowing some to stay if they had lived in the United States for many years, lacked criminal records and paid back taxes.

“We are going to come out with a decision very soon,” he said on Fox News, signaling flexibility on an issue that sharply divides undecided voters. He is expected to deliver a speech on immigration next week in Phoenix.

Mr. Trump is also spending far less time attacking his fellow Republicans and picking fights with people other than Mrs. Clinton, instead hammering away at her State Department tenure and her family’s charitable foundation. And he is aligning his stump speeches with his television advertising, vowing to crack down on violent crime and improve border security.

-

Aware of his unpopularity with white moderate voters, especially women who have been turned off by his racially charged words, he is trying to show interest in the lives of African-Americans and Hispanics, too, even as he uses language that offends those groups.

Many Republicans, weary of repeated promises of a reborn Mr. Trump, remain skeptical that he can stick to his message over the next 11 weeks, and some say it is too late to persuade most voters to see him anew.

- Photo -
- - - -
-
- Mr. Trump met with volunteers at a voter registration drive outside his campaign event in Tampa, Fla., on Wednesday. - - Credit - Damon Winter/The New York Times -
-
-

And the message he has delivered with fresh rigor, especially his emphasis on crime, still diverges widely from what most Republicans view as a winning pitch.

Continue reading the main story -
-
-
-
-
- -
-
-
-

Even Mr. Trump is not sure he can be letter-perfect. He said in an interview that he still loved his freewheeling rallies of old, even when they got him in trouble, and that he would not always rely on prepared remarks or stop waging warfare with his Twitter account, even if he ended up overshadowing his advisers’ preferred arguments.

Yet Mr. Trump seems to be confronting the reality that his political fortunes could rise or fall on his ability to show restraint.

Over the last week, his new political team shared grim polling data with Mr. Trump and told him directly that he was in grave danger of losing if he did not sharpen and steadily prosecute strong arguments against Mrs. Clinton. He came away persuaded and has been heartened by upticks in some recent polls.

“I have been staying on message more now because, ultimately, I’m finding that I do better with voters, do better in the polls, when I’m on message,” he said in a telephone interview on Tuesday.

Mr. Trump ousted his chief strategist, Paul Manafort, last week and appointed two advisers who had more expertise with his brand of bare-knuckle public relations: Kellyanne Conway, a veteran pollster and cable news commentator, and Stephen K. Bannon, the chairman of Breitbart News, a conservative website.

-

Mr. Trump sees Ms. Conway as a polished and energetic defender who can help him attract female voters and shape the message that he wants to deliver, rather than impose one on him. She, in turn, wanted him to have prepared remarks at rallies, and he decided to use teleprompters to help stick to those scripts.

- - -
-
- -
-
- - - OPEN Interactive Feature -
-
- -

- Interactive Feature: Who Will Be President?

-
-
-

“Ultimately, I said I want to do this my way,” he said. “I had 80 days at the time, and I want to do it my way.”

Few presidential candidates have indulged their impulses and spoken off-the-cuff as much as Mr. Trump, a political outsider who is used to playing the tough guy in boardrooms and business negotiations. Assuming the role of party standard-bearer has been a struggle for him, and even now, as he tries to follow a new script, he has not abandoned the caustic tone that has defined his candidacy.

His evolving language on immigration reflects his conflicting desires: In the space of a few hours on Tuesday, he said he was open to “softening” his hard-line policies toward some people who had entered the country illegally and then whipped up a rally in Austin, Tex., with promises to make Mexico pay for a border wall.

His new pleas for support from black voters have also carried a hard edge, including last week in Wisconsin, when he questioned why they would not vote for him. Describing blacks as besieged by crime and bereft of economic opportunity, he asked, “What the hell do you have to lose?” In Ohio on Monday, he described American cities as more dangerous than war zones, and in Mississippi on Wednesday night, he called Mrs. Clinton a “bigot” who courted minorities only for their votes.

And at a rally in Tampa, Fla., on Wednesday, Mr. Trump still showed a penchant for going off script, reading the word “premeditation” as “premedication” during an attack on Mrs. Clinton — and then, after a pause, saying he preferred “premedication,” an apparent nod to conspiracy theories that his allies have spread about her health.

Several Republican leaders and strategists, including those critical of Mr. Trump, said they had noticed adjustments in his performance since Ms. Conway became his campaign manager last week. Where previous advisers have sought to recraft the basics of his message, the new team around him appears intent mainly on arranging his favorite themes in a more consistent, linear format.

Still, with early voting set to begin in many states in late September and October, and given Mr. Trump’s history of popping off on Twitter, at rallies or in cable interviews at any moment, they said it was impossible to say whether his current message would endure and help turn the focus to Mrs. Clinton’s character.

- - -
-
- -
- - - - -
-

First Draft Newsletter

-

Subscribe for updates on the 2016 presidential race, the White House and Congress, delivered to your inbox Monday - Friday.

- -
- - - - - -
- - -
- -

“Is what he’s doing enough for him to win? We’ve got to play the hand we’re dealt, so it will have to be enough, but it’s very hard to know,” said Matt Borges, the head of the Ohio Republican Party, who has urged Mr. Trump to adopt a more positive tone. “He just needs to focus on all of Hillary Clinton’s problems. But look, we’ve all been saying that for months.”

-

John Brabender, a Republican strategist who has worked extensively in swing states, said there was clearly an effort in progress to guide Mr. Trump toward a “more focused and more consistently delivered message,” within the limits of what comes naturally to him. But Mr. Brabender also suggested that Mr. Trump needed to do more.

“He should be talking about: What is the vision of what America is going to look like after four years of Donald Trump, and what does that mean for people’s lives?” Mr. Brabender said, allowing that Mr. Trump had improved on his practice of “making it up at every campaign stop they have.”

Mr. Trump, in the interview, argued that it took “more talent to do freethinking rallies” than to stick to a script, noting that he had to remember to make points about jobs and immigration while also engaging his audiences. He said that he was adjusting to his latest style of communicating, and that it sometimes felt at odds with his desire to entertain the crowds at his rallies. Yet as he mulls important shifts on immigration, he is still making muddled statements and remains far from clear on policy details.

There are signs of change. In an interview last month, shortly after the F.B.I. director, James B. Comey, issued scathing comments about Mrs. Clinton’s email practices as secretary of state, Mr. Trump said he could not “spend more than five minutes talking about her emails at my rallies, because people will lose interest, and you have to talk about other things to keep their attention.” But in the interview this week, he said he needed to “give people a mix of things at the rallies” and wanted “to be more on message.”

“Now we’re getting to Labor Day, and things will be different,” he said.

Still, if aides have helped bring new focus to Mr. Trump’s stump speech, they have been unable to tame him on social media, where he continues to deliver outlandish attacks on all manner of adversaries, especially in the news media. He attacked the MSNBC hosts Mika Brzezinski and Joe Scarborough on Monday in extraordinarily personal terms and threatened to “tell the real story” about them.

Mr. Trump said he would not hesitate to do so again if they criticized him, or to consider taking on others — even if that meant stepping on his scripted message.

“If people hit me, I will certainly hit back,” he said. “That will never change.”

- Continue reading the main story -
-
-
-
- - - - -
- - - - -
-
-
-
-

Go to Home Page »

-

- Site Index - - The New York Times - -

- -
- - - -
- - -
-
- - - - - - - - - - - - - - - - - diff --git a/fixtures/obamawhitehouse.archives.gov/1490227791307.html b/fixtures/obamawhitehouse.archives.gov--blog.html similarity index 69% rename from fixtures/obamawhitehouse.archives.gov/1490227791307.html rename to fixtures/obamawhitehouse.archives.gov--blog.html index 7412ddf71..759207e30 100644 --- a/fixtures/obamawhitehouse.archives.gov/1490227791307.html +++ b/fixtures/obamawhitehouse.archives.gov--blog.html @@ -3,43 +3,48 @@ - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + @@ -59,30 +64,25 @@ - + WEEKLY ADDRESS: Merry Christmas from the President and the First Lady | whitehouse.gov - - - - - - - + + @@ -90,10 +90,10 @@ @@ -130,138 +130,138 @@ - +

Leah Remini thinks wife of Scientology leader is dead

Backlash keeps Andrea Bocelli from performing at inauguration

Arnold Schwarzenegger: 'When I look in the mirror, I throw up'

Lindsey Vonn steps out with new football beau

Husband wanted to cash in on Zsa Zsa's 100th birthday, pal claims

Now On

\ No newline at end of file diff --git a/fixtures/pastebin.com.html b/fixtures/pastebin.com.html new file mode 100644 index 000000000..a4bbefb15 --- /dev/null +++ b/fixtures/pastebin.com.html @@ -0,0 +1,563 @@ + + + + + + + + atg 1700 - Pastebin.com + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ + + + + + + paste + +
+ +
+ +
+ + +
+ +
+ +
+
+ +
+ + +
+
+ + + + + + + + +
+ + +
+ +
+ EvilSpark
+
+
+ + + +

atg 1700

+
+
+ +
+ EvilSpark +
+ + + + +
+ Apr 27th, 2020 + +
+ +
+ 3,245
+ +
+ Never
+ +
+
+
+ + + +
+
+
+ Not a member of Pastebin yet? + Sign Up, + it unlocks many cool features!
+
+
+ + +
+
+
+ text 14.84 KB +
+ +
+ Copied + copy + + raw + download + clone + embed + print + + report + + +
+
+
+
  1. Yun Che didn't think much about his title for the Imperial Coronation.
  2.  
  3. God-Emperor, the supreme being of the world. Imperial Coronation is all in pursuit of Profound Dao and the apex of power. Rises high between heaven and earth, overlooking all living beings.
  4.  
  5. But Yun Che, just for revenge. It doesn't matter to him which Emperor he is.
  6.  
  7. "Since you have proposed it, you should already have the answer." Yun Che goes straight.
  8.  
  9. "I have two options." Chi Wuyao said slowly: "First, you are the only successor of the Heaven Smiting Devil Emperor, devil blood and devil art. Therefore, you can directly bear the name of 'Heaven Smiting Devil Emperor'."
  10.  
  11. "This name, in the Northern God Territory, has its great devil might."
  12.  
  13. Yun Che frowned slightly and said, "What about the second?"
  14.  
  15. "Evil Emperor." Chi Wuyao said, "The turning point of your fate is the fact that you have Evil God Inheritance and Evil God's Profound Veins. Even if you call yourself Evil God, it is not too much."
  16.  
  17. "Besides, the word evil, which is neither good nor bad, is full of unruly and arrogance, but is compatible with your fate and mood changes."
  18.  
  19. Chi Wuyao said but did not ask Yun Che, but beautiful eyes turned and asked Qianye Ying'er, "What do you think?"
  20.  
  21. Qianye Ying'er coldly looked and said, "He is not Heaven Smiting Devil Emperor, nor Evil God. He is... Yun Che, who is unique and does not need to fake any other person's name or power."
  22.  
  23. "Oh?" Chi Wuyao seemed to smile but not smile, and his eyes tilted down slightly: "It seems that you already have a name in... your chest."
  24.  
  25. "North Territory Devil Lord Emperor Yun!" Qianye Ying'er said with condensing eyes, "Clouds are peaceful, the world is prosperous. Clouds hang down and can cover the world and turn over the sea. Clouds get angry and it makes heavenly thunder." (some cheesy bullshit)
  26.  
  27. "Moreover, this is his surname. Since he is the emperor of the world, myriad spirits in the world should always remember the word" Yun "in his heart!"
  28.  
  29. Qianye Ying'er said, but her lips moved softly and her brow was calm. She said to Chi Wuyao, "This is also the eternal glory he can give to his family and people!"
  30.  
  31. The meaning behind this sentence is that it can, to some extent, erase his deep shame towards his family. For the sake of family members and clansmen, we can continue our glory forever... and continue our life.
  32.  
  33. Compared with Qianye Ying'er's hostility, which has soared by many times compared with the previous one, Chi Wuyao did not mean to "accept the move" at all. Instead, he smiled and nodded, praising, "Very well, Devil Lord Emperor Yun, then let's make it a decision."
  34.  
  35. Qianye Ying'er: "…"
  36.  
  37. Yun Che looked up and said, "I haven't answered yet..."
  38.  
  39. "The second thing is about the little girl in Eastern God Territory Glazed Light Realm." Chi Wuyao Road.
  40.  
  41. Yun Che was shocked and turned around fiercely: "Shui Meiyin? What's wrong with her?"
  42.  
  43. Chi Wuyao's real body has never come into contact with Shui Meiyin, but "Mu Xuanyin" has seen him more than once. When Yun Che and Shui Meiyin got married, she was still responsible for it... although it failed to come true in the end.
  44.  
  45. "About two years ago," Chi Wuyao said slowly, "the news that Glazed Light Realm had taken in and protected you came out and was sanctioned by Moon God-Emperor."
  46.  
  47. The word "Moon God Emperor" touched the nerves of Yun Che and Qianye Ying'er at the same time.
  48.  
  49. Yun Che's soul was intensively shocked, whispering, "What do you mean by sanctions...?"
  50.  
  51. Chi Wuyao voice/sound slowed down, demonic sound comforted his heart: "It is said that Glazed Light Realm King Shui Qianheng took over the matter. Moon God Emperor wanted to kill him, but thanks to Eternal Sky God Emperor's efforts to dissuade her by pleading... and then changed the killing to abolition. At the same time, Shui Meiyin was also imprisoned in Moon God Realm for a thousand years."
  52.  
  53. "…" Yun Che did not move but look a shadow evil spirit.
  54.  
  55. In Yun Che's heart and soul, the only pure land left in Eastern God Territory, except Snow Song Realm, is the girl who is exposed in darkness and enemies of the world, but still hugs him tightly and drenches his back with tears.
  56.  
  57. It was the only warmth in that cold day.
  58.  
  59. "After Shui Qianheng was abolished, he has stepped down from the position of Realm King. Now Glazed Light Realm King is Shui Yingyue. As for Shui Meiyin, there has been no news since she was imprisoned in the Moon God Realm. Glazed Light Realm visited several times and was kicked out."
  60.  
  61. chi!
  62.  
  63. Yun Che's tight hand bone was violently dislocated and chuckle rattled between his teeth.
  64.  
  65. In those days, he left Glazed Light Realm as soon as he woke up and tried his best to clear up the relationship and traces, but he still brought trouble to them, and the trouble was so heavy.
  66.  
  67. "No matter what the world thinks of you, Elder Brother Yun Che will always be the best... best person in the world in my heart. So... please... be alive... and all the people you love... live safely... okay..."
  68.  
  69. In those days, when we last met and parted, her tearful eyes and whispering tears were the precious stars that did not completely fall into darkness in the darkest months afterwards.
  70.  
  71. Moon God-Emperor …
  72.  
  73. Xia Qingyue!!
  74.  
  75. Yun Che's eyes are full of hatred, and the uncontrolled murderous aura is mixed up in his pupil.
  76.  
  77. The shattered and gorgeous picture of Blue Pole Star is the cruellest nightmare in his life.
  78.  
  79. His killing intent towards Xia Qingyue is even higher than his hate towards Zhou Xuzi. ( what a retard)
  80.  
  81. "It is indeed Moon God Emperor ruthless enough." Whispered Qianye Ying'er, then glanced at Chi Wuyao in surprise.
  82.  
  83. It is only normal for Xia Qingyue to do so. On the one hand, it will completely clear away the traces of being Devil's wife. On the other hand, it is... afraid that Shui Meiyin will be deeply attached to Yun Che and will become a great disaster in the future.
  84.  
  85. As ruthless Moon God-Emperor, of course, we must use this perfect reason to firmly control Shui Meiyin, who has Stainless God Soul and may become a disaster.
  86.  
  87. "There is no need to wait until after the Imperial Coronation ceremony." Yun Che made a slow noise, words said in a low voice: "Start the campaign directly... Let Huajin go to Eastern God Territory now!"
  88.  
  89. "Don't act too hastily." Chi Wuyao leaned his eyes and said, "However since it's Devil Lord's orders, how can I refuse... she left half an hour ago."
  90.  
  91. She knows Yun Che too well and how she will react when she tells him about Shui Meiyin, she has expected.
  92.  
  93. However, she did not want to hide from Yun Che. No man likes to hide, even if it is good intentions.
  94.  
  95. Yun Che did not speak again. He breathed a long sigh of relief and his figure flashed. He was already falling into Soul Encompassing Heaven. He needs to find a place to calm down.
  96.  
  97. "Oh?" Chi Wuyao beautiful eyes looked at Qianye Ying'er: "Why don't you keep up? Aren't you afraid... to be taken advantage of by other women?"
  98.  
  99. Qianye Ying'er also looked at her, as if he wanted to see all her heart through her eyes: "With the occlusion of Northern God Territory and Eastern God Territory, it must have taken a lot of work to find out the information to this extent."
  100.  
  101. "Under the dark compatibility given by Darkness Everlasting, Dark aura's exposure outside the North Territory may drop hundreds and thousands of times, so..." Chi Wuyao's eyes are dim: "It's not that difficult. On the other hand, people in three God Territories still have difficulty getting information from my North Territory."
  102.  
  103. "Why did you come to tell him about the little girl in Glazed Light Realm?" "He should not be bored enough to mention her to you," Qianye Ying'er asked.
  104.  
  105. "Little girl?" Chi Wuyao smiled lightly: "This name, I can call, you can't... After experiencing Eternal Sky God Realm... in terms of age and sequence, she is your Elder Sister."
  106.  
  107. "... answer my question." Qianye Ying'er once again asked the same question he had asked before: "Who are you?"
  108.  
  109. "I will tell you when the Imperial Coronation is over. Although..." Chi Wuyao said softly, "you shouldn't know."
  110.  
  111. Qianye Ying'er did not ask again, nor did he go to Yun Che. Instead, he suddenly turned to ask, "Do you know Xia Qingyue?"
  112.  
  113. "Yes." Chi Wuyao replied, "I may know her much better than you."
  114.  
  115. "Oh?" Qianye Ying'er did not question it and asked, "What kind of person is she based on your understanding of her?"
  116.  
  117. The faint smile on Chi Wuyao's face disappeared, and eyes seemed to be covered with a dark fog: "I have Devil Emperor's Soul and once boasted that I knew no one better. However, Xia Qingyue, a person who severely undermined my confidence in this respect. Xia Qingyue, in my judgment at that time, was a person who would never hurt Yun Che's."
  118.  
  119. "As a result, it was ruthless who laid hands on him." Qianye Ying'er coldly laughed.
  120.  
  121. "So, the most difficult thing in the world is to see a woman." Chi Wuyao looked at Qianye Ying'er's golden eyes and flowery lips slightly: "After all, women... are too fickle."
  122.  
  123. Qianye Ying'er golden eyebrows puckered, "Are you talking about me?"
  124.  
  125. Chi Wuyao smiled: "In Center Ruins Realm, you stripped Chanyi of his clothes in front of Yun Che's. At that time, you should especially want to see Yun Che's beastly and severely humiliate Chanyi, right?"
  126.  
  127. Qianye Ying'er: "…"
  128.  
  129. "Imperial Sky Realm, you fight Yaodie. When Yaodie asks what kind of Profound Arts you are cultivating, you said her to 'ask the future master' and" ask in bed '. "
  130.  
  131. Qianye Ying'er: "… … …"
  132.  
  133. "At that time, you must have wished Yun Che had despised and spoiled all the women who held high positions and could make you overlook them... just like your situation, you always got a distorted balance and pleasure."
  134.  
  135. "..." Qianye Ying'er eyes slightly condensed but did not speak.
  136.  
  137. "Now you have jumped from one extreme to the other." Chi Wuyao has a long meaning: "I let you see yourself clearly, but I don't want this result Oh."
  138.  
  139. The soul of Qianye Ying'er is twisted... Was and still is.
  140.  
  141. "Even if I am Empress, you are the only one who can sleep with him?" Chi Wuyao sipped his lips and smiled: "It is hard for brothel women to say such vulgar words, but it comes from your Brahma Emperor Goddess. In such a panic and urgent way of declaring sovereignty, even young birds are not as good as Oh. Are you... so afraid of me?"
  142.  
  143. "Me... afraid of you!?" Her face is cold, but the heart is full of confusion and agitation.
  144.  
  145. In front of this terrible woman, almost every word is pounding her heart and soul... even including the corner that she did not see clearly.
  146.  
  147. She was afraid... When Chi Wuyao's words came into her ears, she found herself afraid.
  148.  
  149. When she lost her most important affection, she fell into the abyss.
  150.  
  151. Now, her Soul's deepest and most fearful, and almost every wisp of faith is in fear... Even what she never and dare not think with her consciousness is once again lost...
  152.  
  153. As Chi Wuyao said at the beginning, Brahma Emperor Goddess, who used to regard all life as a tool for his self-interest, has been reduced to a wandering chick who has completely lost himself.
  154.  
  155. The only one who can "save" her is herself.
  156.  
  157. Chi Wuyao walked slowly forward and stood beside Qianye Ying'er, her shoulders touching lightly. She breathed slowly and said lightly, "You don't have to be afraid of me. As long as you don't become another Xia Qingyue, I will never be your enemy, let alone take him away from you. On the contrary, as I said to you at the beginning... what I owe you most is gratitude."
  158.  
  159. "Moreover," she voice/sound softened and demonic sound enchanted: "If I can share a bed with Brahma Emperor Goddess to serve a man, I am looking forward to Oh … … I believe he will also like it very much."
  160.  
  161. "… … …"
  162.  
  163. Qianye Ying'er felt limp and numb all over her body. When she returned to her senses, there was no Chi Wuyao's form around her.
  164.  
  165. However, her terrible demonic sound is still entangled in her heart and soul and cannot be dispersed.
  166.  
  167. Inside and outside the Plundered Soul sanctuary, myriad spirits surge, and every aura is so powerful that it makes people thrill and frighten.
  168.  
  169. The sky of Plundered Soul Realm is covered with devil clouds. The sky is much lower than usual. It seems that it will capsize at any time.
  170.  
  171. Countless Realm King and overlords gathered in the Plundered Soul Realm and sanctuary. The High-Rank Star Realm was already sitting upright. Outside the sanctuary, there were also endless crowds.
  172.  
  173. Dark clouds are rolling, the black mist is moving, and countless dark Profound arrays are running in every corner of the Plundered Soul Sanctuary. These dark Profound arrays are centred on the devil legacy of Burning Moon Realm, and the three King Realm are jointly cast, which can project today's Imperial Coronation ceremony to every corner of the Northern God Territory.
  174.  
  175. All the floating islands of Plundered Soul Realm gather on the sanctuary. What is even more striking is the three huge shadows that frighten all High-Rank Realm King in the distant sky.
  176.  
  177. Plundered Soul, Yama, Burning Moon, King Realm's main profound ship!
  178.  
  179. Today, all gathered over Plundered Soul Realm, like three heavenly Devil God looking down at the North Territory.
  180.  
  181. The scene was magnificent and unprecedented.
  182.  
  183. The North Terror is mighty, but both inside and outside the sanctuary, there is a terrible silence and even a few whispers. They sometimes look up at the sky, sometimes hold their breath deeply... They know that they are about to witness the history of Northern God Territory.
  184.  
  185. The history of the Northern God Territory will always be remembered today.
  186.  
  187. Yun Che, the supreme Devil Lord shared by the three King Realm in the North Territory.
  188.  
  189. Is it the common plan of the three King Realm for a certain purpose, or is it... the young man from the Eastern God Territory, who is only half a six-year cycle in this rumour, really subdued the three King Realm in such a short time and so thoroughly!
  190.  
  191. Time moved slowly, after a long period of silence, finally...
  192.  
  193. RUMBLE!
  194.  
  195. The dull rumbled came from above, and the three Great King Realm main Profound ship slowly descended at this moment. The invisible and terrible pressure seemed to be pressed down with the whole sky Simultaneously.
  196.  
  197. A voice/sound full of Soul Absorption emperor's prestige came from the air and resounded through every corner of Plundered Soul Realm and even Northern God Territory: "The time has come to greet Devil Lord!"
  198.  
  199. The person who shouted was Yan Tianxiao.
  200.  
  201. The former North Territory Number One God Emperor was the host of this Imperial Coronation ceremony.
  202.  
  203. There is no way to describe the surprise in the heart of the North Territory Profound practitioner.
  204.  
  205. When Yan Tianxiao voice/sound fell, the three main ships also stopped sinking, and a devil light passed through them, spreading a dark path.
  206.  
  207. At the end of the Dark Path, a man in a black robe, eyes like an abyss, stepped on top of devil light and appeared in the pupil of all North Terror Profound practitioners.
+
+ + + +
+ RAW Paste Data + Copied +
+ + + + +
+ + +
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + diff --git a/fixtures/pastebin.com/1588021382616.html b/fixtures/pastebin.com/1588021382616.html deleted file mode 100644 index 3b048b67a..000000000 --- a/fixtures/pastebin.com/1588021382616.html +++ /dev/null @@ -1,643 +0,0 @@ - - - - - - - - - - - - - - - - atg 1700 - Pastebin.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
    - -
  • My Pastebin
  • -
  • My Messages [1]
  • -
  • My Alerts
  • -
  • Edit Profile
  • -
  • Edit Settings
  • -
  • Change Password
  • -
  • Go
  • -
  • Log Out
  • -
  • -
  • API
  • -
  • FAQ
  • -
  • Tools
  • -
  • Archive
-
- -
-
-
-
- - -
- -
- -
- -
-
-
- - -
-
-
SHARE
-
TWEET
-
-
- -
-
-

atg 1700

-
- EvilSpark - Apr 27th, 2020 (edited) - 1,798 - Never -
-
-
- -
-
- -
-
  1. Yun Che didn't think much about his title for the Imperial Coronation.
  2. -
  3.  
  4. -
  5. God-Emperor, the supreme being of the world. Imperial Coronation is all in pursuit of Profound Dao and the apex of power. Rises high between heaven and earth, overlooking all living beings.
  6. -
  7.  
  8. -
  9. But Yun Che, just for revenge. It doesn't matter to him which Emperor he is.
  10. -
  11.  
  12. -
  13. "Since you have proposed it, you should already have the answer." Yun Che goes straight.
  14. -
  15.  
  16. -
  17. "I have two options." Chi Wuyao said slowly: "First, you are the only successor of the Heaven Smiting Devil Emperor, devil blood and devil art. Therefore, you can directly bear the name of 'Heaven Smiting Devil Emperor'."
  18. -
  19.  
  20. -
  21. "This name, in the Northern God Territory, has its great devil might."
  22. -
  23.  
  24. -
  25. Yun Che frowned slightly and said, "What about the second?"
  26. -
  27.  
  28. -
  29. "Evil Emperor." Chi Wuyao said, "The turning point of your fate is the fact that you have Evil God Inheritance and Evil God's Profound Veins. Even if you call yourself Evil God, it is not too much."
  30. -
  31.  
  32. -
  33. "Besides, the word evil, which is neither good nor bad, is full of unruly and arrogance, but is compatible with your fate and mood changes."
  34. -
  35.  
  36. -
  37. Chi Wuyao said but did not ask Yun Che, but beautiful eyes turned and asked Qianye Ying'er, "What do you think?"
  38. -
  39.  
  40. -
  41. Qianye Ying'er coldly looked and said, "He is not Heaven Smiting Devil Emperor, nor Evil God. He is... Yun Che, who is unique and does not need to fake any other person's name or power."
  42. -
  43.  
  44. -
  45. "Oh?" Chi Wuyao seemed to smile but not smile, and his eyes tilted down slightly: "It seems that you already have a name in... your chest."
  46. -
  47.  
  48. -
  49. "North Territory Devil Lord Emperor Yun!" Qianye Ying'er said with condensing eyes, "Clouds are peaceful, the world is prosperous. Clouds hang down and can cover the world and turn over the sea. Clouds get angry and it makes heavenly thunder." (some cheesy bullshit)
  50. -
  51.  
  52. -
  53. "Moreover, this is his surname. Since he is the emperor of the world, myriad spirits in the world should always remember the word" Yun "in his heart!"
  54. -
  55.  
  56. -
  57. Qianye Ying'er said, but her lips moved softly and her brow was calm. She said to Chi Wuyao, "This is also the eternal glory he can give to his family and people!"
  58. -
  59.  
  60. -
  61. The meaning behind this sentence is that it can, to some extent, erase his deep shame towards his family. For the sake of family members and clansmen, we can continue our glory forever... and continue our life.
  62. -
  63.  
  64. -
  65. Compared with Qianye Ying'er's hostility, which has soared by many times compared with the previous one, Chi Wuyao did not mean to "accept the move" at all. Instead, he smiled and nodded, praising, "Very well, Devil Lord Emperor Yun, then let's make it a decision."
  66. -
  67.  
  68. -
  69. Qianye Ying'er: "…"
  70. -
  71.  
  72. -
  73. Yun Che looked up and said, "I haven't answered yet..."
  74. -
  75.  
  76. -
  77. "The second thing is about the little girl in Eastern God Territory Glazed Light Realm." Chi Wuyao Road.
  78. -
  79.  
  80. -
  81. Yun Che was shocked and turned around fiercely: "Shui Meiyin? What's wrong with her?"
  82. -
  83.  
  84. -
  85. Chi Wuyao's real body has never come into contact with Shui Meiyin, but "Mu Xuanyin" has seen him more than once. When Yun Che and Shui Meiyin got married, she was still responsible for it... although it failed to come true in the end.
  86. -
  87.  
  88. -
  89. "About two years ago," Chi Wuyao said slowly, "the news that Glazed Light Realm had taken in and protected you came out and was sanctioned by Moon God-Emperor."
  90. -
  91.  
  92. -
  93. The word "Moon God Emperor" touched the nerves of Yun Che and Qianye Ying'er at the same time.
  94. -
  95.  
  96. -
  97. Yun Che's soul was intensively shocked, whispering, "What do you mean by sanctions...?"
  98. -
  99.  
  100. -
  101. Chi Wuyao voice/sound slowed down, demonic sound comforted his heart: "It is said that Glazed Light Realm King Shui Qianheng took over the matter. Moon God Emperor wanted to kill him, but thanks to Eternal Sky God Emperor's efforts to dissuade her by pleading... and then changed the killing to abolition. At the same time, Shui Meiyin was also imprisoned in Moon God Realm for a thousand years."
  102. -
  103.  
  104. -
  105. "…" Yun Che did not move but look a shadow evil spirit.
  106. -
  107.  
  108. -
  109. In Yun Che's heart and soul, the only pure land left in Eastern God Territory, except Snow Song Realm, is the girl who is exposed in darkness and enemies of the world, but still hugs him tightly and drenches his back with tears.
  110. -
  111.  
  112. -
  113. It was the only warmth in that cold day.
  114. -
  115.  
  116. -
  117. "After Shui Qianheng was abolished, he has stepped down from the position of Realm King. Now Glazed Light Realm King is Shui Yingyue. As for Shui Meiyin, there has been no news since she was imprisoned in the Moon God Realm. Glazed Light Realm visited several times and was kicked out."
  118. -
  119.  
  120. -
  121. chi!
  122. -
  123.  
  124. -
  125. Yun Che's tight hand bone was violently dislocated and chuckle rattled between his teeth.
  126. -
  127.  
  128. -
  129. In those days, he left Glazed Light Realm as soon as he woke up and tried his best to clear up the relationship and traces, but he still brought trouble to them, and the trouble was so heavy.
  130. -
  131.  
  132. -
  133. "No matter what the world thinks of you, Elder Brother Yun Che will always be the best... best person in the world in my heart. So... please... be alive... and all the people you love... live safely... okay..."
  134. -
  135.  
  136. -
  137. In those days, when we last met and parted, her tearful eyes and whispering tears were the precious stars that did not completely fall into darkness in the darkest months afterwards.
  138. -
  139.  
  140. -
  141. Moon God-Emperor …
  142. -
  143.  
  144. -
  145. Xia Qingyue!!
  146. -
  147.  
  148. -
  149. Yun Che's eyes are full of hatred, and the uncontrolled murderous aura is mixed up in his pupil.
  150. -
  151.  
  152. -
  153. The shattered and gorgeous picture of Blue Pole Star is the cruellest nightmare in his life.
  154. -
  155.  
  156. -
  157. His killing intent towards Xia Qingyue is even higher than his hate towards Zhou Xuzi. ( what a retard)
  158. -
  159.  
  160. -
  161. "It is indeed Moon God Emperor ruthless enough." Whispered Qianye Ying'er, then glanced at Chi Wuyao in surprise.
  162. -
  163.  
  164. -
  165. It is only normal for Xia Qingyue to do so. On the one hand, it will completely clear away the traces of being Devil's wife. On the other hand, it is... afraid that Shui Meiyin will be deeply attached to Yun Che and will become a great disaster in the future.
  166. -
  167.  
  168. -
  169. As ruthless Moon God-Emperor, of course, we must use this perfect reason to firmly control Shui Meiyin, who has Stainless God Soul and may become a disaster.
  170. -
  171.  
  172. -
  173. "There is no need to wait until after the Imperial Coronation ceremony." Yun Che made a slow noise, words said in a low voice: "Start the campaign directly... Let Huajin go to Eastern God Territory now!"
  174. -
  175.  
  176. -
  177. "Don't act too hastily." Chi Wuyao leaned his eyes and said, "However since it's Devil Lord's orders, how can I refuse... she left half an hour ago."
  178. -
  179.  
  180. -
  181. She knows Yun Che too well and how she will react when she tells him about Shui Meiyin, she has expected.
  182. -
  183.  
  184. -
  185. However, she did not want to hide from Yun Che. No man likes to hide, even if it is good intentions.
  186. -
  187.  
  188. -
  189. Yun Che did not speak again. He breathed a long sigh of relief and his figure flashed. He was already falling into Soul Encompassing Heaven. He needs to find a place to calm down.
  190. -
  191.  
  192. -
  193. "Oh?" Chi Wuyao beautiful eyes looked at Qianye Ying'er: "Why don't you keep up? Aren't you afraid... to be taken advantage of by other women?"
  194. -
  195.  
  196. -
  197. Qianye Ying'er also looked at her, as if he wanted to see all her heart through her eyes: "With the occlusion of Northern God Territory and Eastern God Territory, it must have taken a lot of work to find out the information to this extent."
  198. -
  199.  
  200. -
  201. "Under the dark compatibility given by Darkness Everlasting, Dark aura's exposure outside the North Territory may drop hundreds and thousands of times, so..." Chi Wuyao's eyes are dim: "It's not that difficult. On the other hand, people in three God Territories still have difficulty getting information from my North Territory."
  202. -
  203.  
  204. -
  205. "Why did you come to tell him about the little girl in Glazed Light Realm?" "He should not be bored enough to mention her to you," Qianye Ying'er asked.
  206. -
  207.  
  208. -
  209. "Little girl?" Chi Wuyao smiled lightly: "This name, I can call, you can't... After experiencing Eternal Sky God Realm... in terms of age and sequence, she is your Elder Sister."
  210. -
  211.  
  212. -
  213. "... answer my question." Qianye Ying'er once again asked the same question he had asked before: "Who are you?"
  214. -
  215.  
  216. -
  217. "I will tell you when the Imperial Coronation is over. Although..." Chi Wuyao said softly, "you shouldn't know."
  218. -
  219.  
  220. -
  221. Qianye Ying'er did not ask again, nor did he go to Yun Che. Instead, he suddenly turned to ask, "Do you know Xia Qingyue?"
  222. -
  223.  
  224. -
  225. "Yes." Chi Wuyao replied, "I may know her much better than you."
  226. -
  227.  
  228. -
  229. "Oh?" Qianye Ying'er did not question it and asked, "What kind of person is she based on your understanding of her?"
  230. -
  231.  
  232. -
  233. The faint smile on Chi Wuyao's face disappeared, and eyes seemed to be covered with a dark fog: "I have Devil Emperor's Soul and once boasted that I knew no one better. However, Xia Qingyue, a person who severely undermined my confidence in this respect. Xia Qingyue, in my judgment at that time, was a person who would never hurt Yun Che's."
  234. -
  235.  
  236. -
  237. "As a result, it was ruthless who laid hands on him." Qianye Ying'er coldly laughed.
  238. -
  239.  
  240. -
  241. "So, the most difficult thing in the world is to see a woman." Chi Wuyao looked at Qianye Ying'er's golden eyes and flowery lips slightly: "After all, women... are too fickle."
  242. -
  243.  
  244. -
  245. Qianye Ying'er golden eyebrows puckered, "Are you talking about me?"
  246. -
  247.  
  248. -
  249. Chi Wuyao smiled: "In Center Ruins Realm, you stripped Chanyi of his clothes in front of Yun Che's. At that time, you should especially want to see Yun Che's beastly and severely humiliate Chanyi, right?"
  250. -
  251.  
  252. -
  253. Qianye Ying'er: "…"
  254. -
  255.  
  256. -
  257. "Imperial Sky Realm, you fight Yaodie. When Yaodie asks what kind of Profound Arts you are cultivating, you said her to 'ask the future master' and" ask in bed '. "
  258. -
  259.  
  260. -
  261. Qianye Ying'er: "… … …"
  262. -
  263.  
  264. -
  265. "At that time, you must have wished Yun Che had despised and spoiled all the women who held high positions and could make you overlook them... just like your situation, you always got a distorted balance and pleasure."
  266. -
  267.  
  268. -
  269. "..." Qianye Ying'er eyes slightly condensed but did not speak.
  270. -
  271.  
  272. -
  273. "Now you have jumped from one extreme to the other." Chi Wuyao has a long meaning: "I let you see yourself clearly, but I don't want this result Oh."
  274. -
  275.  
  276. -
  277. The soul of Qianye Ying'er is twisted... Was and still is.
  278. -
  279.  
  280. -
  281. "Even if I am Empress, you are the only one who can sleep with him?" Chi Wuyao sipped his lips and smiled: "It is hard for brothel women to say such vulgar words, but it comes from your Brahma Emperor Goddess. In such a panic and urgent way of declaring sovereignty, even young birds are not as good as Oh. Are you... so afraid of me?"
  282. -
  283.  
  284. -
  285. "Me... afraid of you!?" Her face is cold, but the heart is full of confusion and agitation.
  286. -
  287.  
  288. -
  289. In front of this terrible woman, almost every word is pounding her heart and soul... even including the corner that she did not see clearly.
  290. -
  291.  
  292. -
  293. She was afraid... When Chi Wuyao's words came into her ears, she found herself afraid.
  294. -
  295.  
  296. -
  297. When she lost her most important affection, she fell into the abyss.
  298. -
  299.  
  300. -
  301. Now, her Soul's deepest and most fearful, and almost every wisp of faith is in fear... Even what she never and dare not think with her consciousness is once again lost...
  302. -
  303.  
  304. -
  305. As Chi Wuyao said at the beginning, Brahma Emperor Goddess, who used to regard all life as a tool for his self-interest, has been reduced to a wandering chick who has completely lost himself.
  306. -
  307.  
  308. -
  309. The only one who can "save" her is herself.
  310. -
  311.  
  312. -
  313. Chi Wuyao walked slowly forward and stood beside Qianye Ying'er, her shoulders touching lightly. She breathed slowly and said lightly, "You don't have to be afraid of me. As long as you don't become another Xia Qingyue, I will never be your enemy, let alone take him away from you. On the contrary, as I said to you at the beginning... what I owe you most is gratitude."
  314. -
  315.  
  316. -
  317. "Moreover," she voice/sound softened and demonic sound enchanted: "If I can share a bed with Brahma Emperor Goddess to serve a man, I am looking forward to Oh … … I believe he will also like it very much."
  318. -
  319.  
  320. -
  321. "… … …"
  322. -
  323.  
  324. -
  325. Qianye Ying'er felt limp and numb all over her body. When she returned to her senses, there was no Chi Wuyao's form around her.
  326. -
  327.  
  328. -
  329. However, her terrible demonic sound is still entangled in her heart and soul and cannot be dispersed.
  330. -
  331.  
  332. -
  333. Inside and outside the Plundered Soul sanctuary, myriad spirits surge, and every aura is so powerful that it makes people thrill and frighten.
  334. -
  335.  
  336. -
  337. The sky of Plundered Soul Realm is covered with devil clouds. The sky is much lower than usual. It seems that it will capsize at any time.
  338. -
  339.  
  340. -
  341. Countless Realm King and overlords gathered in the Plundered Soul Realm and sanctuary. The High-Rank Star Realm was already sitting upright. Outside the sanctuary, there were also endless crowds.
  342. -
  343.  
  344. -
  345. Dark clouds are rolling, the black mist is moving, and countless dark Profound arrays are running in every corner of the Plundered Soul Sanctuary. These dark Profound arrays are centred on the devil legacy of Burning Moon Realm, and the three King Realm are jointly cast, which can project today's Imperial Coronation ceremony to every corner of the Northern God Territory.
  346. -
  347.  
  348. -
  349. All the floating islands of Plundered Soul Realm gather on the sanctuary. What is even more striking is the three huge shadows that frighten all High-Rank Realm King in the distant sky.
  350. -
  351.  
  352. -
  353. Plundered Soul, Yama, Burning Moon, King Realm's main profound ship!
  354. -
  355.  
  356. -
  357. Today, all gathered over Plundered Soul Realm, like three heavenly Devil God looking down at the North Territory.
  358. -
  359.  
  360. -
  361. The scene was magnificent and unprecedented.
  362. -
  363.  
  364. -
  365. The North Terror is mighty, but both inside and outside the sanctuary, there is a terrible silence and even a few whispers. They sometimes look up at the sky, sometimes hold their breath deeply... They know that they are about to witness the history of Northern God Territory.
  366. -
  367.  
  368. -
  369. The history of the Northern God Territory will always be remembered today.
  370. -
  371.  
  372. -
  373. Yun Che, the supreme Devil Lord shared by the three King Realm in the North Territory.
  374. -
  375.  
  376. -
  377. Is it the common plan of the three King Realm for a certain purpose, or is it... the young man from the Eastern God Territory, who is only half a six-year cycle in this rumour, really subdued the three King Realm in such a short time and so thoroughly!
  378. -
  379.  
  380. -
  381. Time moved slowly, after a long period of silence, finally...
  382. -
  383.  
  384. -
  385. RUMBLE!
  386. -
  387.  
  388. -
  389. The dull rumbled came from above, and the three Great King Realm main Profound ship slowly descended at this moment. The invisible and terrible pressure seemed to be pressed down with the whole sky Simultaneously.
  390. -
  391.  
  392. -
  393. A voice/sound full of Soul Absorption emperor's prestige came from the air and resounded through every corner of Plundered Soul Realm and even Northern God Territory: "The time has come to greet Devil Lord!"
  394. -
  395.  
  396. -
  397. The person who shouted was Yan Tianxiao.
  398. -
  399.  
  400. -
  401. The former North Territory Number One God Emperor was the host of this Imperial Coronation ceremony.
  402. -
  403.  
  404. -
  405. There is no way to describe the surprise in the heart of the North Territory Profound practitioner.
  406. -
  407.  
  408. -
  409. When Yan Tianxiao voice/sound fell, the three main ships also stopped sinking, and a devil light passed through them, spreading a dark path.
  410. -
  411.  
  412. -
  413. At the end of the Dark Path, a man in a black robe, eyes like an abyss, stepped on top of devil light and appeared in the pupil of all North Terror Profound practitioners.
  414. -
-
-
-
-
RAW Paste Data
-
- -
- -
-
-
-
- -
- - -
Top - - - - - \ No newline at end of file diff --git a/fixtures/people.com.html b/fixtures/people.com.html new file mode 100644 index 000000000..5e59839b0 --- /dev/null +++ b/fixtures/people.com.html @@ -0,0 +1,1326 @@ + + + + + + + + + + + + + + + + + + + + + + +Jennifer Aniston on Leaving the Tags on Her Coat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + +
+
+
+
+
+ +
+
+
+ +
+

+Jennifer Aniston on Leaving the Tags on Her Céline Coat: 'I Wore It Four Times and Didn't Notice!'

+

+The actress explained the story behind her minor wardrobe malfunction to Jimmy Kimmel

+ +
+
+
+
+

+People who don’t chronicle every item of clothing worn by the rich and famous for a profession probably don’t know this, but one of the major perks of being a celebrity is having luxe pieces “gifted” to you. As in the brands lend their clothing and accessories to A-list stars in the hopes that the press generated by it will help their sales and their prestige, which should explain why you regularly see every Kardashian clad in ensembles that literally came straight off the runway. It should also explain how Jennifer Aniston found herself on the red carpet of a film premiere wearing a jacket that still had a handful of price tags firmly attached, an event she was happy to finally set the record straight about on Thursday night’s Jimmy Kimmel Live! +

+
+
+
+
+Celebrities arriving at 'Office Christmas Party' Screening in NYC + +
+
+
+AKM-GSI +
+
+

+During the actress’s appearance on the late night talk show, Kimmel asked her about a particular photo from the screening of her new movie Office Christmas Party in New York in which you can see some large, white price tags affixed to the interior of her Céline jacket, saying, “I can’t imagine how this happens to you.” Aniston replied, “Well, here’s the sad part of that story, I’ve worn that coat about four times.” The host quipped, “isn’t that against the rules of Hollywood?” to which she replied, “apparently.” She continued, “I wore it at least four times, it was very sweetly gifted to me from a commercial that I had just shot. So I wore it home and I didn’t think about it at all, to be honest. And yeah, four wears later and this happened, and it’s not like it’s even a light tag!” At which point the late night host insisted, “you stole that coat didn’t you?” +

+
+

+RELATED PHOTOS: Jennifer Aniston’s Beautiful Backyard Wedding +

+
+
+
+
+

+While this particular article of clothing was not in fact swiped, Aniston did admit to having stolen some items in her youth. When asked what she took, the actress authoritatively stated, “Beads. From a bead shop. Like when you made bead necklaces when you were 8.” She explained, “I was with my friend Monique, we were walking home, we weren’t with our parents at eight years old so that tells you a lot. But so, they were just little and we thought we were awesome and we came home and laid them all out, just thinking about all of the necklaces we were going to make, and then her mom walked in. I mean, we weren’t hiding it like you would if you’d stolen something, we weren’t smart thieves. So then we had to go back and personally return the beads.” And clearly, the whole debacle taught her a lesson as she never stole anything again. But really, who needs to steal when everything is gifted? +

+
+

+What do you think of Aniston’s minor wardrobe snafu? Has this ever happened to you? Sound off below! +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +Related Articles + +
+ + + + +
+
+
+ + + + + + +
+ + + diff --git a/fixtures/people.com/1481580462922.html b/fixtures/people.com/1481580462922.html deleted file mode 100644 index be10fa05d..000000000 --- a/fixtures/people.com/1481580462922.html +++ /dev/null @@ -1,6 +0,0 @@ - Jennifer Aniston on Leaving the Tags on Her Coat

People

Stay Connected

Subscribe

Advertise With Us

Learn More

Skip to content

Fashion

Jennifer Aniston on Leaving the Tags on Her Céline Coat: 'I Wore It Four Times and Didn't Notice!'

Updated

People who don’t chronicle every item of clothing worn by the rich and famous for a profession probably don’t know this, but one of the major perks of being a celebrity is having luxe pieces “gifted” to you. As in the brands lend their clothing and accessories to A-list stars in the hopes that the press generated by it will help their sales and their prestige, which should explain why you regularly see every Kardashian clad in ensembles that literally came straight off the runway. It should also explain how Jennifer Aniston found herself on the red carpet of a film premiere wearing a jacket that still had a handful of price tags firmly attached, an event she was happy to finally set the record straight about on Thursday night’s Jimmy Kimmel Live!

AKM-GSI

During the actress’s appearance on the late night talk show, Kimmel asked her about a particular photo from the screening of her new movie Office Christmas Party in New York in which you can see some large, white price tags affixed to the interior of her Céline jacket, saying, “I can’t imagine how this happens to you.” Aniston replied, “Well, here’s the sad part of that story, I’ve worn that coat about four times.” The host quipped, “isn’t that against the rules of Hollywood?” to which she replied, “apparently.” She continued, “I wore it at least four times, it was very sweetly gifted to me from a commercial that I had just shot. So I wore it home and I didn’t think about it at all, to be honest. And yeah, four wears later and this happened, and it’s not like it’s even a light tag!” At which point the late night host insisted, “you stole that coat didn’t you?”

RELATED PHOTOS: Jennifer Aniston’s Beautiful Backyard Wedding

While this particular article of clothing was not in fact swiped, Aniston did admit to having stolen some items in her youth. When asked what she took, the actress authoritatively stated, “Beads. From a bead shop. Like when you made bead necklaces when you were 8.” She explained, “I was with my friend Monique, we were walking home, we weren’t with our parents at eight years old so that tells you a lot. But so, they were just little and we thought we were awesome and we came home and laid them all out, just thinking about all of the necklaces we were going to make, and then her mom walked in. I mean, we weren’t hiding it like you would if you’d stolen something, we weren’t smart thieves. So then we had to go back and personally return the beads.” And clearly, the whole debacle taught her a lesson as she never stole anything again. But really, who needs to steal when everything is gifted?

What do you think of Aniston’s minor wardrobe snafu? Has this ever happened to you? Sound off below!

\ No newline at end of file diff --git a/fixtures/phpspot.org.html b/fixtures/phpspot.org.html new file mode 100644 index 000000000..177689f54 --- /dev/null +++ b/fixtures/phpspot.org.html @@ -0,0 +1,252 @@ + + + + + + + + + + + +マインドマップ風のツリーを描画できる「Treeviz」:phpspot開発日誌 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ +
+ + + +
+前の記事 ≪:CSS3とjQueryで作ったテキストアニメーション「sahansira/Text-Slider」
+ +次の記事 ≫:faviconをローディングアニメーションさせる「favloader」
+ +
+ + +

マインドマップ風のツリーを描画できる「Treeviz」

+

2019年04月04日-はてなブックマーク

+ +
+スポンサード リンク
+ + +
+[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法
+
+

Treeviz
+
+マインドマップ風のツリーを描画できる「Treeviz」
+次のような図形を描画できるcodepenでのサンプルです
+
+
+関連エントリ

+ + + +
+ + + +
+
+
+
+
+
+
+
+
+スポンサード リンク
+ + +

By.KJ : 2019年04月04日 09:00 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)

+
+ + + + + +
+ +
+ +
+ + + +
+ + + + + + +
+ + +
+ + +
+ +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/phpspot.org/1554622277068.html b/fixtures/phpspot.org/1554622277068.html deleted file mode 100644 index 2129df5f7..000000000 --- a/fixtures/phpspot.org/1554622277068.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - -マインドマップ風のツリーを描画できる「Treeviz」:phpspot開発日誌 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
- -
- - - -
-前の記事 ≪:CSS3とjQueryで作ったテキストアニメーション「sahansira/Text-Slider」
- - -
- - -

マインドマップ風のツリーを描画できる「Treeviz」

-

2019年04月04日-はてなブックマーク

- -
-スポンサード リンク
- - -
-[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法
-
-

Treeviz
-
-マインドマップ風のツリーを描画できる「Treeviz」
-次のような図形を描画できるcodepenでのサンプルです
-
-
-関連エントリ

- - - -
- - - -
-
-
-
-
-
-
-
-
-スポンサード リンク
- - -

By.KJ : 2019年04月04日 09:00 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)

-
- - - - - -
- -
- -
- - - -
- - - - - - -
- - -
- - -
- -
-
- - - - - - - - - - - - - - \ No newline at end of file diff --git a/fixtures/pitchfork.com.html b/fixtures/pitchfork.com.html new file mode 100644 index 000000000..d6c924005 --- /dev/null +++ b/fixtures/pitchfork.com.html @@ -0,0 +1,4 @@ +Lust for Youth: Lust for Youth Album Review | Pitchfork + + +
Skip to main content
  • Genre:

    Electronic / Experimental

  • Label:

    Sacred Bones

  • Reviewed:

    June 7, 2019

Hannes Norrvide's long-running coldwave synth project breaks into the greener pastures of Depeche Mode-style new wave.

Coldwave never cared about you. The minimalistic, machine-driven sound that bubbled up twice in the past half-century—once in the midst of post-punk's late-1970s heyday, and again in early-2010s Brooklyn—was largely reliant on keeping its audience at bay, all but ensuring its limited shelf life. With synth lines so brittle that you could snap them over your pinky finger, hissy drum machines, and vocals that frequently bordered on atonality, coldwave was purposefully alienating. A lot of DIY or home-recorded music from this decade gained recognition from its warmth and inviting textures; in stark opposition, coldwave's practitioners rarely seemed interested in whether anyone was listening at all.

The subgenre's aesthetic limitations are baked in, and practically a virtue, which makes Lust for Youth's trajectory over the last three years all the more fascinating. When Swedish synth aesthete Hannes Norrvide's project emerged with his 2011 debut Solar Flare, all the marks of coldwave's sub-zero sound were present and accounted for, and it was still mostly business as usual when Loke Rahbek (who also founded the aptly-named Posh Isolation label) joined up for the following year's Sacred Bones debut Growing Seeds.

But as Lust for Youth persisted, there emerged signs of life after coldwave. Pomegranate from 2013—billed as a collaboration between Norrvide and Rahbek's Croatian Amor project—explored the opalescent clouds of new age; Perfect View from the same year incorporated conversational vocal samples not unlike something from the Swedish imprint Sincerely Yours. When International arrived in 2014—the fifth Lust for Youth release in the span of four years, evidence of coldwave’s one-take prolificacy—the group had expanded to a trio and tilted towards the explicitly poppier sounds of new wave, a journey they continued on 2016's Compassion.

Their latest, a self-titled effort, finds Lust for Youth back to a two-person setup, Rahbek having departed while Norrvide and Malthe Fischer soldier on. The paring back of personnel isn't reflected in the record's sound, though; instead, Norrvide and Fischer pick up where Compassion left off, with gleaming synths and crisp drum patterns lovingly recalling the dour, sweet-and-sour synth-pop of New Order, Depeche Mode, and their thousands of imitators.

Norrvide's vocals are front and center, and his voice often possesses a lovely ugliness that's alluring when cast in the right light, as when he scales the jagged pop mountains of “Adrift” or drapes himself over “Great Concerns.” Lust for Youth is at its most engaging when Norrvide and Fischer throw curveballs. They find an able collaborator in Danish musician and philosopher Soho Rezanejad, whose vocals add a glowing and gloomy texture to the slow-dance duskiness of “Fifth Terrace”; with wavering atmospherics lying under a cumulus of spoken-word, “Imola” suggests a sparser take on the starry-eyed synth fantasias of M83.

Otherwise, Lust for Youth trades in one kind of over-familiarity for another. The gloriously mopey sound of new wave might be novel to Norrvide and Fischer, but there's not much here that stands out in synth-pop's always-crowded field. In a sense, that's fine; Lust for Youth wear this sound well. But Lust for Youth shows they might have escaped coldwave’s dead end only to settle into a rut.

\ No newline at end of file diff --git a/fixtures/pitchfork.com/1560196240837.html b/fixtures/pitchfork.com/1560196240837.html deleted file mode 100644 index 010290b4f..000000000 --- a/fixtures/pitchfork.com/1560196240837.html +++ /dev/null @@ -1,15 +0,0 @@ -Lust for Youth: Lust for Youth Album Review | Pitchfork - - - - -
Skip to content

Lust for Youth

  • Sacred Bones
• 2019
6.2

Hannes Norrvide's long-running coldwave synth project breaks into the greener pastures of Depeche Mode-style new wave.

-

Coldwave never cared about you. The minimalistic, machine-driven sound that bubbled up twice in the past half-century—once in the midst of post-punk's late-1970s heyday, and again in early-2010s Brooklyn—was largely reliant on keeping its audience at bay, all but ensuring its limited shelf life. With synth lines so brittle that you could snap them over your pinky finger, hissy drum machines, and vocals that frequently bordered on atonality, coldwave was purposefully alienating. A lot of DIY or home-recorded music from this decade gained recognition from its warmth and inviting textures; in stark opposition, coldwave's practitioners rarely seemed interested in whether anyone was listening at all.

-

The subgenre's aesthetic limitations are baked in, and practically a virtue, which makes Lust for Youth's trajectory over the last three years all the more fascinating. When Swedish synth aesthete Hannes Norrvide's project emerged with his 2011 debut Solar Flare, all the marks of coldwave's sub-zero sound were present and accounted for, and it was still mostly business as usual when Loke Rahbek (who also founded the aptly-named Posh Isolation label) joined up for the following year's Sacred Bones debut Growing Seeds.

-

But as Lust for Youth persisted, there emerged signs of life after coldwave. Pomegranate from 2013—billed as a collaboration between Norrvide and Rahbek's Croatian Amor project—explored the opalescent clouds of new age; Perfect View from the same year incorporated conversational vocal samples not unlike something from the Swedish imprint Sincerely Yours. When International arrived in 2014—the fifth Lust for Youth release in the span of four years, evidence of coldwave’s one-take prolificacy—the group had expanded to a trio and tilted towards the explicitly poppier sounds of new wave, a journey they continued on 2016's Compassion.

-

Their latest, a self-titled effort, finds Lust for Youth back to a two-person setup, Rahbek having departed while Norrvide and Malthe Fischer soldier on. The paring back of personnel isn't reflected in the record's sound, though; instead, Norrvide and Fischer pick up where Compassion left off, with gleaming synths and crisp drum patterns lovingly recalling the dour, sweet-and-sour synth-pop of New Order, Depeche Mode, and their thousands of imitators.

-

Norrvide's vocals are front and center, and his voice often possesses a lovely ugliness that's alluring when cast in the right light, as when he scales the jagged pop mountains of “Adrift” or drapes himself over “Great Concerns.” Lust for Youth is at its most engaging when Norrvide and Fischer throw curveballs. They find an able collaborator in Danish musician and philosopher Soho Rezanejad, whose vocals add a glowing and gloomy texture to the slow-dance duskiness of “Fifth Terrace”; with wavering atmospherics lying under a cumulus of spoken-word, “Imola” suggests a sparser take on the starry-eyed synth fantasias of M83.

-

Otherwise, Lust for Youth trades in one kind of over-familiarity for another. The gloriously mopey sound of new wave might be novel to Norrvide and Fischer, but there's not much here that stands out in synth-pop's always-crowded field. In a sense, that's fine; Lust for Youth wear this sound well. But Lust for Youth shows they might have escaped coldwave’s dead end only to settle into a rut.

-
Back to home
- - \ No newline at end of file diff --git a/fixtures/postlight.com/1664999338243.html b/fixtures/postlight.com.html similarity index 100% rename from fixtures/postlight.com/1664999338243.html rename to fixtures/postlight.com.html diff --git a/fixtures/qz.com.html b/fixtures/qz.com.html new file mode 100644 index 000000000..700c98377 --- /dev/null +++ b/fixtures/qz.com.html @@ -0,0 +1,52 @@ + + + + + + +Nigeria's economy has best quarterly growth since recession — Quartz Africa
Skip to navigationSkip to content
SLOW MOVING

Nigeria’s economy is making a comeback—but it’s still not happening fast enough

AP Photo/Lekan Oyekanmi
Hustling.
By Yomi Kazeem
Published Last updated This article is more than 2 years old.

Since suffering a recession and full year of negative growth in 2016, Nigeria, Africa’s largest economy has recovered—slowly.

Data from Nigeria’s statistics bureau shows the pace of recovery remains slow despite noting a milestone: gross domestic product (GDP) grew by 2.55%—the highest quarterly growth rate since the 2016 recession. Overall, Nigeria’s economy grew 2.27% in 2019, slightly higher than it did in the preceding year. And, as is often the case, Nigeria’s economic growth was anchored on its oil exports with production levels remaining stable throughout 2019.

But while being its recent best performance, the economic growth rate remains short of the government’s projections.

The government’s Economic Recovery and Growth Plan (EGRP), launched in the aftermath of the recession, was anchored on aggressive growth from 2017 to 2020 in a bid to turn the economic slump around. But the latest data confirms Nigeria’s economy fell short of the EGRP’s projected GDP growth rate of 4.5% in 2019. In fact, most EGRP projections have been off the mark. For instance, Nigeria’s unemployment rate is nearly double the EGRP’s projected 12% target.

While government’s spin will likely focus on the reality of the economy’s best quarterly performance since the recession, a more nuanced view is that the growth is simply not happening as urgently as the country’s challenges and population growth requires. “The challenge from the policy environment is that the economy will continue to be sluggish—this 2.55% [growth rate] is a continuation of that sluggishness,” says Nonso Obikili, a Lagos-based economist.

Looking forward Nigeria is forecasting economic growth of 7%, but most observers will find that estimate over-optimistic. In January the IMF forecast economic growth of 2.5% in 2020 and in 2021. This would be below sub-Saharan Africa’s average growth rate of 3.5% in both years.

The dampening news for Nigeria is that as much policymakers try to encourage the diversification of the economy the country is still heavily reliant of oil export earnings. This means its fragile economic growth can be abruptly reversed if oil prices drop. This outcome is now a very real possibility amid the coronavirus outbreak in China hitting the global economy and pushing oil prices lower than Nigeria’s budgetary benchmark of $57 per barrel.

In its analysis of the outbreak’s potential economic impact on Nigeria, SBM Intel, a Lagos intelligence firm, says Nigeria is “at risk” of another recession given its “over reliance” on oil sector proceeds. “If oil demand continues to fall with no OPEC intervention in the form of production cuts, tightening supply, a country like Nigeria will be negatively impacted by the downward price trend,” it says.

Sign up to the Quartz Africa Weekly Brief here for news and analysis on African business, tech and innovation in your inbox 

+ + + + + \ No newline at end of file diff --git a/fixtures/qz.com/1582826662145.html b/fixtures/qz.com/1582826662145.html deleted file mode 100644 index 37ab5bbd5..000000000 --- a/fixtures/qz.com/1582826662145.html +++ /dev/null @@ -1,2 +0,0 @@ - -Nigeria's economy has best quarterly growth since recession — Quartz Africa
Skip to navigationSkip to content
AP Photo/Lekan Oyekanmi
Hustling.
SLOW MOVING

Nigeria’s economy is making a comeback—but it’s still not happening fast enough

Yomi Kazeem
By Yomi Kazeem

Africa reporter

Since suffering a recession and full year of negative growth in 2016, Nigeria, Africa’s largest economy has recovered—slowly.

Data from Nigeria’s statistics bureau shows the pace of recovery remains slow despite noting a milestone: gross domestic product (GDP) grew by 2.55%—the highest quarterly growth rate since the 2016 recession. Overall, Nigeria’s economy grew 2.27% in 2019, slightly higher than it did in the preceding year. And, as is often the case, Nigeria’s economic growth was anchored on its oil exports with production levels remaining stable throughout 2019.

But while being its recent best performance, the economic growth rate remains short of the government’s projections.

The government’s Economic Recovery and Growth Plan (EGRP), launched in the aftermath of the recession, was anchored on aggressive growth from 2017 to 2020 in a bid to turn the economic slump around. But the latest data confirms Nigeria’s economy fell short of the EGRP’s projected GDP growth rate of 4.5% in 2019. In fact, most EGRP projections have been off the mark. For instance, Nigeria’s unemployment rate is nearly double the EGRP’s projected 12% target.

While government’s spin will likely focus on the reality of the economy’s best quarterly performance since the recession, a more nuanced view is that the growth is simply not happening as urgently as the country’s challenges and population growth requires. “The challenge from the policy environment is that the economy will continue to be sluggish—this 2.55% [growth rate] is a continuation of that sluggishness,” says Nonso Obikili, a Lagos-based economist.

Looking forward Nigeria is forecasting economic growth of 7%, but most observers will find that estimate over-optimistic. In January the IMF forecast economic growth of 2.5% in 2020 and in 2021. This would be below sub-Saharan Africa’s average growth rate of 3.5% in both years.

The dampening news for Nigeria is that as much policymakers try to encourage the diversification of the economy the country is still heavily reliant of oil export earnings. This means its fragile economic growth can be abruptly reversed if oil prices drop. This outcome is now a very real possibility amid the coronavirus outbreak in China hitting the global economy and pushing oil prices lower than Nigeria’s budgetary benchmark of $57 per barrel.

In its analysis of the outbreak’s potential economic impact on Nigeria, SBM Intel, a Lagos intelligence firm, says Nigeria is “at risk” of another recession given its “over reliance” on oil sector proceeds. “If oil demand continues to fall with no OPEC intervention in the form of production cuts, tightening supply, a country like Nigeria will be negatively impacted by the downward price trend,” it says.

Sign up to the Quartz Africa Weekly Brief here for news and analysis on African business, tech and innovation in your inbox

diff --git a/fixtures/sandiegouniontribune.com/test.html b/fixtures/sandiegouniontribune.com.html similarity index 100% rename from fixtures/sandiegouniontribune.com/test.html rename to fixtures/sandiegouniontribune.com.html diff --git a/fixtures/scan.netsecurity.ne.jp.html b/fixtures/scan.netsecurity.ne.jp.html new file mode 100644 index 000000000..d00468bd6 --- /dev/null +++ b/fixtures/scan.netsecurity.ne.jp.html @@ -0,0 +1,857 @@ + + + + + + + + + + + + + + + + + + + + + + + + + パスワードロック未実施のUSBメモリを電車内で紛失の可能性(阪南大学) | ScanNetSecurity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
2022.08.11(木)
+
+ + + + + +
+
+
+ + +
+ +
+ +
+
+ +

パスワードロック未実施のUSBメモリを電車内で紛失の可能性(阪南大学)

+

阪南大学は3月4日、同学の専任教員が学生情報等を保存したUSBメモリを紛失したことが判明したと発表した。

+
+ インシデント・事故 + インシデント・情報漏えい +
+ +
+ + + + +
+

関連記事

+ +
+ +
+
+

Scan PREMIUM 会員限定記事

+ もっと見る +
+ +

+ Scan PREMIUM 会員限定記事特集をもっと見る +

+
+ + +
+
+
+
+
+
+
+
+
+

カテゴリ別新着記事

+
+ + + + + + +
+
+ + +
+ +
+ + + + + + + +
+ + + + + +
+ + + + + +
+ +
+
「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」
+
+ +
+ 「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」 +

ページ右上「ユーザー登録」から会員登録すれば会員限定記事を閲覧できます。毎週月曜の朝、先週一週間のセキュリティ動向を総括しふりかえるメルマガをお届け。(写真:ScanNetSecurity 名誉編集長 りく)

+
+
+ +
+
+
+
+
×
+
+ + + + + + \ No newline at end of file diff --git a/fixtures/scan.netsecurity.ne.jp/1551788723281.html b/fixtures/scan.netsecurity.ne.jp/1551788723281.html deleted file mode 100644 index 9e3cebe6d..000000000 --- a/fixtures/scan.netsecurity.ne.jp/1551788723281.html +++ /dev/null @@ -1,819 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - パスワードロック未実施のUSBメモリを電車内で紛失の可能性(阪南大学) | ScanNetSecurity[国内最大級のサイバーセキュリティ専門ポータルサイト] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
2019.03.05(火)
-
- - - - - -
- -
- - -
- -
- -
-
- -

パスワードロック未実施のUSBメモリを電車内で紛失の可能性(阪南大学)

-

阪南大学は3月4日、同学の専任教員が学生情報等を保存したUSBメモリを紛失したことが判明したと発表した。

-
- インシデント・事故 - インシデント・情報漏えい -
- -
-
- -
-阪南大学は3月4日、同学の専任教員が学生情報等を保存したUSBメモリを紛失したことが判明したと発表した。

これは2月2日に、当該教員の自宅からゼミのフィールドワークに向かう電車内で持参していたノート型パソコンに学生の個人情報が保存された小型USBメモリを接続した状態で作業を行った際に紛失したと推測されるというもの。

当該教員は紛失判明後に、周囲の捜索ならびに警察、鉄道会社へ遺失物の届出を行ったが現時点では発見には至っていない。

紛失したUSBメモリには、平成27年度から平成30年度開講の一部科目履修者の学籍番号、氏名、成績の途中評価に関するデータ1,169件分が保存されていた。なお、大学名や学生の住所、電話番号等の住居や連絡先を特定する個人情報は含まれていないとのこと。当該USBメモリ及びそのデータについて、パスワードロック等の対策は実施していなかった。

同学によると、これまでに本件USBメモリに保管されている個人情報が第三者への流失や不正使用の事実は確認されていないとのこと。

既に同学では、該当する在学生や卒業生に謝罪と経緯説明の文書を送付している。 -
-《ScanNetSecurity》 - - -
-
-

関連記事

- -
- -
-
-

Scan PREMIUM 会員限定記事

- もっと見る -
- -

- Scan PREMIUM 会員限定記事特集をもっと見る -

-
- - - -
-
- - -
-
- - -
-
-
-

カテゴリ別新着記事

-
- - - - - - -
-
-
-
- - -
-
- - -
-
- - -
- -
- - - - - -
- -
-
★★Scan PREMIUM 会員限定コンテンツにフルアクセスが可能となります★★
-
- -
- <b>★★Scan PREMIUM 会員限定コンテンツにフルアクセスが可能となります★★</b> -

経営課題としてサイバーセキュリティに取り組む情報システム部門や、研究・開発・経営企画に携わる方へ向けた、創刊20年のセキュリティ情報サービス Scan PREMIUM を、貴社の事業リスク低減のためにご活用ください。

-
-
- -
-
-
-
-
×
-
- - - - - - \ No newline at end of file diff --git a/fixtures/sciencefly.com/1482530492413.html b/fixtures/sciencefly.com.html similarity index 100% rename from fixtures/sciencefly.com/1482530492413.html rename to fixtures/sciencefly.com.html diff --git a/fixtures/sect.iij.ad.jp.html b/fixtures/sect.iij.ad.jp.html new file mode 100644 index 000000000..3b654c79c --- /dev/null +++ b/fixtures/sect.iij.ad.jp.html @@ -0,0 +1,650 @@ + + + + + + + Masscan と ZMap によるスキャンの違い – IIJ Security Diary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Masscan と ZMap によるスキャンの違い

+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + + + +
+ +
+ 図1 SYN パケットに占めるスキャナーの割合
+ + +
+
+

インターネット上の全アドレス空間を高速にスキャンするツールとして、Masscan と ZMap の2つが有名です。これらは研究者にも攻撃者にも幅広く利用されています。ですが、IIJ のマルウェア活動観測プロジェクト MITF のハニーポットによる観測において、両者の使われ方にはかなり違いがあることがわかりました。本記事でその内容について紹介します。

+ + + +

調査目的と見られるスキャンの増加

+ + + +

NICT サイバーセキュリティ研究所が2019年2月6日に公開した「NICTER観測レポート2018」では、2017年と比較して海外組織からの調査目的と見られるスキャンが大幅に増加したことが報告されました。このレポートでは、1日に30以上の宛先ポートに対して30万パケット以上のスキャンパケット (TCP SYN と UDP のみ) を送信するアドレスを調査目的のスキャンと判別しています。そして2018年の総パケット数の約35%が調査目的のスキャンだったということです。この報告を見て、IIJ のハニーポットにおける観測でも同様の傾向が見られるか検証したいと考えました。しかし NICTER のダークネット観測と比べると、IP アドレスの数が違いすぎるため、同じ判定条件をそのまま適用することはできません。そこで、パケット数ではなくスキャンに利用されているツールに着目し、別の視点から調査を行うことにしました。

+ + + +

Masscan と ZMap

+ + + +

MasscanZMap は、IPv4 の全アドレス空間を高速にスキャンするという目的に特化したネットワークスキャナーです。どちらもソースコードが公開されており、誰でもさまざまなプラットフォームで利用することができます[1]Masscan は GNU General Public License Version 3、ZMap は Apache License Version 2.0 のライセンスでそれぞれ公開されている。。そのため研究者だけでなく、攻撃者にとっても有用なツールとして利用されています。以前からこの2つのツールが幅広く利用されていることは観測データからわかっていましたが、今回その内訳についても詳しく調べました。調査対象としたのは2019年1月の1ヶ月間に IIJ のハニーポットで観測したデータです。

+ + + +

先に観測結果のサマリを示しておきます。

+ + + +
  • Masscan によるスキャンは ZMap によるスキャンと比較し、送信元アドレス数では2倍、SYN パケット数では6倍
  • 宛先ポート別に見ると、Masscan によるスキャンは多数のポートに分散しているのに対して、ZMap によるスキャンは特定のポートに大きく偏っている
  • ZMap によるスキャンの宛先ポートは、52869/tcp など IoT 機器の脆弱性を探索する目的と考えられるポートが多数を占める
+ + + +
図1 SYN パケットに占めるスキャナーの割合
図1 SYN パケットに占めるスキャナーの割合
+ + + +

上のグラフはハニーポットに到達する SYN パケットのうち、Masscan と ZMap によるスキャンが占める割合を示したものです。日によって多少の変動はありますが、平均すると Masscan は16%、ZMap は3%程度であり、両者をあわせると全体の約2割を占めています[2]1/29から1/31にかけて、単一の IP … Continue reading。ユニークな送信元アドレス数では、Masscan が ZMap の約2倍となっており、相対的に Masscan によるスキャンの方が送出するパケット数が多いという結果になっています。なおハニーポットに到達する SYN パケットには送信元アドレスを偽装した SYN/ACK リフレクション攻撃のパケットもかなり含まれています。そのため、可能な限りこのような DoS 攻撃のパケットを集計データから除外しました[3]TCP の SYN/ACK リフレクション攻撃については、次の記事を参照のこと。IIJ では 2019年1月後半から 23/tcp や 2323/tcp などを宛先ポートとした SYN/ACK … Continue reading。また参考までに、IoT ボットの Mirai およびその亜種による SYN スキャンのパケットは3%程度で、ZMap によるスキャンとほぼ同数です。

+ + + +
図2 MASSCAN による SYN パケット数の宛先ポート別推移
図2 MASSCAN による SYN パケット数の宛先ポート別推移
+ + + +
図3 ZMap による SYN パケット数の宛先ポート別推移
図3 ZMap による SYN パケット数の宛先ポート別推移
+ + + +

上の積み上げグラフは Masscan と ZMap それぞれの SYN パケットについて、宛先ポート別の推移を示したものです。パケット数の多い上位10ポートのみ内訳を示しています。ダークネットにおける観測とは異なり、ハニーポットは複数のポートにおいて SYN パケットに応答を返します。そのためオープンしていると判断されたポートに対しては繰り返しスキャンされる傾向がある点に注意してください。

+ + + +

グラフからは両者にはっきりとした違いが見てとれます。まず Masscan ですが、SQL Server に利用される 1433/tcp、SMB プロトコルに利用される 445/tcp がやや多いものの、幅広く多数のポートに分散しているため、上位10ポートの割合が小さくなっています。また送信元アドレス別にデータを調べると、65535すべてのポートをフルスキャンしているアドレスがあるほか、1000ポート以上スキャンしているアドレスも多数存在しています。スキャンパケット数の上位10アドレスについては、おそらくどれも調査目的のスキャンではないかと推測しています。以下の2つの国内プロジェクトは IoT 機器の調査を目的としたスキャンを実施していますが、どちらも Masscan を利用しているようです。

+ + + + + + + +

一方 ZMap のほうは、宛先ポートが 52869/tcp に大きく偏っているほか、パケット数上位10ポートには IoT 機器でよく利用されるポートが並んでいます。このことから、ZMap によるこれらのスキャンは脆弱な IoT 機器を探索する目的ではないかと考えられますが、これだけでは調査研究によるものか攻撃者によるものかは判別できません。そこで送信元アドレス別にその内訳を見てみると、スキャンパケット数の上位5アドレスについては、ZMap によるスキャン後に Mirai や qBot などの感染を試みる攻撃を行っていました。この5アドレスで ZMap によるスキャン全体の約2割を占めており、少数の攻撃者によるスキャンの影響が大きいことがわかりました[4]ただし上位10アドレス中の4アドレスについては、おそらく調査目的のスキャンと考えられる。。また Masscan とは違って、1000ポート以上スキャンしているアドレスは ZMap では1つもありませんでした。

+ + + +

下のグラフは ZMap でパケット数上位の5ポートについて、2019年1月の ZMap と Masscan の SYN パケット総数を比較したものです。80/tcp はほぼ同数ですが、それ以外は上位のポートほど Masscan よりも ZMap を利用したスキャンに大きく偏っていることがわかります。

+ + + +
図4 宛先ポート別の ZMap と Masscan の SYN パケット数比較
図4 宛先ポート別の ZMap と Masscan の SYN パケット数比較
+ + + +

考察

+ + + +

Masscan と ZMap によるスキャンには大きな違いがあることがハニーポットの観測からわかりましたが、なぜそのような違いが生まれるのか、実はよくわかりません。たとえば IoT ボットの感染を試行する攻撃者がなぜ Masscan より ZMap を好んで使うのか、理由ははっきりしません。ただこれまでに公開されている IoT 機器の攻撃用スクリプトやチュートリアルを調べると、ZMap を利用してスキャンを行い、その後にエクスプロイトを実行するものが多数存在しています。一方 Masscan についてはこういったものはあまり見当たりません。

+ + + +

52869/tcp ポートに対して ZMap による大量のスキャンを観測している理由の一つは、こうした攻撃ツールの存在にあると考えます。日本国内には Realtek の脆弱性 (CVE-2014-8361) を持つ機器が多数存在していることはすでに広く知られています。そのため Realtek の脆弱性を攻撃するツールのパッケージには日本の IP アドレスリスト[5]このリストには日本に割り当てられている4,000以上の IPv4 アドレスレンジが含まれている。が含まれており、ZMap を利用してこのリストに対して 52869/tcp ポートをスキャンするように設定されています。攻撃者の多くがこうしたツールを利用しているか、参考にしているのではないかと推測しています。以下は攻撃ツールに含まれているシェルスクリプトの例です。

+ +
zmap -p52869 -wjp.lst -o jp; python realtek.py jp; killall python -9;
Code language: Bash (bash) + + +

こうしたツールを改変して利用することは比較的容易であり、新たな攻撃者が参入しやすい要因の一つになっているのではないかと考えます。またこのような攻撃ツールの利用が多いのだとすると、観測場所 (IP アドレス) によって観測結果がかなり変わることが予想されます。IIJ のハニーポットは国内に設置されているため、52869/tcp へのスキャンが多く観測されていますが、国外の観測地点ではおそらく違うでしょう。攻撃者による活動状況など今後も継続して調査、分析をしていきます。

+

脚注

+ + + + + + + + + + + +
脚注
1 Masscan は GNU General Public License Version 3、ZMap は Apache License Version 2.0 のライセンスでそれぞれ公開されている。
2 1/29から1/31にかけて、単一の IP アドレスから通常のスキャントラフィックの数倍にあたる大量のスキャンを観測したため、このデータは異常値として集計データからは除外している。なおこのスキャンは Masscan を利用したフルポートのスキャンだった。
3 TCP の SYN/ACK リフレクション攻撃については、次の記事を参照のこと。IIJ では 2019年1月後半から 23/tcp や 2323/tcp などを宛先ポートとした SYN/ACK リフレクション攻撃を観測している。
「IIJ Security Diary: IoT 機器を踏み台として利用する SYN/ACK リフレクション攻撃」 https://sect.iij.ad.jp/d/2019/02/128021.html
4 ただし上位10アドレス中の4アドレスについては、おそらく調査目的のスキャンと考えられる。
5 このリストには日本に割り当てられている4,000以上の IPv4 アドレスレンジが含まれている。
+ +
+ + +
+

シェアする

+ +
+ + + + + + + + + + +
+ +
+ +
+ + + + + + +
+ +
+ +
+ +
+ + + + + + + + + diff --git a/fixtures/sect.iij.ad.jp/1556565011470.html b/fixtures/sect.iij.ad.jp/1556565011470.html deleted file mode 100644 index cdf58da1a..000000000 --- a/fixtures/sect.iij.ad.jp/1556565011470.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - - - - - - - - - - - - - - IIJ Security Diary: Masscan と ZMap によるスキャンの違い - - - - - - - -
- - -
- - -
-

- IIJ-SECT

-

- - IIJ -

-

 

-
- - -
- - - - - - -
- - -
-
- カテゴリー -
- -
- - - -
-
- 月別アーカイブ -
- -
- -
- - - -
- -
-

Security Diary

-
HOME > Security Diary > Masscan と ZMap によるスキャンの違い
- -
- - -

Masscan と ZMap によるスキャンの違い

- -

インターネット上の全アドレス空間を高速にスキャンするツールとして、Masscan と ZMap の 2つが有名です。これらは研究者にも攻撃者にも幅広く利用されています。ですが、IIJ のマルウェア活動観測プロジェクト MITF のハニーポットによる観測において、両者の使われ方にはかなり違いがあることがわかりました。本記事でその内容について紹介します。

- -

調査目的と見られるスキャンの増加

- -

NICT サイバーセキュリティ研究所が 2019年2月6日に公開した「NICTER観測レポート2018」では、2017年と比較して海外組織からの調査目的と見られるスキャンが大幅に増加したことが報告されました。このレポートでは、1日に 30以上の宛先ポートに対して 30万パケット以上のスキャンパケット (TCP SYN と UDP のみ) を送信するアドレスを調査目的のスキャンと判別しています。そして 2018年の総パケット数の約 35% が調査目的のスキャンだったということです。この報告を見て、IIJ のハニーポットにおける観測でも同様の傾向が見られるか検証したいと考えました。しかし NICTER のダークネット観測と比べると、IP アドレスの数が違いすぎるため、同じ判定条件をそのまま適用することはできません。そこで、パケット数ではなくスキャンに利用されているツールに着目し、別の視点から調査を行うことにしました。

- -

Masscan と ZMap

- -

MasscanZMap は、IPv4 の全アドレス空間を高速にスキャンするという目的に特化したネットワークスキャナーです。どちらもソースコードが公開されており、誰でもさまざまなプラットフォームで利用することができます[1]。そのため研究者だけでなく、攻撃者にとっても有用なツールとして利用されています。以前からこの 2つのツールが幅広く利用されていることは観測データからわかっていましたが、今回その内訳についても詳しく調べました。調査対象としたのは 2019年1月の 1ヶ月間に IIJ のハニーポットで観測したデータです。

- -

先に観測結果のサマリを示しておきます。

- -
    -
  • Masscan によるスキャンは ZMap によるスキャンと比較し、送信元アドレス数では 2倍、SYN パケット数では 6倍
  • -
  • 宛先ポート別に見ると、Masscan によるスキャンは多数のポートに分散しているのに対して、ZMap によるスキャンは特定のポートに大きく偏っている
  • -
  • ZMap によるスキャンの宛先ポートは、52869/tcp など IoT 機器の脆弱性を探索する目的と考えられるポートが多数を占める
  • -
- -


- -

fig1

- -

上のグラフはハニーポットに到達する SYN パケットのうち、Masscan と ZMap によるスキャンが占める割合を示したものです。日によって多少の変動はありますが、平均すると Masscan は 16%、ZMap は 3%程度であり、両者をあわせると全体の約 2割を占めています[2]。ユニークな送信元アドレス数では、Masscan が ZMap の約 2倍となっており、相対的に Masscan によるスキャンの方が送出するパケット数が多いという結果になっています。なおハニーポットに到達する SYN パケットには送信元アドレスを偽装した SYN/ACK リフレクション攻撃のパケットもかなり含まれています。そのため、可能な限りこのような DoS 攻撃のパケットを集計データから除外しました[3]。また参考までに、IoT ボットの Mirai およびその亜種による SYN スキャンのパケットは 3%程度で、ZMap によるスキャンとほぼ同数です。

- -

fig2

- -

fig3

- -

上の積み上げグラフは Masscan と ZMap それぞれの SYN パケットについて、宛先ポート別の推移を示したものです。パケット数の多い上位 10ポートのみ内訳を示しています。ダークネットにおける観測とは異なり、ハニーポットは複数のポートにおいて SYN パケットに応答を返します。そのためオープンしていると判断されたポートに対しては繰り返しスキャンされる傾向がある点に注意してください。

- -

グラフからは両者にはっきりとした違いが見てとれます。まず Masscan ですが、SQL Server に利用される 1433/tcp、SMB プロトコルに利用される 445/tcp がやや多いものの、幅広く多数のポートに分散しているため、上位 10ポートの割合が小さくなっています。また送信元アドレス別にデータを調べると、65535 すべてのポートをフルスキャンしているアドレスがあるほか、1000 ポート以上スキャンしているアドレスも多数存在しています。スキャンパケット数の上位 10アドレスについては、おそらくどれも調査目的のスキャンではないかと推測しています。以下の 2つの国内プロジェクトは IoT 機器の調査を目的としたスキャンを実施していますが、どちらも Masscan を利用しているようです。

- - - -


- -

一方 ZMap のほうは、宛先ポートが 52869/tcp に大きく偏っているほか、パケット数上位 10ポートには IoT 機器でよく利用されるポートが並んでいます。このことから、ZMap によるこれらのスキャンは脆弱な IoT 機器を探索する目的ではないかと考えられますが、これだけでは調査研究によるものか攻撃者によるものかは判別できません。そこで送信元アドレス別にその内訳を見てみると、スキャンパケット数の上位 5アドレスについては、ZMap によるスキャン後に Mirai や qBot などの感染を試みる攻撃を行っていました。この 5アドレスで ZMap によるスキャン全体の約 2割を占めており、少数の攻撃者によるスキャンの影響が大きいことがわかりました[4]。また Masscan とは違って、1000ポート以上スキャンしているアドレスは ZMap では 1つもありませんでした。

- -

下のグラフは ZMap でパケット数上位の 5ポートについて、2019年1月の ZMap と Masscan の SYN パケット総数を比較したものです。80/tcp はほぼ同数ですが、それ以外は上位のポートほど Masscan よりも ZMap を利用したスキャンに大きく偏っていることがわかります。

- -

fig4

- -

考察

- -

Masscan と ZMap によるスキャンには大きな違いがあることがハニーポットの観測からわかりましたが、なぜそのような違いが生まれるのか、実はよくわかりません。たとえば IoT ボットの感染を試行する攻撃者がなぜ Masscan より ZMap を好んで使うのか、理由ははっきりしません。ただこれまでに公開されている IoT 機器の攻撃用スクリプトやチュートリアルを調べると、ZMap を利用してスキャンを行い、その後にエクスプロイトを実行するものが多数存在しています。一方 Masscan についてはこういったものはあまり見当たりません。

- -

52869/tcp ポートに対して ZMap による大量のスキャンを観測している理由の一つは、こうした攻撃ツールの存在にあると考えます。日本国内には Realtek の脆弱性 (CVE-2014-8361) を持つ機器が多数存在していることはすでに広く知られています。そのため Realtek の脆弱性を攻撃するツールのパッケージには日本の IP アドレスリスト[5]が含まれており、ZMap を利用してこのリストに対して 52869/tcp ポートをスキャンするように設定されています。攻撃者の多くがこうしたツールを利用しているか、参考にしているのではないかと推測しています。以下は攻撃ツールに含まれているシェルスクリプトの例です。

- -
zmap -p52869 -wjp.lst -o jp; python realtek.py jp; killall python -9;
-
- -

こうしたツールを改変して利用することは比較的容易であり、新たな攻撃者が参入しやすい要因の一つになっているのではないかと考えます。またこのような攻撃ツールの利用が多いのだとすると、観測場所 (IP アドレス) によって観測結果がかなり変わることが予想されます。IIJ のハニーポットは国内に設置されているため、52869/tcp へのスキャンが多く観測されていますが、国外の観測地点ではおそらく違うでしょう。攻撃者による活動状況など今後も継続して調査、分析をしていきます。

- -
-
-
    - -
  1. Masscan は GNU General Public License Version 3、ZMap は Apache License Version 2.0 のライセンスでそれぞれ公開されている。 ↩

  2. - -
  3. 1/29から 1/31にかけて、単一の IP アドレスから通常のスキャントラフィックの数倍にあたる大量のスキャンを観測したため、このデータは異常値として集計データからは除外している。なおこのスキャンは Masscan を利用したフルポートのスキャンだった。 ↩

  4. - -
  5. TCP の SYN/ACK リフレクション攻撃については、次の記事を参照のこと。IIJ では 2019年1月後半から 23/tcp や 2323/tcp などを宛先ポートとした SYN/ACK リフレクション攻撃を観測している。 -「IIJ Security Diary: IoT 機器を踏み台として利用する SYN/ACK リフレクション攻撃」 https://sect.iij.ad.jp/d/2019/02/128021.html ↩

  6. - -
  7. ただし上位 10アドレス中の 4アドレスについては、おそらく調査目的のスキャンと考えられる。 ↩

  8. - -
  9. このリストには日本に割り当てられている 4,000以上の IPv4 アドレスレンジが含まれている。 ↩

  10. - -
-
- - -
-
-
 
-
カテゴリー :
-
- セキュリティ事件   -
-
タグ :
-
- IoT   -
-
この記事のURL :
-
https://sect.iij.ad.jp/d/2019/02/134052.html
-
-
- -
-
    -
  • -
  •       
  • -
  • -
-
- -
-
- - -
- - - -
-© 2011-2017 Internet Initiative Japan Inc. -
- - -
- - diff --git a/fixtures/takagi-hiromitsu.jp/1551506427717.html b/fixtures/takagi-hiromitsu.jp.html similarity index 54% rename from fixtures/takagi-hiromitsu.jp/1551506427717.html rename to fixtures/takagi-hiromitsu.jp.html index 85c24f6ff..e490edb8b 100644 --- a/fixtures/takagi-hiromitsu.jp/1551506427717.html +++ b/fixtures/takagi-hiromitsu.jp.html @@ -11,13 +11,13 @@ - - - + + + - - + + 高木浩光@自宅の日記 - 改正NICT法がプチ炎上、工場出荷時共通初期パスワードが識別符号に当たらないことが理解されていない @@ -27,15 +27,15 @@
-<前の日記(2018年12月26日) -次の日記(2019年02月19日)> -最新 -編集 +<前の日記(2018年12月26日) +次の日記(2019年02月19日)> +最新 +編集

高木浩光@自宅の日記

-目次 -はじめに +目次 +はじめに 連絡先:blog@takagi-hiromitsu.jp @@ -45,7 +45,7 @@

高木浩光@自宅の日

-訪問者数 本日: 2736   昨日: 5415 +訪問者数 本日: 80   昨日: 1088

@@ -53,14 +53,14 @@

高木浩光@自宅の日
-

2019年02月11日 +

2019年02月11日

-

改正NICT法がプチ炎上、工場出荷時共通初期パスワードが識別符号に当たらないことが理解されていない

+

改正NICT法がプチ炎上、工場出荷時共通初期パスワードが識別符号に当たらないことが理解されていない

@@ -141,17 +141,17 @@

-「侵入」という表現(「中に入る」の意)もよろしくない。不正アクセス禁止法が禁止している行為を住居侵入に喩える素朴な感想が昔から後を絶たないが、これらは同一視できるものではない。なぜなら、住居侵入罪における囲繞地とは違って、どこからが入ってはいけない領域なのかの区分け(そもそもどこからが「入った」と言えるのか)が、インターネットに接続された機器においては(アクセス制御機能に着目しない限り)明確にすることが困難*1だからである。アクセス制御機能によってその区分けをするしかなかったのであるから、アクセス制御機能がない機器は区分けしようがない(「侵入」の概念が成り立ち得ない)のである。 +「侵入」という表現(「中に入る」の意)もよろしくない。不正アクセス禁止法が禁止している行為を住居侵入に喩える素朴な感想が昔から後を絶たないが、これらは同一視できるものではない。なぜなら、住居侵入罪における囲繞地とは違って、どこからが入ってはいけない領域なのかの区分け(そもそもどこからが「入った」と言えるのか)が、インターネットに接続された機器においては(アクセス制御機能に着目しない限り)明確にすることが困難*1だからである。アクセス制御機能によってその区分けをするしかなかったのであるから、アクセス制御機能がない機器は区分けしようがない(「侵入」の概念が成り立ち得ない)のである。

不正アクセス禁止法が制定される(1999年制定)までの経緯を辿ると、この法の趣旨が理解できる。

-1980年代から、日本でも、コンピュータネットワーク(電話接続を含む)が普及したことで、遠隔操作によるコンピュータの不正使用が発生し、問題となった。1980年に、岡山大学計算機センターのコンピュータが電話回線経由でID・パスワードを破られて無断使用された事件があったが、どの犯罪類型にも該当しないとして立件されなかった。刑法は「利益窃盗」を不可罰としている*2からである。こうした事態を受けて「コンピュータ無権限使用」に刑事罰を科すべきではないかとの議論が活発となった。当時の感覚においてそれ自体は犯罪ではなかったのである*2からである。こうした事態を受けて「コンピュータ無権限使用」に刑事罰を科すべきではないかとの議論が活発となった。当時の感覚においてそれ自体は犯罪ではなかったのである*3。しかし、「無権限」をどう画定するかが難しく、結局は、アクセス制御機能(ID・パスワード)による制限を乗り越えたら違法とするアイデアが実を結び、不正アクセス禁止法の制定へと展開して行った。

-つまり、不正アクセス罪は「人工的な」犯罪類型なのである前者はいわゆる自然犯(刑事犯)を、後者はいわゆる法定犯(行政犯)を表すといわれている。これは、いわゆる自然犯は行為それ自体が法令で定めるまでもなく社会的に悪とされる行為であり、法令においては、特にその行為をしないように命ずるまでもなく、その行為を処罰する規定を設ければ足りるものであり、他方、法定犯は行為それ自体の当罰性は法令の規定による義務履行違反に求められるため、法令においては、義務を課す規定と義務違反を処罰する規定とを設けることが必要であるとの理解に基づくものであると考えられる。

-このように解する場合、不正アクセス行為については、処罰することとすることが適当な行為であると認めらるにしても(略)、前法律的に反規範性を有する行為であるとまではいえないと考えられるそこで、本法においては、不正アクセス行為の処罰については、犯罪の防止及び電気通信の維持*5という本法の目的を達成するために、本条第一項において「何人も、不正アクセス行為をしてはならない」との規定を置いた上で、第八条で同項の規定に違反した者を処罰する旨の規定を置くこととし、不正アクセス罪が法定犯(行政犯)であることを明らかにしたところである。 +このように解する場合、不正アクセス行為については、処罰することとすることが適当な行為であると認めらるにしても(略)、前法律的に反規範性を有する行為であるとまではいえないと考えられるそこで、本法においては、不正アクセス行為の処罰については、犯罪の防止及び電気通信の維持*5という本法の目的を達成するために、本条第一項において「何人も、不正アクセス行為をしてはならない」との規定を置いた上で、第八条で同項の規定に違反した者を処罰する旨の規定を置くこととし、不正アクセス罪が法定犯(行政犯)であることを明らかにしたところである。

不正アクセス対策法制研究会編著「逐条 不正アクセス行為の禁止等に関する法律〔補訂〕」(立花書房, 2001年10月)68頁 @@ -258,7 +258,7 @@

-機器の製造者は「アクセス管理者」ではない。工場出荷時の初期パスワードは機器の製造者が付与したものであり、それをそのまま放置している設置者は、その存在をも認識していない*6とすれば、「アクセス管理者」たり得ず(そもそも「動作を管理」していない)、そのパスワードも「識別符号」に当たらないことになる。 +機器の製造者は「アクセス管理者」ではない。工場出荷時の初期パスワードは機器の製造者が付与したものであり、それをそのまま放置している設置者は、その存在をも認識していない*6とすれば、「アクセス管理者」たり得ず(そもそも「動作を管理」していない)、そのパスワードも「識別符号」に当たらないことになる。

(他方、機器のそれぞれに別々の初期パスワードが工場出荷時に設定されており、機器に貼られたシールなどに記載されている場合は、その初期パスワードが機器の設置者によって変更されていない状態であっても、機器の設置者がそのパスワードを自身の管理者パスワードとして是認していると言え、当該設置者が「アクセス管理者」として付与したものと見做すことができ、この場合は「識別符号」に当たると言えよう。今回はこのようなケースについては話題にしていない。) @@ -285,7 +285,7 @@

-このように、「識別符号」による「アクセス制御機能」というのは、単にログイン機能という技術的な仕掛けの存否によって該当の有無が決まるのではなく、不正アクセス禁止法の趣旨に立ち戻った法的評価によって該当性が決まるのである。*7 +このように、「識別符号」による「アクセス制御機能」というのは、単にログイン機能という技術的な仕掛けの存否によって該当の有無が決まるのではなく、不正アクセス禁止法の趣旨に立ち戻った法的評価によって該当性が決まるのである。*7

以上のことから、NICTにこの業務を実施させるためにNICT設置法を改正するに際して、本来的には、不正アクセス禁止法の読み替え規定を置く必要はなかったと言うことができる。 @@ -367,7 +367,7 @@

-今回の騒動をきっかけに、初めてちゃんと改正NICT法を読んでみた*8ところ、「特定アクセス行為」の定義に、こんな要件が混じり込んでいたことを知った。 +今回の騒動をきっかけに、初めてちゃんと改正NICT法を読んでみた*8ところ、「特定アクセス行為」の定義に、こんな要件が混じり込んでいたことを知った。

@@ -380,7 +380,7 @@

-この強調部分は、「特定アクセス行為」で入力するパスワードがどういうものかを限定しているのだが、工場出荷時共通初期パスワードが規定されているかと思いきや、そうではなく、「不正アクセス行為から防御するため必要な基準として総務省令で定める基準を満たさないものに限る」というのである。つまり、十分に強くないパスワードは全部対象だと言うのである。しかもその基準が、電気通信事業法52条(端末設備の接続の技術基準)に倣うというのであるから、もはや、当初目的*9と何の関係もない話になってしまっている。これは立法ミスではないのか。 +この強調部分は、「特定アクセス行為」で入力するパスワードがどういうものかを限定しているのだが、工場出荷時共通初期パスワードが規定されているかと思いきや、そうではなく、「不正アクセス行為から防御するため必要な基準として総務省令で定める基準を満たさないものに限る」というのである。つまり、十分に強くないパスワードは全部対象だと言うのである。しかもその基準が、電気通信事業法52条(端末設備の接続の技術基準)に倣うというのであるから、もはや、当初目的*9と何の関係もない話になってしまっている。これは立法ミスではないのか。

その「総務省令で定める基準」がどうなったかを確認したところ、以下のように規定されていた。 @@ -403,10 +403,10 @@

-これは「満たさないものに限る」の基準であるから、NICTが入力するパスワードは、この否定、すなわち、「字数8未満であるか、又は、『これまで…サイバー攻撃のために用いられたもの……その他の容易に推測されるもの』」ということになる。「いずれにも該当」の否定は「いずれかに非該当」である点に注意したい*10。つまり、字数7以下のパスワードは全て対象!なのである。おいおいマジなのか!? +これは「満たさないものに限る」の基準であるから、NICTが入力するパスワードは、この否定、すなわち、「字数8未満であるか、又は、『これまで…サイバー攻撃のために用いられたもの……その他の容易に推測されるもの』」ということになる。「いずれにも該当」の否定は「いずれかに非該当」である点に注意したい*10。つまり、字数7以下のパスワードは全て対象!なのである。おいおいマジなのか!?

-オンライン認証用のパスワードの場合*11、ランダム生成の文字列(英大小文字数字記号からなる)であれば、7文字でも十分な強度があると言える。それなのに、この省令は、7文字のパスワードはどんな内容であっても「不正アクセス行為から防御するため必要な基準」を満たさないとし、アタックするぞと言っているのである。 +オンライン認証用のパスワードの場合*11、ランダム生成の文字列(英大小文字数字記号からなる)であれば、7文字でも十分な強度があると言える。それなのに、この省令は、7文字のパスワードはどんな内容であっても「不正アクセス行為から防御するため必要な基準」を満たさないとし、アタックするぞと言っているのである。

これではさすがに国民が反発するであろう。まさに前掲の批判の声にあった「国が一軒ずつドアを開けて侵入してみます」の様相を呈しているし、しかも、「鍵のかかってない家が多いらしいから」ではなく、「鍵のかかっている家であろうとも抉じ開けてやるぞ」という基準が規定されているのである。 @@ -447,7 +447,7 @@

-つまり、当初目的*12は「機器の初期設定の識別符号」を対象に行うはずだったところ、どういうわけか、法律により、不正アクセス行為に(不必要に)大穴を開けてしまったものの、実施計画では当初目的に戻して、「機器の初期設定の識別符号」に準ずるようなパスワード*13のみを対象にすることになったように見える。 +つまり、当初目的*12は「機器の初期設定の識別符号」を対象に行うはずだったところ、どういうわけか、法律により、不正アクセス行為に(不必要に)大穴を開けてしまったものの、実施計画では当初目的に戻して、「機器の初期設定の識別符号」に準ずるようなパスワード*13のみを対象にすることになったように見える。

今回認可された実施計画からすれば、無難なパスワードのみを用いることとされ、「元々合法な行為である」とどうにか言い得るかもしれないが、省令上は、7文字以下のパスワードはどんな内容であっても対象にできることになっているので、この点を捉えて「国が暴走する」と危険視され続けることになりかねない。それを避けるには、省令を直ちに改正して、1条1号を削除したらよいのではないか。 @@ -462,7 +462,7 @@

-というわけで、鎮火させるならば、なすべきことは、本来合法的な行為に限っている*14*15ことを国民に説明することであるが、総務省らが今説明していることは、検査することの意義の説明ばかりで、強制的に「理解を求める」ものになってしまっているように見える。特に、理解を求めるためのポスターが作成されたようだが、これが悪手で、「家のカギかけるよな?」「サイフ置きっぱなしにしないよな?」などと書かれており、警戒する国民らの不信感を逆撫でするものになっている。 +というわけで、鎮火させるならば、なすべきことは、本来合法的な行為に限っている*14*15ことを国民に説明することであるが、総務省らが今説明していることは、検査することの意義の説明ばかりで、強制的に「理解を求める」ものになってしまっているように見える。特に、理解を求めるためのポスターが作成されたようだが、これが悪手で、「家のカギかけるよな?」「サイフ置きっぱなしにしないよな?」などと書かれており、警戒する国民らの不信感を逆撫でするものになっている。

    @@ -479,13 +479,13 @@

    -

    *1 もし、インターネットの世界を、住居侵入罪における囲繞地のように捉えるとすれば、家庭や会社のLAN内にある機器を対象とするといったことが考えられるが、そこにある機器の一部がインターネット側に露出している場合、それは機能としてあえてインターネット側から接続できるようにしている場合と区別ができない。

    -

    *2 山口厚「刑法における財物の意義」阿部純二他編『刑法基本講座第5巻財産犯論』(法学書院, 1993)は、その冒頭で次のように説明する。窃盗罪に「2項」(財産上の利益を客体とする利益罪)がないことから、刑法からあえて外されていることを指して「利益窃盗」の語が用いられる。

    +

    *1 もし、インターネットの世界を、住居侵入罪における囲繞地のように捉えるとすれば、家庭や会社のLAN内にある機器を対象とするといったことが考えられるが、そこにある機器の一部がインターネット側に露出している場合、それは機能としてあえてインターネット側から接続できるようにしている場合と区別ができない。

    +

    *2 山口厚「刑法における財物の意義」阿部純二他編『刑法基本講座第5巻財産犯論』(法学書院, 1993)は、その冒頭で次のように説明する。窃盗罪に「2項」(財産上の利益を客体とする利益罪)がないことから、刑法からあえて外されていることを指して「利益窃盗」の語が用いられる。

    刑法235条の窃盗罪以下の財産犯の規定は財産を保護法益とするが、その財産は現行法上「財物」と(財物以外の財産である)「財産上の利益」の二つの形態に分けられている。強盗(236条)、詐欺(246条)および恐喝(249条)においては、1項で財物が、2項で財産上の利益がそれぞれ保護の対象とされ、この意味では財産は包括的に保護されている(「財産上の損害」を要求するに過ぎない背任(247条)においても同様である)。これに対し、窃盗(235条)、横領(252条以下)、賍物(256条)および毀棄(258条以下)においては財物(横領等における「物」も同様である)のみが保護されている。強盗、詐欺および恐喝においても、1項と2項のいずれを適用するかを決する点において財物の意義は問題となるが、窃盗や横領等においては、財物概念が処罰の範囲を決定するという点において重要な意味を有しているのである。

    -

    *3 南部篤「コンピュータ・ネットワークに関連する犯罪と刑事立法(一)」日本法学第78巻第2号(2012年9月)84頁以下、同(二)33頁以下は、このことについて以下のように述べている。

    +

    *3 南部篤「コンピュータ・ネットワークに関連する犯罪と刑事立法(一)」日本法学第78巻第2号(2012年9月)84頁以下、同(二)33頁以下は、このことについて以下のように述べている。

    ①1980年5月、マイコン・ショップの従業員が、岡山大学助教授の同大学計算機センター登録番号(ID)とパスワードを入手し、これを用いて数ヶ月の間、のべ45時間にわたり電話回線経由で同センターのコンピュータにアクセスし無断で使用していた(使用料約16万円)ことが発覚した。②1981年8月、某公団職員らが、全国高等学校野球選手権大会の試合に関して、現金合計16万円余りを賭けて、いわゆる「野球トトカルチョ」と称する賭博を行い、その際、賭け金の計算処理を行う特別のプログラムを作成した上、どう公団のコンピュータを不正に使用していたことが発覚した。いずれも、コンピュータの不正使用については適用条文を欠くため立件されなかった(53)。 @@ -514,7 +514,7 @@

    南部篤「コンピュータ・ネットワークに関連する犯罪と刑事立法(二)」日本法学第78巻第3号(2013年2月)33頁

    -

    *4 この罪が刑法典に盛り込まれず、警察庁・総務省・経済産業省が所管する行政刑法によって創設されたことは、構想前段階における議論において以下のように書かれていた点が興味深い。 +

    *4 この罪が刑法典に盛り込まれず、警察庁・総務省・経済産業省が所管する行政刑法によって創設されたことは、構想前段階における議論において以下のように書かれていた点が興味深い。

    @@ -523,17 +523,17 @@

    コンピュータ情報の不正取得・漏示に関する法制的対応——検討過程の中間報告——, 情報セキュリティと法制度調査研究委員会レポート, 日本情報処理開発協会(1991年3月)

    -

    *5 原文ママ。同書第2版(立花書房, 2012年7月)では、「電気通信に関する秩序の維持」(78頁)に修正されていた。

    -

    *6 設置者が管理者画面を使っていない機器も存在し得るし、さらに、製造者も公式には認めていない裏の管理者ログイン機能が存在する機器の事例もある。

    -

    *7 このことが意外に思われるかもしれないが、こうした不正アクセス禁止法の趣旨を巡っては、20年前から度々議論になっていた。「アクセス制限されていないものは、誰でも見ることができるのだから、不正アクセスとしてはいけない。」といった論調であり、2002年には、ググっただけで名簿のCSVファイルが見つかるWebサイトがたくさん発見され、2ちゃんねるにそのURLを暴露される事案が続発したことがあり、暴露されたWebサイト管理者は「不正アクセスされた」と警察に被害を訴えたが、警視庁が「名簿を道端に置くようなもの」「法的に不正アクセスと判断できるものはない」と一蹴(中日新聞2002年7月4日朝刊「相次ぐ個人情報流出 “お寒い”企業の危機管理 警視庁『道に置くのと同じ』」)して被害届を受理しなかったという事案があった。他方、2003年にはACCS不正アクセス事件があり、これはディレクトリトラバーサル脆弱性を突いて非公開ディレクトリのファイルをブラウザで閲覧したものであったが、これが刑事事件となって東京地裁で有罪判決(控訴取り下げ確定)が出たところ、「正義の脆弱性指摘が目的であればアクセスは許されるべきである」的な声が噴出(一例としてINTERNET magazine 2004年7月号 73頁)し、「日本はこの法律のせいで脆弱性発見ができなくされた」的な声が度々出るようになった。私の見解としては、目的によって正当化することはできず、この人工的な行政ルールに違反しているか否かだけが問題となるのがこの法律であるというもので、この事件における構成要件該当性の当否は「不正アクセス行為の2つの文理解釈について」(情報ネットワーク・ローレビュー第5巻1号37頁以下, 2006)で論じた(結論は「どちらとも言い得る」)。この事件と同じ時期にIPAに脆弱性届出制度ができたが、その運用においては、違法な手段により発見されたものは受け付けないとしつつ、適法な手段による発見手段は多々あるとして、そうした適法手段による発見の実績が積まれてきていた。しかし、それでもなお、いくつかの種類の脆弱性(ディレクトリトラバーサルやSQLインジェクションなど)については、違法な手段でなければ発見できないという声があり、不正アクセス禁止法がそうした「正義の」発見を萎縮させているという主張は繰り返し耳にする状況があった。そんな折の2014年、月刊FACTAに「上場企業5割に「サイバー脆弱性」天才ハッカー「ドラゴン・タトゥーの女」のように侵入できるか。本誌のテストで愕然とする結果が出た。」(FACTA 2014年11月号)との記事が掲載され(それに対する当時の反応として「とあるセキュリティ企業、上場企業100社に対し無断で攻撃を行っていた?」)、さらに続いて翌月「「サイバー脆弱性」霞が関は落第 ようやく「サイバーセキュリティ基本法」が成立。だが、システム音痴の政府機関のサイトは穴だらけだ。」(FACTA 2014年12月号)との記事が出た(それに対する反応として「FACTA、今度は政府機関にサイバー攻撃を仕掛ける」)。これらはスプラウト社が行ったことが明らかにされている。スプラウト社のことはよく知らなかったが、当時、有力政治家をバックに摘発されない自信がおありなのか、これに挑戦されていたようだった。警察の捜査があったかは知らないが、摘発されてはいないようである。後にHagex氏が刺殺される全く別の事件(2018年)があり、初めてHagexこと故岡本氏のスプラウト社でのご活動の理念を知ったが、後になって思えば、「正義の」ハッカー活動を積極的に推進していきたいという強い意思が同社にあったのであろうかと思った。このように、不正アクセス禁止法で禁止されている「不正アクセス行為」というのは、単純に住居侵入に喩えることのできないものであり、素人目にパッと見「不正アクセス行為」のように感じられるものであっても、正確にはこの人工ルールに違反していない場合もあるという性質のものなのである。このFACTA事案の際に、正義の脆弱性発見行為を全て合法化せよ的な声も耳にした気がするが、そのとき私が考えたのは、「いくつかの適法な発見手段を正式に法令化するという手はあるかもな」というものだった。それと同時期、IoT機器の工場出荷時共通初期パスワードが問題になりつつあり、それを発見する行為は正当なものだという声を耳にしたような気がする。そのとき私が考えたのは、上記のように「識別符号に当らず、アクセス制御機能による利用の制限がない」ということだった。これらのことがNICT法改正に繋がっているのか無関係なのかは知らない。いずれにせよ一つ言えることは、一般の人々が発見することを正式に合法と認めて欲しいという声があったにも関わらず、できたことは、NICT法に基づき国の機関が行うことについて適法化することであった。その結果、「一般の人々が行えば違法である」という反対解釈が出て来かねない状況が生じた。このような反対解釈は誤り(本文中に書いたように必ずしも全部を違法前提として立法されたのではない)であり、改正NICT法が制定されようが一般の人々については以前と変わっておらず、「識別符号に当らず、アクセス制御機能による利用の制限がない」ものについて発見することが不正アクセス行為に当らないことは現在も変わりない。

    -

    *8 なお、私はこのNICT法改正法の立案に関して業務として一切関与していないことを付記しておく。NICTが実施するという話になって以降、何ら見てもいなかった。もし関与していたならば、ここでこのように擁護する発言を書くことはなく、沈黙するしかなかったであろう。

    -

    *9 そもそも「当初目的」などというものがあったのか知らないが。

    -

    *10 さすがにこれが、「筆者のように理系の世界から超文系な世界に来ると、「理系の常識は文系の非常識」といった事態に直面する。その中でも理系では常識とされる論理思考・論理的直感が法曹などの超文系世界では非常識とされることにしばしば驚く。」(@IT, 2004年10月)のオチではなかろうとは思うが。

    -

    *11 ファイル暗号化用の鍵としてのパスワードの場合は、概ね倍の長さが必要であるのに対して。

    -

    *12 そもそも「当初目的」などというものがあったのか知らないが。

    -

    *13 それでも、「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象に含めてしまっているのは、「当初目的」の趣旨を踏み外しており、「元々合法な行為」と言い張るのは苦しいだろう。

    -

    *14 そうするためには、「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象にするのも中止したほうがいい。

    -

    *15 追記(2月15日):上2つの注釈に物言いがついたので、解説をツイートしたが、ここに改めて追記しておく。脚注13の「「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象に含めてしまっているのは、「当初目的」の趣旨を踏み外しており、」というのは、「1111、aaa」といった具体的な値のことを言っているのではなく、実施計画の「特定アクセス行為に係る識別符号の方針」に列挙されている2つ目、3つ目、4つ目の「同一の文字のみの暗唱符号を用いているもの(1111、aaaa等)」「連続した文字のみの暗唱符号を用いているもの(1234、abcd等)」「連続した文字のみを繰り返した暗唱符号を用いているもの(12341234、abcdabcd等)」という抽象的方針のことを言ったもの。これらの具体的な値が「過去に大規模なサイバー攻撃に用いられたID、パスワードの組合せが対象だから」というのなら、実施計画の「識別符号の方針」1つ目「送信型…サイバー攻撃の実績ある…で利用されている識別符号」に含まれるだけの話。それなのに、これらが実施計画の「識別符号の方針」に別個に記載されているのは、省令1条2号で、「これまで送信型対電気通信設備サイバー攻撃のために用いられたもの」の他に「同一の文字のみ又は連続した文字のみを用いたもの」を例示に入れてしまったせいだろう。これが「当初目的」を逸脱していると指摘したもの。脚注14の「「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象にするのも中止したほうがいい。」というのも、「1111、aaa」といった具体的な値のことを言っているのではなく、実施計画の「識別符号の方針」から上記の「2つ目、3つ目、4つ目」を削除するべきという意味であり、なぜそうなのかは、省令1条2号の「これまで送信型対電気通信設備サイバー攻撃のために用いられたもの」は「アクセス管理者があえて放置して」いると言い得る基準となり得るのに対し、「同一の文字のみ又は連続した文字のみを用いたものその他の容易に推測されるもの」は広すぎて基準にならないからである。「工場出荷時共通初期パスワード」(実施計画の「識別符号の方針」では「機器の初期設定の識別符号(略)」と書かれている)は、「これまで送信型対電気通信設備サイバー攻撃のために用いられたもの」の一部という関係にあり、本文中に書いたように、前者は元より識別符号でないものであり、後者は「このような状態をアクセス管理者があえて放置している場合」に当たり得るもの。本当にそう言えるかは後者は前者よりは弱いが、これらは法的評価の程度問題であるのに対し、「同一の文字のみ又は連続した文字のみを用いたものその他の容易に推測されるもの」は、不正アクセス禁止法の保護対象から外れる余地が全くない(「同一の文字のみ又は連続した文字のみを用いたもの」が「保護対象から外れる余地がない」と言っているのではない点に注意。この部分は「その他の容易に推測されるもの」の例示であり、「容易に推測されるもの」が本体。)ところに問題がある。これが省令に書かれている限り「当初目的」から逸脱しているということ。その意味では、本文中で「それを避けるには、省令を直ちに改正して、1条1号を削除したらよいのではないか。 」と書いた点は、1号を削除するだけでは足りず、2号を「機器の初期設定の識別符号(略)及びこれまで送信型対電気通信設備サイバー攻撃のために用いられたもの」という限定列挙に改正する(実施計画の「識別符号の方針」の5つ目と1つ目に合わせる)必要があると書くべきであった。

    +

    *5 原文ママ。同書第2版(立花書房, 2012年7月)では、「電気通信に関する秩序の維持」(78頁)に修正されていた。

    +

    *6 設置者が管理者画面を使っていない機器も存在し得るし、さらに、製造者も公式には認めていない裏の管理者ログイン機能が存在する機器の事例もある。

    +

    *7 このことが意外に思われるかもしれないが、こうした不正アクセス禁止法の趣旨を巡っては、20年前から度々議論になっていた。「アクセス制限されていないものは、誰でも見ることができるのだから、不正アクセスとしてはいけない。」といった論調であり、2002年には、ググっただけで名簿のCSVファイルが見つかるWebサイトがたくさん発見され、2ちゃんねるにそのURLを暴露される事案が続発したことがあり、暴露されたWebサイト管理者は「不正アクセスされた」と警察に被害を訴えたが、警視庁が「名簿を道端に置くようなもの」「法的に不正アクセスと判断できるものはない」と一蹴(中日新聞2002年7月4日朝刊「相次ぐ個人情報流出 “お寒い”企業の危機管理 警視庁『道に置くのと同じ』」)して被害届を受理しなかったという事案があった。他方、2003年にはACCS不正アクセス事件があり、これはディレクトリトラバーサル脆弱性を突いて非公開ディレクトリのファイルをブラウザで閲覧したものであったが、これが刑事事件となって東京地裁で有罪判決(控訴取り下げ確定)が出たところ、「正義の脆弱性指摘が目的であればアクセスは許されるべきである」的な声が噴出(一例としてINTERNET magazine 2004年7月号 73頁)し、「日本はこの法律のせいで脆弱性発見ができなくされた」的な声が度々出るようになった。私の見解としては、目的によって正当化することはできず、この人工的な行政ルールに違反しているか否かだけが問題となるのがこの法律であるというもので、この事件における構成要件該当性の当否は「不正アクセス行為の2つの文理解釈について」(情報ネットワーク・ローレビュー第5巻1号37頁以下, 2006)で論じた(結論は「どちらとも言い得る」)。この事件と同じ時期にIPAに脆弱性届出制度ができたが、その運用においては、違法な手段により発見されたものは受け付けないとしつつ、適法な手段による発見手段は多々あるとして、そうした適法手段による発見の実績が積まれてきていた。しかし、それでもなお、いくつかの種類の脆弱性(ディレクトリトラバーサルやSQLインジェクションなど)については、違法な手段でなければ発見できないという声があり、不正アクセス禁止法がそうした「正義の」発見を萎縮させているという主張は繰り返し耳にする状況があった。そんな折の2014年、月刊FACTAに「上場企業5割に「サイバー脆弱性」天才ハッカー「ドラゴン・タトゥーの女」のように侵入できるか。本誌のテストで愕然とする結果が出た。」(FACTA 2014年11月号)との記事が掲載され(それに対する当時の反応として「とあるセキュリティ企業、上場企業100社に対し無断で攻撃を行っていた?」)、さらに続いて翌月「「サイバー脆弱性」霞が関は落第 ようやく「サイバーセキュリティ基本法」が成立。だが、システム音痴の政府機関のサイトは穴だらけだ。」(FACTA 2014年12月号)との記事が出た(それに対する反応として「FACTA、今度は政府機関にサイバー攻撃を仕掛ける」)。これらはスプラウト社が行ったことが明らかにされている。スプラウト社のことはよく知らなかったが、当時、有力政治家をバックに摘発されない自信がおありなのか、これに挑戦されていたようだった。警察の捜査があったかは知らないが、摘発されてはいないようである。後にHagex氏が刺殺される全く別の事件(2018年)があり、初めてHagexこと故岡本氏のスプラウト社でのご活動の理念を知ったが、後になって思えば、「正義の」ハッカー活動を積極的に推進していきたいという強い意思が同社にあったのであろうかと思った。このように、不正アクセス禁止法で禁止されている「不正アクセス行為」というのは、単純に住居侵入に喩えることのできないものであり、素人目にパッと見「不正アクセス行為」のように感じられるものであっても、正確にはこの人工ルールに違反していない場合もあるという性質のものなのである。このFACTA事案の際に、正義の脆弱性発見行為を全て合法化せよ的な声も耳にした気がするが、そのとき私が考えたのは、「いくつかの適法な発見手段を正式に法令化するという手はあるかもな」というものだった。それと同時期、IoT機器の工場出荷時共通初期パスワードが問題になりつつあり、それを発見する行為は正当なものだという声を耳にしたような気がする。そのとき私が考えたのは、上記のように「識別符号に当らず、アクセス制御機能による利用の制限がない」ということだった。これらのことがNICT法改正に繋がっているのか無関係なのかは知らない。いずれにせよ一つ言えることは、一般の人々が発見することを正式に合法と認めて欲しいという声があったにも関わらず、できたことは、NICT法に基づき国の機関が行うことについて適法化することであった。その結果、「一般の人々が行えば違法である」という反対解釈が出て来かねない状況が生じた。このような反対解釈は誤り(本文中に書いたように必ずしも全部を違法前提として立法されたのではない)であり、改正NICT法が制定されようが一般の人々については以前と変わっておらず、「識別符号に当らず、アクセス制御機能による利用の制限がない」ものについて発見することが不正アクセス行為に当らないことは現在も変わりない。

    +

    *8 なお、私はこのNICT法改正法の立案に関して業務として一切関与していないことを付記しておく。NICTが実施するという話になって以降、何ら見てもいなかった。もし関与していたならば、ここでこのように擁護する発言を書くことはなく、沈黙するしかなかったであろう。

    +

    *9 そもそも「当初目的」などというものがあったのか知らないが。

    +

    *10 さすがにこれが、「筆者のように理系の世界から超文系な世界に来ると、「理系の常識は文系の非常識」といった事態に直面する。その中でも理系では常識とされる論理思考・論理的直感が法曹などの超文系世界では非常識とされることにしばしば驚く。」(@IT, 2004年10月)のオチではなかろうとは思うが。

    +

    *11 ファイル暗号化用の鍵としてのパスワードの場合は、概ね倍の長さが必要であるのに対して。

    +

    *12 そもそも「当初目的」などというものがあったのか知らないが。

    +

    *13 それでも、「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象に含めてしまっているのは、「当初目的」の趣旨を踏み外しており、「元々合法な行為」と言い張るのは苦しいだろう。

    +

    *14 そうするためには、「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象にするのも中止したほうがいい。

    +

    *15 追記(2月15日):上2つの注釈に物言いがついたので、解説をツイートしたが、ここに改めて追記しておく。脚注13の「「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象に含めてしまっているのは、「当初目的」の趣旨を踏み外しており、」というのは、「1111、aaa」といった具体的な値のことを言っているのではなく、実施計画の「特定アクセス行為に係る識別符号の方針」に列挙されている2つ目、3つ目、4つ目の「同一の文字のみの暗唱符号を用いているもの(1111、aaaa等)」「連続した文字のみの暗唱符号を用いているもの(1234、abcd等)」「連続した文字のみを繰り返した暗唱符号を用いているもの(12341234、abcdabcd等)」という抽象的方針のことを言ったもの。これらの具体的な値が「過去に大規模なサイバー攻撃に用いられたID、パスワードの組合せが対象だから」というのなら、実施計画の「識別符号の方針」1つ目「送信型…サイバー攻撃の実績ある…で利用されている識別符号」に含まれるだけの話。それなのに、これらが実施計画の「識別符号の方針」に別個に記載されているのは、省令1条2号で、「これまで送信型対電気通信設備サイバー攻撃のために用いられたもの」の他に「同一の文字のみ又は連続した文字のみを用いたもの」を例示に入れてしまったせいだろう。これが「当初目的」を逸脱していると指摘したもの。脚注14の「「1111、aaaa等」「1234、abcd等」「12341234、abcdabcd等」を対象にするのも中止したほうがいい。」というのも、「1111、aaa」といった具体的な値のことを言っているのではなく、実施計画の「識別符号の方針」から上記の「2つ目、3つ目、4つ目」を削除するべきという意味であり、なぜそうなのかは、省令1条2号の「これまで送信型対電気通信設備サイバー攻撃のために用いられたもの」は「アクセス管理者があえて放置して」いると言い得る基準となり得るのに対し、「同一の文字のみ又は連続した文字のみを用いたものその他の容易に推測されるもの」は広すぎて基準にならないからである。「工場出荷時共通初期パスワード」(実施計画の「識別符号の方針」では「機器の初期設定の識別符号(略)」と書かれている)は、「これまで送信型対電気通信設備サイバー攻撃のために用いられたもの」の一部という関係にあり、本文中に書いたように、前者は元より識別符号でないものであり、後者は「このような状態をアクセス管理者があえて放置している場合」に当たり得るもの。本当にそう言えるかは後者は前者よりは弱いが、これらは法的評価の程度問題であるのに対し、「同一の文字のみ又は連続した文字のみを用いたものその他の容易に推測されるもの」は、不正アクセス禁止法の保護対象から外れる余地が全くない(「同一の文字のみ又は連続した文字のみを用いたもの」が「保護対象から外れる余地がない」と言っているのではない点に注意。この部分は「その他の容易に推測されるもの」の例示であり、「容易に推測されるもの」が本体。)ところに問題がある。これが省令に書かれている限り「当初目的」から逸脱しているということ。その意味では、本文中で「それを避けるには、省令を直ちに改正して、1条1号を削除したらよいのではないか。 」と書いた点は、1号を削除するだけでは足りず、2号を「機器の初期設定の識別符号(略)及びこれまで送信型対電気通信設備サイバー攻撃のために用いられたもの」という限定列挙に改正する(実施計画の「識別符号の方針」の5つ目と1つ目に合わせる)必要があると書くべきであった。

    @@ -558,32 +558,40 @@

    -

@@ -592,362 +600,469 @@

最近のタイトル

-

2019年02月19日 +

2022年06月09日

-

2019年02月11日 +

2022年04月01日

-

2018年12月26日 +

2022年01月19日

-

2018年10月31日 +

2021年12月26日

-

2018年06月17日 +

2021年10月06日

-

2018年06月10日 +

2021年08月23日

-

2018年05月19日 +

2021年07月12日

-

2018年05月04日 +

2020年09月14日

-

2018年03月07日 +

2020年08月01日

-

2017年12月29日 +

2019年10月05日

-

2017年10月29日 +

2019年08月03日

-

2017年10月22日 +

2019年07月08日

-

2017年07月22日 +

2019年06月25日

-

2017年06月04日 +

2019年06月09日

-

2017年05月13日 +

2019年05月19日

-

2017年05月05日 +

2019年05月12日

-

2017年04月08日 +

2019年03月19日

-

2017年03月10日 +

2019年03月16日

-

2017年03月05日 +

2019年03月09日

-

2017年02月18日 +

2019年03月07日

-

2017年01月08日 +

2019年02月19日

-

2017年01月04日 +

2019年02月11日

-

2016年12月30日 +

2018年12月26日

-

2016年12月04日 +

2018年10月31日

-

2016年11月29日 +

2018年06月17日

-

2016年11月23日 +

2018年06月10日

-

2016年11月05日 +

2018年05月19日

-

2016年10月25日 +

2018年05月04日

-

2016年10月10日 +

2018年03月07日

-

2016年08月23日 +

2017年12月29日

-

2016年07月23日 +

2017年10月29日

-

2016年07月16日 +

2017年10月22日

-

2016年07月02日 +

2017年07月22日

-

2016年06月12日 +

2017年06月04日

-

2016年06月03日 +

2017年05月13日

-

2016年04月23日 +

2017年05月05日

-

2016年04月06日 +

2017年04月08日

-

2016年03月27日 +

2017年03月10日

-

2016年03月14日 +

2017年03月05日

-

2016年03月06日 +

2017年02月18日

-

2016年02月24日 +

2017年01月08日

-

2016年02月20日 +

2017年01月04日

-

2016年02月11日 +

2016年12月30日

-

2016年02月05日 +

2016年12月04日

-

2016年01月31日 +

2016年11月29日

-

2015年12月12日 +

2016年11月23日

-

2015年12月06日 +

2016年11月05日

-

2015年11月23日 +

2016年10月25日

-

2015年11月21日 +

2016年10月10日

-

2015年11月07日 +

2016年08月23日

-

2015年10月20日 +

2016年07月23日

-

2015年07月02日 +

2016年07月16日

-

2015年06月14日 +

2016年07月02日

-

2015年03月15日 +

2016年06月12日

-

2015年03月10日 +

2016年06月03日

-

2015年03月08日 +

2016年04月23日

-

2015年01月05日 +

2016年04月06日

-

2014年12月27日 +

2016年03月27日

-

2014年11月12日 +

2016年03月14日

-

2014年09月07日 +

2016年03月06日

-

2014年07月18日 +

2016年02月24日

-

2014年04月23日 +

2016年02月20日

-

2014年04月22日 +

2016年02月11日

+

2016年02月05日 +

+ +

2016年01月31日 +

+ +

2015年12月12日 +

+ +

2015年12月06日 +

+ +

2015年11月23日 +

+ +

2015年11月21日 +

+ +

2015年11月07日 +

+ +

2015年10月20日 +

+ +

2015年07月02日 +

+ +

2015年06月14日 +

+ +

2015年03月15日 +

+ +

2015年03月10日 +

+ +

2015年03月08日 +

+ +

2015年01月05日 +

+ +

2014年12月27日 +

+ +

2014年11月12日 +

+ +

2014年09月07日 +

+ +

2014年07月18日 +

+ +

2014年04月23日 +

+ +

2014年04月22日 +

+
-
2000|01|
-
2003|05|06|07|08|09|10|11|12|
-
2004|01|02|03|04|05|06|07|08|09|10|11|12|
-
2005|01|02|03|04|05|06|07|08|09|10|11|12|
-
2006|01|02|03|04|05|06|07|08|09|10|11|12|
-
2007|01|02|03|04|05|06|07|08|09|10|11|12|
-
2008|01|02|03|04|05|06|07|08|09|10|11|12|
-
2009|01|02|03|05|06|07|08|09|10|11|12|
-
2010|01|02|03|04|05|06|07|08|09|10|11|12|
-
2011|01|02|03|05|06|07|08|09|10|11|12|
-
2012|02|03|04|05|06|07|08|09|
-
2013|01|02|03|04|05|06|07|
-
2014|01|04|07|09|11|12|
-
2015|01|03|06|07|10|11|12|
-
2016|01|02|03|04|06|07|08|10|11|12|
-
2017|01|02|03|04|05|06|07|10|12|
-
2018|03|05|06|10|12|
-
2019|02|
+
2000|01|
+
2003|05|06|07|08|09|10|11|12|
+
2004|01|02|03|04|05|06|07|08|09|10|11|12|
+
2005|01|02|03|04|05|06|07|08|09|10|11|12|
+
2006|01|02|03|04|05|06|07|08|09|10|11|12|
+
2007|01|02|03|04|05|06|07|08|09|10|11|12|
+
2008|01|02|03|04|05|06|07|08|09|10|11|12|
+
2009|01|02|03|05|06|07|08|09|10|11|12|
+
2010|01|02|03|04|05|06|07|08|09|10|11|12|
+
2011|01|02|03|05|06|07|08|09|10|11|12|
+
2012|02|03|04|05|06|07|08|09|
+
2013|01|02|03|04|05|06|07|
+
2014|01|04|07|09|11|12|
+
2015|01|03|06|07|10|11|12|
+
2016|01|02|03|04|06|07|08|10|11|12|
+
2017|01|02|03|04|05|06|07|10|12|
+
2018|03|05|06|10|12|
+
2019|02|03|05|06|07|08|10|
+
2020|08|09|
+
2021|07|08|10|12|
+
2022|01|04|06|
+