{"version":3,"sources":["node_modules/browser-pack/_prelude.js","src/js/modules/entry.js","src/js/modules/analytics/googleAnalyticsEvents.js","src/js/modules/analytics/intercom.js","src/js/modules/genbar/genbar.js","src/js/modules/exit-pages/exitPages.js","src/js/modules/elevio/elevio.js","src/js/modules/bootstrap-extended/mobile-nav.js","src/js/modules/analytics/raven.js","src/js/modules/bootstrap-extended/animations.js","src/js/modules/bootstrap-extended/tooltip-closer.js","src/js/modules/callToAction/survey.js","src/js/modules/jquery-plugins/externalLinks.js","src/js/modules/jquery-plugins/truncate.js","src/js/modules/jquery-plugins/formatTime.js","src/js/modules/jquery-plugins/prettyTextOverflow.js","src/js/modules/helpers/validateForm.js","src/js/modules/helpers/leftMenu.js","src/js/modules/helpers/toggleAccordion.js","src/js/modules/modals/firstTimeCookie.js","src/js/modules/helpers/wooPopover.js","src/js/modules/helpers/wooTooltip.js","src/js/modules/helpers/homepageScroll.js","src/js/modules/g-recaptcha/recaptchaOnload.js","src/js/modules/zendesk/zendeskInit.js","src/js/modules/settings/settings.js","src/js/modules/overview/overview.js","src/js/modules/user/cancelSubscription.js","src/js/modules/user/toggleInvoices.js","src/js/modules/subusers/subusers.js","src/js/modules/ipad/ipad.js","src/js/modules/review/review.js","src/js/modules/generate-socket/generateSocket.js","src/js/modules/pdf/pdf.js","src/js/modules/shared/shared.js","src/js/modules/pricing/pricing.js","src/js/modules/login/login.js","src/js/modules/login/loginWithQuestions.js","src/js/modules/register/register.js","src/js/modules/plans/plans.js","src/js/modules/components/form-list.js","src/js/modules/review/error.js","src/js/modules/pdf-editor/pdf-editor.js","src/js/modules/review/firstGenerationReview.js","src/js/modules/helpers/jsLoadEnd.js","src/js/modules/seasonal-events/halloween-2015/halloween.js","src/js/modules/seasonal-events/new-year-2015/new-year.js","src/js/modules/helpers/slugify.js","src/js/modules/analytics/gaTracker.js","src/js/modules/genbar/generationBarHeader.js","src/js/modules/genbar/fixedTopBar.js","src/js/modules/genbar/generationBarModal.js","src/js/modules/helpers/cookies.js","src/js/modules/helpers/validateURL.js","src/js/modules/helpers/scrollTo.js","src/js/modules/helpers/responsiveViewport.js","src/js/modules/helpers/leftNavigatorTooltip.js","src/js/modules/helpers/scrollToElement.js","src/js/modules/components/checkbox.js","src/js/modules/settings/competitorsSuggest.js","src/js/modules/settings/modalSettings.js","src/js/modules/settings/save.js","src/js/modules/helpers/initScoreChart.js","src/js/modules/overview/loadMoreReports.js","src/js/modules/settings/delete.js","src/js/modules/overview/overviewTooltip.js","src/js/modules/overview/createAdvancedReview.js","src/js/modules/overview/deleteAdvancedReview.js","src/js/modules/overview/extensionLink.js","src/js/modules/overview/downloadPdf.js","src/js/modules/overview/expertBox.js","src/js/modules/overview/expertNotification.js","src/js/modules/genbar/isEmptyField.js","src/js/modules/ipad/bindCriteriumTapEvent.js","src/js/modules/ipad/moduleTitleReplace.js","src/js/modules/ipad/iframeGeneration.js","src/js/modules/review/highlighter.js","src/js/modules/review/loadMustachesFiles.js","src/js/modules/helpers/loadingSentence.js","src/js/modules/review/checkEmptyModules.js","src/js/modules/review/mustacheLoad.js","src/js/modules/review/prettifyBigURLs.js","src/js/modules/review/settingRender.js","src/js/modules/review/renderProject.js","src/js/modules/ipad/activeMenuItem.js","src/js/modules/helpers/getParameterByName.js","src/js/modules/helpers/cleanWoorankLinks.js","src/js/modules/charts/chartsRender.js","src/js/modules/review/openCriterium.js","src/js/modules/review/showMoreTask.js","src/js/modules/generate-socket/initReportGeneration.js","src/js/modules/pdf/fixInnerIssue.js","src/js/modules/pdf/rgbaToHex.js","src/js/modules/charts/chartsColors.js","src/js/modules/validation/performFieldValidation.js","src/js/modules/validation/clearErrorOnField.js","src/js/modules/g-recaptcha/recaptchaResponseValidation.js","src/js/modules/pricing/trialCTA.js","src/js/modules/validation/showErrorForField.js","src/js/modules/register/registration.js","src/js/modules/register/validateFields.js","src/js/modules/register/updateForm.js","node_modules/bluebird/js/browser/bluebird.js","src/js/modules/pdf-editor/imageReader.js","src/js/modules/pdf-editor/imagePreview.js","src/js/modules/helpers/generationAjaxCall.js","src/js/modules/helpers/replaceExtLink.js","src/js/modules/review/counter/counter.js","src/js/modules/review/dashboard/initDashboardFooter.js","src/js/modules/review/dashboard/dashboardProgressStatus.js","src/js/modules/review/competitors/competizeAll.js","src/js/modules/review/dashboard/dashboard.js","src/js/modules/review/marketing-tasks/marketingTasks.js","src/js/modules/review/marketing-tasks/loadMarketingTasks.js","node_modules/process/browser.js","node_modules/perf-cascade/dist/perf-cascade.min.js","src/js/services/reviews.js","src/js/modules/genbar/searchDuplicateInputsValues.js","src/js/modules/helpers/browserDetection.js","src/js/modules/review/loadMustache.js","src/js/modules/review/getSettingsDataFor.js","src/js/modules/helpers/resolveDataURL.js","src/js/modules/ipad/sendMenuItemToApp.js","src/js/modules/charts/charts.js","src/js/modules/generate-socket/getCriteriumData.js","src/js/modules/validation/performMailCheck.js","src/js/modules/helpers/validateEmail.js","src/js/modules/register/getPrice.js","src/js/modules/register/activateTooltip.js","src/js/modules/register/updateSubmitButton.js","src/js/modules/genbar/generationBarPopup.js","src/js/modules/review/dashboard/toggleInlineModal.js","src/js/modules/review/competitors/competizeSocialImpact.js","src/js/modules/review/competitors/competizeBacklinks.js","src/js/modules/review/competitors/competizeSharedCount.js","src/js/modules/review/competitors/initCompTabs.js","src/js/modules/review/dashboard/dashboardTooltip.js","src/js/modules/review/dashboard/dashboardDatePicker.js","src/js/modules/review/dashboard/dashboardDownloadPdf.js","src/js/modules/review/dashboard/dashboardShortURL.js","src/js/modules/review/marketing-tasks/loadMarketingMustaches.js","src/js/modules/review/marketing-tasks/renderMarketingTasks.js","src/js/modules/review/marketing-tasks/mappingModules.js","src/js/modules/review/marketing-tasks/getBadCriteriaIds.js","src/js/services/wooGlobal.js","src/js/lib/mailcheck.js","src/js/modules/review/settingsBindevents.js","src/js/modules/charts/chartsConfig.js","src/js/modules/generate-socket/startSocketGeneration.js","node_modules/querystring-es3/index.js","src/js/modules/review/prettifyBigNumbers.js","src/js/modules/review/dashboard/closeAllInlineModal.js","src/js/modules/review/competitors/putSidInArray.js","src/js/modules/review/competitors/addTabsForSiComp.js","src/js/modules/review/competitors/addMainDataInSiComp.js","src/js/modules/review/marketing-tasks/renderTasks.js","src/js/modules/review/marketing-tasks/updateProgressBar.js","src/js/modules/review/marketing-tasks/renderFilter.js","src/js/modules/review/marketing-tasks/renderTasksDone.js","src/js/modules/review/marketing-tasks/toggleTasks.js","src/js/modules/review/marketing-tasks/marketingChecklistBindEvents.js","src/js/modules/review/marketing-tasks/addTopPrioritiesLabelText.js","node_modules/querystring-es3/decode.js","node_modules/querystring-es3/encode.js","node_modules/lodash.throttle/index.js","node_modules/socket.io-client/lib/index.js","src/js/modules/charts/highchartsTheme.js","src/js/modules/generate-socket/updateCrits.js","src/js/modules/generate-socket/generateAllCrits.js","src/js/modules/generate-socket/receiveCriterium.js","node_modules/socket.io-client/lib/url.js","node_modules/socket.io-client/lib/manager.js","node_modules/socket.io-client/lib/socket.js","node_modules/lodash.debounce/index.js","node_modules/socket.io-client/lib/on.js","node_modules/debug/browser.js","node_modules/socket.io-parser/index.js","src/js/modules/review/marketing-tasks/allTasksDone.js","src/js/modules/review/marketing-tasks/hideMoreOrLessLinks.js","src/js/modules/review/marketing-tasks/showMoreBehaviour.js","src/js/modules/review/marketing-tasks/checkBehaviour.js","src/js/modules/review/marketing-tasks/filterBehaviour.js","node_modules/debug/debug.js","node_modules/socket.io-parser/binary.js","node_modules/socket.io-parser/is-buffer.js","node_modules/component-emitter/index.js","node_modules/parseuri/index.js","node_modules/engine.io-client/index.js","node_modules/component-bind/index.js","node_modules/indexof/index.js","node_modules/backo2/index.js","node_modules/to-array/index.js","node_modules/has-binary/index.js","node_modules/lodash._getnative/index.js","node_modules/socket.io-parser/node_modules/debug/browser.js","node_modules/socket.io-parser/node_modules/component-emitter/index.js","src/js/modules/generate-socket/aggregateCompetitors.js","src/js/modules/generate-socket/insertInHTML.js","node_modules/engine.io-client/lib/index.js","node_modules/json3/lib/json3.js","node_modules/socket.io-parser/node_modules/debug/debug.js","node_modules/isarray/index.js","node_modules/ms/index.js","node_modules/engine.io-client/lib/socket.js","node_modules/engine.io-client/lib/transport.js","node_modules/engine.io-client/lib/transports/index.js","node_modules/socket.io-parser/node_modules/ms/index.js","node_modules/engine.io-parser/lib/browser.js","node_modules/engine.io-client/lib/xmlhttprequest.js","node_modules/engine.io-client/lib/transports/polling-xhr.js","node_modules/engine.io-client/lib/transports/polling-jsonp.js","node_modules/engine.io-client/lib/transports/websocket.js","src/js/modules/review/marketing-tasks/taskDone.js","src/js/modules/review/marketing-tasks/filterTaskByCategory.js","node_modules/parsejson/index.js","node_modules/parseqs/index.js","node_modules/engine.io-parser/lib/keys.js","node_modules/engine.io-client/lib/transports/polling.js","node_modules/wtf-8/wtf-8.js","node_modules/arraybuffer.slice/index.js","node_modules/after/index.js","node_modules/blob/index.js","node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","node_modules/has-cors/index.js","node_modules/yeast/index.js","node_modules/component-inherit/index.js","src/js/modules/review/marketing-tasks/updateFilterStatus.js","src/js/modules/review/marketing-tasks/updateFilterBadges.js"],"names":["$","window","jQuery","universalGA","require","intercom","raven","genbar","exitPages","init","isMobile","support","cors","moment","locale","wooGlobal","language","hasClass","bind","initUniversal","noAnalytics","settings","analytics","account","ga","allowAnchor","user","id","subscription","planCode","bindUniversal","pageName","attr","on","network","this","toLowerCase","gaTracker","extentionType","logoType","linkText","slugify","text","linkName","position","split","pop","length","jobsTitle","parents","find","targetLang","event","plan","href","linkTarget","activeBrowser","browser","option","socialChannel","criterium","parent","delegatedTarget","expert","isExpert","isWoorank","indexOf","inPageLink","e","module","exports","trait","enabled","email","user_id","app_id","appId","user_hash","userHash","first_name","firstName","last_name","lastName","business_web_site","businessWebSite","segment_category","segmentCategory","segment_category_last_ask","segmentCategoryLastAsk","created_at","Date","parse","createdAt","current_plan_code","expertDate","expert_landing_at","cookies","registrationReportViewed","registration_report_viewed","Intercom","genbarInHeader","fixedTopBar","genbarModal","stopPropagation","$top","dropdown","$exitPageModal","$exitPageModalCta","isInFrame","self","top","isDelayEnded","exitPageId","setTimeout","document","cookie","_helpersCookies2","get","pageY","modal","set","launchElevio","toggleClass","_elev","account_id","lang","events","afterLoad","open","click","undefined","script","createElement","type","async","src","element","getElementsByTagName","parentNode","insertBefore","preventDefault","openArticle","togglePanel","status","scrollTop","$navbar","collapse","target","removeClass","isInDevEnv","env","ravenURL","ravenSettings","release","whitelistUrls","cdn","replace","Raven","captureMessage","config","debug","install","setUserContext","checkAnimationLoop","$elem","loopLeft","animationLoop","name","loop","delay","Number","addClass","each","Modernizr","cssanimations","delegateTarget","$survey","surveyID","parseInt","trigger","$eventSurvey","fn","extend","externalLinks","options","$link","attachHref","removeAttr","off","truncate","$this","containerHeight","height","contentHeight","$buttons","next","show","hide","formatTime","toFormat","datetimeString","data","format","formatted","push","$elm","forEach","obj","prettyTextOverflow","i","elm","isOverflowing","scrollWidth","innerWidth","trim","tooltip","validateURL","$form","$wooReq","woosendForm","inputErrorCounter","inputValTrim","val","$input","formValid","initWooFlyingMenu","wooTopPos","$topTmp","$wooFlyingMenu","leftNavigatorTooltip","offset","$leftNav","$rightPanel","bodyHeight","leftMenuHeight","footerHeight","outerHeight","scrollDifference","scrollY","isScrolledToEnd","isDesktop","_responsiveViewport","isDesktopLarge","isEnoughSpace","css","bottom","links","current","link","linkHref","screenPosition","currentHref","$element","isNaN","eq","_scrollTo2","scrollToElement","$maxContainer","$childsToSwitch","showless","prev","doc","documentElement","windowScrollPosition","pageYOffset","clientTop","containerTop","$addReportModal","firstTimeReview","popover","content","html","sectionJumper","onloadCaptcha","index","el","token","className","value","includes","grecaptcha","render","sitekey","String","size","badge","callback","callbackCaptcha","submit","querySelector","gRecaptchaScript","setAttribute","head","appendChild","zendesk","zEmbed","t","n","o","d","s","a","r","arguments","zE","title","role","frameElement","style","cssText","contentWindow","c","domain","_l","zendeskHost","zEQueue","body","write","close","setLocale","identify","externalId","initScoreChart","loadMoreReports","overviewTooltip","submitCancel","reasonChanged","remove","$reasonRadios","$checkedRadio","closest","after","feedback1Markup","feedback2Markup","feedback3Markup","feedback4Markup","feedback5Markup","feedback6Markup","feedback7Markup","validateForm","moreInvoicesButton","lessInvoicesButton","showMax","invoices","slice","toggle","errorMessage","message","$subUserAlert","checkUpgradeButton","remainingProjects","$upgradeButton","subusersLeft","ajaxAddRemoveUser","$context","deleting","originalData","ajax","cache","url","context","dataType","success","json","$subUserForm","userRemaining","removeUserInList","userWaitingStatus","newUser","error","jqXHR","textStatus","errorThrown","extra","currentWebsite","removeWaiting","$userLine","$subUserTable","addUserInList","$lastItem","$newItem","clone","isEmptyField","$deleteUserModal","serialize","$modal","userToRemove","bindCriteriumTapEvent","$body","FastClick","append","listenForScrollEvents","addEventListener","defaultMargin","_helpersResponsiveViewport","menuTop","Math","max","postMessage","opener","postHeight","lastModule","last","targetBlankLinks","highlighter","onMustacheLoaded","getMustacheFiles","loadingSentence","checkEmptyModuleSection","prettifyUrlInReviewLists","renderSettingBox","renderProject","counter","initDashboardFooter","calculTopBars","activeMenuItem","getParameterByName","cleanWooRankLinks","gotoGet","whlParam","renderCharts","competizeAll","isInsideReview","ispaidReview","isAdvancedReview","isSharedReview","compCriteriums","competitorUrls","allLinksTargetBlank","ajaxPjDataProxyUrl","location","pathname","initFlyingMenuInIframe","removeEventListener","getAttribute","then","clearInterval","isInside","initReportGeneration","$dashboard","loadMarketingTasks","dScreenshot","one","baseUrl","desktopScreenshot","screenshotBase","prepend","slideDown","fixInnerIssue","rgba2hex","colors","animate","customColor","toUpperCase","primaryDarker","g","b","mapColors","0","10","20","30","40","50","60","70","80","90","100","customColor2","customColor3","customColor4","Highcharts","theme","greyMedium","highchartsOptions","setOptions","chartColorsComp","heightTmp","paddingTmp","paddingTmp2","mustacheTemplates","mustacheMainTemplate","setDisplayYearly","showYearlyPrices","recaptchaResponseValidation","$createTicket","post","done","fail","chosenLink","changePlanLink","priceText","_validationPerformFieldValidation2","_validationClearErrorOnField2","response","serializeArray","lockForm","unlockForm","callbackAjax","handleValidationError","redirectTo","errorFields","fieldConcerned","item","$item","inputName","_validationShowErrorForField2","ajaxCall","params","xhrFields","withCredentials","handleLogin","password","$segmentationQuestions","stepCount","input","$questionBox","not","$billingForm","publicAPIKey","timeout","recurly","configure","updateBilling","_helpersGetParameterByName2","_registration2","recurlyToken","checked","_validateFields2","firstNameValue","lastNameValue","isFirstNameValid","isLastNameValid","paypalRecurlyToken","which","_updateForm2","keyup","vatField","clearTimeout","country","isValid","countryFromFront","countriesField","coupon","baseHref","chosenPlan","sendToRecurly","dealModal","$lists","$submit","$list","$listItems","$target","perfCascade","querySelectorAll","makeLegend","showIndicatorIcons","leftColumnWith","har","JSON","harSvg","fromHar","replaceWith","filterNotChanged","base","requiredFields","baseEntry","entry","saveForm","formIndex","$forms","Promise","resolve","result","Error","saveFormLogoAndSignature","$imageInputs","all","map","imageInput","file","files","imageReader","readAsBase64","$imageInput","postData","userId","logoData","templateId","templateLang","toArray","saveForms","$pdfEditorContainer","$mobileLanguageSelector","$editModal","$wysiwyg","$saveButtons","$resetButtons","form","tab","summernote","toolbar","placeholder","modalContext","$button","relatedTarget","inputTargetName","code","$preview","siblings","substr","results","generationAjaxCall","$thisGenForm","replaceExtLink","halloween","batThrower","number","floor","random","Particule","generate","range","startDate","endDate","period","isInHalloweenPeroid","contains","$logo","canTrigger","diag","sqrt","pow","innerHeight","origin","x","clientX","y","clientY","end","directionX","round","prototype","$div","angle","PI","atan2","rotate","transform","join","left","visibility","translate","scale","dist","time","timeRandom","transition","fadeOut","newYear","newYearPeriod","console","log","toString","args","Array","call","substring","unshift","apply","centerOptionsContent","isTablet","viewport","genbarWidth","width","outerWidth","fullPagePanel","bool","scrollTo","genbarButtonType","$genbar","primary","genbarValidation","$thisGenBar","$requiredInput","isEmptyRequest","generationBarHeader","$allInputs","$genbarInHeader","$topSubmitButton","$topInput","touchEvent","openOptions","closeOptions","toggleOptions","focus","searchDuplicateInputsValues","$thisOptions","charCode","toggleMobileGenbar","$data","urlToReGenerate","competitorOne","competitorTwo","competitorThree","first","$isPopup","showFixedTopNavBar","topOffset","$genBarTop","bottomOffset","$genBarBottom","scroll","$fixedTopNavBar","ready","$modalGenbar","$thisModalGenbar","$competitors","isCompetitorVisible","setCookie","days","expires","date","setTime","getTime","toGMTString","escape","getCookie","pair","string","unescape","eraseCookie","erase","reWeburl","test","RegExp","getElementTopOffset","headerOffset","flyingMenuOffset","abs","speed","easing","destination","layoutOffset","stop","screenXl","screenLg","screenMd","screenSm","screenXs","isMobileSmall","$holder","getOptions","resize","$checkboxes","checkbox","$checkbox","isChecked","expr","valueEmpty","competitorValue","$inputsAvailable","handleFBSyncEvent","$container","showOnRes","hideOnRes","syncedText","handleGASyncEvent","webPropertyId","$showOnRes","$hideOnRes","$syncedText","handleGWTSyncEvent","gwtAccountEmail","gwtSite","windowOpen","dataURL","handlers","auth-ga","auth-gwt","auth-fb","handler","authUrl","setCompetitors","projectUrl","competitors","apiURL","_bluebird2","reason","setEmailSubscriptions","subscriptions","$competitorInputs","$competitorBtnSave","$emailSubscriptionsForm","$emailSubscriptionsBtnSave","reduce","acc","Object","assign","_defineProperty","initScoreCircle","$score","widthHeight","radius","holder","score","padding","nextStep","$newItems","reportsPerCall","reviews","$deleteButton","deleteAdvancedReview","$createModal","$confirmButton","$createLinks","$deleteModal","$deleteBtnLinks","isExtensionVisible","$extentionLink","extentionURL","$hiddenForm","$siteInput","site","overviewResetExpertStatus","expertStatus","$expertsBox","separator","ipadUrl","$moduleItem","moduleId","moduleTitle","encodeURI","iframe","removeChild","doHighlight","contentLength","whlOverlay","whlBody","whlHighlighted","caseExit","$blockToHl","prop","setSelectionRange","mustachePromise","templatePromises","rel","deferred","Deferred","loadMustache","template","templateData","templates","main","Mustache","compilePartial","reject","promise","when","loadingSentenceLiI","listOfCriteriums","loadingSentenceLi","$loading","loadingSentenceLiIInterval","setInterval","$moduleNavLink","$reportContent","$module","$sectionNav","$sectionLink","$sectionsToCheck","sectionSelector","prettifyBigUrls","lastPart","middle","newContent","splitted","$template","mustacheName","getSettingsDataFor","getJSON","resolveDataURL","info","young","dataset","currentMod","modTmp","waypointUrl","waypointTimer","sendMenuItemToApp","regexS","regex","exec","search","decodeURIComponent","partElm","$part","_error","charts","line","geo","pie","genderAge","slideToggle","getCriteriumData","removeExtLinks","marginTop","$dirs","classTmp","newHref","$anchor","children","is","hexColor","white","grey","greySmoke","greylight","greyDark","greyDarker","warning","black","performFieldValidation","$elements","valTmp","clearErrorOnField","showErrorForField","validateEmailAddress","performMailCheckJs","getResponse","execute","$trialCTA","textClass","textMsg","$parent","$msgContainer","registration","err","getSubmitText","callSubscribeOnFront","description","paypal","couponCode","accountCode","companyName","countryCode","vatNumber","currency","creditCard","plan_code","coupon_code","account_code","company_name","country_code","vat_number","credit_card","recurly_token","validationErrors","submitText","handleValidation","$field","pricingFields","refreshPrice","validCoupon","validVat","validateFields","$validationField","validationType","validation","vatCheckRequest","tos","required","creditCardNumber","cardNumber","validate","creditCardExpiration","expirationMonth","expirationYear","expiry","creditCardCVV","cvv","vatCheck","vat","vatCleaned","abort","valid","hasOwnProperty","couponCheck","key","updateForm","validations","priceTimeout","_getPrice2","_activateTooltip2","_updateSubmitButton2","define","amd","f","global","u","_dereq_","l","1","any","promises","ret","SomePromiseArray","setHowMany","setUnwrap","_SomePromiseArray","2","Async","_isTickUsed","_lateQueue","Queue","_normalQueue","_trampolineEnabled","drainQueues","_drainQueues","_schedule","schedule","isStatic","AsyncInvokeLater","receiver","arg","_queueTick","AsyncInvoke","AsyncSettlePromises","_pushOne","firstLineError","util","disableTrampolineIfNecessary","hasDevTools","enableTrampoline","haveItemsQueued","throwLater","invokeLater","invoke","settlePromises","_settlePromises","invokeFirst","_drainQueue","queue","shift","_reset","./queue.js","./schedule.js","./util.js","3","INTERNAL","tryConvertToPromise","rejectThis","_","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","thisArg","_isPending","_resolveCallback","bindingRejected","maybePromise","_propagateFrom","_target","_setBoundTo","_progress","_bitField","_boundTo","_isBound","4","noConflict","bluebird","old","./promise.js","5","cr","create","callerCache","getterCache","ensureMethod","methodName","classString","TypeError","caller","namedGetter","indexedGetter","getGetter","canEvaluate","isIdentifier","$_len","$_i","propertyName","getter","isIndex","maybeGetter","6","errors","CancellationError","_cancel","isCancellable","promiseToReject","_cancellationParent","_unsetCancellable","_rejectCallback","cancel","cancellable","_cancellable","_setCancellable","uncancellable","fork","didFulfill","didReject","didProgress","./async.js","./errors.js","7","CapturedTrace","_parent","_length","captureStackTrace","uncycle","reconstructStack","stacks","removeDuplicateOrEmptyJumps","splice","removeCommonRoots","currentLastIndex","currentLastLine","commonRootMeetPoint","j","cleanStack","stack","isTraceLine","stackFramePattern","isInternalFrame","shouldIgnore","indentStackFrames","charAt","stackFramesAsArray","formatNonError","str","stringify","snip","maxChars","parseLineInfo","matches","match","parseLineInfoRegex","fileName","warn","bluebirdFramePattern","formatStack","inherits","nodes","stackToIndex","node","currentStack","cycleEdgeNode","currentChildLength","hasParent","attachExtraTrace","__stackCleaned__","parsed","parseStackAndMessage","trace","notEnumerableProp","formatAndLogError","unhandledRejection","isSupported","fireRejectionEvent","localHandler","localEventFired","globalEventFired","fireGlobalEvent","domEventFired","fireDomEvent","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","lastIndex","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","isNode","process","emit","customEventWorks","anyEventWorks","ev","CustomEvent","createEvent","initCustomEvent","dispatchEvent","detail","bubbles","cancelable","toWindowMethodNameMap","method","stderr","isTTY","8","NEXT_FILTER","CatchFilter","instances","_instances","_callback","_promise","safePredicate","predicate","safeObject","retfilter","tryCatch","errorObj","keys","doFilter","cb","boundTo","_boundValue","len","itemIsErrorType","shouldHandle","./es5.js","9","isDebugging","Context","_trace","peekContext","createContext","contextStack","_pushContext","_popContext","_peekContext","unhandledRejectionHandled","possiblyUnhandledRejection","getDomain","_getDomain","Warning","canAttachTrace","debugging","_ignoreRejections","_unsetRejectionIsUnhandled","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejection","_notifyUnhandledRejectionIsHandled","_isRejectionUnhandled","_getCarriedStackTrace","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_setCarriedStackTrace","capturedTrace","_fulfillmentHandler0","_isCarryingStackTrace","_captureStackTrace","_attachExtraTrace","ignoreSelf","_warn","ctx","onPossiblyUnhandledRejection","onUnhandledRejectionHandled","longStackTraces","hasLongStackTraces","11","isPrimitive","returner","thrower","returnUndefined","throwUndefined","wrapper","action","thenReturn","thenThrow","12","PromiseReduce","13","subError","nameProperty","defaultMessage","SubError","constructor","OperationalError","cause","_TypeError","_RangeError","es5","Objectfreeze","freeze","TimeoutError","AggregateError","RangeError","methods","defineProperty","configurable","writable","enumerable","level","indent","lines","errorTypes","RejectionError","14","isES5","getDescriptor","getOwnPropertyDescriptor","names","getOwnPropertyNames","getPrototypeOf","isArray","propertyIsWritable","descriptor","has","proto","ObjectKeys","ObjectGetDescriptor","ObjectDefineProperty","desc","ObjectFreeze","ObjectGetPrototypeOf","ArrayIsArray","15","PromiseMap","filter","16","returnThis","throwThis","return$","throw$","promisedFinally","reasonOrValue","isFulfilled","finallyHandler","isRejected","tapHandler","_passThroughHandler","isFinally","promiseAndHandler","lastly","tap","17","apiRejection","promiseFromYieldHandler","yieldHandlers","traceParent","PromiseSpawn","generatorFunction","yieldHandler","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","concat","_run","_next","_continue","_throw","coroutine","PromiseSpawn$","generator","spawn","addYieldHandler","18","PromiseArray","spread","19","MappingPromiseArray","limit","_filter","constructor$","_preservedValues","_limit","_inFlight","_queue","EMPTY_ARRAY","_init$","concurrency","isFinite","PENDING","_init","_promiseFulfilled","values","_values","preservedValues","_isResolved","_proxyPromiseArray","_isFulfilled","_reason","_value","_totalResolved","_resolve","booleans","_resolveFromSyncValue","attempt","21","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","adapter","22","progressed","progressValue","_isFollowingOrFulfilledOrRejected","_progressUnchecked","_progressHandlerAt","_progressHandler0","_doProgressWith","progression","progress","_promiseAt","_receiverAt","_promiseProgressed","23","resolver","_rejectionHandler0","_promise0","_receiver0","_resolveFromResolver","fillTypes","p","makeSelfResolutionError","reflect","PromiseInspection","msg","UNDEFINED_BINDING","APPLY","PromiseResolver","nodebackForPromise","_nodebackForPromise","caught","catchInstances","catchFilter","_setIsFinal","isResolved","toJSON","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","fromNode","defer","pending","cast","_fulfillUnchecked","fulfilled","rejected","setScheduler","internalData","haveInternalData","_setIsMigrated","callbackIndex","_addCallbacks","_isSettlePromisesQueued","_settlePromiseAtPostResolution","_settlePromiseAt","_isFollowing","_setLength","_setFulfilled","_setRejected","_setFollowing","_isFinal","_unsetIsMigrated","_isMigrated","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallbacks","follower","fulfill","_setProxyHandlers","promiseSlotValue","promiseArray","shouldBind","_fulfill","propagationFlags","_setFollowee","_rejectUnchecked","synchronous","shouldNotMarkOriginatingFromRejection","markAsOriginatingFromRejection","ensureErrorObject","hasStack","_settlePromiseFromHandler","_isRejected","_followee","_cleanValues","flags","carriedStackTrace","isPromise","_clearCallbackDataAtIndex","_promiseRejected","_setSettlePromisesQueued","_unsetSettlePromisesQueued","_queueSettlePromises","_rejectUncheckedCheckError","version","toFastProperties","./any.js","./bind.js","./call_get.js","./cancel.js","./captured_trace.js","./catch_filter.js","./context.js","./debuggability.js","./direct_resolve.js","./each.js","./filter.js","./finally.js","./generators.js","./join.js","./map.js","./method.js","./nodeify.js","./progress.js","./promise_array.js","./promise_resolver.js","./promisify.js","./props.js","./race.js","./reduce.js","./settle.js","./some.js","./synchronous_inspection.js","./thenables.js","./timers.js","./using.js","24","toResolutionValue","resolveValueIfEmpty","__hardReject__","_resolveEmptyArray","getActualLength","shouldCopyValues","25","isUntypedError","wrapAsOperationalError","rErrorKey","wrapped","maybeWrapAsError","haveGetters","26","propsFilter","noCopyPropsPattern","isPromisified","__isPromisified__","hasPromisified","suffix","getDataPropertyOrDefault","defaultPromisified","checkValid","suffixRegexp","keyWithoutAsyncSuffix","promisifiableMethods","inheritedDataKeys","passesDefaultFilter","defaultFilter","makeNodePromisifiedClosure","promisified","THIS","defaultThis","withAppended","promisifyAll","promisifier","escapeIdentRegex","promisifiedKey","makeNodePromisified","promisify","makeNodePromisifiedEval","noCopyProps","copyDescriptors","isClass","./errors","27","PropertiesPromiseArray","props","castValue","isObject","keyOffset","28","arrayMove","srcIndex","dst","dstIndex","capacity","_capacity","_front","_willBeOverCapacity","_checkCapacity","_unshiftOne","front","wrapMask","_resizeTo","oldCapacity","29","race","raceLater","array","ReductionPromiseArray","accum","_each","_zerothIsAccum","_gotAccum","_reducingIndex","_valuesPhase","_accum","initialValue","valuesPhaseIndex","isEach","gotAccum","valuesPhase","31","noAsyncScheduler","MutationObserver","GlobalSetImmediate","setImmediate","ProcessNextTick","nextTick","isRecentNode","navigator","standalone","div","observe","attributes","classList","./util","32","SettledPromiseArray","_promiseResolved","inspection","settle","33","_howMany","_unwrap","_initialized","some","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","count","_addFulfilled","_fulfilled","_addRejected","_rejected","34","isPending","35","isAnyBluebirdPromise","getThen","doThenable","hasProp","resolveFromThenable","rejectFromThenable","progressFromThenable","36","successClear","handle","failureClear","afterTimeout","afterValue","ms","37","inspectionMapper","inspections","castPreservingDisposable","thenable","_isDisposable","_getDisposer","_setDisposable","dispose","resources","iterator","tryDispose","disposerSuccess","disposerFail","Disposer","_data","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","resource","doDispose","_unsetDisposable","using","spreadArgs","disposer","vals","_disposer","38","tryCatcher","tryCatchTarget","maybeError","safeToString","appendee","defaultValue","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","thisAssignmentPattern","rident","filledRange","prefix","ignore","from","to","Child","Parent","T","excludedPrototypes","Function","isExcludedProto","getKeys","visitedKeys","enumeration","chrome","loadTimes","versions","P","readAsDataURL","FileReader","reader","onload","change","isPopup","renderPopup","isNumber","thing","getElementType","ELEMENT_TYPE","CIRCLE","PATH","polarToCartesian","centerX","centerY","angleInDegrees","angleInRadians","cos","sin","hsb2hsl","hsb","lightness","saturation","blackness","divider","hue","getColorByPercentage","scoreValue","percentize","num","ZERO_COLOR","hsl","getArcPath","endAngle","min","start","largeArcFlag","createPath","svg","pathType","color","path","createElementNS","SVG_NAMESPACE","strokeSize","createSvg","clearPaths","drawInitial","animateTo","targetScore","drawOptions","inout","k","updateScore","newScore","currentElement","currentScore","nextElement","update","step","timestamp","animationId","activeAnimationId","ANIMATION_DURATION","initialScore","delta","difference","requestAnimationFrame","updateScoreValue","scoreElement","wooCounter","roundScore","clear","oldPath","getPercentageFromElement","initWooCounter","initialOptions","percentage","finalizeWooCounter","rank","rankText","finalize","toggleInlineModal","wooGreenBar","wooOrangeBar","wooRedBar","greenCounter","orangeCounter","redCounter","totalCounter","isPdf","competizeSocialImpact","competizeSharedCount","competizeBacklinks","initCompTabs","dashboardTooltip","dashboardProgressStatus","loadMarketingMustaches","renderMarketingTasks","mappingModules","tasksPromise","mustachesPromise","projectTaskUrl","isAdvanced","mustaches","tasks","getTasksUrl","criterum-ids","getBadCriteriaIds","beforeSend","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","run","Item","noop","argv","addListener","once","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","h","add","hasChildNodes","lastChild","removeChildren","hasHeader","getHeader","v","m","q","DOMParser","parseFromString","firstChild","noTls","err3xx","err4xx","err5xx","plain","other","javascript","image","font","flash","video","audio","authority","fragment","query","scheme","resourceUrlFormatter","roundNumber","isInStatusCodeRange","toUTCString","toLocaleString","w","z","parseAndFormat","parseNonEmpty","parseDate","parseNonNegative","parsePositive","formatMilliseconds","formatSeconds","formatDateLocalized","formatBytes","\"","&","'","<",">","escapeHtml","toInt","validateOptions","./misc","tagName","setAttributeNS","textContent","cloneNode","textShadow","getBBox","newSvg","newG","newClipPath","newForeignObject","newA","newRect","newLine","newTitle","newTextEl","z-index","parentElement","getNodeTextWidth","./dom","innerHTML","default","selectedPage","createWaterfallSvg","getSelectedPage","onPageUpdate","replaceChild","pageSelector","initPagingSelectBox","legendHolder","transformDoc","__assign","rowHeight","showAlignmentHelpers","showMimeTypeIcon","fromPerfCascadeFormat","transformHarToPerfCascade","./helpers/parse","./legend/legend","./paging/paging","./transformers/har","./waterfall/svg-chart","selectedPageIndex","onPageUpdateCbs","pages","getPageCount","getSelectedPageIndex","setSelectedPageIndex","display","Option","../helpers/dom","startedDateTime","statusText","serverIPAddress","connection","_priority","_initialPriority","_was_pushed","_initiator","_initiator_line","request","headers","_ip_addr","_client_port","_expires","_cache_time","_cdn_provider","_objectSize","_bytesIn","_bytesOut","_jpeg_scan_count","_gzip_total","_gzip_save","_minify_total","_minify_save","_image_total","_image_save","httpVersion","headersSize","bodySize","comment","queryString","_contentType","compression","redirectURL","timings","blocked","dns","connect","ssl","send","wait","receive","general","requestHeaders","responseHeaders","../helpers/har","../helpers/parse","mimeType","icon","documentIsSecure","collectIndicators","../helpers/misc","makeDefinitionList","tabClass","renderContent","makeTabs","./extract-details-keys","./helpers","creator","transformPage","_all_end","mimeToRequestType","createWaterfallEntry","pageTimings","entries","pageref","sort","startTime","docIsTLS","durationMs","marks","_ssl_start","_ssl_end","createWaterfallEntryTiming","makeMimeTypeIcon","rowClass","makeRowCssClasses","indicators","requestType","statusCode","./har-heuristics","./har-tabs","total","segments","responseDetails","tabs","makeIcon","../waterfall/row/svg-indicators","requestTypeToCssClass","timingTypeToCssClass","createDetailsBody","overlayHolder","openOverlays","getCombinedOverlayHeight","openOverlay","defaultY","onClose","closeOverlay","openTabIndex","renderOverlays","pubSub","publishToOverlayChanges","combinedOverlayHeight","realignBars","toggleOverlay","getOverlayOffset","createRowInfoOverlay","getNamedItem","getBoundingClientRect","actualY","../../helpers/dom","./svg-details-overlay","subscribers","subscribeToOverlayChanges","dx","dy","rx","ry","getElementsByClassName","../../helpers/svg","./html-details-body","getIndicatorIcons","unit","label","showOverlay","hideOverlay","cssClass","textAnchor","text-anchor","clipPath","opacity","clientWidth","createRect","createRequestNumberLabel","createRequestLabelClipped","createRequestLabelFull","appendRequestLabels","createBgStripe","createNameRowBg","createRowBg","../../helpers/misc","../../transformers/styling-converters","A","B","C","D","createRow","../../helpers/icons","./svg-indicators","./svg-row-subcomponents","endline","x1","x2","y1","y2","startline","onMouseEnterPartial","baseVal","valueInSpecifiedUnits","valueAsString","onMouseLeavePartial","createAlignmentLines","makeHoverEvtListeners","ceil","diagramHeight","createTimeScale","createBgRect","createMarks","LN10","overlayManager","../helpers/svg","../transformers/styling-converters","./details-overlay/overlay-manager","./details-overlay/pub-sub","./row/svg-row","./sub-components/svg-alignment-helper","./sub-components/svg-general-components","./sub-components/svg-marks","_wooGlobal2","encodeURIComponent","inputArray","valueArray","arrayOfDuplicates","inArray","Detectizr","detect","device","settingsInReviewUrl","generatedHtml","displayBox","mustache","bindEventOnSettingsBox","iframe2","adjustLegendSymbolRadius","chart","series","originalRadius","legendSymbol","originalX","originalY","renderLineChart","chartConfig","buildChartConfig","renderTo","Chart","renderPieChart","legend","verticalAlign","renderGenderAgeChart","renderGeoChart","$map","primaryColor","secondaryColor","defaultColor","vectorMap","backgroundColor","scaleColors","borderColor","borderWidth","borderOpacity","hoverColor","selectedColor","enableZoom","showTooltip","renderChart","plotOptions","animation","critsOnSocket","isComp","objTmp","startSocketGeneration","$suggest","suggestTextData","mailcheck","suggested","suggestion","full","empty","re","getPrice","subsciptionCode","euCountries","pricing","quantity","address","tax","tax_code","price","subtotal","Pricing","activateToolTip","updateSubmitButton","formIsValid","resetModal","$modalBody","$modalLoader","initListeners","$trialCta","newHeight","$iFrame","$modalReview","history","pushState","back","isShown","generationBarPopup","border","evt","$html","closeAllInlineModal","dataLength","graphTmp","percent","progressBarHtml","totalTmp","$content","$comp","putSidInArray","addMainDataInSiComp","addTabsForSiComp","graph_progressbar","htmlclass","prettifyBigNumbers","criteria","allProgressBars","getValue","tabsBar","tabsContent","nextAll","activeIndex","clicked","tooltipOptions","shortUrl","fadeTo","wooPre","trimmedResult","mustachesToLoad","mustacheDefinition","mustachesMap","tasksJson","tasksDone","$marketingChecklist","updateProgressBar","stats","renderFilter","marketingTasksFilter","categories","tasksList","task","autochecked","renderTasksDone","quickTipCriterium","renderTasks","marketingTasks","bindEvents","addTopPrioritiesLabelText","toggleTasks","moduleMapping","$subObj","badcriteriaIds","criteriumName","Kicksend","threshold","defaultDomains","defaultTopLevelDomains","opts","domains","topLevelDomains","distanceFunction","sift3Distance","suggest","emailParts","splitEmail","closestDomain","findClosestDomain","closestTopLevelDomain","topLevelDomain","lastIndexOf","minDist","s1","s2","offset1","offset2","lcs","parts","domainParts","tld","oldSuggested","oldEmpty","projectId","slideUp","$settingsForm","saveSettingsInReviewUrl","reload","cHref","highchartsTheme","truncateFormatter","defaults","defaultSeriesType","align","layout","margin","floating","labelFormatter","states","hover","allowPointSelect","cursor","shadow","showInLegend","center","dataLabels","marginRight","marginLeft","marginBottom","xAxis","dateTimeLabelFormats","day","lineColor","tickWidth","minPadding","maxPadding","yAxis","gridLineWidth","lineWidth","minRange","endOnTick","allowDecimals","labels","formatter","sign","spline","groupPadding","stickyTracking","symbol","connectNulls","gender-age-chart","points","point","shared","column","stacking","pointWidth","hours","minutes","seconds","dateFormat","enableMouseTracking","overwrites","generationComplete","critMap","receiveCriterium","updateBuffer","buffer","updateCrits","connectParams","socket","io","socketSUrl","qs","updateBufferThrottled","throttle","disconnect","intialized","generateAllCrits","decode","encode","replacedInner","inner","p1","p2","p3","returnStr","beginStr","numberLength","numberLoop","numberRest","putSIDataInArray","medias","tmp","thisTmp","addTabsForSIComp","innerHtml","visualUrl","addMainDataInSIComp","visualBaseUrl","visualCompUrl","objUrl","baseData","compData","maxUrlLength","baseTd","compTd","socialMediaObj","socialMediaName","baseInt","compInt","tasksHtml","reportUrl","$bar","checkedTotal","aria-valuemin","aria-valuenow","aria-valuemax","data-autochecked","data-checked","data-percent","data-all","filterHtml","filterData","disabled","$activeTasks","$activeTasksFiltered","$tasksList","$tasks","showToDo","allTasksDone","hideMoreOrLessLinks","showMoreBehaviour","filterBehaviour","$taskContainer","$checkElem","checkBehaviour","sep","maxKeys","kstr","vstr","idx","xs","res","stringifyPrimitive","objectKeys","ks","func","leading","trailing","FUNC_ERROR_TEXT","debounce","maxWait","lookup","uri","source","sameNamespace","nsps","newConnection","forceNew","multiplex","Manager","encodeQueryString","parser","managers","protocol","Socket","fonts","fontFamily","fontSize","fontWeight","plotBackgroundColor","plotBorderWidth","plotShadow","credits","gridLineColor","itemStyle","itemHoverStyle","itemHiddenStyle","toUpdate","rawCrit","crit","aggregateCompetitors","checkEmptyModules","generationParams","channel","client","totalRequestedCrits","curentGeneratedCrits","curentNPVal","selector","currentWebsiteData","currentWebsiteShort","clist","loadMustachesFiles","insertInHtml","loc","host","parseuri","port","ipv6","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","jitter","readyState","connecting","lastPing","encoding","packetBuffer","encoder","Encoder","decoder","Decoder","autoConnect","eio","Emitter","emitAll","nsp","updateSocketIds","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","skipReconnect","openSub","onopen","errorSub","cleanup","timer","destroy","onping","onpong","ondata","ondecoded","packet","onerror","onConnecting","encodedPackets","processPacketQueue","pack","subsLength","reset","onclose","duration","onreconnect","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","hasBin","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","ping","pong","subEvents","parserType","EVENT","BINARY_EVENT","compress","CONNECT","onpacket","onconnect","onevent","ACK","BINARY_ACK","onack","DISCONNECT","ondisconnect","ERROR","ack","sent","emitBuffered","timeoutId","maxTimeoutId","lastCalled","trailingCall","complete","isCalled","now","delayed","remaining","stamp","maxDelayed","debounced","leadingCall","nativeMax","getNative","nativeNow","useColors","firebug","exception","table","userAgent","$1","formatArgs","namespace","humanize","diff","lastC","save","namespaces","storage","removeItem","load","DEBUG","localstorage","localStorage","local","formatters","enable","encodeAsString","attachments","encodeAsBinary","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","buffers","removeBlobs","reconstructor","decodeString","types","buf","tryParse","BinaryReconstructor","reconPack","isBuf","base64","takeBinaryData","finishedReconstruction","binData","reconstructPacket","allDone","tasksLeft","$showMore","activeFilter","showLess","check","category","taskId","checkUrl","taskDone","$filter","filterTaskByCategory","selectColor","prevColor","curr","prevTime","coerce","skips","disable","_deconstructPacket","_placeholder","newData","packetData","_reconstructPacket","_removeBlobs","curKey","containingObject","Blob","File","pendingBlobs","fileReader","readAsArrayBuffer","Buffer","isBuffer","ArrayBuffer","mixin","_callbacks","callbacks","hasListeners","ipv6uri","arr","factor","rand","deviation","list","hasBinary","_hasBinary","isObjectLike","object","isNative","isFunction","objToString","funcTag","reIsNative","fnToString","reIsHostCtor","objectProto","isComplete","isMain","hasParts","hasComps","nrOfComps","nrResolved","rendered","renderParts","part","rawHtml","objectId","hidden","isEmpty","htmlContent","$htmlContent","initEvent","runInContext","undef","serialized","stringifySupported","isExtended","getClass","parseSupported","root","SyntaxError","nativeJSON","isProperty","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","charIndexBuggy","Months","getDay","year","month","property","members","__proto__","original","Properties","valueOf","isConstructor","hasProperty","objectTypes","Escapes","92","toPaddedString","quote","useCharIndex","symbols","charCodeAt","properties","whitespace","indentation","milliseconds","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","lex","begin","isSigned","hasMembers","walk","isLoader","function","freeExports","nodeType","freeGlobal","previousJSON","isRestored","JSON3","parseFloat","fmtShort","fmtLong","plural","long","hostname","secure","agent","parseqs","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","timestampParam","timestampRequests","transports","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","extraHeaders","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","parsejson","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","setTransport","onDrain","onPacket","onError","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","onOpen","onHandshake","setPing","filterUpgrades","onHeartbeat","sendPacket","cleanupAndClose","waitForUpgrade","filteredUpgrades","doOpen","doClose","packets","onData","decodePacket","polling","xd","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","short","encodeBase64Object","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","tryDecode","utf8","ary","sliceBuffer","base64encoder","isAndroid","isPhantomJS","packetslist","utf8encode","encoded","b64","b64data","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","encodePayload","setLengthHeader","encodeOne","doneCallback","isBinary","encodePayloadAsBlob","encodePayloadAsArrayBuffer","decodePayload","decodePayloadAsBinary","chr","totalLength","resultArray","bufferIndex","isString","ab","view","lenStr","binaryIdentifier","lengthAry","blob","bufferTail","numberTooLong","tailArray","msgLength","hasCORS","XDomainRequest","Polling","requestTimeout","Request","unloadHandler","requests","inherit","doWrite","req","sendXhr","doPoll","pollXhr","xhr","setDisableHeaderCheck","setRequestHeader","responseType","hasXDR","onLoad","responseText","onreadystatechange","requestsCount","onSuccess","fromError","contentType","getResponseHeader","ui8Arr","dataArray","attachEvent","JSONPPolling","___eio","rNewline","rEscapedNewline","insertAt","initIframe","iframeId","area","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocket","NodeWebSocket","yeast","MozWebSocket","ws","supports","addEventListeners","onmessage","schema","taskElement","counterModifier","updateFilterBadges","updateFilterStatus","showDone","rvalidchars","rvalidescape","rvalidtokens","rvalidbraces","rtrimLeft","rtrimRight","qry","pairs","hasXHR2","poll","onPause","callbackfn","ucs2decode","output","ucs2encode","stringFromCharCode","createByte","codePoint","encodeCodePoint","wtf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","wtf8decode","freeModule","wtf8","arraybuffer","bytes","abv","ii","err_cb","proxy","bail","mapArrayBufferViews","chunk","copy","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","blobSupportsArrayBufferView","blobBuilderSupported","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","alphabet","decoded","seed","$filterItem","filterItemCount","filterTotal","filterDone"],"mappings":"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","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","'use strict';\n\nvar $ = window.jQuery;\nvar universalGA = require('./analytics/googleAnalyticsEvents');\nvar intercom = require('./analytics/intercom');\nvar raven = require('./analytics/raven');\nvar genbar = require('./genbar/genbar');\nvar exitPages = require('./exit-pages/exitPages');\n\n// Analytics\nraven.init();\nuniversalGA.init();\nintercom.init();\n\n// Elev.io widget helper\nrequire('./elevio/elevio');\n\n// Exit page strategy\nexitPages();\n\n// Boostrap JS extended\nrequire('./bootstrap-extended/mobile-nav');\nrequire('./bootstrap-extended/animations');\nrequire('./bootstrap-extended/tooltip-closer');\n\n// Call To Action & Surveys\nrequire('./callToAction/survey');\n\n// Seasonal Event\nrequire('./seasonal-events/halloween-2015/halloween')();\nrequire('./seasonal-events/new-year-2015/new-year')();\n\ngenbar.init();\n\nwindow.isMobile = window.isMobile || false;\n\n// fix cors for ie ?\n$.support.cors = true;\n\nif (typeof window.moment !== 'undefined') {\n  window.moment.locale(window.wooGlobal.language);\n}\n\n// Jquery Plugins\nrequire('./jquery-plugins/externalLinks');\nrequire('./jquery-plugins/truncate');\nrequire('./jquery-plugins/formatTime');\nrequire('./jquery-plugins/prettyTextOverflow');\n\n// Helpers\nrequire('./helpers/leftMenu');\nrequire('./helpers/validateForm');\nrequire('./helpers/toggleAccordion');\nrequire('./modals/firstTimeCookie');\nrequire('./helpers/wooPopover');\nrequire('./helpers/wooTooltip');\n\nif ($('body').hasClass('home')) {\n  require('./helpers/homepageScroll');\n  require('./g-recaptcha/recaptchaOnload');\n}\n\nif (!$('body').hasClass('pdf') && !$('body').hasClass('embed')) {\n  require('./zendesk/zendeskInit');\n}\n\nif ($('body').hasClass('gaprofiles') || $('body').hasClass('settings')) {\n  require('./settings/settings');\n}\n\nif ($('body').hasClass('overview')) {\n  require('./overview/overview');\n  require('./g-recaptcha/recaptchaOnload');\n}\n\nif ($('body').hasClass('user')) {\n  require('./user/cancelSubscription');\n  require('./user/toggleInvoices');\n}\n\nif ($('body').hasClass('subusers')) {\n  require('./subusers/subusers');\n}\n\nif (window.isMobile || $('body').hasClass('ipad')) {\n  require('./ipad/ipad');\n}\n\nif ($('body').hasClass('review')) {\n  require('./review/review');\n  require('./g-recaptcha/recaptchaOnload');\n}\n\nif ($('body').hasClass('generating')) {\n  require('./generate-socket/generateSocket');\n}\n\nif ($('body').hasClass('pdf')) {\n  require('./pdf/pdf');\n}\n\nif ($('body').hasClass('shared')) {\n  require('./shared/shared');\n}\n\nif ($('body').hasClass('pricing')) {\n  require('./pricing/pricing');\n  require('./g-recaptcha/recaptchaOnload');\n}\n\nif ($('body').hasClass('login')) {\n  require('./login/login');\n  require('./login/loginWithQuestions');\n}\n\nif ($('body').hasClass('register')) {\n  require('./register/register');\n}\n\nif ($('body').hasClass('plans')) {\n  require('./plans/plans');\n}\n\nif ($('body').hasClass('js-sync-popup')) {\n  require('./components/form-list');\n}\n\nif ($('body').hasClass('pdf-editor')) {\n  require('./pdf-editor/pdf-editor');\n}\n\nif ($('body').hasClass('error')) {\n  require('./review/error');\n}\n\nif ($('body').hasClass('first-generation-review-confirmation')) {\n  require('./g-recaptcha/recaptchaOnload');\n  require('./review/firstGenerationReview');\n}\n\nif ($('body').hasClass('woocms')) {\n  require('./g-recaptcha/recaptchaOnload');\n}\n\nuniversalGA.bind();\n\nrequire('./helpers/jsLoadEnd');\n","'use strict';\nvar slugify = require('../helpers/slugify');\nvar $ = window.jQuery;\nvar ga = window.ga || (() => {});\nvar gaTracker = require('./gaTracker');\n\nfunction initUniversal () {\n  if (window.wooGlobal.noAnalytics) {\n    window['ga-disable-' + window.wooGlobal.settings.analytics.account] = true;\n  }\n\n  if (window.wooGlobal.settings.analytics.account) {\n    ga('create', window.wooGlobal.settings.analytics.account, {'allowAnchor': true}); // 'auto' for default setting\n  }\n\n  if (window.wooGlobal.user.id) {\n    ga('set', 'dimension3', window.wooGlobal.user.id); // userId\n  }\n\n  if (window.wooGlobal.user.subscription.planCode) {\n    ga('set', 'dimension4', window.wooGlobal.user.subscription.planCode); // PlanCode\n  }\n\n  ga('require', 'GTM-KTSP88L'); // Google Optimize ID\n  ga('send', 'pageview');\n}\n\nfunction bindUniversal () {\n  var pageName = $('body').attr('data-page-name') || '';\n\n  // About page - social network links\n  $('body.about .about-share-button').on('click', function () {\n    var network = $('img', this).attr('alt').toLowerCase();\n    if (network === 'blog') {\n      gaTracker('about-blog');\n    } else {\n      gaTracker('about-follow-us-' + network);\n    }\n  });\n\n  // About press kit download link\n  $('body.about .description a:last').on('click', function () {\n    gaTracker('about-presskit-download');\n  });\n\n  // Developers page, extension links\n  $('body.developers .extension-btn').on('click', function () {\n    var extentionType = $(this).attr('data-type');\n    gaTracker('developers-extension-' + extentionType);\n  });\n\n  // Developers page, logo download\n  $('body.developers .dev-assets-imgs a').on('click', function () {\n    var logoType = $(this).attr('class');\n    gaTracker('developers-logo-' + logoType);\n  });\n\n  // Footer links\n  $('#footer a').on('click', function () {\n    var linkText = slugify($(this).text());\n    if ($(this).hasClass('footer-logo')) {\n      linkText = 'woorank-logo';\n    }\n    gaTracker('footer-' + linkText + '-on-page-' + pageName);\n  });\n\n  // Genbar Free trial behind option dropdown\n  $('#top .js-generation-bar-in-header .start-trial').on('click', function () {\n    gaTracker('free-trial-button', 'click', 'genbar-' + pageName);\n  });\n\n  // Genbar review button\n  $('#top .js-generation-bar-in-header .generation-bar-btn')\n    .on('click', function () {\n      gaTracker('button', 'click', 'genbar-review-' + pageName);\n    });\n\n  // Home page free trial button top and bottom\n  $('body.home .start-trial').on('click', function () {\n    var linkName = $(this).attr('name') || '';\n    var position = linkName.split('-').pop();\n    if (position.length < 1) {\n      gaTracker('free-trial-button', 'click', 'homepage-' + position);\n    }\n  });\n\n  // Home page genbars button\n  $('body.home .generation-bar').on('submit', function () {\n    var position = $(this).attr('id');\n    gaTracker('button', 'submit', 'homepage-' + position);\n  });\n\n  // Sign up button on page\n  $('#signup-container .link').on('click', function () {\n    gaTracker('button', 'click', 'signup-on-page-' + pageName);\n  });\n\n  // Signin header button\n  $('#login-container .link').on('click', function () {\n    gaTracker('button', 'click', 'signin-on-page-' + pageName);\n  });\n\n  // Jobs apply now button\n  $('body.jobs .js-apply-btn').on('click', function () {\n    var jobsTitle = slugify(\n      $(this).parents('.panel').find('.panel-title').text() || ''\n    );\n    if (jobsTitle.length < 1) {\n      jobsTitle = 'general';\n    }\n    gaTracker('button', 'click', 'jobs-apply-' + jobsTitle);\n  });\n\n  // Language dropdown links\n  $('#top .js-lang-dropdown a').on('click', function () {\n    var targetLang = $(this).attr('href').split('/')[1];\n    gaTracker('lang-dropdown-' + targetLang);\n  });\n\n  $('body.pricing .js-switch-yearly').on('click', function () {\n    gaTracker('pricing-yearly-tab');\n  });\n\n  $('body.pricing .js-switch-monthly').on('click', function () {\n    gaTracker('pricing-monthly-tab');\n  });\n\n  $('body.pricing .js-trial').on('click', function () {\n    gaTracker('pricing-trial-button');\n  });\n\n  $('body.pricing #create-ticket').on('click', function (event) {\n    gaTracker('pricing-contact-form');\n  });\n\n  $('body.pricing .js-skip').on('click', function (event) {\n    gaTracker('pricing-skip-paywall');\n  });\n\n  $('body.pricing .js-updowngrade .js-choose-plan').on('click', function (event) {\n    gaTracker('pricing-choose-plan');\n  });\n\n  // Pricing Free Trail premium/pro plan button\n  $('body.pricing .js-free-trail-plan').on('click', function () {\n    var plan = $(this).attr('data-plan');\n    gaTracker('free-trial-button', 'click', 'pricing-' + plan);\n  });\n\n  // Embed page logo\n  $('body.embed .logo-container').on('click', function () {\n    gaTracker('embed-page-logo');\n  });\n\n  // Embed page review button\n  $('body.embed .generation-bar-btn').on('click', function () {\n    gaTracker('embed-page-review-button');\n  });\n\n  // User header options links\n  $('#top #logged-container .dropdown-menu a').on('click', function () {\n    var href = $(this).attr('href') || '';\n    var linkTarget = href.split('/').pop();\n    gaTracker('user-header-options-' + linkTarget);\n  });\n\n  // User download extension button\n  $('body.overview .extension-link').on('click', function () {\n    var activeBrowser = window.wooGlobal.browser ||\n      $(this).attr('data-active-browser');\n    gaTracker('user-download-extension-' + activeBrowser);\n  });\n\n  // Genbar in options review button\n  $('#top .generation-bar .js-options-btn').on('click', function () {\n    gaTracker('button', 'click', 'genbar-in-options-review');\n  });\n\n  // Overview page options on advance report\n  $('body.overview #projects .options-container a').on('click', function () {\n    var option = slugify($(this).text());\n    gaTracker('overview-advance-options-' + option);\n  });\n\n  // Overview add report modal round + button\n  $('body.overview #reports .add-more-review').on('click', function () {\n    gaTracker('button', 'click', 'overview-add-report');\n  });\n\n  // Add report modal review button\n  $('#generation-bar-in-modal .btn-submit').on('click', function () {\n    gaTracker('button', 'click', 'add-report-modal-review-' + pageName);\n  });\n\n  // Overview pdf template editor link\n  $('body.overview .pdf-template-link').on('click', function () {\n    gaTracker('overview-pdf-template');\n  });\n\n  // Overview show more reports\n  $('body.overview .next-reports-loader .add-items').on('click', function () {\n    gaTracker('overview-show-more-report');\n  });\n\n  // Overview page options on reports\n  $('body.overview #reports .options-container a').on('click', function () {\n    var option = slugify($(this).text());\n    gaTracker('overview-report-options-' + option);\n  });\n\n  // Overview survey\n  $('body.overview .js-survey-btn').on('click', function () {\n    gaTracker('overview-survey');\n  });\n\n  // Subuser add user button\n  $('body.subusers .subuser-form .submit-button').on('click', function () {\n    gaTracker('subusers-add-user');\n  });\n\n  // Subuser remove user button\n  $('body.subusers .remove-user').on('click', function () {\n    gaTracker('subusers-remove-user');\n  });\n\n  // Subuser upgrade button\n  $('body.subusers #upgrade-button a').on('click', function () {\n    gaTracker('subusers-upgrade');\n  });\n\n  // Review dashboard share link\n  $('#dashboard-footer .social-sharing-container .inline-modal-opener')\n    .on('click', function () {\n      gaTracker('review-share');\n    });\n\n  // Review share to social links\n  $('#dashboard-footer .social-sharing-container .inline-modal a')\n    .on('click', function () {\n      var socialChannel = $(this).attr('class');\n      gaTracker('review-share-social-' + socialChannel);\n    });\n\n  // Review download pdf CTA\n  $('#dashboard-footer .pdf-download-container .start-trial')\n    .on('free-trial-button', 'click', function () {\n      gaTracker('review-dashboard-download-pdf-cta');\n    });\n\n  // Review download slides CTA\n  $('#dashboard-footer .slides-download-container .start-trial')\n    .on('free-trial-button', 'click', function () {\n      gaTracker('review-dashboard-slides-pdf-cta');\n    });\n\n  // Review criteria question mark click\n  $('body.review .criterium-advice-click').on('click', function () {\n    var criterium = $(this).parent('.criterium').attr('id');\n    gaTracker('review-criteria-info-on-' + criterium);\n  });\n\n  // Review Free-trial button CTA\n  $('body.review .review-cta').on('.show-modal', 'click', function (event) {\n    var criterium = $(event.delegatedTarget).attr('id');\n    gaTracker('free-trial-button', 'click', 'review-criterium-cta-on-' + criterium);\n  });\n\n  // Experts links on review\n  $('body.review .experts-banner .business-card').on('a', 'click', function () {\n    var expert;\n    var isExpert = !$(this).hasClass('see-all-experts');\n    expert = 'all-experts';\n    if (isExpert) {\n      expert = slugify($(this).text() || $(this).find('img').attr('alt') || '');\n    }\n    gaTracker('experts-in-review-' + expert);\n  });\n\n  // Experts become a expert link\n  $('body.review .experts-banner .experts-register').on('click', function () {\n    gaTracker('experts-become-a-expert');\n  });\n\n  // Marketing checklist item open\n  $('body.review .marketing-checklist .container-plus-minus')\n    .on('click', function () {\n      gaTracker('button', 'click', 'marketing-checklist-item');\n    });\n\n  // Marketing checklist show more CTA\n  $('body.review .marketing-checklist .container-checkbox')\n    .on('click', function () {\n      gaTracker('button', 'click', 'marketing-checklist-showmore-cta');\n    });\n\n  // Marketing checklist more info links\n  $('body.review .marketing-checklist .task-links')\n    .on('click', function () {\n      gaTracker('button', 'click', 'marketing-checklist-more-info-link');\n    });\n\n  // Marketing checklist call to actions\n  $('#marketing-checklist .fake-show-more').on('click', function () {\n    gaTracker('button', 'click', 'marketing-checklist-cta');\n  });\n\n  // Review criteria information links\n  $('body.review .criterium').on('criterium-advice a', 'click', function (event) {\n    var criterium = $(event.delegatedTarget).attr('id');\n    var href = $(this).attr('href');\n    var isWoorank = href.indexOf('woorank.com');\n    if (isWoorank) {\n      gaTracker('review-criteria-information-on-' + criterium);\n    } else {\n      gaTracker('review-criteria-information-affiliate-on-' + criterium);\n    }\n  });\n\n  // Review Domain avaibility affiliate links\n  $('body.review #criterium-tld_cybersquating_prevention a')\n    .on('click', function () {\n      gaTracker('review-domain-avaibility-book-it-now');\n    });\n\n  // Review technologies\n  $('body.review #criterium-technologies a').on('click', function () {\n    gaTracker('review-technolohies');\n  });\n\n  // Review left menu links\n  $('body.review #left-nav .inpage-link').on('click', function () {\n    var href = $(this).attr('href') || '';\n    var inPageLink = href.split('#').pop();\n    gaTracker('review-left-menu-' + inPageLink);\n  });\n\n  // Review dashboard settings link\n  $('body.review #dashboard-footer .settings-container')\n    .on('click', function () {\n      gaTracker('review-settings');\n    });\n\n  // Review download pdf\n  $('body.review #dashboard-footer .pdf-download-container')\n    .on('click', function () {\n      gaTracker('review-dashboard-download-pdf');\n    });\n\n  // Review download slides\n  $('body.review #dashboard-footer .slides-download-container')\n    .on('click', function () {\n      gaTracker('review-dashboard-download-slides');\n    });\n\n  // Review make advance review\n  $('body.review #dashboard-footer .make-advanced-review-container')\n    .on('click', function () {\n      gaTracker('review-dashboard-advanced-review');\n    });\n\n  // Review (advanced) competitors tabs\n  $('body.review .criterium').on('.tab', 'click', function (event) {\n    var criterium = $(event.delegatedTarget).attr('id');\n    gaTracker('review-competitors-tabs-on-' + criterium);\n  });\n\n  // Review (advanced) add tracks keywords link (to setting page)\n  $('body.review #module-pj_serp .part.text a').on('click', function () {\n    gaTracker('review-add-tracks-keywords');\n  });\n\n  // Review the regenerate button\n  $('body.review #dashboard .js-regenerate').on('click', function () {\n    gaTracker('review-regenerate');\n  });\n\n  // Review start advance review\n  $('body.review #left-nav .js-star-review').on('click', function () {\n    gaTracker('review-start-advance');\n  });\n\n  // Review dasboard site link\n  $('body.review #dashboard-site h1 a').on('click', function () {\n    gaTracker('review-site-link');\n  });\n\n  $('.call-to-action.survey').on('click', '.js-survey-btn', function () {\n    gaTracker('case-studies-survey');\n  });\n\n  $('.call-to-action.survey').on('click', '.close', function () {\n    gaTracker('case-studies-survey-close');\n  });\n\n  $('.exit-page-modal').on('click', 'a', function () {\n    gaTracker('exit-page-links-' + $(this).attr('id'));\n    if ($('body').hasClass('register')) {\n      let url = '/register/plan/v3prm?plan=v3pro&utm_source=woorank&utm_medium=creditcard&utm_campaign=exit_page';\n      gaTracker('exit-page-links-creditcard');\n      ga('set', 'page', url);\n      ga('send', 'pageview');\n    }\n  });\n\n  $('.exit-page-modal').on('click', '.close', function () {\n    // gaTracker('button', 'click', 'exit-page-close', null, true);\n    gaTracker('button', 'click', 'exit-page-close');\n  });\n\n  // *** Overview project buttons\n  // Project view btn\n  $('.project-view').on('click', function () {\n    gaTracker('overview-project-view-btn');\n  });\n\n  // Project SERP btn\n  $('.project-serp').on('click', function () {\n    gaTracker('overview-project-serp-btn');\n  });\n\n  // Project PDF btn\n  $('.project-pdf').on('click', function () {\n    gaTracker('overview-project-pdf-btn');\n  });\n\n  // Project Slides btn\n  $('.project-slides').on('click', function () {\n    gaTracker('overview-project-slides-btn');\n  });\n\n  // Project settings btn\n  $('.project-settings').on('click', function () {\n    gaTracker('overview-project-settings-btn');\n  });\n\n  // Project delete btn\n  $('.project-delete').on('click', function () {\n    gaTracker('overview-project-delete-btn');\n  });\n\n  // *** Overview report buttons\n  // Report view btn\n  $('.report-view').on('click', function () {\n    gaTracker('overview-reports-view-btn');\n  });\n  // Report start project btn\n  $('.report-startproject').on('click', function () {\n    gaTracker('overview-reports-startproject-btn');\n  });\n\n  // Report download pdf btn\n  $('.report-pdf').on('click', function () {\n    gaTracker('overview-report-pdf-btn');\n  });\n\n  // Report download slides btn\n  $('.report-slides').on('click', function () {\n    gaTracker('overview-report-slides-btn');\n  });\n\n  // Free review banner CTA\n  $('.free-rev-banner').on('click', function () {\n    gaTracker('free-review-banner-cta');\n  });\n\n  // Blog sidebar call-to-action\n  $('body.woocms .call-to-action.woorank-boost-cta').on('click', function (e) {\n    gaTracker('blog-boost-your-traffic-cta');\n  });\n\n  // popup modal review\n  $('#generation-bar-modal').on('show.bs.modal', (e) => {\n    gaTracker('popup-review-open');\n  });\n  $('#generation-bar-modal').on('hide.bs.modal', (e) => {\n    gaTracker('popup-review-close');\n  });\n  $('#generation-bar-modal .modal-footer button').on('click', (e) => {\n    gaTracker('popup-review-close-btn');\n  });\n  $('.js-post-review').on('click', (e) => {\n    gaTracker('post-popup-trial-cta');\n  });\n\n  $('.js-homepage-features-learnmore').on('click', (e) => {\n    gaTracker('homepage-features-learnmore');\n  });\n}\n\nmodule.exports = {\n  init: initUniversal,\n  bind: bindUniversal\n};\n","/* globals $ */\n\nfunction init () {\n  var trait;\n\n  if (window.wooGlobal.user.id && window.wooGlobal.settings.intercom.enabled) {\n    trait = {\n      'email': window.wooGlobal.user.email,\n      'user_id': window.wooGlobal.user.id,\n      'app_id': window.wooGlobal.settings.intercom.appId,\n      'user_hash': window.wooGlobal.user.intercom.userHash,\n      'first_name': window.wooGlobal.user.firstName,\n      'last_name': window.wooGlobal.user.lastName,\n      'business_web_site': window.wooGlobal.user.businessWebSite,\n      'segment_category': window.wooGlobal.user.segmentCategory,\n      'segment_category_last_ask': window.wooGlobal.user.segmentCategoryLastAsk,\n      'created_at': Date.parse(window.wooGlobal.user.createdAt) / 1000,\n      'plan': window.wooGlobal.user.subscription.planCode,\n      'current_plan_code': window.wooGlobal.user.subscription.planCode\n    };\n\n    if (window.wooGlobal.user.intercom.expertDate) {\n      trait.expert_landing_at = window.wooGlobal.user.intercom.expertDate;\n    }\n\n    if (window.wooGlobal.cookies.registrationReportViewed) {\n      trait.registration_report_viewed =\n        window.wooGlobal.cookies.registrationReportViewed;\n    }\n\n    if (window.Intercom) {\n      window.Intercom('boot', trait);\n    }\n  }\n}\n\nmodule.exports = {\n  init: init\n};\n","'use strict';\n\nvar genbarInHeader = require('./generationBarHeader');\nvar fixedTopBar = require('./fixedTopBar');\nvar genbarModal = require('./generationBarModal');\nvar $top = $('#top');\n\nfunction init () {\n  genbarInHeader();\n  fixedTopBar();\n  genbarModal();\n\n  $('#top-nav-collapse .navbar-nav .dropdown-menu a')\n    .on('click', function (event) {\n      return event.stopPropagation();\n    });\n\n  $top.find('#top-nav-collapse')\n    .on('shown.bs.collapse', function () {\n      if (!$top.find('#logged-container .dropdown-menu').hasClass('open')) {\n        $top.find('#logged-container .dropdown-menu').dropdown('toggle');\n      }\n    });\n}\n\nmodule.exports.init = init;\n","'use strict';\nimport cookies from '../helpers/cookies';\nvar gaTracker = require('../analytics/gaTracker');\n\nfunction exitPages () {\n  const $exitPageModal = $('.exit-page-modal');\n  const $exitPageModalCta = $('.exit-page-modal .js-carousel-cta');\n  const delay = 5000;\n  const sensitivity = 20;\n  const isInFrame = window.self !== window.top;\n  let isDelayEnded = false;\n\n  if ($exitPageModal.length > 0 && !isInFrame) {\n    const exitPageId = $exitPageModal.attr('data-exit-page') || '';\n\n    setTimeout(() => {\n      isDelayEnded = true;\n    }, delay);\n\n    $(window.document).on('mousemove', event => {\n      const cookie = cookies.get(`exit-page-${exitPageId}`);\n\n      if (event.pageY <= sensitivity && isDelayEnded && cookie !== '1') {\n        gaTracker('modal', 'triggered', `exit-page-${exitPageId}-open`, null, true);\n        $exitPageModal.modal('show');\n      }\n    });\n\n    $exitPageModal.on('hide.bs.modal', () => {\n      gaTracker('modal', 'click', `exit-page-${exitPageId}-close`, null, true);\n      cookies.set(`exit-page-${exitPageId}`, 1, 1);\n    });\n\n    $exitPageModalCta.on('click', () => {\n      gaTracker('modal', 'click', `exit-page-${exitPageId}-cta`, null, true);\n    });\n  }\n}\n\nmodule.exports = exitPages;\n","var $ = window.jQuery;\n\nfunction launchElevio () {\n  $('.js-elevio-launcher .js-elevio-help, .js-elevio-launcher .js-elevio-loader')\n    .toggleClass('hidden');\n\n  // This is mostly a prettified version of the elev.io embeddable script\n  window._elev = window._elev || {};\n  window._elev.account_id = '588745ecc1954';\n\n  var language = (window.wooGlobal && window.wooGlobal.language) || 'en';\n  window._elev.lang = language;\n\n  window._elev.events = {\n    'afterLoad': () => {\n      $('.js-elevio-launcher .js-elevio-help, .js-elevio-launcher .js-elevio-loader')\n        .toggleClass('hidden');\n\n      window._elev.open();\n\n      // Hide the mobile menu if it's open\n      $('body.navbar-open .navbar-toggle').click();\n\n      // prevent this callback launching more than once\n      window._elev.events.afterLoad = undefined;\n    }\n  };\n\n  const script = document.createElement('script');\n  script.type = 'text/javascript';\n  script.async = 1;\n  script.src = 'https://cdn.elev.io/sdk/bootloader/v4/elevio-bootloader.js?cid=588745ecc1954';\n  const element = document.getElementsByTagName('script')[0];\n  element.parentNode.insertBefore(script, element);\n}\n\n$(function () {\n  $('.js-elevio-launcher')\n    .click(function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      if (window._elev && window._elev.openArticle) {\n        window._elev.open();\n      } else {\n        launchElevio();\n      }\n    });\n});\n","const $navbar = $('#top .header.navbar');\n\nfunction togglePanel (status) {\n  if (status) {\n    $(window).scrollTop(0);\n  }\n  $navbar.find('.navbar-collapse').collapse(status ? 'show' : 'hide');\n  $('body').toggleClass('navbar-open', status);\n}\n\n$(document).on('click', event => {\n  if (\n    !$(event.target).parents('.navbar-header').length &&\n    !$(event.target).parents('*[class^=\"js-\"],*[class*=\" js-\"]').length &&\n    $('body').hasClass('navbar-open')\n  ) {\n    togglePanel(false);\n  }\n});\n\n$navbar.find('.navbar-toggle').on('click', event => {\n  togglePanel(!$('body').hasClass('navbar-open'));\n});\n\n$(window).on('resize', () => {\n  if ($('body').hasClass('navbar-open')) {\n    togglePanel(false);\n  }\n});\n\n$navbar.find('.navbar-toggle').removeClass('hidden');\n","'use strict';\n\nfunction init () {\n  var isInDevEnv = window.wooGlobal.env === 'dev';\n  var ravenURL = isInDevEnv ? false : 'https://4b5a02a953224012a1877029da8ae180@app.getsentry.com/40969';\n  var ravenSettings = isInDevEnv ? {} : {\n    release: '6.0.0',\n    whitelistUrls: window.wooGlobal.cdn || ''\n  };\n\n  // Raven Events\n  if (window.wooGlobal.cdn) {\n    // Remove slashes in cdn\n    window.wooGlobal.cdn.replace(/\\//g, '');\n  }\n\n  if (window.Raven !== undefined && !isInDevEnv) {\n    window.Raven.config(ravenURL, ravenSettings);\n    window.Raven.debug = false;\n    window.Raven.install();\n\n    if (window.wooGlobal.user) {\n      return window.Raven.setUserContext({\n        id: window.wooGlobal.user.id\n      });\n    }\n  } else {\n    // prevent use from checking window.Raven in all other scripts that use it\n    window.Raven = {\n      captureMessage: function () {}\n    };\n  }\n}\n\nmodule.exports.init = init;\n","'use strict';\n\nvar checkAnimationLoop = function checkAnimationLoop ($elem, loopLeft) {\n  if (loopLeft-- <= 0) {\n    return true;\n  }\n\n  if ($elem.hasClass('hidden') || $elem.hasClass('fadeout')) {\n    return true;\n  }\n\n  return false;\n};\n\nvar animationLoop = function animationLoop ($elem, name, loop, delay) {\n  var loopLeft = Number($elem.attr('data-animation-loop-left'));\n\n  $elem.removeClass('animated').removeClass(name);\n\n  if (checkAnimationLoop($elem)) {\n    return;\n  }\n\n  $elem.attr('data-animation-loop-left', loopLeft);\n\n  setTimeout(function () {\n    if (checkAnimationLoop($elem, loopLeft)) {\n      return;\n    }\n\n    $elem.addClass('animated').addClass(name);\n\n    setTimeout(function () {\n      if (checkAnimationLoop($elem, loopLeft)) {\n        return;\n      }\n\n      animationLoop($elem, name, loop, delay);\n    }, delay / 2);\n  }, delay / 2);\n};\n\n$('[data-animation=true]').each(function () {\n  var loop = Number($(this).attr('data-animation-loop'));\n  var name = $(this).attr('data-animation-name');\n  var delay = Number($(this).attr('data-animation-delay'));\n\n  $(this).attr('data-animation-loop-left', loop);\n  animationLoop($(this), name, loop, delay);\n});\n","'use strict';\n\n$('.tooltip').on('click', '.js-close', function (event) {\n  event.preventDefault();\n  if (window.Modernizr && window.Modernizr.cssanimations) {\n    $(event.delegateTarget).addClass('animated fadeout');\n  } else {\n    $(event.delegateTarget).addClass('hidden');\n  }\n});\n","'use strict';\n\nvar cookies = require('../helpers/cookies');\nvar $ = window.jQuery;\nvar $survey = $('.call-to-action.survey');\n\n$survey.each(function () {\n  var surveyID = $(this).attr('id');\n  var isSurveyHidden = !!parseInt(cookies.get(surveyID), 10);\n  if (!isSurveyHidden) {\n    return $(this).removeClass('hidden');\n  }\n});\n\n$survey.on('click', '.js-survey-btn', function (event) {\n  $(event.delegateTarget).find('.typeform-share').trigger('click');\n});\n\n$survey.on('click', '.close', function (event) {\n  var $eventSurvey = $(event.delegateTarget);\n  var surveyID = $eventSurvey.attr('id');\n  $eventSurvey.addClass('hidden');\n  cookies.set(surveyID, 1, 365);\n});\n","'use strict';\n\n$.fn.extend({\n  externalLinks: function (options) {\n    return this.each(function () {\n      // attach real href on hover to avoid indexing by bots that execute\n      // javascript\n      $(this).find('.js-external-link').each(function () {\n        var $link = $(this);\n        var userAction = 'hover focus click';\n        $link.attr('href', '#').removeClass('js-external-link');\n\n        var attachHref = function () {\n          $link.attr('href', $link.attr('data-href'));\n          $link.removeAttr('data-href');\n          return $link.off(userAction, attachHref);\n        };\n\n        return $link.on(userAction, attachHref);\n      });\n    });\n  }\n});\n","'use strict';\n\n$.fn.extend({\n  truncate: function (options) {\n    return this.each(function () {\n      // Only show buttons on containers that are actually truncated\n      $(this).find('.js-truncated-content').each(function () {\n        var $this = $(this);\n        var containerHeight = $this.height() || 0;\n        var contentHeight = $this.find('> div').height() || 0;\n        var $buttons = $this.next('.js-truncate-btns');\n        if (contentHeight > containerHeight) {\n          $buttons.show();\n        } else {\n          $buttons.hide();\n        }\n      });\n    });\n  }\n});\n","'use strict';\n\n$.fn.extend({\n  formatTime: function (options) {\n    var toFormat = [];\n\n    this.find('.js-format-time').each(function () {\n      var $this = $(this);\n      var datetimeString =\n        $this.attr('datetime') ||\n        $this.data('datetime') ||\n        $this.text();\n      var format = $this.data('format') || 'LLL';\n      var formatted = window.moment(datetimeString).format(format);\n\n      toFormat.push({\n        $elm: $this,\n        formatted: formatted\n      });\n    });\n    // do update in a single batch to avoid layout trashing\n    toFormat.forEach(function (obj) {\n      obj.$elm.text(obj.formatted).removeClass('js-format-time');\n    });\n  }\n});\n\n// Apply format time\n(function () {\n  $('body').formatTime();\n})();\n","'use strict';\n\n$.fn.extend({\n  prettyTextOverflow: function () {\n    this.each(function (i, elm) {\n      var $elm = $(elm);\n      var isOverflowing = elm.scrollWidth > $elm.innerWidth();\n      var text;\n\n      if (isOverflowing) {\n        text = $elm.text().trim();\n        $elm.attr('title', text);\n        $elm.tooltip();\n      }\n    });\n  }\n});\n","'use strict';\n\nvar validateURL = require('./validateURL');\n\n$('form.to-validate').on('submit', function (event) {\n  var $form = $(this);\n  var $wooReq = $form.find('input.required');\n  var woosendForm = true;\n  var inputErrorCounter = 0;\n\n  // reset\n  $form.removeClass('error');\n  $wooReq.removeClass('error');\n\n  // checking\n  $wooReq.each(function () {\n    var $this = $(this);\n    var inputValTrim = $this.val().trim();\n\n    if (inputValTrim.length < 1) {\n      inputErrorCounter++;\n    }\n\n    if ($this.hasClass('js-validate-review-url')) {\n      if (validateURL(inputValTrim) === !true) {\n        inputErrorCounter++;\n      }\n    }\n\n    if (inputErrorCounter > 0) {\n      return $this.addClass('error');\n    }\n  });\n\n  if (inputErrorCounter > 0) {\n    $form.addClass('error');\n    woosendForm = false;\n  }\n\n  if (woosendForm === !true) {\n    return event.preventDefault();\n  }\n});\n\n$('form.to-validate').on('keyup', 'input.required', function (event) {\n  var $input = $(this);\n  var $form = $(event.delegateTarget);\n  var formValid = $input.val().trim().length < 1;\n\n  $form.toggleClass('error', formValid);\n  $input.toggleClass('error', formValid);\n});\n\n$('form.to-validate').on('blur', 'input.required', function (event) {\n  var $input = $(this);\n  var $form = $(event.delegateTarget);\n\n  $input.removeClass('error');\n  $form.removeClass('error');\n});\n","import scrollTo from './scrollTo';\nimport { isDesktopLarge } from './responsiveViewport';\nvar leftNavigatorTooltip = require('./leftNavigatorTooltip');\n\n// Init the flying left menu (for report)\nfunction initWooFlyingMenu () {\n  let wooTopPos = 0;\n  const $topTmp = $('#top');\n  const $wooFlyingMenu = $('#flying');\n  leftNavigatorTooltip();\n\n  if ($topTmp.length > 0) {\n    wooTopPos = $topTmp.offset().top;\n  }\n\n  // Catch the scroll event\n  $(window).off('scroll');\n  $(window).on('scroll', () => {\n    // If scrollY greather than left menu top position -> move it\n    const $leftNav = $('#left-nav');\n\n    if ($leftNav.length) {\n      const $rightPanel = $('#right-panel');\n      const bodyHeight = $('body').height();\n      const leftMenuHeight = $wooFlyingMenu.height();\n      const defaultMargin = 60;\n      const staticDifference = 130;\n      const footerHeight = $('#footer').outerHeight();\n      const scrollDifference = window.scrollY - $(document).height() + bodyHeight;\n      const isScrolledToEnd = (\n        scrollDifference - footerHeight + leftMenuHeight - staticDifference\n        ) >= 0;\n      const isDesktop = isDesktopLarge();\n\n      const isEnoughSpace = (\n        $(document).height() - window.scrollY - footerHeight - leftMenuHeight - staticDifference\n        ) > 0;\n\n      if (window.scrollY > $leftNav.offset().top - defaultMargin && $leftNav.offset().top >= 0) {\n        $wooFlyingMenu.addClass('is-flying');\n\n        if (isScrolledToEnd && !isEnoughSpace && isDesktop) {\n          $wooFlyingMenu.css({\n            'top': 'auto',\n            'bottom': scrollDifference + footerHeight + defaultMargin\n          });\n        } else {\n          $wooFlyingMenu.css({\n            'top': '',\n            'bottom': 'auto'\n          });\n        }\n\n        if ($('body').hasClass('settings')) {\n          $rightPanel.addClass('menu-is-flying');\n        }\n\n        const links = $wooFlyingMenu.find('.inpage-link:not(:hidden)');\n\n        // Calcul current active link when it's an inpage menu\n        if (links.length > 0) {\n          // find the one currently in view\n          let current = false;\n\n          $(links).each((i, link) => {\n            const $link = $(link);\n            const linkHref = $link.attr('href');\n            const offset = $(linkHref).offset() || 0;\n            const screenPosition = window.scrollY + 70 + wooTopPos;\n            const topPosy = offset.top || 0;\n\n            if (topPosy <= screenPosition) {\n              current = $link;\n              return current;\n            }\n          });\n\n          // add corect class to current link\n          links.removeClass('current');\n\n          if (current) {\n            return current.addClass('current');\n          }\n        }\n      } else {\n        $wooFlyingMenu.removeClass('is-flying');\n      }\n    }\n  });\n\n  // bind click on inpage links -> scrollTo when clicked\n  $wooFlyingMenu.find('.inpage-link').on('click', function (event) {\n    const currentHref = $(this).attr('href');\n    let $element;\n\n    event.preventDefault();\n\n    if (isNaN(parseInt(currentHref, 10))) {\n      $element = $(currentHref);\n    } else {\n      $element = $('.spied').eq(currentHref);\n    }\n\n    return scrollTo($element, 500);\n  });\n}\n\nmodule.exports = initWooFlyingMenu;\n","'use strict';\n\nvar scrollToElement = require('./scrollToElement');\n\n$(document).on('click', '.show-links a', function (event) {\n  var $link = $(this);\n  var $maxContainer = $link.parent('.show-links');\n  var $childsToSwitch = $maxContainer\n    .find(\n      '.over-max:not(.task-content),' +\n      '.over-max.ui-accordion-content-active,' +\n      '.over-max-v'\n  );\n  var showless = $(this).hasClass('show-less');\n\n  $maxContainer\n    .toggleClass('open')\n    .prev('table, ol, ul, .max5, .max6, .over-max-list, .js-truncated-content')\n    .toggleClass('open');\n\n  event.preventDefault();\n  $childsToSwitch.toggleClass('over-max over-max-v');\n\n  var doc = document.documentElement;\n  var windowScrollPosition = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n  var containerTop = $maxContainer.offset().top;\n\n  if (showless && (containerTop < windowScrollPosition)) {\n    return scrollToElement($maxContainer);\n  }\n});\n","'use strict';\n\nvar cookies = require('../helpers/cookies');\nvar $addReportModal = $('#add-report-modal');\n\nif ($addReportModal.length > 0) {\n  // Check if it's the first review made by a user\n  var firstTimeReview = cookies.get('first_time_review');\n\n  if (firstTimeReview !== '1') {\n    $addReportModal.find('.first-step-tutorial').removeClass('hidden');\n  }\n\n  $addReportModal.on('show.bs.modal', function () {\n    cookies.set('first_time_review', 1, 365);\n  });\n}\n","'use strict';\n$.fn.popover && $('.woo-popover').popover({\n  delay: {\n    show: 400,\n    hide: 100\n  },\n  trigger: 'hover',\n  content: function () {\n    return $(this).next('.popover-data').html();\n  }\n});\n","'use strict';\n\n$.fn.tooltip && $('.woo-tooltip, .simple-tooltip').tooltip({\n  delay: {\n    show: 400,\n    hide: 100\n  }\n}).on('click', function (event) {\n  if ($(this).attr('href') === '#') {\n    return event.preventDefault();\n  }\n});\n","import scrollTo from './scrollTo';\n\nlet sectionJumper = $('.js-section-skip');\n\nsectionJumper.on('click', event => {\n  try {\n    event.preventDefault();\n    let target = $('.features-home');\n    scrollTo(target, 350);\n  } catch (e) {}\n});\n","'use strict';\n\nwindow.onloadCaptcha = function () {\n  $('.js-g-recaptcha').each(function (index, el) {\n    var token;\n    el.className.split(' ').forEach(function (value) {\n      if (value.includes('js-grecaptcha-callback')) {\n        token = value;\n      }\n    });\n    window[ token ] = window.grecaptcha.render(el, {\n      'sitekey': String(window.wooGlobal.settings.grecaptcha.sitekey),\n      'size': 'invisible',\n      'badge': 'inline',\n      'callback': function () {\n        window.callbackCaptcha(token);\n      }\n    }, true);\n  });\n};\n\nwindow.callbackCaptcha = function (token) {\n  if (token === 'js-grecaptcha-callback-first-generation') {\n    $('.js-first-generation-form').submit();\n  } else if (token === 'js-grecaptcha-callback-regeneration') {\n    $('.js-regenerate').click();\n  } else if (token === 'js-grecaptcha-callback-generation') {\n    $(document.querySelector('form.ajax-generate-report')).submit();\n  } else if (token === 'js-grecaptcha-callback-pricing-modal') {\n    $('#create-ticket').submit();\n  }\n};\n\nvar gRecaptchaScript = document.createElement('script');\n\ngRecaptchaScript.setAttribute('src', 'https://www.google.com/recaptcha/api.js?onload=onloadCaptcha&render=explicit');\n\ndocument.head.appendChild(gRecaptchaScript);\n","'use strict';\n\nif (window.wooGlobal.user.id && window.wooGlobal.settings.zendesk.enabled) {\n  window.zEmbed || (function (e, t) {\n    var n;\n    var o;\n    var d;\n    var i;\n    var s;\n    var a = [];\n    var r = document.createElement('iframe');\n\n    window.zEmbed = function () {\n      a.push(arguments);\n    };\n\n    window.zE = window.zE || window.zEmbed;\n    r.src = 'javascript:false';\n    r.title = '';\n    r.role = 'presentation';\n    (r.frameElement || r).style.cssText = 'display: none';\n    d = document.getElementsByTagName('script');\n    d = d[d.length - 1];\n    d.parentNode.insertBefore(r, d);\n    i = r.contentWindow;\n    s = i.document;\n\n    try {\n      o = s;\n    } catch (c) {\n      n = document.domain;\n      r.src =\n        'javascript:var d=document.open();d.domain=\"' + n + '\";void(0);';\n      o = s;\n    }\n\n    o.open()._l = function () {\n      var o = this.createElement('script');\n      n && (this.domain = n);\n      o.id = 'js-iframe-async';\n      o.src = e;\n      this.t += new Date();\n      this.zendeskHost = t;\n      this.zEQueue = a;\n      this.body.appendChild(o);\n    };\n\n    o.write('<body onload=\"document._l();\">');\n    o.close();\n  })(\n    'https://assets.zendesk.com/embeddable_framework/main.js',\n    window.wooGlobal.settings.zendesk.appId\n  );\n\n  window.zE(function () {\n    if (window.wooGlobal.language) {\n      window.zE.setLocale(window.wooGlobal.language);\n    }\n    if (window.wooGlobal.user !== null) {\n      window.zE.identify({\n        name: '',\n        email: window.wooGlobal.user.email,\n        externalId: window.wooGlobal.user.id\n      });\n    }\n  });\n}\n","'use strict';\n\nrequire('../components/checkbox');\nrequire('./competitorsSuggest');\nrequire('./modalSettings');\nrequire('./save');\nrequire('./delete');\n\n$('[data-toggle=\"tooltip\"]').tooltip();\n","'use strict';\n\nvar initScoreChart = require('../helpers/initScoreChart');\nvar loadMoreReports = require('./loadMoreReports');\nvar overviewTooltip = require('./overviewTooltip');\nvar $ = window.jQuery;\n\nrequire('./createAdvancedReview');\nrequire('./deleteAdvancedReview');\nrequire('./extensionLink');\nrequire('./expertNotification');\nrequire('./downloadPdf');\nrequire('./expertBox');\n\n$('#user-lists-left .score').each(function () {\n  $(this).addClass('charts-drawn');\n  initScoreChart($(this));\n});\n\noverviewTooltip();\n\nloadMoreReports();\n","const $reasonRadios = $('.list-group-item');\nconst feedback1Markup = $('.reason-1').remove().html();\nconst feedback2Markup = $('.reason-2').remove().html();\nconst feedback3Markup = $('.reason-3').remove().html();\nconst feedback4Markup = $('.reason-4').remove().html();\nconst feedback5Markup = $('.reason-5').remove().html();\nconst feedback6Markup = $('.reason-6').remove().html();\nconst feedback7Markup = $('.reason-7').remove().html();\n\nfunction submitCancel () {\n  $('.js-cancel-button').addClass('disabled').attr('disabled', 'disabled');\n  $('.js-load-cancel').removeClass('hidden');\n  $('.js-cancel-form').submit();\n}\n\nfunction reasonChanged () {\n  $('.feedback').remove();\n  $reasonRadios.removeClass('has-error');\n  let $checkedRadio = $reasonRadios.find('input:checked');\n  let reasonNumberChecked = $checkedRadio.val();\n  switch (reasonNumberChecked) {\n    case '1':\n      $checkedRadio.closest('.list-group-item').after(feedback1Markup);\n      break;\n    case '2':\n      $checkedRadio.closest('.list-group-item').after(feedback2Markup);\n      break;\n    case '3':\n      $checkedRadio.closest('.list-group-item').after(feedback3Markup);\n      break;\n    case '4':\n      $checkedRadio.closest('.list-group-item').after(feedback4Markup);\n      break;\n    case '5':\n      $checkedRadio.closest('.list-group-item').after(feedback5Markup);\n      break;\n    case '6':\n      $checkedRadio.closest('.list-group-item').after(feedback6Markup);\n      break;\n    case '7':\n      $checkedRadio.closest('.list-group-item').after(feedback7Markup);\n      break;\n  }\n}\n\nfunction validateForm () {\n  let $checkedRadio = $reasonRadios.find('input:checked');\n  let reasonNumberChecked = $checkedRadio.val();\n  if (reasonNumberChecked) {\n    return true;\n  } else {\n    $reasonRadios.addClass('has-error');\n  }\n}\n\n$reasonRadios.on('change', reasonChanged);\n\n$('.js-cancel-button').on('click', event => {\n  event.preventDefault();\n  if (validateForm()) {\n    submitCancel();\n  }\n});\n","const moreInvoicesButton = $('#more-invoices');\nconst lessInvoicesButton = $('#less-invoices');\nconst showMax = 5;\nconst invoices = $('.invoice-link');\n\nif (invoices.length > showMax) {\n  invoices.slice(5).toggle();\n  moreInvoicesButton.removeClass('hidden');\n}\n\nmoreInvoicesButton.on('click', () => {\n  invoices.slice(5).toggle();\n  moreInvoicesButton.addClass('hidden');\n  lessInvoicesButton.removeClass('hidden');\n});\n\nlessInvoicesButton.on('click', () => {\n  invoices.slice(5).toggle();\n  lessInvoicesButton.addClass('hidden');\n  moreInvoicesButton.removeClass('hidden');\n});\n","'use strict';\r\n\r\nvar isEmptyField = require('../genbar/isEmptyField');\r\nvar $subUserForm = $('#sub-users-container .subuser-form');\r\nvar $subUserTable = $('.user-table');\r\nvar $subUserAlert = $subUserForm.find('.message');\r\nvar $deleteUserModal = $('#delete-user-modal');\r\nvar $upgradeButton = $('#upgrade-button');\r\n\r\nfunction errorMessage (show, message) {\r\n  message = message || '';\r\n\r\n  $subUserAlert.toggleClass('hidden', !show).text(message);\r\n}\r\n\r\nfunction checkUpgradeButton () {\r\n  var remainingProjects = parseInt(\r\n    $upgradeButton.attr('data-remaining-projects'), 10\r\n  );\r\n  var subusersLeft = parseInt($upgradeButton.attr('data-subusers'), 10);\r\n\r\n  $upgradeButton.toggleClass(\r\n    'hidden', remainingProjects > 0 && subusersLeft > 0\r\n  );\r\n}\r\n\r\nfunction ajaxAddRemoveUser ($context, data, deleting) {\r\n  var originalData = data;\r\n\r\n  $context.addClass('waiting-for-ajax')\r\n    .find('.js-input')\r\n    .attr('disabled', 'disabled');\r\n\r\n  $.ajax({\r\n    type: 'POST',\r\n    data: data,\r\n    cache: false,\r\n    url: $context.attr('action'),\r\n    async: true,\r\n    context: $context,\r\n    dataType: 'json',\r\n    success: function (json) {\r\n      $context.removeClass('waiting-for-ajax')\r\n        .find('.js-input')\r\n        .removeAttr('disabled')\r\n        .val('');\r\n\r\n      errorMessage(!json.status, json.message);\r\n      $subUserForm.toggleClass('hidden', json.userRemaining < 1);\r\n      $upgradeButton.attr('data-subusers', json.userRemaining);\r\n      $('.multiuser-available').text(json.userRemaining);\r\n\r\n      if (json.status === 1) {\r\n        if (deleting) {\r\n          removeUserInList(originalData.email);\r\n        } else {\r\n          userWaitingStatus(json.newUser, true);\r\n        }\r\n      }\r\n\r\n      checkUpgradeButton();\r\n    },\r\n    error: function (jqXHR, textStatus, errorThrown) {\r\n      window.Raven.captureMessage('Subusers remove user error', {\r\n        extra: {\r\n          textStatus: textStatus,\r\n          errorThrown: errorThrown,\r\n          currentWebsite: window.currentWebsite\r\n        }\r\n      });\r\n\r\n      return $('.ajax-error-message').removeClass('hidden');\r\n    }\r\n  });\r\n}\r\n\r\nfunction userWaitingStatus (user, removeWaiting) {\r\n  var $userLine;\r\n\r\n  if (user) {\r\n    $userLine = $subUserTable\r\n      .find('[data-user=\"' + user + '\"]')\r\n      .parents('.user-list-item');\r\n\r\n    if ($userLine.length < 1 && !removeWaiting) {\r\n      $userLine = addUserInList(user);\r\n    }\r\n\r\n    $userLine.toggleClass('waiting', !removeWaiting);\r\n  }\r\n}\r\n\r\nfunction removeUserInList (user) {\r\n  if (user) {\r\n    $subUserTable.find('[data-user=\"' + user + '\"]')\r\n      .parents('.user-list-item')\r\n      .remove();\r\n  }\r\n}\r\n\r\nfunction addUserInList (user) {\r\n  var $lastItem = $subUserTable.find('.user-list-item:last:not(.hidden)');\r\n  var $newItem = $lastItem.clone();\r\n\r\n  $newItem.find('.js-remove-user').attr('data-user', user);\r\n  $newItem.find('.js-col-user').text(user);\r\n  $newItem.find('.js-col-number').text('0');\r\n  $lastItem.after($newItem);\r\n\r\n  return $newItem;\r\n}\r\n\r\n// Add sub user\r\n$subUserForm.on('submit', function (event) {\r\n  var $form = $(this);\r\n  var $input = $form.find('.js-input');\r\n  var value = $input.val().trim();\r\n\r\n  if (isEmptyField($input) || $form.hasClass('waiting-for-ajax')) {\r\n    return false;\r\n  }\r\n\r\n  event.preventDefault();\r\n  userWaitingStatus(value);\r\n  ajaxAddRemoveUser($form, $form.serialize());\r\n});\r\n\r\n// Set the user email to remove\r\n$subUserTable.find('.user-list').on('click', '.remove-user', function () {\r\n  var user = $(this).attr('data-user');\r\n\r\n  $deleteUserModal.attr('data-user', user);\r\n});\r\n\r\n// Remove sub user\r\n$deleteUserModal.on('click', '.submit', function (event) {\r\n  var $modal = $(event.delegateTarget);\r\n  var userToRemove = $modal.attr('data-user');\r\n  var data = {\r\n    deleting: 1,\r\n    email: userToRemove\r\n  };\r\n  var deleting = true;\r\n\r\n  event.preventDefault();\r\n  $modal.modal('hide');\r\n  userWaitingStatus(userToRemove);\r\n  ajaxAddRemoveUser($subUserForm, data, deleting);\r\n});\r\n","'use strict';\n\nvar bindCriteriumTapEvent = require('./bindCriteriumTapEvent');\nvar $body = $('body');\n\nif (!$body.hasClass('initialized')) {\n  $body.addClass('initialized');\n  window.FastClick(document.body);\n\n  require('./moduleTitleReplace');\n  require('./iframeGeneration');\n\n  bindCriteriumTapEvent();\n\n  $('#report-priorities .show-more-task a').bind('click', function () {\n    $('#report-priorities .show-more-task i').toggleClass('hidden');\n    return $(this).off('click');\n  });\n\n  $('.criterium-head .icons i').each(function () {\n    return $(this).parent().append(\n      '<span class=\"criterium-icons-label\" style=\"display:none\">' +\n      $(this).text() +\n      '</span>'\n    );\n  });\n\n  $('.show-links, .show-more-task').hide();\n}\n","'use strict';\n\nimport { isDesktopLarge } from '../helpers/responsiveViewport';\n\nvar highlighter = require('./highlighter');\nvar onMustacheLoaded = require('./mustacheLoad');\nvar getMustacheFiles = require('./loadMustachesFiles');\nvar loadingSentence = require('../helpers/loadingSentence');\nvar checkEmptyModuleSection = require('./checkEmptyModules');\nvar prettifyUrlInReviewLists = require('./prettifyBigURLs');\nvar renderSettingBox = require('./settingRender');\nvar renderProject = require('./renderProject');\nvar counter = require('./counter/counter');\nvar initDashboardFooter = require('./dashboard/initDashboardFooter');\nvar calculTopBars = require('../review/dashboard/dashboardProgressStatus');\nvar activeMenuItem = require('../ipad/activeMenuItem');\nvar scrollToElement = require('../helpers/scrollToElement');\nvar getParameterByName = require('../helpers/getParameterByName');\nvar initWooFlyingMenu = require('../helpers/leftMenu');\nvar cleanWooRankLinks = require('../helpers/cleanWoorankLinks');\nvar gotoGet = getParameterByName('goto');\nvar whlParam = getParameterByName('whl');\nvar renderCharts = require('../charts/chartsRender');\nvar competizeAll = require('../review/competitors/competizeAll');\n\nrequire('./renderProject');\n\nif (whlParam) {\n  highlighter(whlParam);\n}\n\nwindow.isInsideReview = $('#dashboard-content').hasClass('inside-page');\nwindow.ispaidReview = $('#dashboard-content').hasClass('paid-review');\nwindow.isAdvancedReview = $('body').hasClass('enrichrev');\nwindow.currentWebsite = $('#dashboard-site > h1 > a').data('url');\nwindow.isSharedReview = $('body').hasClass('shared');\nwindow.compCriteriums = window.compCriteriums || [];\nwindow.competitorUrls = window.competitorUrls || [];\n\nfunction listenForScrollEvents () {\n  window.addEventListener('message', function (e) {\n    if (e.data && e.data.indexOf('com.woorank.parent_scroll') === 0) {\n      const defaultMargin = (isDesktopLarge) ? 0 : 60;\n      const menuTop = defaultMargin + Math.max(0, parseInt(e.data.split('_').pop(), 10));\n\n      $('#flying')\n        .addClass('is-flying')\n        .css('top', menuTop + 'px');\n    }\n  });\n}\n\nfunction postMessage (message) {\n  if (window.opener || window.top) {\n    (window.opener || window.top).postMessage(message, '*');\n  }\n}\n\nfunction postHeight () {\n  return setTimeout(() => {\n    const lastModule = $('.module').last();\n    var height = lastModule.position().top + lastModule.height();\n    postMessage('com.woorank.height_' + height);\n  }, 100);\n}\n\nfunction targetBlankLinks () {\n  $('a').attr('target', '_blank');\n}\n\npostHeight();\nwindow.addEventListener('crit-inserted-to-html', postHeight, false);\n$('.module').on('click', '.show-links a', postHeight);\n\nif (window.wooGlobal.allLinksTargetBlank === true) {\n  targetBlankLinks();\n  window.addEventListener('crit-inserted-to-html', targetBlankLinks, false);\n}\n\nif (window.isSharedReview) {\n  window.ajaxPjDataProxyUrl =\n    window.location.pathname.replace('public', 'pub-data') + '?u=';\n  cleanWooRankLinks();\n}\n\nif (!window.isMobile) {\n  initWooFlyingMenu();\n\n  const initFlyingMenuInIframe = function (e) {\n    window.removeEventListener('message', initFlyingMenuInIframe);\n    // Handle the sidebar links\n    $('#flying')\n      .css('transition', 'top 0.25s ease-out') // We want the menu to fly smoothly when scrolled\n      .find('.inpage-link')\n      .off('click')\n      .on('click', function (event) {\n        event.preventDefault();\n\n        const $element = $(this.getAttribute('href'));\n        postMessage('com.woorank.scrollto_' + $element.offset().top);\n      });\n\n    $('.criterium').on('click', (e) => { postHeight(); }); // Update on advice click\n\n    listenForScrollEvents();\n  };\n\n  window.addEventListener('message', function (e) {\n    if (typeof e.data === 'string' && e.data.indexOf('com.woorank.init_frame') === 0) {\n      initFlyingMenuInIframe();\n    }\n  });\n}\n\nif (!window.isInsideReview) {\n  counter.init();\n}\n\ninitDashboardFooter();\n\nrequire('./openCriterium');\nrequire('./showMoreTask');\nrequire('./dashboard/dashboard');\nrequire('./marketing-tasks/marketingTasks')();\n\nloadingSentence.init();\n\ngetMustacheFiles().then(onMustacheLoaded);\n\ncheckEmptyModuleSection();\n\nif (window.isMobile) {\n  $('#report-content').show();\n  $('.loading_sentence').remove();\n  loadingSentence.clearInterval();\n  activeMenuItem();\n}\n\ncalculTopBars();\nprettifyUrlInReviewLists();\n\n$('body').externalLinks();\n$('body').truncate();\n\npostMessage('com.woorank.ready_to_receive');\n\nif (window.isAdvancedReview) {\n  renderProject();\n  renderSettingBox();\n}\n\n// if ?goto= isset then go to this section\nif (gotoGet && gotoGet !== '') {\n  scrollToElement($('#' + gotoGet));\n}\n\nif (!window.isInside) {\n  competizeAll(true);\n}\n\nrenderCharts();\n","'use strict';\n\nvar initReportGeneration = require('./initReportGeneration');\nvar $dashboard = $('#dashboard');\nvar loadMarketingTasks = require('../review/marketing-tasks/loadMarketingTasks');\nvar dScreenshot;\n\nwindow.isInsideReview = $('#dashboard-content').hasClass('inside-page');\nwindow.ispaidReview = $('#dashboard-content').hasClass('paid-review');\nwindow.currentWebsite = $('#dashboard-site>h1>a').data('url');\n\n$dashboard.one('generationComplete', function () {\n  // not for advanced reviews\n  if (!$('body').hasClass('enrichrev')) {\n    loadMarketingTasks();\n  }\n\n  $dashboard.removeClass('generating-report');\n  dScreenshot = $dashboard.find('#dashboard-screenshot');\n  $dashboard.find('#dashboard-footer a.dl-disabled').removeClass('dl-disabled');\n\n  var baseUrl = window.currentWebsite.split('/')[0];\n  var desktopScreenshot = window.wooGlobal.screenshotBase + baseUrl + '.png';\n\n  dScreenshot.prepend(\n    '<img src=\"' + desktopScreenshot + '\"' +\n    ' alt=\"Screenshot for ' + window.currentWebsite + '\" />'\n  );\n\n  dScreenshot.find('.js-loader').addClass('hidden');\n\n  if (window.isInsideReview) {\n    dScreenshot.append('<span class=\"inside-ribbon\"></span>');\n\n    if ($('#dashboard-content').hasClass('orphan-inside')) {\n      $('#orphan-alert').slideDown(100);\n    }\n  }\n});\n\ninitReportGeneration();\n","'use strict';\r\n\r\nvar counter = require('../review/counter/counter');\r\nvar renderCharts = require('../charts/chartsRender');\r\nvar competizeAll = require('../review/competitors/competizeAll');\r\nvar fixInnerIssue = require('./fixInnerIssue');\r\nvar rgba2hex = require('./rgbaToHex');\r\nvar colors = require('../charts/chartsColors');\r\n\r\n// Score counter\r\nif ($('#score-value').length !== 0 && !window.isInside) {\r\n  var options = {\r\n    animate: false\r\n  };\r\n  counter.init(options);\r\n}\r\n\r\n// Charts customs colors options\r\nif (\r\n  (typeof window.customColor !== 'undefined' && window.customColor !== null) &&\r\n  window.customColor.toUpperCase() !== colors.primaryDarker) {\r\n  var r = parseInt(window.customColor[0] + window.customColor[1], 16);\r\n  var g = parseInt(window.customColor[2] + window.customColor[3], 16);\r\n  var b = parseInt(window.customColor[4] + window.customColor[5], 16);\r\n\r\n  window.mapColors = {\r\n    0: '#' + rgba2hex(r, g, b, 0.09),\r\n    10: '#' + rgba2hex(r, g, b, 0.18),\r\n    20: '#' + rgba2hex(r, g, b, 0.27),\r\n    30: '#' + rgba2hex(r, g, b, 0.36),\r\n    40: '#' + rgba2hex(r, g, b, 0.45),\r\n    50: '#' + rgba2hex(r, g, b, 0.54),\r\n    60: '#' + rgba2hex(r, g, b, 0.63),\r\n    70: '#' + rgba2hex(r, g, b, 0.72),\r\n    80: '#' + rgba2hex(r, g, b, 0.81),\r\n    90: '#' + rgba2hex(r, g, b, 0.9),\r\n    100: '#' + window.customColor\r\n  };\r\n\r\n  window.customColor2 = $('body').attr('c-1');\r\n  window.customColor3 = $('body').attr('c-2');\r\n  window.customColor4 = $('body').attr('c-3');\r\n\r\n  window.Highcharts.theme = {\r\n    colors: [\r\n      '#' + window.customColor,\r\n      window.customColor2,\r\n      window.customColor3,\r\n      window.customColor4,\r\n      colors.greyMedium\r\n    ]\r\n  };\r\n  window.highchartsOptions = window.Highcharts.setOptions(\r\n    window.Highcharts.theme\r\n  );\r\n} else {\r\n  window.customColor = colors.primaryDarker;\r\n}\r\n\r\nwindow.chartColorsComp = [\r\n  window.customColor2,\r\n  window.customColor3,\r\n  window.customColor4,\r\n  colors.greyMedium\r\n];\r\n\r\nif (!window.isInside) {\r\n  competizeAll(true);\r\n}\r\n\r\nif ($('#pdf-header').hasClass('slide')) {\r\n  var heightTmp;\r\n  var paddingTmp;\r\n  var paddingTmp2;\r\n\r\n  $('.criterium').each(function () {\r\n    heightTmp = $(this).height();\r\n\r\n    if (heightTmp < 630) {\r\n      paddingTmp = (630 - heightTmp) / 2;\r\n      return $(this).css('padding-top', paddingTmp + 'px');\r\n    }\r\n  });\r\n\r\n  heightTmp = $('#summary').height();\r\n\r\n  if (heightTmp < 630) {\r\n    paddingTmp = (630 - heightTmp) / 2;\r\n    $('#summary').css('padding-top', paddingTmp + 'px');\r\n  }\r\n\r\n  heightTmp = $('#pdf-footer').height();\r\n\r\n  if (heightTmp < 630) {\r\n    paddingTmp2 = (630 - heightTmp) / 2;\r\n    $('#pdf-footer').css('padding-top', paddingTmp2 + 'px');\r\n  }\r\n}\r\n\r\nwindow.mustacheTemplates = {};\r\nwindow.mustacheMainTemplate = '';\r\nfixInnerIssue();\r\nrenderCharts();\r\n","'use strict';\n\nvar renderCharts = require('../charts/chartsRender');\nvar competizeAll = require('../review/competitors/competizeAll');\n\nif (!window.isInside) {\n  competizeAll(true);\n}\n\nrenderCharts();\n","import performFieldValidation from '../validation/performFieldValidation';\nimport clearErrorOnField from '../validation/clearErrorOnField';\n\nrequire('./trialCTA');\n\nvar recaptchaResponseValidation = require('../g-recaptcha/recaptchaResponseValidation');\n\nconst $createTicket = $('#create-ticket');\n\n// initial page state setup\n$('.js-load-plan').addClass('hidden');\n$('.js-force-yearly').addClass('hidden');\n\n[$('#paywallwelcome'), $('#billingFailed')]\n  .forEach((element) => element !== undefined && element.modal('show'));\n\n$('.js-billing-link').on('click', () => $('#billingFailed').modal('hide'));\n\nfunction setDisplayYearly (showYearlyPrices) {\n  $('.js-price-yearly').toggleClass('hidden', !showYearlyPrices);\n  $('.js-plan-yearly').toggleClass('hidden', !showYearlyPrices);\n  $('.js-price-monthly').toggleClass('hidden', showYearlyPrices);\n  $('.js-plan-monthly').toggleClass('hidden', showYearlyPrices);\n  $('.js-btn-yearly').toggleClass('hidden', !showYearlyPrices);\n  $('.js-your-plan').toggleClass('hidden', showYearlyPrices);\n}\n\n// switch between yearly monthly pricing\n$('.js-switch-yearly').on('click', function () {\n  setDisplayYearly(true);\n});\n\n$('.js-switch-monthly').on('click', function () {\n  setDisplayYearly(false);\n});\n\n// skip paywall button\n$('.js-skip').on('click', function (event) {\n  event.preventDefault();\n  $('form.js-skip-paywall').submit();\n});\n\n// create a trial subscription\n$('.js-trial').on('click', function (event) {\n  event.preventDefault();\n  const url = $(this).attr('href');\n  const planCode = $(this).data('trial-plan');\n  $(this).find('.js-load-plan').removeClass('hidden');\n\n  $.post(url, { plan: planCode })\n    .done(data => {\n      window.location.href = data.location;\n    })\n    .fail((jqXHR, textStatus, errorThrown) => {\n      window.Raven.captureMessage('Ajax plan change failed', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          url: url,\n          plan: planCode\n        }\n      });\n    });\n});\n\n$('.js-updowngrade .js-choose-plan').on('click', function (event) {\n  event.preventDefault();\n  const chosenLink = $(this).attr('href');\n  const changePlanLink = $('.js-confirm-plan');\n  const priceText = $(this).parents('.js-price-box').find('.js-price:visible').text();\n  changePlanLink.attr('href', chosenLink);\n\n  $('#confirm-plan-change .price').text(priceText);\n  $('#confirm-plan-change').modal();\n});\n\n$createTicket.find('input').on('blur', function () {\n  return performFieldValidation($(this));\n});\n\n$createTicket.find('input').on('focus', function () {\n  return clearErrorOnField($(this));\n});\n\n// create ticket in recurly\n$createTicket.on('submit', function (event) {\n  event.preventDefault();\n\n  const $this = $(this);\n\n  $('.js-submit-ticket').addClass('btn-async-loading');\n\n  if (performFieldValidation($this.find('input'))) {\n    var response = recaptchaResponseValidation(window['js-grecaptcha-callback-pricing-modal']);\n    if (!response) {\n      return;\n    }\n    const url = $createTicket.attr('action');\n    const data = $createTicket.serializeArray();\n\n    $.post(url, data)\n      .done(data => {\n        $('.js-submit-ticket').removeClass('btn-async-loading');\n        $('#zen-contact').modal('hide');\n        $('.js-contact-success').removeClass('hidden');\n      })\n      .fail((jqXHR, textStatus, errorThrown) => {\n        window.Raven.captureMessage('Zendesk ticket creation error', {\n          extra: {\n            textStatus: textStatus,\n            errorThrown: errorThrown,\n            url: url,\n            data: data\n          }\n        });\n      });\n  }\n});\n","import showErrorForField from '../validation/showErrorForField';\n\nfunction lockForm () {\n  $('.js-login-input').addClass('disabled').attr('disabled', 'disabled');\n  $('.js-login-submit .js-load').removeClass('hidden');\n}\n\nfunction unlockForm () {\n  $('.js-login-input').removeClass('disabled').attr('disabled', false);\n  $('.js-login-submit .js-load').addClass('hidden');\n}\n\nfunction callbackAjax (json = {}) {\n  if (json.error) {\n    unlockForm();\n    handleValidationError(json);\n  }\n\n  if (json.redirectTo) {\n    window.location.href = json.redirectTo;\n    return;\n  }\n}\n\nfunction handleValidationError (json) {\n  let errorFields = json.fieldConcerned;\n  let message = json.data;\n\n  if (errorFields) {\n    $('.js-login-input').each((index, item) => {\n      let $item = $(item);\n      let inputName = $item.attr('name');\n      if (errorFields.indexOf(inputName) !== -1) {\n        $item.parents('.form-group').find('.js-general-login-error').html(message);\n        showErrorForField($item);\n      }\n    });\n  }\n}\n\nfunction ajaxCall (url, params) {\n  return $.ajax({\n    url: url,\n    data: params,\n    type: 'POST',\n    async: true,\n    xhrFields: {\n      withCredentials: true\n    },\n    success: callbackAjax,\n    error: (jqXHR, textStatus, errorThrown) => {\n      return window.Raven.captureMessage('Login/register ajax post error', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          url: url,\n          params: params\n        }\n      });\n    }\n  });\n}\n\nfunction handleLogin (event) {\n  event.preventDefault();\n\n  lockForm();\n  let $form = $('.js-login-form');\n  let params = {\n    email: $form.find('.js-login-email').val(),\n    password: $form.find('.js-login-password').val(),\n    first_name: $form.find('.js-login-first_name').val(),\n    last_name: $form.find('.js-login-last_name').val(),\n    business_web_site: $form.find('.js-login-business_web_site').val()\n  };\n  return ajaxCall($form.attr('action'), params);\n}\n\n$('.js-login-submit').on('click', handleLogin);\n$('.js-login-form').on('submit', handleLogin);\n\n$('.js-login-input').on('change blur click focus', function () {\n  $(this).parents('.form-group').removeClass('has-error');\n});\n","const $segmentationQuestions = $('.js-segmentation-questions');\n\nif ($segmentationQuestions.length > 0) {\n  const stepCount = parseInt($segmentationQuestions.attr('data-steps-count'), 10);\n  const $answers = $('.js-segmentation-anwsers');\n\n  $answers.on('click', function (event) {\n    event.preventDefault();\n    const value = $(this).attr('data-value');\n    const input = $(this).attr('data-input');\n    const target = $(this).attr('data-target');\n    const $questionBox = $(this).parents('.js-question-box');\n\n    // reseting\n    $('.js-question-box:not([data-first-question])')\n      .not($questionBox)\n      .addClass('hidden')\n      .find('.active')\n      .removeClass('active');\n\n    $questionBox.find('.active').removeClass('active');\n\n    // apply anwser\n    $(this).addClass('active');\n\n    if (input && value) {\n      $('input[name=' + input + ']').val(value);\n    }\n\n    // jump to next question\n    if (target) {\n      $('#' + target).removeClass('hidden');\n    }\n\n    // display/hide submit button\n    $segmentationQuestions.find('.js-answers-submit').toggleClass(\n      'hidden',\n      $segmentationQuestions.find('.active').length < stepCount\n    );\n  });\n}\n","import getParameterByName from '../helpers/getParameterByName';\nimport registration from './registration';\nimport validateFields from './validateFields';\nimport updateForm from './updateForm';\n\nconst $billingForm = $('#billing-form-container');\n\n// Init recurly cith the public API Key\nconst publicAPIKey = $('#recurly-public-api-key').val();\n\n// Validation Timeouts\nlet timeout = null;\n\nwindow.recurly.configure(publicAPIKey);\n\nconst updateBilling = getParameterByName('update-billing');\n\n$billingForm\n  .find('.js-credit_submit').attr('disabled', true)\n  .text($('#payment_please_fill_info').text());\n\n$billingForm\n  .find('.payment_option')\n  .on('click', function () {\n    if ($(this).hasClass('card_option')) {\n      $billingForm\n        .find('.js-credit_submit')\n        .removeClass('hidden');\n\n      $billingForm\n        .find('#paypal_submit')\n        .addClass('hidden');\n\n      $billingForm\n        .find('.payment_option')\n        .toggleClass('selected');\n    } else {\n      $billingForm\n        .find('.js-credit_submit')\n        .addClass('hidden');\n\n      $billingForm\n        .find('#paypal_submit')\n        .removeClass('hidden');\n\n      $billingForm\n        .find('.payment_option')\n        .toggleClass('selected');\n    }\n  });\n\n$billingForm\n  .find('#billing-form')\n  .submit(function (event) {\n    const $form = $(this);\n\n    event.preventDefault();\n    if ($billingForm.find('#countries_select').val().length > 0) {\n      $billingForm\n        .find('#countries_select')\n        .parent()\n        .removeClass('invalid');\n\n      $form\n        .find('.js-credit_submit')\n        .attr('disabled', true)\n        .text($('#please_wait').text());\n\n      $form\n        .find('.error')\n        .addClass('hidden');\n\n      registration.recurlyToken($form);\n    } else {\n      $billingForm\n        .find('#countries_select')\n        .parent()\n        .addClass('invalid');\n    }\n  });\n\n$billingForm.find('.js-terms-and-privacy input[type=\"checkbox\"]').on('change', function () {\n  $('.js-terms-and-privacy').toggleClass('has-error', !this.checked);\n  validateFields($(this), $billingForm);\n});\n\n$('#paypal_submit').on('click', function () {\n  const $form = $billingForm.find('#billing-form');\n  const firstNameValue = $('#first_name_field').val() || '';\n  const lastNameValue = $('#last_name_field').val() || '';\n  const isFirstNameValid = firstNameValue.trim().length > 0;\n  const isLastNameValid = lastNameValue.trim().length > 0;\n\n  $('#first_name_field')\n    .toggleClass('invalid', !isFirstNameValid)\n    .next('.error')\n    .toggleClass('hidden', isFirstNameValid);\n\n  $('#last_name_field')\n    .toggleClass('invalid', !isLastNameValid)\n    .next('.error')\n    .toggleClass('hidden', isFirstNameValid);\n\n  if (isFirstNameValid && isLastNameValid) {\n    registration.paypalRecurlyToken($form);\n  }\n});\n\n$billingForm.find('input').on('keyup', function (event) {\n  if (event.which !== 9) {\n    validateFields($(this), $billingForm);\n  }\n});\n\n$billingForm.find('input').on('keydown', function (event) {\n  if (event.which === 9) {\n    validateFields($(this), $billingForm);\n  }\n});\n\n$billingForm.find('input').on('change', function (event) {\n  validateFields($(this), $billingForm);\n});\n\n$billingForm.find('#want-vat').click(function (event) {\n  event.preventDefault();\n  if (!$billingForm.find('#want-vat-container').hasClass('collapsing')) {\n    $billingForm\n      .find('#vat_number_container')\n      .removeClass('vat_number_padding');\n\n    $billingForm\n      .find('#vat_field')\n      .addClass('valid');\n\n    updateForm(true);\n  }\n});\n\n$billingForm.find('#vat_field').keyup(function () {\n  const vatField = $billingForm.find('#vat_field');\n\n  if (vatField.val().length > 0) {\n    $billingForm\n      .find('.js-credit_submit')\n      .attr('disabled', true)\n      .text($('#please_wait').text());\n  }\n  clearTimeout(timeout);\n  timeout = setTimeout(() => {\n    if (vatField.val().length > 0) {\n      $billingForm\n        .find('.js-credit_submit')\n        .attr('disabled', true)\n        .text($('#please_wait').text());\n\n      validateFields(vatField);\n    } else {\n      $billingForm\n        .find('#plus_tva')\n        .removeClass('hidden');\n\n      vatField\n        .removeClass('invalid')\n        .addClass('valid');\n\n      $billingForm\n        .find('.vat_number > .error')\n        .addClass('hidden');\n\n      updateForm(true);\n    }\n  }, 500);\n});\n\n$billingForm.find('#countries_select').on('change', function () {\n  const country = $(this).val() || '';\n  const isValid = country.length === 2;\n\n  $billingForm\n      .find('#countries_select')\n      .parent()\n      .toggleClass('invalid', !isValid);\n\n  updateForm(true);\n});\n\nconst countryFromFront = $billingForm\n  .find('#locale-country')\n  .val()\n  .toUpperCase();\n\nconst countriesField = $billingForm\n  .find('#countries_select');\n\nif (countryFromFront !== '-') {\n  countriesField.val(countryFromFront);\n}\n\nif (countriesField.val() === null) {\n  countriesField.val(-1);\n}\nif (countriesField.val()) {\n  if (countriesField.val().length !== 2) {\n    $billingForm\n      .find('#countries_select')\n      .parent()\n      .addClass('invalid');\n  } else {\n    $billingForm\n      .find('#countries_select')\n      .parent()\n      .removeClass('invalid');\n  }\n}\n\n// To update with Cookie Logic\nconst coupon = getParameterByName('cpc') ||\n  $billingForm.find('#coupon_code').val();\n\nif (coupon !== '') {\n  // Validation already calls updateForm\n  validateFields($billingForm.find('#coupon_code'));\n} else {\n  updateForm(true);\n}\n\n$('.billing_info .collapse').on('hidden.bs.collapse', function () {\n  $('input', this)\n    .val('')\n    .removeClass('invalid');\n});\n\nif (updateBilling) {\n  $('#want-vat').click();\n  $('#want-address').click();\n}\n","'use strict';\n\nvar changePlanLink = $('#confirm-plan-change .confirm');\nvar baseHref = changePlanLink.attr('href');\n\n$('.choose-plan').on('click', function (event) {\n  var $this = $(this);\n  var chosenPlan = $this.attr('href');\n  var sendToRecurly = $this.data('target') === '#recurly-plan';\n\n  chosenPlan = chosenPlan.replace('#', '');\n  changePlanLink.attr('href', baseHref + chosenPlan);\n\n  if (sendToRecurly) {\n    event.preventDefault();\n    var lang = window.wooGlobal.language;\n    var url = '/' + lang + '/register/plan/' + chosenPlan;\n    window.location = url;\n  } else {\n    return $('#confirm-plan-change .price').text(\n      $this.parents('tr').find('.real_price').text()\n    );\n  }\n});\n\n$('#user-plan-content tr.ok td:not(.current):not(:first-child)')\n  .on('click', function (event) {\n    event.preventDefault();\n    return $('#confirm-plan-change')\n      .trigger('show-modal')\n      .find('.price')\n      .text($(this).text());\n  });\n\n$('#cancel-button.deal-period').on('click', function (event) {\n  var dealModal;\n  var $this = $(this);\n  if ($this.hasClass('deal-period')) {\n    event.preventDefault();\n    dealModal = $('#deal-modal');\n    $('#confirm-cancel').modal('hide');\n    return dealModal.modal('show');\n  }\n});\n\n$('#take-deal').on('click', function () {\n  return $('#deal-modal').off('hidden');\n});\n\n$('#decline-deal').on('click', function () {\n  $('#cancel-button.deal-period').removeClass('deal-period');\n  return $('#confirm-cancel #cancel-button').trigger('click');\n});\n","const $lists = $('.js-form-list');\nconst $submit = $('.js-form-submit');\n\n$lists.each((index, item) => {\n  const $list = $(item);\n  const $listItems = $list.find('.js-form-list-item');\n  const $target = $($list.attr('data-target'));\n\n  $listItems.click(function (event) {\n    event.preventDefault();\n\n    const $this = $(this);\n    const value = $this.attr('data-value');\n\n    $submit.removeClass('disabled').removeAttr('disabled');\n    $listItems.removeClass('active');\n    $this.addClass('active');\n    $target.val(value);\n  });\n});\n","'use strict';\n\nvar perfCascade = require('perf-cascade/dist/perf-cascade.min.js');\n\n$('body').externalLinks();\n\ndocument.querySelectorAll('.js-perfcascade-legend').forEach(function (element) {\n  element.appendChild(perfCascade.makeLegend());\n});\n\nvar options = {\n  showIndicatorIcons: false,\n  leftColumnWith: 30\n};\n\n$('.js-perfcascade-display-har').each(function (element) {\n  var $this = $(this);\n  var har = JSON.parse($this.html());\n  var harSvg = perfCascade.fromHar(har, options);\n  $this.replaceWith(harSvg);\n});\n","'use strict';\n\nvar Promise = require('bluebird');\nvar imageReader = require('./imageReader');\nrequire('../components/checkbox');\nrequire('./imagePreview');\n\nvar $pdfEditorContainer = $('.js-pdf-editor-container');\nvar $mobileLanguageSelector = $pdfEditorContainer.find('.js-mobile-language-selection');\nvar $editModal = $pdfEditorContainer.find('.edit-modal');\nvar $wysiwyg = $editModal.find('.js-wysiwyg');\nvar $saveButtons = $pdfEditorContainer.find('.js-btn-save');\nvar $resetButtons = $pdfEditorContainer.find('.js-btn-reset');\nvar $forms = $pdfEditorContainer.find('form');\nvar originalData = $forms.toArray().map(function (form) {\n  return $(form).serializeArray();\n});\n\n$mobileLanguageSelector.click(function (e) {\n  var $this = $(this);\n  var target = $this.attr('data-target');\n  $(target).tab('show');\n});\n\n$wysiwyg.summernote({\n  height: '300px',\n  toolbar: [\n    ['style', ['bold', 'italic', 'underline', 'clear']],\n    ['para', ['ul', 'ol']],\n    ['insert', ['link']]\n  ],\n  placeholder: 'placeholder'\n});\n\nvar modalContext = {\n  $form: null,   // The form linked to the active modal\n  $button: null, // Button clicked to open the modal\n  $input: null   // The input currently edited by the modal\n};\n\n$editModal.on('shown.bs.modal', function (event) {\n  var $this = $(this);\n\n  modalContext.$button = $(event.relatedTarget);\n  modalContext.$form = modalContext.$button.parents('form');\n\n  var inputTargetName = modalContext.$button.attr('data-input');\n  modalContext.$input = modalContext.$form.find('input[name=\"' + inputTargetName + '\"]');\n\n  var $wysiwyg = $this.find('.js-wysiwyg');\n  $wysiwyg.code(modalContext.$input.val());\n\n  // Override the placeholder\n  var placeholder = modalContext.$button.attr('data-placeholder') || '';\n  $('.note-editable').attr('data-placeholder', placeholder);\n});\n\n$editModal.find('.js-btn-done').click(function (event) {\n  var code = $wysiwyg.code();\n\n  // Update the input linked to this modal\n  modalContext.$input.val(code);\n\n  // Update the preview box\n  var $preview = modalContext.$input.siblings('.js-text-preview');\n  $preview.html(code);\n  $preview.html($preview.text().substr(0, 64) + '...');\n});\n\nfunction filterNotChanged (base, data) {\n  var requiredFields = [\n    'company-descr', 'company-ending', 'custom-color', 'footer-text',\n    'language', 'active-scoring', 'active-ending', 'remove-links',\n    'print-format', 'id', 'langCode'\n  ];\n\n  for (var i = 0; i < data.length; i++) {\n    var baseEntry = base[i];\n    var entry = data[i];\n    if (requiredFields.indexOf(entry.name) !== -1) {\n      continue;\n    } else if (baseEntry.name === entry.name && baseEntry.value === entry.value) {\n      delete data[i];\n    }\n  }\n  return data;\n}\n\nfunction saveForm (formIndex) {\n  var base = originalData[formIndex];\n  var data = $($forms[formIndex]).serializeArray();\n  data = filterNotChanged(base, data);\n\n  return Promise.resolve($.post('/en/template/edit', data))\n  .then(function (result) {\n    if (!result.success) {\n      throw new Error('Saving template data failed');\n    }\n  });\n}\n\nfunction saveFormLogoAndSignature (formIndex) {\n  var $form = $($forms[formIndex]);\n  var $imageInputs = $form.find('.js-image-input-file');\n\n  return Promise.all($imageInputs.map(function (index, imageInput) {\n    var file = imageInput.files[0];\n    return imageReader.readAsBase64(file)\n    .then(function (data) {\n      if (!data) {\n        return null;\n      }\n\n      var $imageInput = $(imageInput);\n      var postData = {\n        userId: String(window.wooGlobal.user.id),\n        logoType: $imageInput.attr('data-logo-type'),\n        logoData: data\n      };\n\n      var templateId = $form.find('input[name=id]').val();\n      var templateLang = $form.find('input[name=langCode]').val();\n\n      if (templateId) {\n        postData.templateId = templateId;\n      } else if (templateLang) {\n        postData.templateLang = templateLang;\n      }\n\n      return $.post('/en/template/editLogo', postData)\n      .then(function (result) {\n        if (!result.success) {\n          throw new Error('Saving template logo failed');\n        }\n      });\n    });\n  }).toArray());\n}\n\nfunction saveForms () {\n  return Promise.all(\n    $forms.map(function (index) {\n      return saveForm(index)\n      .then(function () {\n        return saveFormLogoAndSignature(index);\n      });\n    }\n  ).toArray());\n}\n\n$saveButtons.click(function (event) {\n  $saveButtons.removeClass('btn-save-success');\n  $saveButtons.removeClass('btn-save-error');\n  $saveButtons.addClass('btn-save-loading');\n  saveForms()\n  .then(function (results) {\n    $saveButtons.addClass('btn-save-success');\n  })\n  .catch(function () {\n    $saveButtons.addClass('btn-save-error');\n  })\n  .finally(function () {\n    $saveButtons.removeClass('btn-save-loading');\n  });\n});\n\n$resetButtons.click(function (event) {\n  var $this = $(this);\n  var $form = $this.parents('form');\n  var $input = $this.siblings('label').find('input');\n  var data = {\n    userId: String(window.wooGlobal.user.id),\n    logoType: $input.attr('data-logo-type')\n  };\n\n  var templateId = $form.find('input[name=id]').val();\n  var templateLang = $form.find('input[name=langCode]').val();\n\n  $this.closest('.panel-body').find('img').attr('src', '');\n\n  if (templateId) {\n    data.templateId = templateId;\n  } else if (templateLang) {\n    data.templateLang = templateLang;\n  }\n\n  Promise.resolve($.post('/en/template/editLogo', data));\n});\n","'use strict';\n\nvar recaptchaResponseValidation = require('../g-recaptcha/recaptchaResponseValidation');\nvar generationAjaxCall = require('../helpers/generationAjaxCall');\n\n$('.js-btn-regeneration').on('click', function (event) {\n  event.preventDefault();\n  recaptchaResponseValidation(window['js-grecaptcha-callback-first-generation']);\n});\n\n$('.js-first-generation-form').on('submit', function (event) {\n  event.preventDefault();\n  var $thisGenForm = $(this);\n  var params = $thisGenForm.serialize();\n\n  generationAjaxCall(params, $thisGenForm);\n});\n","'use strict';\n\nvar replaceExtLink = require('./replaceExtLink');\n\n$(window).trigger('scroll');\nreplaceExtLink();\n\n/*\n  Remove the \"hide-on-load\" css class\n  Which is used to fix visual glitches when js is not ready\n */\n$('.hide-on-load').removeClass('hide-on-load');\n","'use strict';\n\nfunction halloween () {\n  var moment = window.moment;\n  if (typeof moment === 'undefined' || typeof moment.range === 'undefined') {\n    return;\n  }\n  var startDate = new Date(2015, 9, 29);\n  var endDate = new Date(2015, 10, 2);\n  var period = moment.range(startDate, endDate);\n  var isInHalloweenPeroid = period.contains(new Date());\n  var $logo = $('#top .navbar-brand');\n  var canTrigger = true;\n\n  if (!isInHalloweenPeroid) {\n    return;\n  }\n\n  $logo.addClass('halloween');\n\n  function batThrower (event) {\n    var number = Math.max(Math.floor(Math.random() * 15), 5);\n    for (var i = 0; i < number; i++) {\n      var delay = Math.floor(Math.random() * 500);\n      setTimeout(function () {\n        var particule = new Particule(event);\n        particule.generate();\n      }, delay);\n    }\n  }\n\n  var Particule = function (event) {\n    this.diag = Math.sqrt(Math.pow(window.innerHeight, 2) + Math.pow(window.innerWidth, 2));\n    this.origin = {\n      x: event.clientX,\n      y: event.clientY\n    };\n    this.end = {\n      directionX: Math.round((Math.random() * 2) - 1) || 1\n    };\n    this.end.x = Math.floor(Math.random() * this.diag) * this.end.directionX;\n    this.end.y = Math.floor(Math.random() * this.diag);\n    this.element = document.createElement('div');\n  };\n\n  Particule.prototype.generate = function () {\n    var $div = $(this.element).clone();\n    var angle = (180 / Math.PI) * Math.atan2(this.end.y, this.end.x) + 90;\n    var scale = 'scale(0.25)';\n    var rotate = 'rotate(' + angle + 'deg)';\n    var translate = 'translate(0,0)';\n    var transform = [translate, scale, rotate].join(' ');\n    this.rotate = rotate;\n    $div.addClass('halloween-particule').css({\n      'top': this.origin.y - 10,\n      'left': this.origin.x - 32,\n      'visibility': 'hidden',\n      'transform': transform\n    });\n    $('body').append($div);\n    this.animate($div);\n  };\n\n  Particule.prototype.animate = function ($div) {\n    var translate = 'translate(' + this.end.x + 'px,' + this.end.y + 'px)';\n    var scale = 'scale(' + Math.random() * 1 + ')';\n    var speed = 100;\n    var dist = Math.sqrt(Math.pow(this.end.x, 2) + Math.pow(this.end.y, 2));\n    var time = dist / speed;\n    var timeRandom = Math.max(Math.random() * (dist / speed), time);\n    var transform = [translate, scale, this.rotate].join(' ');\n    setTimeout(function () {\n      $div.css({\n        'visibility': 'visible',\n        'transform': transform,\n        'transition': 'transform ' + timeRandom + 's  cubic-bezier(0,0.5,0.5,1)'\n      });\n    }, 10);\n    $div.fadeOut(timeRandom * 1000, function () {\n      $(this).remove();\n    });\n  };\n\n  $logo.on('mouseenter', function (event) {\n    if (canTrigger === true) {\n      canTrigger = false;\n      batThrower(event);\n      setTimeout(function () { canTrigger = true; }, 1000);\n    }\n  });\n}\n\nmodule.exports = halloween;\n","'use strict';\n\nfunction newYear () {\n  var moment = window.moment;\n  if (typeof moment === 'undefined' || typeof moment.range === 'undefined') {\n    return;\n  }\n  var startDate = new Date(2015, 11, 23);\n  var endDate = new Date(2016, 0, 5);\n  var period = moment.range(startDate, endDate);\n  var newYearPeriod = period.contains(new Date());\n  var $logo = $('#top .navbar-brand');\n\n  if (!newYearPeriod) {\n    return;\n  }\n\n  $logo.addClass('new-year-2015');\n\n  $logo.on('mouseenter', function (event) {\n    console.log('new year!');\n  });\n}\n\nmodule.exports = newYear;\n","'use strict';\n\nfunction slugify (text) {\n  return text.toString().toLowerCase().trim()\n    .replace(/\\s+/g, '-') // Replace spaces with -\n    .replace(/[^\\w-]+/g, '') // Remove all non-word chars\n    .replace(/-+/g, '-'); // Replace multiple - with single -\n}\n\nmodule.exports = slugify;\n","'use strict';\n// Google Universal Analytics tracking code wrapper:\n// outputs:\n// ga(\n//  'send',\n//  'event',\n//  [ 'link' || customEventCategoty, eg: 'modal-dialog' ],\n//  [ 'click' || customEventType, eg: 'hover' ],\n//  [eventLabel]\n// );\nfunction gaTracker () {\n  var args = Array.prototype.slice.call(arguments);\n\n  if (window.wooGlobal && window.wooGlobal.noAnalytics) {\n    return false;\n  }\n\n  if (args && args[0].substring(0, 1) !== '_') {\n    if (args.length === 1) {\n      args.unshift('link', 'click');\n    }\n\n    args.unshift('send', 'event');\n  }\n\n  window.ga = window.ga || (() => {});\n  return window.ga.apply(this, args);\n}\n\nmodule.exports = gaTracker;\n","'use strict';\n\nvar scrollTo = require('../helpers/scrollTo');\nvar viewport = require('../helpers/responsiveViewport');\nvar isEmptyField = require('./isEmptyField');\nvar searchDuplicateInputsValues = require('./searchDuplicateInputsValues');\nvar $navbar = $('#top .navbar');\nvar $genbar = $('form.ajax-generate-report');\nvar recaptchaResponseValidation = require('../g-recaptcha/recaptchaResponseValidation');\nvar generationAjaxCall = require('../helpers/generationAjaxCall');\n\nfunction centerOptionsContent ($form) {\n  const isTablet = viewport.isTablet();\n  var genbarWidth = '100%';\n\n  if ($form.length > 0) {\n    genbarWidth = $form.width();\n\n    if (isTablet) {\n      genbarWidth = $form.find('.input-container').outerWidth();\n    }\n\n    $form.find('.js-options-content').css({\n      'width': genbarWidth\n    });\n  }\n}\n\nfunction fullPagePanel (bool) {\n  $('body').toggleClass('no-scrolls', bool);\n  if (bool) {\n    scrollTo('#top', 0);\n  }\n}\n\nfunction genbarButtonType ($genbar, primary) {\n  if ($genbar.hasClass('generation-bar-in-header')) {\n    if (primary) {\n      $genbar\n        .find('.generation-bar-btn:first')\n        .removeClass('btn-default')\n        .addClass('btn-primary');\n    } else if (viewport.isTablet()) {\n      $genbar\n        .find('.generation-bar-btn:first')\n        .removeClass('btn-primary')\n        .addClass('btn-default');\n    }\n  }\n}\n\nfunction genbarValidation ($thisGenBar) {\n  if ($thisGenBar.length > 0) {\n    var $requiredInput = $thisGenBar.find('.js-validate-review-url');\n    var isEmptyRequest = false;\n\n    $thisGenBar\n      .removeClass('error')\n      .find('.error')\n      .removeClass('error');\n\n    if (isEmptyField($requiredInput)) {\n      isEmptyRequest = true;\n      $thisGenBar.addClass('error');\n      $requiredInput.addClass('error');\n    }\n\n    return isEmptyRequest;\n  }\n}\n\nfunction generationBarHeader () {\n  if ($genbar.length > 0) {\n    var $allInputs = $genbar.find('input');\n    var $genbarInHeader = $navbar.find('.js-generation-bar-in-header');\n    var $topSubmitButton = $genbar.find('#generation-bar-in-header-submit');\n    var $topInput = $genbar.find('#generation-bar-in-header-input');\n    let isTablet = viewport.isTablet();\n    var touchEvent = $('html').hasClass('touch') ? 'touchstart' : 'mousedown';\n\n    var openOptions = function () {\n      $genbar.addClass('options-open');\n      $topSubmitButton.attr('tabindex', -1);\n      window.setTimeout(function () {\n        $topInput.focus();\n      }, 0);\n    };\n\n    var closeOptions = function () {\n      $genbar.removeClass('options-open');\n      $topSubmitButton.attr('tabindex', 2);\n    };\n\n    var toggleOptions = function () {\n      ($genbar.hasClass('options-open')) ? closeOptions() : openOptions();\n    };\n    $(searchDuplicateInputsValues($allInputs))\n      .addClass('error duplicate-value');\n\n    // center options content\n    centerOptionsContent($genbarInHeader);\n\n    $(window).on('resize', function () {\n      isTablet = viewport.isTablet();\n      centerOptionsContent($genbarInHeader);\n\n      if (isTablet) {\n        $navbar.removeClass('genbar-mobile-style');\n        fullPagePanel(false);\n        genbarButtonType($genbar, $genbar.hasClass('options-open'));\n      } else {\n        genbarButtonType($genbar, true);\n      }\n    });\n\n    if (!isTablet) {\n      genbarButtonType($genbar, true);\n    }\n\n    // open/close options\n    $genbar.find('.js-generation-bar-options')\n      .on(touchEvent, '.js-options-btn', function (event) {\n        var $thisGenBar = $(this).parents('form.generation-bar');\n        toggleOptions();\n        centerOptionsContent($thisGenBar);\n        genbarButtonType($thisGenBar, $thisGenBar.hasClass('options-open'));\n      });\n\n    // focus input\n    $genbar.find('.js-validate-review-url').on('focus', function () {\n      var $thisGenBar = $(this).parents('form.generation-bar');\n      $thisGenBar.find('.js-generation-bar-options')\n        .removeClass('hidden').addClass('focus');\n      genbarButtonType($thisGenBar, true);\n    });\n\n    // blur input\n    $genbar.find('.js-validate-review-url').on('blur', function (event) {\n      var $thisGenBar = $(this).parents('form.generation-bar');\n      var $thisOptions = $thisGenBar.find('.js-generation-bar-options');\n\n      $thisOptions.removeClass('focus');\n\n      if ($thisGenBar.hasClass('options-open')) {\n        genbarButtonType($thisGenBar, true);\n      } else {\n        $thisOptions.addClass('hidden');\n        genbarButtonType($thisGenBar, false);\n      }\n    });\n\n    // close options content popin\n    $genbar.find('.js-options-content')\n      .on('click', '.btn-close', function (event) {\n        var $thisGenBar = $(this).parents('form.generation-bar');\n        event.preventDefault();\n        closeOptions();\n        $thisGenBar.find('.js-generation-bar-options').addClass('hidden');\n        genbarButtonType($thisGenBar, false);\n      });\n\n    // prevent form validation from a deeper input (when key pressing Enter)\n    $genbar.find('.js-options-content input[type=text]')\n      .on('keypress', function (event) {\n        if (event.charCode === 13) {\n          event.preventDefault();\n        }\n      });\n\n    // open genbar in mobile\n    $navbar.on('click', '.js-toggle-genbar', function (event) {\n      var toggleMobileGenbar =\n      !isTablet && !$navbar.hasClass('genbar-mobile-style');\n      $navbar.toggleClass('genbar-mobile-style', toggleMobileGenbar);\n      fullPagePanel($navbar.hasClass('genbar-mobile-style'));\n      centerOptionsContent($genbarInHeader);\n    });\n\n    // close genbar in mobile on menu open\n    $navbar.on('click', '.navbar-toggle', function () {\n      $navbar.removeClass('genbar-mobile-style');\n      fullPagePanel(false);\n    });\n\n    // Check on change event for input\n    $genbar.on('change keyup', '.js-validate-review-url', function (event) {\n      genbarValidation($(event.delegateTarget));\n    });\n\n    // re-generate review\n    $('.js-regenerate').on('click', function (event) {\n      var response = recaptchaResponseValidation(window['js-grecaptcha-callback-regeneration']);\n      if (!response) {\n        return;\n      }\n\n      var $data = $('.js-generation-data');\n      var urlToReGenerate = $data.attr('data-regenerate-url');\n      var competitorOne = $data.attr('data-regenerate-competitor-one');\n      var competitorTwo = $data.attr('data-regenerate-competitor-two');\n      var competitorThree = $data.attr('data-regenerate-competitor-three');\n\n      var params = 'url=' + urlToReGenerate +\n        '&competitors[1]=' + competitorOne +\n        '&competitors[2]=' + competitorTwo +\n        '&competitors[3]=' + competitorThree +\n        '&g-recaptcha-response=' + response;\n\n      $genbar.first().trigger('submit', [params]);\n    });\n\n    // Submit url to review\n    $genbar.on('submit', function (event, params) {\n      event.preventDefault();\n      var $thisGenBar = $(this);\n      var $isPopup = $thisGenBar.attr('data-popup') || false;\n      var isEmptyRequest = false;\n      params = params || '';\n\n      $(searchDuplicateInputsValues($thisGenBar.find('input'))).val('');\n\n      if (\n        !$thisGenBar.hasClass('ajax-valid') &&\n        !$thisGenBar.hasClass('generation-bar-disabled') &&\n        !$thisGenBar.hasClass('waiting-for-ajax')\n      ) {\n        if (params.length <= 0) {\n          isEmptyRequest = genbarValidation($thisGenBar);\n\n          if (isEmptyRequest) {\n            return false;\n          }\n\n          var response = recaptchaResponseValidation(window['js-grecaptcha-callback-generation']);\n          if (!response) {\n            return;\n          }\n\n          params = $thisGenBar.serialize();\n        }\n\n        $thisGenBar.addClass('waiting-for-ajax');\n\n        generationAjaxCall(params, $thisGenBar, $isPopup);\n      }\n    });\n  }\n}\n\nmodule.exports = generationBarHeader;\n","'use strict';\n\nvar $fixedTopNavBar = $('#genbar-fixed');\nvar $genBarTop = $('#genbar-top');\nvar $genBarBottom = $('#genbar-bottom');\n\nfunction showFixedTopNavBar () {\n  var topOffset = $genBarTop.offset();\n  var bottomOffset = $genBarBottom.offset();\n  var scroll = document.body.scrollTop;\n  var bodyHeight = $('body').height();\n\n  // check offsets\n  if (topOffset && bottomOffset) {\n    topOffset.bottom = $genBarTop.outerHeight() + topOffset.top;\n    if (scroll > topOffset.bottom && scroll < bottomOffset.top - bodyHeight) {\n      return $fixedTopNavBar.removeClass('navbar-hidden');\n    } else {\n      return $fixedTopNavBar.addClass('navbar-hidden');\n    }\n  }\n}\n\nfunction fixedTopBar () {\n  if ($fixedTopNavBar) {\n    $(document).ready(function () {\n      $fixedTopNavBar.removeClass('hidden');\n      return showFixedTopNavBar();\n    });\n\n    $(window).on('scroll', function () {\n      return showFixedTopNavBar();\n    });\n  }\n}\n\nmodule.exports = fixedTopBar;\n","'use strict';\n\nfunction genbarModal () {\n  var $modalGenbar = $('.js-modal-genbar');\n\n  if ($modalGenbar.length > 0) {\n    $modalGenbar.on('click', '.js-add-remove-competitor', function (event) {\n      var $thisModalGenbar = $(event.delegateTarget);\n      var $competitors = $thisModalGenbar.find('.add-competitors-container');\n      var isCompetitorVisible = $competitors.hasClass('hidden');\n\n      event.preventDefault();\n\n      if (!isCompetitorVisible) {\n        $competitors.find('input.form-control').val('');\n      }\n\n      $competitors.toggleClass('hidden', !isCompetitorVisible);\n      $thisModalGenbar.find('.js-add-remove-competitor').toggleClass('hidden');\n    });\n  }\n}\n\nmodule.exports = genbarModal;\n","'use strict';\n\nfunction setCookie (name, value, days) {\n  var expires = null;\n\n  if (days) {\n    var date = new Date();\n    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n    expires = '; expires=' + date.toGMTString();\n  } else {\n    expires = '';\n  }\n\n  document.cookie = escape(name) + '=' + escape(value) + expires + '; path=/';\n}\n\nfunction getCookie (name) {\n  var cookies = document.cookie.split(';');\n  for (var index = 0; index < cookies.length; index++) {\n    var cookie = cookies[index];\n    var pair = cookie.split('=').map(function (string) {\n      return string.trim();\n    });\n\n    if (pair[0] === escape(name)) {\n      return unescape(pair[1]);\n    }\n  }\n  return null;\n}\n\nfunction eraseCookie (name) {\n  setCookie(name, '', -1);\n}\n\nmodule.exports = {\n  set: setCookie,\n  get: getCookie,\n  erase: eraseCookie\n};\n","'use strict';\n\nvar reWeburl = new RegExp(\n  '^' +\n  '(?:(?:https?|ftp)://)?' +\n  '(?:\\\\S+(?::\\\\S*)?@)?' +\n  '(?:' +\n  '(?!10(?:\\\\.\\\\d{1,3}){3})' +\n  '(?!127(?:\\\\.\\\\d{1,3}){3})' +\n  '(?!169\\\\.254(?:\\\\.\\\\d{1,3}){2})' +\n  '(?!192\\\\.168(?:\\\\.\\\\d{1,3}){2})' +\n  '(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})' +\n  '(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])' +\n  '(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}' +\n  '(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))' +\n  '|' +\n  '(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)' +\n  '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)*' +\n  '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))' +\n  ')' +\n  '(?::\\\\d{2,5})?' +\n  '(?:/[^\\\\s]*)?' +\n  '$', 'i'\n);\n\nfunction validateURL (url) {\n  if (url) {\n    return reWeburl.test(url);\n  }\n  return false;\n}\n\nmodule.exports = validateURL;\n","'use strict';\nimport { isDesktopLarge } from './responsiveViewport';\n\nfunction getElementTopOffset () {\n  var headerOffset = 0;\n  var flyingMenuOffset = 0;\n  if (!$('body').hasClass('no-header')) {\n    headerOffset = $('header.navbar-fixed-top').height() || 60;\n  }\n  if (!isDesktopLarge()) {\n    flyingMenuOffset = $('#flying').height() || 70;\n  }\n  return Math.abs(headerOffset + flyingMenuOffset);\n}\n\nfunction scrollTo (id, speed, easing, callback) {\n  var $element;\n  var destination = 0;\n  var $body = $('html, body');\n  speed = speed || 0;\n\n  if (typeof id === 'string') {\n    $element = $(id);\n  } else {\n    $element = id;\n  }\n\n  if ($element.length) {\n    var layoutOffset = getElementTopOffset();\n    destination = $element.offset().top - layoutOffset;\n    return $body.stop().animate({\n      scrollTop: destination\n    }, speed, easing, callback);\n  }\n}\n\nmodule.exports = scrollTo;\n","'use strict';\nfunction screenXl () {\n  return window.innerWidth > 1079;\n}\n\nfunction screenLg () {\n  return window.innerWidth > 991;\n}\n\nfunction screenMd () {\n  return window.innerWidth > 767;\n}\n\nfunction screenSm () {\n  return window.innerWidth > 425;\n}\n\nfunction screenXs () {\n  return window.innerWidth > 375;\n}\n\nmodule.exports = {\n  isDesktopLarge: screenXl,\n  isDesktop: screenLg,\n  isTablet: screenMd,\n  isMobile: screenSm,\n  isMobileSmall: screenXs\n};\n","'use strict';\n\nimport {isDesktopLarge} from '../helpers/responsiveViewport';\n\nvar $holder = $('#flying .flying-tooltip') || {};\n\nfunction leftNavigatorTooltip () {\n  return $holder.tooltip(getOptions());\n}\n\n$(window).resize(function () {\n  leftNavigatorTooltip();\n});\n\nfunction getOptions () {\n  return (!isDesktopLarge()) ? null : 'destroy';\n}\n\nmodule.exports = leftNavigatorTooltip;\n","'use strict';\n\nvar scrollTo = require('./scrollTo');\n\nfunction scrollToElement ($element, speed, callback) {\n  speed = speed || 500;\n  if ($element.length) {\n    return scrollTo($element, speed, callback);\n  }\n}\n\nmodule.exports = scrollToElement;\n","'use stric';\n\nvar $checkboxes = $('button.checkbox');\n\n$checkboxes.each(function (index, checkbox) {\n  var $checkbox = $(checkbox);\n\n  var $input = $checkbox.find('input[type=hidden]');\n  if ($input.length) {\n    if ($input.val().length <= 0) {\n      $input.val('0');\n    }\n    $checkbox.toggleClass('checked', $input.val() === '1');\n  }\n});\n\n$(document).on('click', 'button.checkbox', function (event) {\n  event.preventDefault();\n\n  var $this = $(this);\n  var isChecked = $this.hasClass('checked');\n\n  var $input = $this.find('input[type=hidden]');\n  if ($input.length) {\n    $input.val(+!isChecked);\n  }\n\n  $this.toggleClass('checked', !isChecked);\n});\n","'use strict';\n\nvar $ = window.jQuery;\n\n$.extend($.expr[':'], {\n  valueEmpty: function (event) {\n    return $(event).val() === '' && event.value === '';\n  }\n});\n\n$('.js-suggested-competitor-button').on('click', function (event) {\n  var competitorValue;\n  var $input;\n  var $this = $(this);\n  var value = $this.attr('data-value');\n  var $inputsAvailable = $('.js-competitor-input:valueEmpty');\n\n  event.preventDefault();\n\n  if ($inputsAvailable.length < 2) {\n    $('.js-suggested-competitor-container').fadeOut();\n  }\n\n  if ($inputsAvailable.length > 0) {\n    $input = $inputsAvailable.first();\n    competitorValue = $input.val();\n\n    if ((competitorValue != null) || competitorValue === '') {\n      $this.parent('.tag').addClass('hidden');\n      return $input.val(value);\n    }\n  }\n});\n","/* global $ */\n\nwindow.addEventListener('message', function (event) {\n  if (typeof event.data === 'object' && typeof event.data.event === 'string') {\n    const handlers = {\n      'auth-ga': handleGASyncEvent,\n      'auth-gwt': handleGWTSyncEvent,\n      'auth-fb': handleFBSyncEvent\n    };\n\n    const handler = handlers[event.data.event];\n    if (handler) {\n      handler(event.data);\n    }\n  }\n});\n\nfunction handleFBSyncEvent (data) {\n  if (!data.name) {\n    return;\n  }\n\n  const $container = $('.js-fb-settings-container');\n  const showOnRes = $container.find('.js-show-on-push-res');\n  const hideOnRes = $container.find('.js-hide-on-push-res');\n  const syncedText = $container.find('.js-fb-synced-text');\n\n  showOnRes.removeClass('hidden');\n  hideOnRes.addClass('hidden');\n  syncedText.val(data.name);\n}\n\nfunction handleGASyncEvent (data) {\n  if (!data.webPropertyId || !data.name || !data.email) {\n    return;\n  }\n\n  const $container = $('.js-ga-settings-container');\n  const $showOnRes = $container.find('.js-show-on-push-res');\n  const $hideOnRes = $container.find('.js-hide-on-push-res');\n  const $syncedText = $container.find('.js-ga-synced-text');\n\n  $showOnRes.removeClass('hidden');\n  $hideOnRes.toggleClass('hidden', true);\n  $syncedText.val(`${data.email} - ${data.name} - [${data.webPropertyId}]`);\n}\n\nfunction handleGWTSyncEvent (data) {\n  if (!data.gwtAccountEmail || !data.gwtSite) {\n    return;\n  }\n\n  const $container = $('.js-gwt-settings-container');\n  const showOnRes = $container.find('.js-show-on-push-res');\n  const hideOnRes = $container.find('.js-hide-on-push-res');\n  const syncedText = $container.find('.js-gwt-synced-text');\n\n  showOnRes.removeClass('hidden');\n  hideOnRes.addClass('hidden');\n  syncedText.val(`${data.gwtAccountEmail} - ${data.gwtSite}`);\n}\n\nfunction windowOpen (dataURL) {\n  return window.open(\n    dataURL,\n    '_blank',\n    'directories=no,' + 'titlebar=no,' + 'toolbar=no,' + 'location=no,' +\n    'status=no,' + 'menubar=no,' + 'scrollbars=no,' + 'resizable=no,' +\n    'height=600,' + 'width=900'\n  );\n}\n\n$('.load-in-modal').on('click', function (event) {\n  event.preventDefault();\n\n  const $this = $(this);\n  const authUrl = $this.attr('data-auth-url');\n\n  if (!authUrl) {\n    return;\n  }\n\n  return windowOpen(authUrl);\n});\n","/* global $ */\n\nimport Promise from 'bluebird';\n\nconst $container = $('.js-settings-container');\nconst $competitorInputs = $container.find('.js-competitor-input');\nconst $competitorBtnSave = $container.find('.js-competitor-btn-save');\nconst $emailSubscriptionsForm = $container.find('.js-email-subscriptions-form');\nconst $emailSubscriptionsBtnSave = $container.find('.js-email-subscriptions-btn-save');\n\nfunction setCompetitors (projectUrl, competitors) {\n  const lang = window.wooGlobal.language;\n  const apiURL = `/${lang}/project/setcompetitors`;\n  return Promise.resolve($.post(apiURL, {\n    projectUrl: projectUrl,\n    competitors: competitors\n  }))\n  .then((response) => {\n    if (response.result === false) {\n      throw new Error(response.reason);\n    }\n  });\n}\n\nfunction setEmailSubscriptions (projectUrl, subscriptions) {\n  const lang = window.wooGlobal.language;\n  const apiURL = `/${lang}/project/setemailsubscriptions`;\n  return Promise.resolve($.post(apiURL, {\n    projectUrl: projectUrl,\n    subscriptions: subscriptions\n  }))\n  .then((response) => {\n    if (response.result === false) {\n      throw new Error(response.reason);\n    }\n  });\n}\n\n$competitorBtnSave.on('click', function (event) {\n  const $this = $(this);\n\n  $this.removeClass('btn-async-success');\n  $this.removeClass('btn-async-error');\n  $this.addClass('btn-async-loading');\n\n  const projectUrl = $this.attr('data-project-url');\n  const competitors = $competitorInputs.map(function (index, input) {\n    return input.value;\n  }).toArray();\n\n  setCompetitors(projectUrl, competitors)\n  .then(() => { $this.addClass('btn-async-success'); })\n  .catch(() => { $this.addClass('btn-async-error'); })\n  .finally(() => { $this.removeClass('btn-async-loading'); });\n});\n\n$emailSubscriptionsBtnSave.on('click', function (event) {\n  const $this = $(this);\n\n  $this.removeClass('btn-async-success');\n  $this.removeClass('btn-async-error');\n  $this.addClass('btn-async-loading');\n\n  const projectUrl = $this.attr('data-project-url');\n  const subscriptions = $emailSubscriptionsForm.serializeArray()\n  .reduce((acc, entry) => {\n    return Object.assign(acc, {\n      [entry.name]: entry.value\n    });\n  }, {});\n\n  setEmailSubscriptions(projectUrl, subscriptions)\n  .then(() => { $this.addClass('btn-async-success'); })\n  .catch(() => { $this.addClass('btn-async-error'); })\n  .finally(() => { $this.removeClass('btn-async-loading'); });\n});\n","'use strict';\n\nvar counter = require('../review/counter/counter');\n\nfunction initScoreCircle ($score) {\n  var $holder = $score.find('.holder');\n  var widthHeight = $holder.width();\n  var radius = widthHeight / 2;\n  var value = parseInt($score.attr('data-value'), 10) || 0;\n\n  var options = {\n    animate: false,\n    holder: $holder.get(0),\n    score: value,\n    padding: 0,\n    radius: radius,\n    widthHeight: widthHeight\n  };\n  counter.init(options);\n}\n\nmodule.exports = initScoreCircle;\n","'use strict';\n\nvar initScoreChart = require('../helpers/initScoreChart');\n\nfunction loadMoreReports () {\n  var nextStep = 0;\n  var reportsPerCall = 15;\n\n  $('.next-reports-loader').on('click', '.add-items', function (event) {\n    var $button = $(this);\n\n    if (!$button.hasClass('disabled')) {\n      $button.addClass('disabled');\n\n      nextStep += reportsPerCall;\n      $.ajax({\n        type: 'GET',\n        data: 'strt=' + nextStep + '&nbr=' + reportsPerCall,\n        cache: false,\n        url: './ajaxreports',\n        dataType: 'html',\n        success: function (html) {\n          var $newItems = $(html);\n          var $reportsList = $('#reports .user-report-list');\n\n          $reportsList.append($newItems)\n            .find('.score:not(.charts-drawn)')\n            .each(function () {\n              $(this).addClass('charts-drawn');\n              initScoreChart($(this));\n            });\n\n          if ($newItems.length < reportsPerCall) {\n            $button.addClass('hidden disabled');\n          } else {\n            $button.removeClass('hidden disabled');\n          }\n\n          $('body').formatTime();\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n          window.Raven.captureMessage('Overview load more report error', {\n            extra: {\n              textStatus: textStatus,\n              errorThrown: errorThrown,\n              nextStep: nextStep,\n              reportsPerCall: reportsPerCall\n            }\n          });\n\n          return $('#generic-error-modal').modal('show');\n        }\n      });\n    }\n  });\n}\n\nmodule.exports = loadMoreReports;\n","'use strict';\n\n/* globals $ */\n\nvar reviews = require('../../services/reviews');\n\nvar $container = $('.js-settings-container');\nvar $deleteButton = $container.find('.js-btn-delete');\n\n$deleteButton.on('click', function (event) {\n  $deleteButton.removeClass('btn-async-success');\n  $deleteButton.removeClass('btn-async-error');\n  $deleteButton.addClass('btn-async-loading');\n\n  var $this = $(this);\n  var projectUrl = $this.attr('data-project-url');\n\n  reviews.deleteAdvancedReview(projectUrl)\n  .then(function () {\n    $deleteButton.addClass('btn-async-success');\n    window.location.href = '/';\n  })\n  .catch(function () {\n    $deleteButton.addClass('btn-async-error');\n  })\n  .finally(function () {\n    $deleteButton.removeClass('btn-async-loading');\n  });\n});\n","'use strict';\n\nfunction overviewTooltip () {\n  return $('.options-icons .overview-tooltip').tooltip();\n}\n\nmodule.exports = overviewTooltip;\n","var $createModal = $('.js-create-project-modal');\nvar $confirmButton = $createModal.find('.js-btn-confirm');\nvar $createLinks = $('.js-link-create');\n\n$createLinks.on('click', function (event) {\n  var $this = $(this);\n  var projectUrl = $this.attr('data-project-url');\n  $confirmButton.attr('data-project-url', projectUrl);\n});\n\n$confirmButton.on('click', function () {\n  $confirmButton.removeClass('btn-async-success');\n  $confirmButton.removeClass('btn-async-error');\n  $confirmButton.addClass('btn-async-loading');\n\n  var $this = $(this);\n  var lang = window.wooGlobal.language;\n  var projectUrl = $this.attr('data-project-url');\n\n  window.location.href = '/' + lang + '/star/' + projectUrl;\n});\n","'use strict';\n\n/* globals $ */\n\nvar reviews = require('../../services/reviews');\n\nvar $deleteModal = $('.js-delete-project-modal');\nvar $confirmButton = $deleteModal.find('.js-btn-confirm');\nvar $deleteBtnLinks = $('.js-btn-delete');\n\n$deleteBtnLinks.on('click', function (event) {\n  var $this = $(this);\n  var projectUrl = $this.attr('data-project-url');\n  $confirmButton.attr('data-project-url', projectUrl);\n});\n\n$confirmButton.on('click', function () {\n  $confirmButton.removeClass('btn-async-success');\n  $confirmButton.removeClass('btn-async-error');\n  $confirmButton.addClass('btn-async-loading');\n\n  var $this = $(this);\n  var projectUrl = $this.attr('data-project-url');\n\n  reviews.deleteAdvancedReview(projectUrl)\n  .then(function () {\n    $confirmButton.addClass('btn-async-success');\n    window.location.href = '/';\n  })\n  .catch(function () {\n    $confirmButton.addClass('btn-async-error');\n  })\n  .finally(function () {\n    $confirmButton.removeClass('btn-async-loading');\n  });\n});\n","'use strict';\n\nvar cookies = require('../helpers/cookies');\nvar isExtensionVisible = cookies.get('extention_link');\nvar $extentionLink = $('.extension-link');\nvar extentionURL;\n\nwindow.wooGlobal = window.wooGlobal || {};\n\nrequire('../helpers/browserDetection');\n\nif (window.wooGlobal.browser === 'chrome' ||\n    window.wooGlobal.browser === 'firefox'\n  ) {\n  extentionURL = $extentionLink.attr('data-url-' + window.wooGlobal.browser);\n  $extentionLink.attr('href', extentionURL);\n}\n\nif (isExtensionVisible !== '1' && extentionURL !== undefined) {\n  $extentionLink.removeClass('hidden');\n}\n\n$extentionLink.on('click', '.close', function (event) {\n  event.preventDefault();\n  var $link = $(event.delegateTarget);\n  $link.addClass('hidden');\n  cookies.set('extention_link', 1, 7);\n});\n","'use strict';\n\nvar $hiddenForm = $('#get-pdf');\nvar $siteInput = $hiddenForm.find('input[name=\"site\"]');\n\n$('.js-download-pdf').on('click', function (event) {\n  var $this = $(this);\n  var site = $this.attr('data-site');\n  var type = $this.attr('data-type');\n  event.preventDefault();\n  $siteInput.val(site);\n  $hiddenForm.find('.download-as-' + type).trigger('click');\n});\n","'use strict';\n\nvar userId = window.wooGlobal.user && window.wooGlobal.user.id;\n\nfunction overviewResetExpertStatus () {\n  $.ajax({\n    type: 'POST',\n    cache: false,\n    url: './resetexpertstatus',\n    success: function (data) {\n      var $expertsBox = $('#expert-notification');\n      $expertsBox.addClass('hidden');\n    },\n    error: function (jqXHR, textStatus, errorThrown) {\n      window.Raven.captureMessage('Overview reset expert status', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          userId: userId\n        }\n      });\n    }\n  });\n}\n\n$.ajax({\n  type: 'POST',\n  cache: false,\n  url: './getexpertstatus',\n  dataType: 'json',\n  success: function (data) {\n    if (data.expertStatus === 'INTERESTED') {\n      var $expertsBox = $('#expert-notification');\n      $expertsBox.removeClass('hidden');\n\n      $expertsBox.on('click', '.close', function (event) {\n        overviewResetExpertStatus();\n      });\n    }\n  },\n  error: function (jqXHR, textStatus, errorThrown) {\n    window.Raven.captureMessage('Overview get expert status', {\n      extra: {\n        textStatus: textStatus,\n        errorThrown: errorThrown\n      }\n    });\n  }\n});\n","'use strict';\n\n$('#expert-notification a').on('click', function (event) {\n  event.preventDefault();\n  event.stopPropagation();\n  $('#testinfo').modal({\n    show: true\n  });\n});\n","'use strict';\n\nfunction isEmptyField ($input) {\n  if ($input && $input.length > 0) {\n    return $input.val().trim().length < 1;\n  }\n  return false;\n}\n\nmodule.exports = isEmptyField;\n","'use strict';\n\nfunction bindCriteriumTapEvent () {\n  return $('.criterium:not(.advice-binded)').addClass('advice-binded');\n}\n\nmodule.exports = bindCriteriumTapEvent;\n","'use strict';\n\nvar separator = '?';\nwindow.ipadUrl = 'inapp://leftbarInit';\n\n$('#report-content .module').each(function (item) {\n  var $moduleItem = $(this);\n  var moduleId = $moduleItem.attr('id');\n  var moduleTitle = $moduleItem\n    .find('>.module-content>h2:first-child')\n    .text()\n    .replace(/ /g, '')\n    .replace(/\\r?\\n/g, '');\n  var ipadUrl = ipadUrl +\n    separator +\n    'c' +\n    item +\n    '=' +\n    encodeURI(moduleId) +\n    ',' +\n    encodeURI(moduleTitle);\n\n  separator = '&';\n});\n","'use strict';\n\nvar iframe = document.createElement('IFRAME');\niframe.setAttribute('src', window.ipadUrl);\ndocument.documentElement.appendChild(iframe);\niframe.parentNode.removeChild(iframe);\niframe = null;\n","'use strict';\r\n\r\nvar scrollToElement = require('../helpers/scrollToElement');\r\n\r\nfunction doHighlight (whlParam, url) {\r\n  url = url || '';\r\n  var whlBody = $('body');\r\n  var whlHighlighted = [];\r\n  var triggerTime = 2000;\r\n  var caseExit = false;\r\n  var $blockToHl = $('.js-generation-bar-in-header');\r\n  var $input = $('.js-validate-review-url');\r\n  var contentLength;\r\n  var whlOverlay;\r\n\r\n  switch (whlParam) {\r\n    case 'inside-review':\r\n      scrollToElement($('body'), 500, function () {\r\n        caseExit = true;\r\n        whlHighlighted.push($blockToHl);\r\n\r\n        setTimeout(function () {\r\n          // add a path to the input\r\n          if (url.slice(-1) !== '/') {\r\n            url += '/';\r\n          }\r\n          $input.prop('value', url);\r\n\r\n          // put cursor at end\r\n          contentLength = $input.prop('value').length;\r\n          $input[0].setSelectionRange(contentLength, contentLength);\r\n          $input.focus();\r\n        }, 0);\r\n      });\r\n      break;\r\n\r\n    case 'competitors':\r\n      caseExit = true;\r\n      whlHighlighted.push($blockToHl);\r\n\r\n      setTimeout(function () {\r\n        $blockToHl.find('.js-generation-bar-options').trigger('click');\r\n      }, triggerTime);\r\n      break;\r\n\r\n    case 'notification':\r\n      $blockToHl = $('#email-notification');\r\n      caseExit = true;\r\n      whlHighlighted.push($blockToHl);\r\n      whlHighlighted.push($('#email_settings'));\r\n\r\n      setTimeout(function () {\r\n        scrollToElement($blockToHl);\r\n      }, triggerTime);\r\n      break;\r\n\r\n    case 'start-project':\r\n      caseExit = true;\r\n      whlHighlighted.push($('#report-priorities .convert'));\r\n\r\n      // allready pj\r\n      whlHighlighted.push($('#flying #project'));\r\n      whlHighlighted.push($('#flying #todos'));\r\n      whlHighlighted.push($('#flying #settings'));\r\n      break;\r\n\r\n    case 'star':\r\n      $blockToHl = $('#reports-list .entry:first-child');\r\n      caseExit = true;\r\n      whlHighlighted.push($blockToHl);\r\n      setTimeout(function () {\r\n        $blockToHl.find('i.icon-star-empty').tooltip('show');\r\n      }, triggerTime);\r\n      break;\r\n  }\r\n\r\n  if (caseExit) {\r\n    whlBody.addClass('overlayed').append('<div id=\"whl-overlay\"></div>');\r\n    whlOverlay = whlBody.find('#whl-overlay');\r\n\r\n    for (var i in whlHighlighted) {\r\n      whlHighlighted[i].addClass('whl-highlighted');\r\n    }\r\n\r\n    whlOverlay.on('click', function (event) {\r\n      whlBody.removeClass('overlayed');\r\n      whlOverlay.fadeOut(150, function () {\r\n        for (i in whlHighlighted) {\r\n          whlHighlighted[i].removeClass('whl-highlighted');\r\n        }\r\n        whlOverlay.off('click').remove();\r\n      });\r\n    });\r\n  }\r\n}\r\n\r\nmodule.exports = doHighlight;\r\n","'use strict';\n\nvar loadMustache = require('./loadMustache');\nvar mustachePromise = null;\nvar templateData = {\n  main: '',\n  templates: {}\n};\n\nwindow.mustacheTemplates = window.mustacheTemplates || {};\n\nfunction getMustacheFiles () {\n  if (mustachePromise) {\n    return mustachePromise;\n  }\n\n  // Promises in jquery 1.7 are not advanced enough for chaining apparently\n  var templatePromises = $('.mustache-to-load').map(function (i, elm) {\n    var url = $(elm).attr('href');\n    var rel = $(elm).attr('rel');\n    var name = $(elm).attr('name');\n    var deferred = new $.Deferred();\n\n    loadMustache(url)\n      .then(function (template) {\n        window.mustacheTemplates[name] = template;\n        templateData.templates[name] = template;\n\n        if (rel === 'template') {\n          templateData.main = template;\n        } else {\n          window.Mustache.compilePartial(name, template);\n        }\n\n        return deferred.resolve(template);\n      }, function (error) {\n        window.Raven.captureMessage('Load Mustache file error', {\n          extra: {\n            url: url\n          }\n        });\n\n        return deferred.reject(error);\n      });\n    return deferred.promise();\n  });\n\n  mustachePromise = new $.Deferred();\n\n  $.when.apply($, templatePromises).then(function () {\n    return mustachePromise.resolve(templateData);\n  }, function (error) {\n    return mustachePromise.reject(error);\n  });\n  return mustachePromise.promise();\n}\n\nmodule.exports = getMustacheFiles;\n","'use strict';\n\nfunction loadingSentence () {\n  var i = 0;\n  var loadingSentenceLiI = 0;\n  var listOfCriteriums = [];\n  var loadingSentenceLi = ' ';\n  var $loading = $('.loading_sentence');\n\n  $('h3', '#content').each(function (i) {\n    var text;\n    if (i > 3 && i !== 11 && i !== 12 && i !== 15) {\n      text = $(this).text();\n      if (text.indexOf('[YML:') === -1) {\n        return listOfCriteriums.push(text);\n      }\n    }\n  });\n\n  while (i < listOfCriteriums.length) {\n    loadingSentenceLi = loadingSentenceLi +\n      '<li>' +\n      listOfCriteriums[i] +\n      '</li>';\n    i++;\n  }\n\n  $loading.find('span ul').html(loadingSentenceLi);\n  $loading.show();\n\n  window.loadingSentenceLiIInterval = setInterval(function () {\n    $loading.find('span ul li')\n      .removeClass('active next')\n      .eq(loadingSentenceLiI)\n      .addClass('active');\n\n    $loading.find('span ul li')\n      .eq(loadingSentenceLiI + 1)\n      .addClass('next');\n\n    loadingSentenceLiI++;\n\n    if (listOfCriteriums.length > 0) {\n      if (loadingSentenceLiI === listOfCriteriums.length) {\n        clearInterval(window.loadingSentenceLiIInterval);\n      }\n    }\n\n    if (listOfCriteriums.length + 1 === loadingSentenceLiI) {\n      loadingSentenceLiI = 0;\n      return loadingSentenceLiI;\n    }\n  }, 750);\n\n  return window.loadingSentenceLiIInterval;\n}\n\nmodule.exports = {\n  init: loadingSentence,\n  clearInterval: clearInterval(window.loadingSentenceLiIInterval)\n};\n","'use strict';\n\n// check if a module deserve to stay visible,\n// If not -> delete it + delete his link in the left menu\n\nfunction checkEmptyModuleSection () {\n  var $reportContent = $('#report-content');\n  var $leftNav = $('#left-nav');\n  var $moduleNavLink;\n\n  $reportContent.find('.module.module-empty').addClass('hidden');\n\n  $reportContent.find('.module:not(.hidden)').each(function () {\n    var $module = $(this);\n    var $moduleToCheck = $module\n      .find('.teasing-box, .criterium:not(.hidden), .review-cta');\n\n    if ($moduleToCheck.length === 0) {\n      $module.addClass('hidden');\n\n      // Hide module in nav\n      $moduleNavLink = $leftNav.find('a[href=#' + $module.attr('id') + ']');\n      $moduleNavLink.addClass('hidden');\n    }\n  });\n\n  // Hide section where all modules are hidden\n  $leftNav.find('.nav-section').each(function () {\n    var $sectionNav = $(this);\n    var $sectionLink = $sectionNav.find('a.section-title');\n    var $sectionsToCheck = $sectionNav\n      .find('.inpage-link:not(.section-title, .hidden)');\n\n    if ($sectionLink.hasClass('inpage-link') &&\n      $sectionsToCheck.length === 0) {\n      var sectionSelector = $sectionLink.attr('href');\n\n      $(sectionSelector).addClass('hidden');\n      $sectionNav.addClass('hidden');\n    }\n  });\n}\n\nmodule.exports = checkEmptyModuleSection;\n","'use strict';\n\nvar competizeAll = require('./competitors/competizeAll');\n\nfunction onMustacheLoaded () {\n  competizeAll(); // only when loading is done for regular crit\n}\n\nmodule.exports = onMustacheLoaded;\n","'use strict';\n\n$.fn.extend({\n  prettifyBigUrls: function () {\n    return this.each(function () {\n      var content, lastPart, middle, newContent, obj, splitted;\n      obj = $(this);\n      content = obj.text();\n      splitted = content.split('/');\n      if (splitted.length > 1) {\n        lastPart = splitted.pop();\n        middle = splitted.join('/');\n        newContent =\n          '<span class=\"url-middle-crop\">' + middle + '</span>' +\n          '<span class=\"url-crop-rest\">/' + lastPart + '</span>';\n        return obj.replaceWith($(newContent));\n      }\n    });\n  }\n});\n\nfunction prettifyUrlInReviewLists () {\n  return $('.criterium .part')\n    .find('.cropable-url, .underscore-url')\n    .prettifyBigUrls();\n}\n\nmodule.exports = prettifyUrlInReviewLists;\n","'use strict';\n\nvar getSettingsDataFor = require('./getSettingsDataFor');\n\n// Settings inside review page\nfunction renderSettingBox () {\n  var $container = $('#settings-review-box-container');\n  var $template = $container.find('#settings-review-box-mustache-tpl');\n  var url = $template.attr('href');\n  var mustacheName = $template.attr('name');\n\n  return $.ajax({\n    url: url,\n    type: 'GET',\n    dataType: 'html',\n    cache: true,\n    success: function (data) {\n      window.mustacheTemplates[mustacheName] = data;\n      return getSettingsDataFor($container, mustacheName);\n    },\n    error: function (jqXHR, textStatus, errorThrown) {\n      return window.Raven.captureMessage('Review settings render error', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          url: url\n        }\n      });\n    }\n  });\n}\n\nmodule.exports = renderSettingBox;\n","'use strict';\n\nvar doHighlight = require('./highlighter');\nvar resolveDataURL = require('../helpers/resolveDataURL');\n\nfunction renderProject () {\n  // render project\n\n  $.getJSON(resolveDataURL('/%lang%/project/data/general/%url%'))\n  .then(function (info) {\n    if (info.young) {\n      $('#young-message').show();\n    }\n  });\n\n  $('.js-action-highlight-inside-review').on('click', function (event) {\n    var url = $(this).attr('data-url');\n\n    event.preventDefault();\n    doHighlight('inside-review', url);\n  });\n\n  $('.js-action-gen-inside-review').on('click', function (event) {\n    var url = this.dataset.url;\n\n    event.preventDefault();\n    doHighlight('inside-review', url);\n    $('#generation-bar-in-header-submit').click();\n  });\n}\n\nmodule.exports = renderProject;\n","'use strict';\n\nvar sendMenuItemToApp = require('./sendMenuItemToApp');\n\nfunction activeMenuItem () {\n  var waypointOffset = 20;\n  var currentMod = 0;\n\n  return $(window).on('scroll', function () {\n    var id;\n    var $this;\n    var modTmp = 0;\n\n    $('.module').each(function () {\n      var topPosy = $(this).offset().top;\n\n      if (topPosy <= window.scrollY + waypointOffset + 100) {\n        return modTmp++;\n      } else {\n        return false;\n      }\n    });\n\n    if (modTmp !== currentMod) {\n      currentMod = modTmp;\n      $this = $('.module:nth-child(' + currentMod + ')');\n      id = $this.attr('id');\n\n      if (id !== undefined) {\n        window.waypointUrl = 'inapp://scroll?section=' + id;\n        clearTimeout(window.waypointTimer);\n\n        window.waypointTimer = setTimeout(function () {\n          return sendMenuItemToApp();\n        }, 80);\n\n        return window.waypointTimer;\n      }\n    }\n  });\n}\n\nmodule.exports = activeMenuItem;\n","'use strict';\n\n// get a query GET params by name\nfunction getParameterByName (name) {\n  if (typeof name !== 'undefined') {\n    name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n    var regexS = '[\\\\?&]' + name + '=([^&#]*)';\n    var regex = new RegExp(regexS);\n    var results = regex.exec(window.location.search);\n    if (typeof results === 'undefined' || results === null) {\n      return '';\n    }\n    return decodeURIComponent(results[1].replace(/\\+/g, ' '));\n  }\n  return false;\n}\n\nmodule.exports = getParameterByName;\n","'use strict';\n\nfunction cleanWooRankLinks () {\n  $('a[href*=\"/woorank.com\"], a[href*=\".woorank.com\"]').attr('href', '');\n  $('a[href^=\"/\"]').remove();\n}\n\nmodule.exports = cleanWooRankLinks;\n","'use strict';\n\nvar charts = require('./charts');\n\nfunction renderCharts () {\n  $('.part.chart:not(.rendered)')\n    .addClass('rendered')\n    .each(function (index, partElm) {\n      var $part, data, type;\n\n      $part = $(partElm);\n      data = null;\n      try {\n        data = JSON.parse($part.find('.data').text());\n      } catch (_error) {\n        return;\n      }\n\n      type = $part.data('type');\n\n      switch (type) {\n        case 'line-chart':\n          return charts.line($part, data);\n        case 'geo':\n          return charts.geo($part, data);\n        case 'pie':\n          return charts.pie($part, data);\n        case 'gender-age-chart':\n          return charts.genderAge($part, data);\n        default:\n          return charts.render($part, data, type);\n      }\n    });\n}\n\nmodule.exports = renderCharts;\n","'use strict';\n\n// show advice when click on criterium\n$(document).on('click', '.criterium', function (event) {\n  var $this = $(this);\n\n  if (!($(event.target).closest('a, .no-advice-target').length > 0)) {\n    event.preventDefault();\n    $this.toggleClass('open-crit').find('.criterium-advice').slideToggle(100);\n  }\n});\n","'use strict';\n\n// show the arrow below the top 5 pro list\n$('#report-priorities .show-more-task a').on('click', function (event) {\n  event.preventDefault();\n  $('#report-priorities .show-more-task i').toggleClass('hidden');\n  return $(this).off('click');\n});\n","'use strict';\n\nvar getCriteriumData = require('./getCriteriumData');\n\nfunction initReportGeneration () {\n  window.currentWebsite = $('#dashboard-site>h1>a').data('url');\n  return getCriteriumData();\n}\n\nmodule.exports = initReportGeneration;\n","'use strict';\n\nfunction fixInnerIssue () {\n  var removeExtLinks = $('#pdf-header').hasClass('remove-links');\n  var $logo = $('#company-logo');\n  var marginTop = (220 - ($logo.height() + 8)) / 2;\n  var $dirs = $('#criterium-local_directories .directory-container');\n\n  $('.criterium-content .table td img').attr('style', '');\n\n  $('.criterium-advice').each(function () {\n    var textTmp = $(this).text().replace(/^\\s+|\\s+$/g, '');\n\n    if (textTmp === '') {\n      return $(this).remove();\n    }\n  });\n\n  $('.quick-links a').each(function () {\n    var classTmp = $(this).attr('class');\n\n    $(this).parent().append('<span class=\"' + classTmp + '\"></span>');\n    return $(this).remove();\n  });\n\n  $('body a.js-ext-link').each(function () {\n    var $this = $(this).removeClass('js-ext-link');\n    var currentHref = '' + $this.attr('href');\n    var newHref = currentHref.replace('ext://', 'http://');\n\n    return $this.attr('href', newHref);\n  });\n\n  if (removeExtLinks) {\n    $('a').each(function () {\n      var $anchor = $(this);\n      var href = $anchor.attr('href') || '';\n\n      if (/^https?:\\/\\/.*/.test(href)) {\n        return $anchor.attr('href', '#').addClass('removed-ext-href');\n      }\n    });\n  }\n\n  $(\n    '#criterium-19 table th:nth-child(3),' +\n    '#criterium-19 table td:nth-child(3)'\n  ).remove();\n\n  $('#toc>div').each(function () {\n    var $this = $(this);\n\n    if ($this.children().length === 0) {\n      return $this.remove();\n    }\n  });\n\n  $('#report-content>.module').each(function () {\n    var $this = $(this);\n    var $child = $this.find('.criterium:not(.hidden)');\n    if ($child.length === 0) {\n      $this.hide();\n    }\n    if (!$this.is(':visible')) {\n      return $('#toc #' + $this.attr('id') + '-link').hide();\n    }\n  });\n\n  $logo.css('margin-top', marginTop + 'px');\n\n  if ($dirs.length <= 0) {\n    return $dirs.remove();\n  }\n}\n\nmodule.exports = fixInnerIssue;\n","'use strict';\n\nfunction rgba2hex (r, g, b, a) {\n  var hexColor = 'dddddd';\n\n  if (r < 256 && g < 256 && b < 256 && a <= 1) {\n    r = r * a + 255 * (1 - a);\n    g = g * a + 255 * (1 - a);\n    b = b * a + 255 * (1 - a);\n    hexColor = ((r << 16) | (g << 8) | b).toString(16);\n  }\n\n  return hexColor;\n}\n\nmodule.exports = rgba2hex;\n","'use strict';\n\nmodule.exports = {\n  white: '#FFFFFF',\n  grey: '#AAB2BD',\n  greySmoke: '#F5F7FA',\n  greylight: '#CCD1D9',\n  greyMedium: '#656D78',\n  greyDark: '#434A54',\n  greyDarker: '#353B48',\n  primary: '#428BCA',\n  primaryDarker: '#2B5C86',\n  success: '#5CB85C',\n  warning: '#F89D0E',\n  error: '#D9534F',\n  black: '#000000'\n};\n","'use strict';\n\nvar clearErrorOnField = require('./clearErrorOnField');\nvar performMailCheckJs = require('./performMailCheck');\nvar showErrorForField = require('./showErrorForField');\nvar validateEmailAddress = require('../helpers/validateEmail');\n\nfunction performFieldValidation ($elements) {\n  var isValid = true;\n\n  $elements.each(function () {\n    var valTmp;\n    var $this = $(this);\n\n    // remove error on every field\n    clearErrorOnField($this);\n\n    if ($this.hasClass('mailcheck')) {\n      valTmp = $this.val();\n      valTmp = $.trim(valTmp);\n\n      $this.val(valTmp);\n\n      // validate emails fields\n      if (valTmp === '') {\n        isValid = false;\n        return showErrorForField($this);\n      } else if (!validateEmailAddress($this)) {\n        isValid = false;\n        return showErrorForField($this, 'mail');\n      } else {\n        return performMailCheckJs($this);\n      }\n    } else if ($this.hasClass('password')) {\n      // validate passwords field\n      if ($this.val() === '') {\n        showErrorForField($this);\n        isValid = false;\n        return isValid;\n      }\n    }\n  });\n\n  // return is valid or not\n  return isValid;\n}\n\nmodule.exports = performFieldValidation;\n","'use strict';\n\nfunction clearErrorOnField ($element) {\n  var parent = $element.parent().removeClass('error has-error');\n\n  return parent.prev('.error-msg').removeClass('visible');\n}\n\nmodule.exports = clearErrorOnField;\n","'use strict';\n\nfunction recaptchaResponseValidation (id) {\n  var response = window.grecaptcha.getResponse(id);\n  if (!response) {\n    window.grecaptcha.execute(id);\n    return;\n  } else {\n    return response;\n  }\n}\n\nmodule.exports = recaptchaResponseValidation;\n","'use strict';\n\nvar $trialCTA = $('.js-pricing-trial-cta');\n\n$trialCTA.find('.js-trial-present').on('click', function (event) {\n  if (!$trialCTA.hasClass('present-opened')) {\n    event.preventDefault();\n    $trialCTA.addClass('present-opened');\n    // Wait for the animation end (see .illustration-container in css)\n    return setTimeout(function () {\n      window.location = $('.js-trial-btn').attr('href');\n    }, 2000);\n  }\n});\n","'use strict';\n\nfunction showErrorForField ($element, textClass, textMsg) {\n  var $parent = $element.parent();\n  var $msgContainer = $parent.find('.error-msg');\n\n  if (textClass == null) {\n    textClass = 'default';\n  }\n\n  if (textMsg == null) {\n    textMsg = false;\n  }\n\n  if (textClass !== 'suggest') {\n    $parent.addClass('error has-error');\n  }\n\n  $msgContainer.addClass('visible');\n  $msgContainer.find('>span').hide();\n  $msgContainer.find('>span.' + textClass).show();\n\n  if (textMsg) {\n    return $msgContainer.find('>span.' + textClass).html(textMsg);\n  }\n}\n\nmodule.exports = showErrorForField;\n","const registration = {\n  recurlyToken: $form => {\n    window.recurly.token($form[0], (err, token) => {\n      if (err) {\n        $('#server_errors_display').removeClass('hidden');\n        $('#server_errors_text').html(err.message);\n\n        $form\n          .find('.js-credit_submit')\n          .attr('disabled', false)\n          .text(registration.getSubmitText);\n      } else {\n        registration.callSubscribeOnFront(token, $form);\n      }\n    });\n  },\n  paypalRecurlyToken: $form => {\n    const options = {\n      description: 'Woorank Subscription',\n      country: $form.find('#countries_select').val()\n    };\n\n    $form.addClass('hidden');\n    $('#waiting_for_paypal').removeClass('hidden');\n\n    window.recurly.paypal(options, (err, token) => {\n      if (err) {\n        $('#server_errors_display').removeClass('hidden');\n        $('#server_errors_text').html(err.message);\n        $form.removeClass('hidden');\n        $('#waiting_for_paypal').removeClass('hidden');\n      } else {\n        registration.callSubscribeOnFront(token, $form);\n      }\n    });\n  },\n  callSubscribeOnFront: (token, $form) => {\n    const lang = window.wooGlobal.language;\n    const planCode = $form.find('#plan_code').val();\n    const couponCode = $form.find('#coupon_code').val();\n    const accountCode = $form.find('#account_code').val();\n    const email = $form.find('#email_field').val();\n    const firstName = $form.find('#first_name_field').val();\n    const lastName = $form.find('#last_name_field').val();\n    const companyName = $form.find('#company_name_field').val();\n    const countryCode = $form.find('#countries_select').val();\n    const vatNumber = $form.find('#vat_field').val();\n    const currency = $form.find('#currency').text();\n    const creditCard = $form\n      .find('.card_option')\n      .hasClass('selected') ? 1 : 0;\n    const recurlyToken = token.id;\n\n    $.post('/' + lang + '/recurly/subscribe', {\n      plan_code: planCode,\n      coupon_code: couponCode,\n      account_code: accountCode,\n      email: email,\n      first_name: firstName,\n      last_name: lastName,\n      company_name: companyName,\n      country_code: countryCode,\n      vat_number: vatNumber,\n      credit_card: creditCard,\n      recurly_token: recurlyToken,\n      currency: currency\n    }, function (response) {\n      if (!response.data) {\n        return;\n      }\n\n      if (response.data.success === true) {\n        window.location = $form.attr('action');\n      } else {\n        $('#server_errors_display').removeClass('hidden');\n        $('#server_errors_text').html(response.data.validationErrors);\n\n        $form.find('.js-credit_submit')\n          .attr('disabled', false)\n          .text(registration.getSubmitText);\n      }\n    });\n  },\n  getSubmitText: () => {\n    const getParameterByName = require('../helpers/getParameterByName');\n    const updateBilling = getParameterByName('update-billing');\n    let submitText = $('#start_free_trial').text();\n    if (updateBilling) {\n      submitText = $('#update_billing').text();\n    }\n    return submitText;\n  }\n};\n\nmodule.exports = registration;\n","import updateForm from './updateForm';\n\nlet validCoupon = false;\nlet validVat = false;\nlet vatCheckRequest;\nconst validation = {\n  tos: (checked, next) => {\n    if (!checked) {\n      return next(false);\n    }\n    return next(true);\n  },\n  required: (value, next) => {\n    if (value === null || value === '') {\n      return next(false);\n    }\n\n    next(true);\n  },\n  creditCardNumber: (cardNumber, next) => {\n    next(window.recurly.validate.cardNumber(cardNumber));\n  },\n  creditCardExpiration: (expirationMonth, expirationYear, next) => {\n    next(window.recurly.validate.expiry(expirationMonth, expirationYear));\n  },\n  creditCardCVV: (cvv, next) => {\n    next(window.recurly.validate.cvv(cvv));\n  },\n  vatCheck: (vat, next) => {\n    const lang = window.wooGlobal.language;\n    const vatCleaned = vat\n      .toUpperCase()\n      .replace(/ |-|_|\\./g, '');\n\n    if (vatCheckRequest) {\n      vatCheckRequest.abort();\n    }\n\n    vatCheckRequest = $.get('/' + lang + '/register/vatcheck', {\n      vat: vatCleaned\n    }, json => {\n      validVat = json.valid && !json.hasOwnProperty('error');\n\n      next(validVat);\n    }, 'json');\n  },\n  couponCheck: (couponCode, next) => {\n    // No coupon always valid\n    if (couponCode.length === 0) {\n      return next(true);\n    }\n\n    $.get(\n      'https://api.recurly.com/js/v1/plans/v2pro/coupons/' +\n      couponCode,\n      {\n        plan: $('#billing-form-container').find('#plan_code').val(),\n        coupon: couponCode,\n        key: $('#recurly-public-api-key').val()\n      }, json => {\n        validCoupon = !json.error;\n\n        next(validCoupon);\n      });\n  }\n};\n\nfunction handleValidation ($field, isValid) {\n  const pricingFields = ['coupon_code', 'country_select', 'vat_field'];\n  const refreshPrice = pricingFields.indexOf($field.attr('id')) !== -1;\n\n  $field.toggleClass('invalid', !isValid)\n    .toggleClass('valid', isValid)\n    .parent()\n    .find('.error')\n    .toggleClass('hidden', isValid);\n\n  updateForm(refreshPrice, validCoupon, validVat);\n}\n\nfunction validateFields ($validationField) {\n  const validationType = $validationField.data('validation');\n  let value = $validationField.val();\n  if ($validationField.is('[type=checkbox]')) {\n    value = $validationField[0].checked;\n  }\n\n  $validationField.removeClass('invalid')\n    .parent()\n    .find('.error')\n    .addClass('hidden');\n\n  if (typeof validationType !== 'undefined') {\n    validation[validationType](value, isValid => {\n      handleValidation($validationField, isValid);\n    });\n  }\n}\n\nmodule.exports = validateFields;\n","'use strict';\n\nimport getPrice from './getPrice';\nimport activateToolTip from './activateTooltip';\nimport updateSubmitButton from './updateSubmitButton';\n\nlet priceTimeout = null;\nconst validations = {\n  vat: false,\n  coupon: false\n};\n\nfunction updateForm (refreshPrice, validCoupon, validVat) {\n  validations.vat = validVat;\n  validations.coupon = validCoupon;\n\n  if (refreshPrice) {\n    clearTimeout(priceTimeout);\n    priceTimeout = setTimeout(() => {\n      getPrice(validCoupon, validVat);\n    }, 300);\n  }\n  activateToolTip();\n  updateSubmitButton();\n}\n\nmodule.exports = updateForm;\n","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2015 Petka Antonov\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 * bluebird build version 2.11.0\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, cancel, using, filter, any, each, timers\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = _dereq_(\"./schedule.js\");\nvar Queue = _dereq_(\"./queue.js\");\nvar util = _dereq_(\"./util.js\");\n\nfunction Async() {\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._trampolineEnabled = true;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule =\n        schedule.isStatic ? schedule(this.drainQueues) : schedule;\n}\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n    if (util.hasDevTools) {\n        this._trampolineEnabled = false;\n    }\n};\n\nAsync.prototype.enableTrampoline = function() {\n    if (!this._trampolineEnabled) {\n        this._trampolineEnabled = true;\n        this._schedule = function(fn) {\n            setTimeout(fn, 0);\n        };\n    }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._normalQueue.length() > 0;\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/m3OTXk\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nif (!util.hasDevTools) {\n    Async.prototype.invokeLater = AsyncInvokeLater;\n    Async.prototype.invoke = AsyncInvoke;\n    Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n    if (schedule.isStatic) {\n        schedule = function(fn) { setTimeout(fn, 0); };\n    }\n    Async.prototype.invokeLater = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                setTimeout(function() {\n                    fn.call(receiver, arg);\n                }, 100);\n            });\n        }\n    };\n\n    Async.prototype.invoke = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                fn.call(receiver, arg);\n            });\n        }\n    };\n\n    Async.prototype.settlePromises = function(promise) {\n        if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n        } else {\n            this._schedule(function() {\n                promise._settlePromises();\n            });\n        }\n    };\n}\n\nAsync.prototype.invokeFirst = function (fn, receiver, arg) {\n    this._normalQueue.unshift(fn, receiver, arg);\n    this._queueTick();\n};\n\nAsync.prototype._drainQueue = function(queue) {\n    while (queue.length() > 0) {\n        var fn = queue.shift();\n        if (typeof fn !== \"function\") {\n            fn._settlePromises();\n            continue;\n        }\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n};\n\nAsync.prototype._drainQueues = function () {\n    this._drainQueue(this._normalQueue);\n    this._reset();\n    this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = new Async();\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue.js\":28,\"./schedule.js\":31,\"./util.js\":38}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise) {\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (this._isPending()) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, ret._progress, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, ret._progress, ret, context);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 131072;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~131072);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 131072) === 131072;\n};\n\nPromise.bind = function (thisArg, value) {\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        maybePromise._then(function() {\n            ret._resolveCallback(value);\n        }, ret._reject, ret._progress, ret, null);\n    } else {\n        ret._resolveCallback(value);\n    }\n    return ret;\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = _dereq_(\"./promise.js\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise.js\":23}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util.js\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n    if (!true) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util.js\":38}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar errors = _dereq_(\"./errors.js\");\nvar async = _dereq_(\"./async.js\");\nvar CancellationError = errors.CancellationError;\n\nPromise.prototype._cancel = function (reason) {\n    if (!this.isCancellable()) return this;\n    var parent;\n    var promiseToReject = this;\n    while ((parent = promiseToReject._cancellationParent) !== undefined &&\n        parent.isCancellable()) {\n        promiseToReject = parent;\n    }\n    this._unsetCancellable();\n    promiseToReject._target()._rejectCallback(reason, false, true);\n};\n\nPromise.prototype.cancel = function (reason) {\n    if (!this.isCancellable()) return this;\n    if (reason === undefined) reason = new CancellationError();\n    async.invokeLater(this._cancel, this, reason);\n    return this;\n};\n\nPromise.prototype.cancellable = function () {\n    if (this._cancellable()) return this;\n    async.enableTrampoline();\n    this._setCancellable();\n    this._cancellationParent = undefined;\n    return this;\n};\n\nPromise.prototype.uncancellable = function () {\n    var ret = this.then();\n    ret._unsetCancellable();\n    return ret;\n};\n\nPromise.prototype.fork = function (didFulfill, didReject, didProgress) {\n    var ret = this._then(didFulfill, didReject, didProgress,\n                         undefined, undefined);\n\n    ret._setCancellable();\n    ret._cancellationParent = undefined;\n    return ret;\n};\n};\n\n},{\"./async.js\":2,\"./errors.js\":13}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar async = _dereq_(\"./async.js\");\nvar util = _dereq_(\"./util.js\");\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](main|debug|zalgo|instrumented)/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar warn;\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.parent = function() {\n    return this._parent;\n};\n\nCapturedTrace.prototype.hasParent = function() {\n    return this._parent !== undefined;\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = CapturedTrace.parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = stackFramePattern.test(line) ||\n            \"    (No stack trace)\" === line;\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0) {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nCapturedTrace.parseStackAndMessage = function(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: cleanStack(stack)\n    };\n};\n\nCapturedTrace.formatAndLogError = function(error, title) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (typeof error === \"object\" || typeof error === \"function\") {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof warn === \"function\") {\n            warn(message);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n};\n\nCapturedTrace.unhandledRejection = function (reason) {\n    CapturedTrace.formatAndLogError(reason, \"^--- With additional stack trace: \");\n};\n\nCapturedTrace.isSupported = function () {\n    return typeof captureStackTrace === \"function\";\n};\n\nCapturedTrace.fireRejectionEvent =\nfunction(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent(name, reason, promise);\n    } catch (e) {\n        globalEventFired = true;\n        async.throwLater(e);\n    }\n\n    var domEventFired = false;\n    if (fireDomEvent) {\n        try {\n            domEventFired = fireDomEvent(name.toLowerCase(), {\n                reason: reason,\n                promise: promise\n            });\n        } catch (e) {\n            domEventFired = true;\n            async.throwLater(e);\n        }\n    }\n\n    if (!globalEventFired && !localEventFired && !domEventFired &&\n        name === \"unhandledRejection\") {\n        CapturedTrace.formatAndLogError(reason, \"Unhandled rejection \");\n    }\n};\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj.toString();\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\nCapturedTrace.setBounds = function(firstLineError, lastLineError) {\n    if (!CapturedTrace.isSupported()) return;\n    var firstStackLines = firstLineError.stack.split(\"\\n\");\n    var lastStackLines = lastLineError.stack.split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit = Error.stackTraceLimit + 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit = Error.stackTraceLimit + 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit = Error.stackTraceLimit - 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit = Error.stackTraceLimit + 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit = Error.stackTraceLimit - 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nvar fireDomEvent;\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function(name, reason, promise) {\n            if (name === \"rejectionHandled\") {\n                return process.emit(name, promise);\n            } else {\n                return process.emit(name, reason, promise);\n            }\n        };\n    } else {\n        var customEventWorks = false;\n        var anyEventWorks = true;\n        try {\n            var ev = new self.CustomEvent(\"test\");\n            customEventWorks = ev instanceof CustomEvent;\n        } catch (e) {}\n        if (!customEventWorks) {\n            try {\n                var event = document.createEvent(\"CustomEvent\");\n                event.initCustomEvent(\"testingtheevent\", false, true, {});\n                self.dispatchEvent(event);\n            } catch (e) {\n                anyEventWorks = false;\n            }\n        }\n        if (anyEventWorks) {\n            fireDomEvent = function(type, detail) {\n                var event;\n                if (customEventWorks) {\n                    event = new self.CustomEvent(type, {\n                        detail: detail,\n                        bubbles: false,\n                        cancelable: true\n                    });\n                } else if (self.dispatchEvent) {\n                    event = document.createEvent(\"CustomEvent\");\n                    event.initCustomEvent(type, false, true, detail);\n                }\n\n                return event ? !self.dispatchEvent(event) : false;\n            };\n        }\n\n        var toWindowMethodNameMap = {};\n        toWindowMethodNameMap[\"unhandledRejection\"] = (\"on\" +\n            \"unhandledRejection\").toLowerCase();\n        toWindowMethodNameMap[\"rejectionHandled\"] = (\"on\" +\n            \"rejectionHandled\").toLowerCase();\n\n        return function(name, reason, promise) {\n            var methodName = toWindowMethodNameMap[name];\n            var method = self[methodName];\n            if (!method) return false;\n            if (name === \"rejectionHandled\") {\n                method.call(self, promise);\n            } else {\n                method.call(self, reason, promise);\n            }\n            return true;\n        };\n    }\n})();\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    warn = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        warn = function(message) {\n            process.stderr.write(\"\\u001b[31m\" + message + \"\\u001b[39m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        warn = function(message) {\n            console.warn(\"%c\" + message, \"color: red\");\n        };\n    }\n}\n\nreturn CapturedTrace;\n};\n\n},{\"./async.js\":2,\"./util.js\":38}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util.js\");\nvar errors = _dereq_(\"./errors.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar keys = _dereq_(\"./es5.js\").keys;\nvar TypeError = errors.TypeError;\n\nfunction CatchFilter(instances, callback, promise) {\n    this._instances = instances;\n    this._callback = callback;\n    this._promise = promise;\n}\n\nfunction safePredicate(predicate, e) {\n    var safeObject = {};\n    var retfilter = tryCatch(predicate).call(safeObject, e);\n\n    if (retfilter === errorObj) return retfilter;\n\n    var safeKeys = keys(safeObject);\n    if (safeKeys.length) {\n        errorObj.e = new TypeError(\"Catch filter must inherit from Error or be a simple predicate function\\u000a\\u000a    See http://goo.gl/o84o68\\u000a\");\n        return errorObj;\n    }\n    return retfilter;\n}\n\nCatchFilter.prototype.doFilter = function (e) {\n    var cb = this._callback;\n    var promise = this._promise;\n    var boundTo = promise._boundValue();\n    for (var i = 0, len = this._instances.length; i < len; ++i) {\n        var item = this._instances[i];\n        var itemIsErrorType = item === Error ||\n            (item != null && item.prototype instanceof Error);\n\n        if (itemIsErrorType && e instanceof item) {\n            var ret = tryCatch(cb).call(boundTo, e);\n            if (ret === errorObj) {\n                NEXT_FILTER.e = ret.e;\n                return NEXT_FILTER;\n            }\n            return ret;\n        } else if (typeof item === \"function\" && !itemIsErrorType) {\n            var shouldHandle = safePredicate(item, e);\n            if (shouldHandle === errorObj) {\n                e = errorObj.e;\n                break;\n            } else if (shouldHandle) {\n                var ret = tryCatch(cb).call(boundTo, e);\n                if (ret === errorObj) {\n                    NEXT_FILTER.e = ret.e;\n                    return NEXT_FILTER;\n                }\n                return ret;\n            }\n        }\n    }\n    NEXT_FILTER.e = e;\n    return NEXT_FILTER;\n};\n\nreturn CatchFilter;\n};\n\n},{\"./errors.js\":13,\"./es5.js\":14,\"./util.js\":38}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, CapturedTrace, isDebugging) {\nvar contextStack = [];\nfunction Context() {\n    this._trace = new CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (!isDebugging()) return;\n    if (this._trace !== undefined) {\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (!isDebugging()) return;\n    if (this._trace !== undefined) {\n        contextStack.pop();\n    }\n};\n\nfunction createContext() {\n    if (isDebugging()) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\n\nPromise.prototype._peekContext = peekContext;\nPromise.prototype._pushContext = Context.prototype._pushContext;\nPromise.prototype._popContext = Context.prototype._popContext;\n\nreturn createContext;\n};\n\n},{}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, CapturedTrace) {\nvar getDomain = Promise._getDomain;\nvar async = _dereq_(\"./async.js\");\nvar Warning = _dereq_(\"./errors.js\").Warning;\nvar util = _dereq_(\"./util.js\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar debugging = false || (util.isNode &&\n                    (!!process.env[\"BLUEBIRD_DEBUG\"] ||\n                     process.env[\"NODE_ENV\"] === \"development\"));\n\nif (util.isNode && process.env[\"BLUEBIRD_DEBUG\"] == 0) debugging = false;\n\nif (debugging) {\n    async.disableTrampolineIfNecessary();\n}\n\nPromise.prototype._ignoreRejections = function() {\n    this._unsetRejectionIsUnhandled();\n    this._bitField = this._bitField | 16777216;\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 16777216) !== 0) return;\n    this._setRejectionIsUnhandled();\n    async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    CapturedTrace.fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._getCarriedStackTrace() || this._settledValue;\n        this._setUnhandledRejectionIsNotified();\n        CapturedTrace.fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 524288;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~524288);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 524288) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 2097152;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~2097152);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 2097152) > 0;\n};\n\nPromise.prototype._setCarriedStackTrace = function (capturedTrace) {\n    this._bitField = this._bitField | 1048576;\n    this._fulfillmentHandler0 = capturedTrace;\n};\n\nPromise.prototype._isCarryingStackTrace = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._getCarriedStackTrace = function () {\n    return this._isCarryingStackTrace()\n        ? this._fulfillmentHandler0\n        : undefined;\n};\n\nPromise.prototype._captureStackTrace = function () {\n    if (debugging) {\n        this._trace = new CapturedTrace(this._peekContext());\n    }\n    return this;\n};\n\nPromise.prototype._attachExtraTrace = function (error, ignoreSelf) {\n    if (debugging && canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = CapturedTrace.parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n};\n\nPromise.prototype._warn = function(message) {\n    var warning = new Warning(message);\n    var ctx = this._peekContext();\n    if (ctx) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = CapturedTrace.parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n    CapturedTrace.formatAndLogError(warning, \"\");\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var domain = getDomain();\n    possiblyUnhandledRejection =\n        typeof fn === \"function\" ? (domain === null ? fn : domain.bind(fn))\n                                 : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var domain = getDomain();\n    unhandledRejectionHandled =\n        typeof fn === \"function\" ? (domain === null ? fn : domain.bind(fn))\n                                 : undefined;\n};\n\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() &&\n        debugging === false\n   ) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/DT1qyG\\u000a\");\n    }\n    debugging = CapturedTrace.isSupported();\n    if (debugging) {\n        async.disableTrampolineIfNecessary();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return debugging && CapturedTrace.isSupported();\n};\n\nif (!CapturedTrace.isSupported()) {\n    Promise.longStackTraces = function(){};\n    debugging = false;\n}\n\nreturn function() {\n    return debugging;\n};\n};\n\n},{\"./async.js\":2,\"./errors.js\":13,\"./util.js\":38}],11:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util.js\");\nvar isPrimitive = util.isPrimitive;\n\nmodule.exports = function(Promise) {\nvar returner = function () {\n    return this;\n};\nvar thrower = function () {\n    throw this;\n};\nvar returnUndefined = function() {};\nvar throwUndefined = function() {\n    throw undefined;\n};\n\nvar wrapper = function (value, action) {\n    if (action === 1) {\n        return function () {\n            throw value;\n        };\n    } else if (action === 2) {\n        return function () {\n            return value;\n        };\n    }\n};\n\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value === undefined) return this.then(returnUndefined);\n\n    if (isPrimitive(value)) {\n        return this._then(\n            wrapper(value, 2),\n            undefined,\n            undefined,\n            undefined,\n            undefined\n       );\n    } else if (value instanceof Promise) {\n        value._ignoreRejections();\n    }\n    return this._then(returner, undefined, undefined, value, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    if (reason === undefined) return this.then(throwUndefined);\n\n    if (isPrimitive(reason)) {\n        return this._then(\n            wrapper(reason, 1),\n            undefined,\n            undefined,\n            undefined,\n            undefined\n       );\n    }\n    return this._then(thrower, undefined, undefined, reason, undefined);\n};\n};\n\n},{\"./util.js\":38}],12:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, null, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, null, INTERNAL);\n};\n};\n\n},{}],13:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5.js\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util.js\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    notEnumerableProp(Error, \"__BluebirdErrorTypes__\", errorTypes);\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n\n},{\"./es5.js\":14,\"./util.js\":38}],14:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {\nvar util = _dereq_(\"./util.js\");\nvar isPrimitive = util.isPrimitive;\nvar thrower = util.thrower;\n\nfunction returnThis() {\n    return this;\n}\nfunction throwThis() {\n    throw this;\n}\nfunction return$(r) {\n    return function() {\n        return r;\n    };\n}\nfunction throw$(r) {\n    return function() {\n        throw r;\n    };\n}\nfunction promisedFinally(ret, reasonOrValue, isFulfilled) {\n    var then;\n    if (isPrimitive(reasonOrValue)) {\n        then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);\n    } else {\n        then = isFulfilled ? returnThis : throwThis;\n    }\n    return ret._then(then, thrower, undefined, reasonOrValue, undefined);\n}\n\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    var ret = promise._isBound()\n                    ? handler.call(promise._boundValue())\n                    : handler();\n\n    if (ret !== undefined) {\n        var maybePromise = tryConvertToPromise(ret, promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            return promisedFinally(maybePromise, reasonOrValue,\n                                    promise.isFulfilled());\n        }\n    }\n\n    if (promise.isRejected()) {\n        NEXT_FILTER.e = reasonOrValue;\n        return NEXT_FILTER;\n    } else {\n        return reasonOrValue;\n    }\n}\n\nfunction tapHandler(value) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    var ret = promise._isBound()\n                    ? handler.call(promise._boundValue(), value)\n                    : handler(value);\n\n    if (ret !== undefined) {\n        var maybePromise = tryConvertToPromise(ret, promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            return promisedFinally(maybePromise, value, true);\n        }\n    }\n    return value;\n}\n\nPromise.prototype._passThroughHandler = function (handler, isFinally) {\n    if (typeof handler !== \"function\") return this.then();\n\n    var promiseAndHandler = {\n        promise: this,\n        handler: handler\n    };\n\n    return this._then(\n            isFinally ? finallyHandler : tapHandler,\n            isFinally ? finallyHandler : undefined, undefined,\n            promiseAndHandler, undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThroughHandler(handler, true);\n};\n\nPromise.prototype.tap = function (handler) {\n    return this._passThroughHandler(handler, false);\n};\n};\n\n},{\"./util.js\":38}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise) {\nvar errors = _dereq_(\"./errors.js\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util.js\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    var promise = this._promise = new Promise(INTERNAL);\n    promise._captureStackTrace();\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n}\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._next(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    if (result === errorObj) {\n        return this._promise._rejectCallback(result.e, false, true);\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._promise._resolveCallback(value);\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._throw(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/4Y4pDk\\u000a\\u000a\".replace(\"%s\", value) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise._then(\n            this._next,\n            this._throw,\n            undefined,\n            this,\n            null\n       );\n    }\n};\n\nPromiseSpawn.prototype._throw = function (reason) {\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._next = function (value) {\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/6Vqhm0\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        spawn._generator = generator;\n        spawn._next(undefined);\n        return spawn.promise();\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/6Vqhm0\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n\n},{\"./errors.js\":13,\"./util.js\":38}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL) {\nvar util = _dereq_(\"./util.js\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var caller = function(count) {\n        var values = [];\n        for (var i = 1; i <= count; ++i) values.push(\"holder.p\" + i);\n        return new Function(\"holder\", \"                                      \\n\\\n            'use strict';                                                    \\n\\\n            var callback = holder.fn;                                        \\n\\\n            return callback(values);                                         \\n\\\n            \".replace(/values/g, values.join(\", \")));\n    };\n    var thenCallbacks = [];\n    var callers = [undefined];\n    for (var i = 1; i <= 5; ++i) {\n        thenCallbacks.push(thenCallback(i));\n        callers.push(caller(i));\n    }\n\n    var Holder = function(total, fn) {\n        this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null;\n        this.fn = fn;\n        this.total = total;\n        this.now = 0;\n    };\n\n    Holder.prototype.callers = callers;\n    Holder.prototype.checkFulfillment = function(promise) {\n        var now = this.now;\n        now++;\n        var total = this.total;\n        if (now >= total) {\n            var handler = this.callers[total];\n            promise._pushContext();\n            var ret = tryCatch(handler)(this);\n            promise._popContext();\n            if (ret === errorObj) {\n                promise._rejectCallback(ret.e, false, true);\n            } else {\n                promise._resolveCallback(ret);\n            }\n        } else {\n            this.now = now;\n        }\n    };\n\n    var reject = function (reason) {\n        this._reject(reason);\n    };\n}\n}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!true) {\n            if (last < 6 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var holder = new Holder(last, fn);\n                var callbacks = thenCallbacks;\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        if (maybePromise._isPending()) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                        } else if (maybePromise._isFulfilled()) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else {\n                            ret._reject(maybePromise._reason());\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n                return ret;\n            }\n        }\n    }\n    var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util.js\":38}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL) {\nvar getDomain = Promise._getDomain;\nvar async = _dereq_(\"./async.js\");\nvar util = _dereq_(\"./util.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar PENDING = {};\nvar EMPTY_ARRAY = [];\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var domain = getDomain();\n    this._callback = domain === null ? fn : domain.bind(fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = limit >= 1 ? [] : EMPTY_ARRAY;\n    async.invoke(init, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\nfunction init() {this._init$(undefined, -2);}\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n    if (values[index] === PENDING) {\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var callback = this._callback;\n        var receiver = this._promise._boundValue();\n        this._promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        this._promise._popContext();\n        if (ret === errorObj) return this._reject(ret.e);\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            if (maybePromise._isPending()) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = PENDING;\n                return maybePromise._proxyPromiseArray(this, index);\n            } else if (maybePromise._isFulfilled()) {\n                ret = maybePromise._value();\n            } else {\n                return this._reject(maybePromise._reason());\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n\n    }\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    var limit = typeof options === \"object\" && options !== null\n        ? options.concurrency\n        : 0;\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter);\n}\n\nPromise.prototype.map = function (fn, options) {\n    if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n\n    return map(this, fn, options, null).promise();\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    return map(promises, fn, options, _filter).promise();\n};\n\n\n};\n\n},{\"./async.js\":2,\"./util.js\":38}],20:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util.js\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        ret._popContext();\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn, args, ctx) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value = util.isArray(args)\n        ? tryCatch(fn).apply(ctx, args)\n        : tryCatch(fn).call(ctx, args);\n    ret._popContext();\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false, true);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n\n},{\"./util.js\":38}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util.js\");\nvar async = _dereq_(\"./async.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var target = promise._target();\n        var newReason = target._getCarriedStackTrace();\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback =\nPromise.prototype.nodeify = function (nodeback, options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n\n},{\"./async.js\":2,\"./util.js\":38}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray) {\nvar util = _dereq_(\"./util.js\");\nvar async = _dereq_(\"./async.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nPromise.prototype.progressed = function (handler) {\n    return this._then(undefined, undefined, handler, undefined, undefined);\n};\n\nPromise.prototype._progress = function (progressValue) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._target()._progressUnchecked(progressValue);\n\n};\n\nPromise.prototype._progressHandlerAt = function (index) {\n    return index === 0\n        ? this._progressHandler0\n        : this[(index << 2) + index - 5 + 2];\n};\n\nPromise.prototype._doProgressWith = function (progression) {\n    var progressValue = progression.value;\n    var handler = progression.handler;\n    var promise = progression.promise;\n    var receiver = progression.receiver;\n\n    var ret = tryCatch(handler).call(receiver, progressValue);\n    if (ret === errorObj) {\n        if (ret.e != null &&\n            ret.e.name !== \"StopProgressPropagation\") {\n            var trace = util.canAttachTrace(ret.e)\n                ? ret.e : new Error(util.toString(ret.e));\n            promise._attachExtraTrace(trace);\n            promise._progress(ret.e);\n        }\n    } else if (ret instanceof Promise) {\n        ret._then(promise._progress, null, null, promise, undefined);\n    } else {\n        promise._progress(ret);\n    }\n};\n\n\nPromise.prototype._progressUnchecked = function (progressValue) {\n    var len = this._length();\n    var progress = this._progress;\n    for (var i = 0; i < len; i++) {\n        var handler = this._progressHandlerAt(i);\n        var promise = this._promiseAt(i);\n        if (!(promise instanceof Promise)) {\n            var receiver = this._receiverAt(i);\n            if (typeof handler === \"function\") {\n                handler.call(receiver, progressValue, promise);\n            } else if (receiver instanceof PromiseArray &&\n                       !receiver._isResolved()) {\n                receiver._promiseProgressed(progressValue, promise);\n            }\n            continue;\n        }\n\n        if (typeof handler === \"function\") {\n            async.invoke(this._doProgressWith, this, {\n                handler: handler,\n                promise: promise,\n                receiver: this._receiverAt(i),\n                value: progressValue\n            });\n        } else {\n            async.invoke(progress, promise, progressValue);\n        }\n    }\n};\n};\n\n},{\"./async.js\":2,\"./util.js\":38}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/LhFpo0\\u000a\");\n};\nvar reflect = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\n\nvar util = _dereq_(\"./util.js\");\n\nvar getDomain;\nif (util.isNode) {\n    getDomain = function() {\n        var ret = process.domain;\n        if (ret === undefined) ret = null;\n        return ret;\n    };\n} else {\n    getDomain = function() {\n        return null;\n    };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar UNDEFINED_BINDING = {};\nvar async = _dereq_(\"./async.js\");\nvar errors = _dereq_(\"./errors.js\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nPromise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {e: null};\nvar tryConvertToPromise = _dereq_(\"./thenables.js\")(Promise, INTERNAL);\nvar PromiseArray =\n    _dereq_(\"./promise_array.js\")(Promise, INTERNAL,\n                                    tryConvertToPromise, apiRejection);\nvar CapturedTrace = _dereq_(\"./captured_trace.js\")();\nvar isDebugging = _dereq_(\"./debuggability.js\")(Promise, CapturedTrace);\n /*jshint unused:false*/\nvar createContext =\n    _dereq_(\"./context.js\")(Promise, CapturedTrace, isDebugging);\nvar CatchFilter = _dereq_(\"./catch_filter.js\")(NEXT_FILTER);\nvar PromiseResolver = _dereq_(\"./promise_resolver.js\");\nvar nodebackForPromise = PromiseResolver._nodebackForPromise;\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\n\nfunction Promise(resolver) {\n    if (typeof resolver !== \"function\") {\n        throw new TypeError(\"the promise constructor requires a resolver function\\u000a\\u000a    See http://goo.gl/EC22Yn\\u000a\");\n    }\n    if (this.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/KsIlge\\u000a\");\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._progressHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settledValue = undefined;\n    if (resolver !== INTERNAL) this._resolveFromResolver(resolver);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (typeof item === \"function\") {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(\n                    new TypeError(\"Catch filter must inherit from Error or be a simple predicate function\\u000a\\u000a    See http://goo.gl/o84o68\\u000a\"));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n        var catchFilter = new CatchFilter(catchInstances, fn, this);\n        return this._then(undefined, catchFilter.doFilter, undefined,\n            catchFilter, undefined);\n    }\n    return this._then(undefined, fn, undefined, undefined, undefined);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflect, reflect, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject, didProgress) {\n    if (isDebugging() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, didProgress,\n        undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject, didProgress) {\n    var promise = this._then(didFulfill, didReject, didProgress,\n        undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (didFulfill, didReject) {\n    return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined);\n};\n\nPromise.prototype.isCancellable = function () {\n    return !this.isResolved() &&\n        this._cancellable();\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = function(fn) {\n    var ret = new Promise(INTERNAL);\n    var result = tryCatch(fn)(nodebackForPromise(ret));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true, true);\n    }\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.defer = Promise.pending = function () {\n    var promise = new Promise(INTERNAL);\n    return new PromiseResolver(promise);\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        var val = ret;\n        ret = new Promise(INTERNAL);\n        ret._fulfillUnchecked(val);\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    var prev = async._schedule;\n    async._schedule = fn;\n    return prev;\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    didProgress,\n    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var ret = haveInternalData ? internalData : new Promise(INTERNAL);\n\n    if (!haveInternalData) {\n        ret._propagateFrom(this, 4 | 1);\n        ret._captureStackTrace();\n    }\n\n    var target = this._target();\n    if (target !== this) {\n        if (receiver === undefined) receiver = this._boundTo;\n        if (!haveInternalData) ret._setIsMigrated();\n    }\n\n    var callbackIndex = target._addCallbacks(didFulfill,\n                                             didReject,\n                                             didProgress,\n                                             ret,\n                                             receiver,\n                                             getDomain());\n\n    if (target._isResolved() && !target._isSettlePromisesQueued()) {\n        async.invoke(\n            target._settlePromiseAtPostResolution, target, callbackIndex);\n    }\n\n    return ret;\n};\n\nPromise.prototype._settlePromiseAtPostResolution = function (index) {\n    if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();\n    this._settlePromiseAt(index);\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 131071;\n};\n\nPromise.prototype._isFollowingOrFulfilledOrRejected = function () {\n    return (this._bitField & 939524096) > 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 536870912) === 536870912;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -131072) |\n        (len & 131071);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 536870912;\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 33554432;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 33554432) > 0;\n};\n\nPromise.prototype._cancellable = function () {\n    return (this._bitField & 67108864) > 0;\n};\n\nPromise.prototype._setCancellable = function () {\n    this._bitField = this._bitField | 67108864;\n};\n\nPromise.prototype._unsetCancellable = function () {\n    this._bitField = this._bitField & (~67108864);\n};\n\nPromise.prototype._setIsMigrated = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._unsetIsMigrated = function () {\n    this._bitField = this._bitField & (~4194304);\n};\n\nPromise.prototype._isMigrated = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0\n        ? this._receiver0\n        : this[\n            index * 5 - 5 + 4];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return index === 0\n        ? this._promise0\n        : this[index * 5 - 5 + 3];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return index === 0\n        ? this._fulfillmentHandler0\n        : this[index * 5 - 5 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return index === 0\n        ? this._rejectionHandler0\n        : this[index * 5 - 5 + 1];\n};\n\nPromise.prototype._boundValue = function() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n};\n\nPromise.prototype._migrateCallbacks = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var progress = follower._progressHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (promise instanceof Promise) promise._setIsMigrated();\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, progress, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    progress,\n    promise,\n    receiver,\n    domain\n) {\n    var index = this._length();\n\n    if (index >= 131071 - 5) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        if (receiver !== undefined) this._receiver0 = receiver;\n        if (typeof fulfill === \"function\" && !this._isCarryingStackTrace()) {\n            this._fulfillmentHandler0 =\n                domain === null ? fulfill : domain.bind(fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 =\n                domain === null ? reject : domain.bind(reject);\n        }\n        if (typeof progress === \"function\") {\n            this._progressHandler0 =\n                domain === null ? progress : domain.bind(progress);\n        }\n    } else {\n        var base = index * 5 - 5;\n        this[base + 3] = promise;\n        this[base + 4] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                domain === null ? fulfill : domain.bind(fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                domain === null ? reject : domain.bind(reject);\n        }\n        if (typeof progress === \"function\") {\n            this[base + 2] =\n                domain === null ? progress : domain.bind(progress);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) {\n    var index = this._length();\n\n    if (index >= 131071 - 5) {\n        index = 0;\n        this._setLength(0);\n    }\n    if (index === 0) {\n        this._promise0 = promiseSlotValue;\n        this._receiver0 = receiver;\n    } else {\n        var base = index * 5 - 5;\n        this[base + 3] = promiseSlotValue;\n        this[base + 4] = receiver;\n    }\n    this._setLength(index + 1);\n};\n\nPromise.prototype._proxyPromiseArray = function (promiseArray, index) {\n    this._setProxyHandlers(promiseArray, index);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false, true);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    var propagationFlags = 1 | (shouldBind ? 4 : 0);\n    this._propagateFrom(maybePromise, propagationFlags);\n    var promise = maybePromise._target();\n    if (promise._isPending()) {\n        var len = this._length();\n        for (var i = 0; i < len; ++i) {\n            promise._migrateCallbacks(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(promise);\n    } else if (promise._isFulfilled()) {\n        this._fulfillUnchecked(promise._value());\n    } else {\n        this._rejectUnchecked(promise._reason(),\n            promise._getCarriedStackTrace());\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, shouldNotMarkOriginatingFromRejection) {\n    if (!shouldNotMarkOriginatingFromRejection) {\n        util.markAsOriginatingFromRejection(reason);\n    }\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason, hasStack ? undefined : trace);\n};\n\nPromise.prototype._resolveFromResolver = function (resolver) {\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = tryCatch(resolver)(function(value) {\n        if (promise === null) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }, function (reason) {\n        if (promise === null) return;\n        promise._rejectCallback(reason, synchronous);\n        promise = null;\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined && r === errorObj && promise !== null) {\n        promise._rejectCallback(r.e, true, true);\n        promise = null;\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    if (promise._isRejected()) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY && !this._isRejected()) {\n        x = tryCatch(handler).apply(this._boundValue(), value);\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    promise._popContext();\n\n    if (x === errorObj || x === promise || x === NEXT_FILTER) {\n        var err = x === promise ? makeSelfResolutionError() : x.e;\n        promise._rejectCallback(err, false, true);\n    } else {\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._cleanValues = function () {\n    if (this._cancellable()) {\n        this._cancellationParent = undefined;\n    }\n};\n\nPromise.prototype._propagateFrom = function (parent, flags) {\n    if ((flags & 1) > 0 && parent._cancellable()) {\n        this._setCancellable();\n        this._cancellationParent = parent;\n    }\n    if ((flags & 4) > 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n};\n\nPromise.prototype._fulfill = function (value) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._fulfillUnchecked(value);\n};\n\nPromise.prototype._reject = function (reason, carriedStackTrace) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._rejectUnchecked(reason, carriedStackTrace);\n};\n\nPromise.prototype._settlePromiseAt = function (index) {\n    var promise = this._promiseAt(index);\n    var isPromise = promise instanceof Promise;\n\n    if (isPromise && promise._isMigrated()) {\n        promise._unsetIsMigrated();\n        return async.invoke(this._settlePromiseAt, this, index);\n    }\n    var handler = this._isFulfilled()\n        ? this._fulfillmentHandlerAt(index)\n        : this._rejectionHandlerAt(index);\n\n    var carriedStackTrace =\n        this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined;\n    var value = this._settledValue;\n    var receiver = this._receiverAt(index);\n    this._clearCallbackDataAtIndex(index);\n\n    if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof PromiseArray) {\n        if (!receiver._isResolved()) {\n            if (this._isFulfilled()) {\n                receiver._promiseFulfilled(value, promise);\n            }\n            else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (this._isFulfilled()) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value, carriedStackTrace);\n        }\n    }\n\n    if (index >= 4 && (index & 31) === 4)\n        async.invokeLater(this._setLength, this, 0);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    if (index === 0) {\n        if (!this._isCarryingStackTrace()) {\n            this._fulfillmentHandler0 = undefined;\n        }\n        this._rejectionHandler0 =\n        this._progressHandler0 =\n        this._receiver0 =\n        this._promise0 = undefined;\n    } else {\n        var base = index * 5 - 5;\n        this[base + 3] =\n        this[base + 4] =\n        this[base + 0] =\n        this[base + 1] =\n        this[base + 2] = undefined;\n    }\n};\n\nPromise.prototype._isSettlePromisesQueued = function () {\n    return (this._bitField &\n            -1073741824) === -1073741824;\n};\n\nPromise.prototype._setSettlePromisesQueued = function () {\n    this._bitField = this._bitField | -1073741824;\n};\n\nPromise.prototype._unsetSettlePromisesQueued = function () {\n    this._bitField = this._bitField & (~-1073741824);\n};\n\nPromise.prototype._queueSettlePromises = function() {\n    async.settlePromises(this);\n    this._setSettlePromisesQueued();\n};\n\nPromise.prototype._fulfillUnchecked = function (value) {\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._rejectUnchecked(err, undefined);\n    }\n    this._setFulfilled();\n    this._settledValue = value;\n    this._cleanValues();\n\n    if (this._length() > 0) {\n        this._queueSettlePromises();\n    }\n};\n\nPromise.prototype._rejectUncheckedCheckError = function (reason) {\n    var trace = util.ensureErrorObject(reason);\n    this._rejectUnchecked(reason, trace === reason ? undefined : trace);\n};\n\nPromise.prototype._rejectUnchecked = function (reason, trace) {\n    if (reason === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._rejectUnchecked(err);\n    }\n    this._setRejected();\n    this._settledValue = reason;\n    this._cleanValues();\n\n    if (this._isFinal()) {\n        async.throwLater(function(e) {\n            if (\"stack\" in e) {\n                async.invokeFirst(\n                    CapturedTrace.unhandledRejection, undefined, e);\n            }\n            throw e;\n        }, trace === undefined ? reason : trace);\n        return;\n    }\n\n    if (trace !== undefined && trace !== reason) {\n        this._setCarriedStackTrace(trace);\n    }\n\n    if (this._length() > 0) {\n        this._queueSettlePromises();\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    this._unsetSettlePromisesQueued();\n    var len = this._length();\n    for (var i = 0; i < len; i++) {\n        this._settlePromiseAt(i);\n    }\n};\n\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\n_dereq_(\"./progress.js\")(Promise, PromiseArray);\n_dereq_(\"./method.js\")(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_(\"./bind.js\")(Promise, INTERNAL, tryConvertToPromise);\n_dereq_(\"./finally.js\")(Promise, NEXT_FILTER, tryConvertToPromise);\n_dereq_(\"./direct_resolve.js\")(Promise);\n_dereq_(\"./synchronous_inspection.js\")(Promise);\n_dereq_(\"./join.js\")(Promise, PromiseArray, tryConvertToPromise, INTERNAL);\nPromise.version = \"2.11.0\";\nPromise.Promise = Promise;\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);\n_dereq_('./cancel.js')(Promise);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./call_get.js')(Promise);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);\n_dereq_('./settle.js')(Promise, PromiseArray);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./any.js')(Promise);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./timers.js')(Promise, INTERNAL);\n_dereq_('./filter.js')(Promise, INTERNAL);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._progressHandler0 = value;                                         \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n        p._settledValue = value;                                             \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    CapturedTrace.setBounds(async.firstLineError, util.lastLineError);       \n    return Promise;                                                          \n\n};\n\n},{\"./any.js\":1,\"./async.js\":2,\"./bind.js\":3,\"./call_get.js\":5,\"./cancel.js\":6,\"./captured_trace.js\":7,\"./catch_filter.js\":8,\"./context.js\":9,\"./debuggability.js\":10,\"./direct_resolve.js\":11,\"./each.js\":12,\"./errors.js\":13,\"./filter.js\":15,\"./finally.js\":16,\"./generators.js\":17,\"./join.js\":18,\"./map.js\":19,\"./method.js\":20,\"./nodeify.js\":21,\"./progress.js\":22,\"./promise_array.js\":24,\"./promise_resolver.js\":25,\"./promisify.js\":26,\"./props.js\":27,\"./race.js\":29,\"./reduce.js\":30,\"./settle.js\":32,\"./some.js\":33,\"./synchronous_inspection.js\":34,\"./thenables.js\":35,\"./timers.js\":36,\"./using.js\":37,\"./util.js\":38}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection) {\nvar util = _dereq_(\"./util.js\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    var parent;\n    if (values instanceof Promise) {\n        parent = values;\n        promise._propagateFrom(parent, 1 | 4);\n    }\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        this._values = values;\n        if (values._isFulfilled()) {\n            values = values._value();\n            if (!isArray(values)) {\n                var err = new Promise.TypeError(\"expecting an array, a promise or a thenable\\u000a\\u000a    See http://goo.gl/s8MMhc\\u000a\");\n                this.__hardReject__(err);\n                return;\n            }\n        } else if (values._isPending()) {\n            values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n            return;\n        } else {\n            this._reject(values._reason());\n            return;\n        }\n    } else if (!isArray(values)) {\n        this._promise._reject(apiRejection(\"expecting an array, a promise or a thenable\\u000a\\u000a    See http://goo.gl/s8MMhc\\u000a\")._reason());\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var promise = this._promise;\n    for (var i = 0; i < len; ++i) {\n        var isResolved = this._isResolved();\n        var maybePromise = tryConvertToPromise(values[i], promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            if (isResolved) {\n                maybePromise._ignoreRejections();\n            } else if (maybePromise._isPending()) {\n                maybePromise._proxyPromiseArray(this, i);\n            } else if (maybePromise._isFulfilled()) {\n                this._promiseFulfilled(maybePromise._value(), i);\n            } else {\n                this._promiseRejected(maybePromise._reason(), i);\n            }\n        } else if (!isResolved) {\n            this._promiseFulfilled(maybePromise, i);\n        }\n    }\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype.__hardReject__ =\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false, true);\n};\n\nPromiseArray.prototype._promiseProgressed = function (progressValue, index) {\n    this._promise._progress({\n        index: index,\n        value: progressValue\n    });\n};\n\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n    }\n};\n\nPromiseArray.prototype._promiseRejected = function (reason, index) {\n    this._totalResolved++;\n    this._reject(reason);\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util.js\":38}],25:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util.js\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors.js\");\nvar TimeoutError = errors.TimeoutError;\nvar OperationalError = errors.OperationalError;\nvar haveGetters = util.haveGetters;\nvar es5 = _dereq_(\"./es5.js\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise) {\n    return function(err, value) {\n        if (promise === null) return;\n\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (arguments.length > 2) {\n            var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n            promise._fulfill(args);\n        } else {\n            promise._fulfill(value);\n        }\n\n        promise = null;\n    };\n}\n\n\nvar PromiseResolver;\nif (!haveGetters) {\n    PromiseResolver = function (promise) {\n        this.promise = promise;\n        this.asCallback = nodebackForPromise(promise);\n        this.callback = this.asCallback;\n    };\n}\nelse {\n    PromiseResolver = function (promise) {\n        this.promise = promise;\n    };\n}\nif (haveGetters) {\n    var prop = {\n        get: function() {\n            return nodebackForPromise(this.promise);\n        }\n    };\n    es5.defineProperty(PromiseResolver.prototype, \"asCallback\", prop);\n    es5.defineProperty(PromiseResolver.prototype, \"callback\", prop);\n}\n\nPromiseResolver._nodebackForPromise = nodebackForPromise;\n\nPromiseResolver.prototype.toString = function () {\n    return \"[object PromiseResolver]\";\n};\n\nPromiseResolver.prototype.resolve =\nPromiseResolver.prototype.fulfill = function (value) {\n    if (!(this instanceof PromiseResolver)) {\n        throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a    See http://goo.gl/sdkXL9\\u000a\");\n    }\n    this.promise._resolveCallback(value);\n};\n\nPromiseResolver.prototype.reject = function (reason) {\n    if (!(this instanceof PromiseResolver)) {\n        throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a    See http://goo.gl/sdkXL9\\u000a\");\n    }\n    this.promise._rejectCallback(reason);\n};\n\nPromiseResolver.prototype.progress = function (value) {\n    if (!(this instanceof PromiseResolver)) {\n        throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a    See http://goo.gl/sdkXL9\\u000a\");\n    }\n    this.promise._progress(value);\n};\n\nPromiseResolver.prototype.cancel = function (err) {\n    this.promise.cancel(err);\n};\n\nPromiseResolver.prototype.timeout = function () {\n    this.reject(new TimeoutError(\"timeout\"));\n};\n\nPromiseResolver.prototype.isResolved = function () {\n    return this.promise.isResolved();\n};\n\nPromiseResolver.prototype.toJSON = function () {\n    return this.promise.toJSON();\n};\n\nmodule.exports = PromiseResolver;\n\n},{\"./errors.js\":13,\"./es5.js\":14,\"./util.js\":38}],26:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util.js\");\nvar nodebackForPromise = _dereq_(\"./promise_resolver.js\")\n    ._nodebackForPromise;\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/iWrZbw\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\"'use strict';                            \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise);                      \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n        \"\n        .replace(\"Parameters\", parameterDeclaration(newParameterCount))\n        .replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode))(\n            Promise,\n            fn,\n            receiver,\n            withAppended,\n            maybeWrapAsError,\n            nodebackForPromise,\n            util.tryCatch,\n            util.errorObj,\n            util.notEnumerableProp,\n            INTERNAL\n        );\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key, fn, suffix);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver) {\n    return makeNodePromisified(callback, receiver, undefined, callback);\n}\n\nPromise.promisify = function (fn, receiver) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    var ret = promisify(fn, arguments.length < 2 ? THIS : receiver);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/9ITlV0\\u000a\");\n    }\n    options = Object(options);\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/8FZo5V\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier);\n            promisifyAll(value, suffix, filter, promisifier);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier);\n};\n};\n\n\n},{\"./errors\":13,\"./promise_resolver.js\":25,\"./util.js\":38}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util.js\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5.js\");\n\nfunction PropertiesPromiseArray(obj) {\n    var keys = es5.keys(obj);\n    var len = keys.length;\n    var values = new Array(len * 2);\n    for (var i = 0; i < len; ++i) {\n        var key = keys[i];\n        values[i] = obj[key];\n        values[i + len] = key;\n    }\n    this.constructor$(values);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {\n    this._init$(undefined, -3) ;\n};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val = {};\n        var keyOffset = this.length();\n        for (var i = 0, len = this.length(); i < len; ++i) {\n            val[this._values[i + keyOffset]] = this._values[i];\n        }\n        this._resolve(val);\n    }\n};\n\nPropertiesPromiseArray.prototype._promiseProgressed = function (value, index) {\n    this._promise._progress({\n        key: this._values[index + this.length()],\n        value: value\n    });\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/OsFKC8\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 4);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n\n},{\"./es5.js\":14,\"./util.js\":38}],28:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype._unshiftOne = function(value) {\n    var capacity = this._capacity;\n    this._checkCapacity(this.length() + 1);\n    var front = this._front;\n    var i = (((( front - 1 ) &\n                    ( capacity - 1) ) ^ capacity ) - capacity );\n    this[i] = value;\n    this._front = i;\n    this._length = this.length() + 1;\n};\n\nQueue.prototype.unshift = function(fn, receiver, arg) {\n    this._unshiftOne(arg);\n    this._unshiftOne(receiver);\n    this._unshiftOne(fn);\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],29:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar isArray = _dereq_(\"./util.js\").isArray;\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else if (!isArray(promises)) {\n        return apiRejection(\"expecting an array, a promise or a thenable\\u000a\\u000a    See http://goo.gl/s8MMhc\\u000a\");\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 4 | 1);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n\n},{\"./util.js\":38}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL) {\nvar getDomain = Promise._getDomain;\nvar async = _dereq_(\"./async.js\");\nvar util = _dereq_(\"./util.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nfunction ReductionPromiseArray(promises, fn, accum, _each) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    this._preservedValues = _each === INTERNAL ? [] : null;\n    this._zerothIsAccum = (accum === undefined);\n    this._gotAccum = false;\n    this._reducingIndex = (this._zerothIsAccum ? 1 : 0);\n    this._valuesPhase = undefined;\n    var maybePromise = tryConvertToPromise(accum, this._promise);\n    var rejected = false;\n    var isPromise = maybePromise instanceof Promise;\n    if (isPromise) {\n        maybePromise = maybePromise._target();\n        if (maybePromise._isPending()) {\n            maybePromise._proxyPromiseArray(this, -1);\n        } else if (maybePromise._isFulfilled()) {\n            accum = maybePromise._value();\n            this._gotAccum = true;\n        } else {\n            this._reject(maybePromise._reason());\n            rejected = true;\n        }\n    }\n    if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true;\n    var domain = getDomain();\n    this._callback = domain === null ? fn : domain.bind(fn);\n    this._accum = accum;\n    if (!rejected) async.invoke(init, this, undefined);\n}\nfunction init() {\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._init = function () {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function () {\n    if (this._gotAccum || this._zerothIsAccum) {\n        this._resolve(this._preservedValues !== null\n                        ? [] : this._accum);\n    }\n};\n\nReductionPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    values[index] = value;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var isEach = preservedValues !== null;\n    var gotAccum = this._gotAccum;\n    var valuesPhase = this._valuesPhase;\n    var valuesPhaseIndex;\n    if (!valuesPhase) {\n        valuesPhase = this._valuesPhase = new Array(length);\n        for (valuesPhaseIndex=0; valuesPhaseIndex<length; ++valuesPhaseIndex) {\n            valuesPhase[valuesPhaseIndex] = 0;\n        }\n    }\n    valuesPhaseIndex = valuesPhase[index];\n\n    if (index === 0 && this._zerothIsAccum) {\n        this._accum = value;\n        this._gotAccum = gotAccum = true;\n        valuesPhase[index] = ((valuesPhaseIndex === 0)\n            ? 1 : 2);\n    } else if (index === -1) {\n        this._accum = value;\n        this._gotAccum = gotAccum = true;\n    } else {\n        if (valuesPhaseIndex === 0) {\n            valuesPhase[index] = 1;\n        } else {\n            valuesPhase[index] = 2;\n            this._accum = value;\n        }\n    }\n    if (!gotAccum) return;\n\n    var callback = this._callback;\n    var receiver = this._promise._boundValue();\n    var ret;\n\n    for (var i = this._reducingIndex; i < length; ++i) {\n        valuesPhaseIndex = valuesPhase[i];\n        if (valuesPhaseIndex === 2) {\n            this._reducingIndex = i + 1;\n            continue;\n        }\n        if (valuesPhaseIndex !== 1) return;\n        value = values[i];\n        this._promise._pushContext();\n        if (isEach) {\n            preservedValues.push(value);\n            ret = tryCatch(callback).call(receiver, value, i, length);\n        }\n        else {\n            ret = tryCatch(callback)\n                .call(receiver, this._accum, value, i, length);\n        }\n        this._promise._popContext();\n\n        if (ret === errorObj) return this._reject(ret.e);\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            if (maybePromise._isPending()) {\n                valuesPhase[i] = 4;\n                return maybePromise._proxyPromiseArray(this, i);\n            } else if (maybePromise._isFulfilled()) {\n                ret = maybePromise._value();\n            } else {\n                return this._reject(maybePromise._reason());\n            }\n        }\n\n        this._reducingIndex = i + 1;\n        this._accum = ret;\n    }\n\n    this._resolve(isEach ? preservedValues : this._accum);\n};\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n};\n\n},{\"./async.js\":2,\"./util.js\":38}],31:[function(_dereq_,module,exports){\n\"use strict\";\nvar schedule;\nvar util = _dereq_(\"./util\");\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/m3OTXk\\u000a\");\n};\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            window.navigator.standalone)) {\n    schedule = function(fn) {\n        var div = document.createElement(\"div\");\n        var observer = new MutationObserver(fn);\n        observer.observe(div, {attributes: true});\n        return function() { div.classList.toggle(\"foo\"); };\n    };\n    schedule.isStatic = true;\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":38}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util.js\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n    }\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 268435456;\n    ret._settledValue = value;\n    this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 134217728;\n    ret._settledValue = reason;\n    this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return new SettledPromiseArray(this).promise();\n};\n};\n\n},{\"./util.js\":38}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util.js\");\nvar RangeError = _dereq_(\"./errors.js\").RangeError;\nvar AggregateError = _dereq_(\"./errors.js\").AggregateError;\nvar isArray = util.isArray;\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n    }\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            e.push(this._values[i]);\n        }\n        this._reject(e);\n    }\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/1wAmHx\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors.js\":13,\"./util.js\":38}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValue = promise._settledValue;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValue = undefined;\n    }\n}\n\nPromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/hc1DLj\\u000a\");\n    }\n    return this._settledValue;\n};\n\nPromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/hPuiwB\\u000a\");\n    }\n    return this._settledValue;\n};\n\nPromiseInspection.prototype.isFulfilled =\nPromise.prototype._isFulfilled = function () {\n    return (this._bitField & 268435456) > 0;\n};\n\nPromiseInspection.prototype.isRejected =\nPromise.prototype._isRejected = function () {\n    return (this._bitField & 134217728) > 0;\n};\n\nPromiseInspection.prototype.isPending =\nPromise.prototype._isPending = function () {\n    return (this._bitField & 402653184) === 0;\n};\n\nPromiseInspection.prototype.isResolved =\nPromise.prototype._isResolved = function () {\n    return (this._bitField & 402653184) > 0;\n};\n\nPromise.prototype.isPending = function() {\n    return this._target()._isPending();\n};\n\nPromise.prototype.isRejected = function() {\n    return this._target()._isRejected();\n};\n\nPromise.prototype.isFulfilled = function() {\n    return this._target()._isFulfilled();\n};\n\nPromise.prototype.isResolved = function() {\n    return this._target()._isResolved();\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue;\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue;\n};\n\nPromise.prototype.value = function() {\n    var target = this._target();\n    if (!target.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/hc1DLj\\u000a\");\n    }\n    return target._settledValue;\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    if (!target.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/hPuiwB\\u000a\");\n    }\n    target._unsetRejectionIsUnhandled();\n    return target._settledValue;\n};\n\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util.js\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) {\n            return obj;\n        }\n        else if (isAnyBluebirdPromise(obj)) {\n            var ret = new Promise(INTERNAL);\n            obj._then(\n                ret._fulfillUnchecked,\n                ret._rejectUncheckedCheckError,\n                ret._progressUnchecked,\n                ret,\n                null\n            );\n            return ret;\n        }\n        var then = util.tryCatch(getThen)(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction getThen(obj) {\n    return obj.then;\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    return hasProp.call(obj, \"_promise0\");\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x,\n                                        resolveFromThenable,\n                                        rejectFromThenable,\n                                        progressFromThenable);\n    synchronous = false;\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolveFromThenable(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function rejectFromThenable(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n\n    function progressFromThenable(value) {\n        if (!promise) return;\n        if (typeof promise._progress === \"function\") {\n            promise._progress(value);\n        }\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util.js\":38}],36:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util.js\");\nvar TimeoutError = Promise.TimeoutError;\n\nvar afterTimeout = function (promise, message) {\n    if (!promise.isPending()) return;\n    \n    var err;\n    if(!util.isPrimitive(message) && (message instanceof Error)) {\n        err = message;\n    } else {\n        if (typeof message !== \"string\") {\n            message = \"operation timed out\";\n        }\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._cancel(err);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (value, ms) {\n    if (ms === undefined) {\n        ms = value;\n        value = undefined;\n        var ret = new Promise(INTERNAL);\n        setTimeout(function() { ret._fulfill(); }, ms);\n        return ret;\n    }\n    ms = +ms;\n    return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(this, ms);\n};\n\nfunction successClear(value) {\n    var handle = this;\n    if (handle instanceof Number) handle = +handle;\n    clearTimeout(handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    var handle = this;\n    if (handle instanceof Number) handle = +handle;\n    clearTimeout(handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret = this.then().cancellable();\n    ret._cancellationParent = this;\n    var handle = setTimeout(function timeoutTimeout() {\n        afterTimeout(ret, message);\n    }, ms);\n    return ret._then(successClear, failureClear, undefined, handle, undefined);\n};\n\n};\n\n},{\"./util.js\":38}],37:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext) {\n    var TypeError = _dereq_(\"./errors.js\").TypeError;\n    var inherits = _dereq_(\"./util.js\").inherits;\n    var PromiseInspection = Promise.PromiseInspection;\n\n    function inspectionMapper(inspections) {\n        var len = inspections.length;\n        for (var i = 0; i < len; ++i) {\n            var inspection = inspections[i];\n            if (inspection.isRejected()) {\n                return Promise.reject(inspection.error());\n            }\n            inspections[i] = inspection._settledValue;\n        }\n        return inspections;\n    }\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = Promise.defer();\n        function iterator() {\n            if (i >= len) return ret.resolve();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret.promise;\n    }\n\n    function disposerSuccess(value) {\n        var inspection = new PromiseInspection();\n        inspection._settledValue = value;\n        inspection._bitField = 268435456;\n        return dispose(this, inspection).thenReturn(value);\n    }\n\n    function disposerFail(reason) {\n        var inspection = new PromiseInspection();\n        inspection._settledValue = reason;\n        inspection._bitField = 134217728;\n        return dispose(this, inspection).thenThrow(reason);\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return null;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== null\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new Array(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var promise = Promise.settle(resources)\n            .then(inspectionMapper)\n            .then(function(vals) {\n                promise._pushContext();\n                var ret;\n                try {\n                    ret = spreadArgs\n                        ? fn.apply(undefined, vals) : fn.call(undefined,  vals);\n                } finally {\n                    promise._popContext();\n                }\n                return ret;\n            })\n            ._then(\n                disposerSuccess, disposerFail, undefined, resources, undefined);\n        resources.promise = promise;\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 262144;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 262144) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~262144);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n\n},{\"./errors.js\":13,\"./util.js\":38}],38:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5.js\");\nvar canEvaluate = typeof navigator == \"undefined\";\nvar haveGetters = (function(){\n    try {\n        var o = {};\n        es5.defineProperty(o, \"f\", {\n            get: function () {\n                return 3;\n            }\n        });\n        return o.f === 3;\n    }\n    catch (e) {\n        return false;\n    }\n\n})();\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return !isPrimitive(value);\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function f() {}\n    f.prototype = obj;\n    var l = 8;\n    while (l--) new f();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return obj instanceof Error && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar ret = {\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    haveGetters: haveGetters,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n                 typeof chrome.loadTimes === \"function\",\n    isNode: typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\"\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version = process.versions.node.split(\".\").map(Number);\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5.js\":14}]},{},[4])(4)\n});                    ;if (typeof window !== 'undefined' && window !== null) {                               window.P = window.Promise;                                                     } else if (typeof self !== 'undefined' && self !== null) {                             self.P = self.Promise;                                                         }","'use strict';\n\nvar Promise = require('bluebird');\n\nfunction readAsDataURL (file) {\n  if (!file || !window.FileReader) {\n    return Promise.resolve(null);\n  }\n\n  return new Promise(function (resolve, reject) {\n    var reader = new window.FileReader();\n    reader.onload = function () {\n      return resolve(reader.result);\n    };\n    reader.readAsDataURL(file);\n  });\n}\n\nfunction readAsBase64 (file) {\n  return readAsDataURL(file)\n  .then(function (data) {\n    if (!data) {\n      return null;\n    }\n    return data.replace(/^data:.*;base64,/, '');\n  });\n}\n\nmodule.exports.readAsDataURL = readAsDataURL;\nmodule.exports.readAsBase64 = readAsBase64;\n","var imageReader = require('./imageReader');\n\n$('.js-image-input-file').change(function (event) {\n  var $this = $(this);\n  var file = this.files[0];\n  if (!file) {\n    return;\n  }\n\n  var $target = $($this.attr('data-preview-target'));\n  if (!$target) {\n    return;\n  }\n\n  return imageReader.readAsDataURL(file)\n  .then(function (data) {\n    $target.attr('src', data);\n  });\n});\n","'use strict';\n\nvar renderPopup = require('../genbar/generationBarPopup');\n\nfunction generationAjaxCall (params, context, isPopup = false) {\n  const data = (isPopup) ? params + '&ajax=1&layout=popup' : params + '&ajax=1';\n\n  $.ajax({\n    type: 'POST',\n    data: data,\n    cache: false,\n    url: context.attr('action'),\n    context: context,\n    dataType: 'json',\n    success: function (data) {\n      if (isPopup) {\n        renderPopup(data.url, context);\n        context.removeClass('waiting-for-ajax');\n      } else {\n        window.location.replace(data.url);\n      }\n    },\n    error: function (jqXHR, textStatus, errorThrown) {\n      window.Raven.captureMessage('Genbar in header post error', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          params: params\n        }\n      });\n\n      return $('#generic-error-modal').modal('show');\n    }\n  });\n}\n\nmodule.exports = generationAjaxCall;\n","'use strict';\n\nvar cleanWooRankLinks = require('./cleanWoorankLinks');\n\nfunction replaceExtLink () {\n  if (window.isSharedReview) {\n    return cleanWooRankLinks();\n  }\n}\n\nmodule.exports = replaceExtLink;\n","'use strict';\n\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar ANIMATION_DURATION = 2000;\nvar ELEMENT_TYPE = {\n  CIRCLE: 'circle',\n  PATH: 'path'\n};\nvar ZERO_COLOR = '#e4e4e4';\n\nvar wooCounter;\nvar currentScore = 0;\nvar drawOptions = {};\n\nfunction isNumber (thing) {\n  return thing && typeof thing === 'number';\n}\n\nfunction getElementType (score) {\n  return (score === 0 || score === 100)\n    ? ELEMENT_TYPE.CIRCLE\n    : ELEMENT_TYPE.PATH;\n}\n\nfunction polarToCartesian (centerX, centerY, radius, angleInDegrees) {\n  var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\n  return {\n    x: centerX + (radius * Math.cos(angleInRadians)),\n    y: centerY + (radius * Math.sin(angleInRadians))\n  };\n}\n\nfunction hsb2hsl (hsb) {\n  var lightness = (2 - hsb.saturation) * hsb.blackness / 2;\n  var saturation = 0;\n  if (lightness && lightness < 1) {\n    var divider = lightness < 0.5 ? (lightness * 2) : (2 - lightness * 2);\n    saturation = hsb.saturation * hsb.blackness / divider;\n  }\n\n  return { hue: hsb.hue, lightness: lightness, saturation: saturation };\n}\n\nfunction getColorByPercentage (scoreValue) {\n  if (scoreValue === 0) {\n    return ZERO_COLOR;\n  }\n\n  function percentize (num) {\n    return (num * 100) + '%';\n  }\n\n  var total = 100;\n\n  // Ranging from dark yellow to bright green based on scoreValue\n  var hue = 44.4 + (23.61 * (scoreValue / total));\n\n  // Css doesn't understand hsb so we need to convert into hsl\n  var hsl = hsb2hsl({ hue: hue, saturation: 1, blackness: 0.75 });\n\n  var hslString = [\n    hsl.hue,\n    percentize(hsl.saturation),\n    percentize(hsl.lightness)\n  ].join(', ');\n\n  var colorString = 'hsl(' + hslString + ')';\n\n  return colorString;\n}\n\nfunction getArcPath (score, options) {\n  var startAngle = 0;\n  var radius = options.radius;\n  var padding = options.padding;\n\n  // endAngle can be between 1 and 359, the values 0 & 360 are handled differently\n  var endAngle = Math.floor(Math.min(score * 3.6, 359)) || 1;\n\n  var start = polarToCartesian(radius, radius, radius - padding, endAngle);\n  var end = polarToCartesian(radius, radius, radius - padding, startAngle);\n  var largeArcFlag = Math.floor(endAngle / 180);\n\n  var d = [\n    'M', start.x, start.y,\n    'A', radius - padding, radius - padding, 0, largeArcFlag, 0, end.x, end.y\n  ].join(' ');\n\n  return d;\n}\n\nfunction createPath (svg, options, score) {\n  var pathType = getElementType(score);\n  var color = getColorByPercentage(score);\n\n  var path = document.createElementNS(SVG_NAMESPACE, pathType);\n  path.setAttribute('fill', 'none');\n  path.setAttribute('stroke', color);\n  path.setAttribute('stroke-width', options.strokeSize);\n\n  if (pathType === ELEMENT_TYPE.CIRCLE) {\n    path.setAttribute('cx', options.radius);\n    path.setAttribute('cy', options.radius);\n    path.setAttribute('r', options.radius - options.padding);\n  } else if (pathType === ELEMENT_TYPE.PATH) {\n    path.setAttribute('d', getArcPath(score, options));\n  }\n\n  return path;\n}\n\nfunction createSvg (element, options) {\n  var widthHeight = options.widthHeight || window.$(element).width();\n\n  var svg = document.createElementNS(SVG_NAMESPACE, 'svg');\n  svg.setAttribute('width', widthHeight);\n  svg.setAttribute('height', widthHeight);\n  element.appendChild(svg);\n\n  return svg;\n}\n\nfunction clearPaths (svg) {\n  Object.keys(ELEMENT_TYPE).forEach(function (type) {\n    var path = svg.querySelector(ELEMENT_TYPE[type]);\n    path && svg.removeChild(path);\n  });\n}\n\nfunction drawInitial (element, options, score) {\n  if (score === undefined || isNaN(score)) {\n    score = 0;\n  }\n\n  var svg = element.querySelector('svg') || createSvg(element, options);\n  var path = createPath(svg, options, score);\n  svg.appendChild(path);\n}\n\nvar activeAnimationId = 0;\nfunction animateTo (targetScore, drawOptions) {\n  // We only allow one animation at time\n  var animationId = ++activeAnimationId;\n\n  if (targetScore === undefined || targetScore === currentScore) {\n    return;\n  }\n\n  // Quadratic in-out tween taken from\n  // https://github.com/tweenjs/tween.js/blob/ae085330fbc0c4e7911c69e786bd3f697f95943f/src/Tween.js#L447\n  function inout (k) {\n    if ((k *= 2) < 1) {\n      return 0.5 * k * k;\n    }\n\n    return -0.5 * (--k * (k - 2) - 1);\n  }\n\n  var start = null;\n\n  var delta = (currentScore < targetScore) ? +1 : -1;\n  var difference = Math.abs(currentScore - targetScore);\n  var initialScore = currentScore;\n\n  function updateScore (newScore) {\n    var currentElement = getElementType(currentScore);\n    var nextElement = getElementType(newScore);\n    currentScore = newScore;\n    update(currentScore, currentElement !== nextElement, drawOptions);\n  }\n\n  function step (timestamp) {\n    if (animationId !== activeAnimationId) {\n      return;\n    }\n\n    if (!start) {\n      start = timestamp;\n    }\n\n    var progress = inout((timestamp - start) / ANIMATION_DURATION);\n\n    if (progress > 0) {\n      updateScore(Math.round(initialScore + (delta * difference * progress)));\n    }\n\n    if ((timestamp - start) < ANIMATION_DURATION) {\n      window.requestAnimationFrame(step);\n    } else {\n      // If we didn't finish in time, do it here\n      updateScore(targetScore);\n    }\n  }\n\n  window.requestAnimationFrame(step);\n}\n\nfunction updateScoreValue (score) {\n  var scoreElement = $(wooCounter).parent().find('.score-value');\n  var roundScore = (Math.round(score * 10) / 10).toString();\n  var result = roundScore.split('.');\n  if (scoreElement) {\n    if (result[1]) {\n      scoreElement.html(\n        result[0] + '<span class=\"decimal\">.' + result[1] + '</span>'\n        );\n    } else {\n      scoreElement.html(result[0] + '<span class=\"decimal\">.0</span>');\n    }\n  } else {\n    return console.warn('Tried to update the score but score element was found!');\n  }\n}\n\nfunction update (score, clear, options) {\n  var svg = wooCounter.querySelector('svg');\n  if (!svg) {\n    return console.warn('Tried to update the score but svg element was not found!');\n  }\n\n  if (clear) {\n    clearPaths(svg);\n    return drawInitial(wooCounter, options, score);\n  }\n\n  var oldPath = svg.querySelector(ELEMENT_TYPE.PATH);\n\n  if (!oldPath) {\n    return createPath(svg, options, score);\n  }\n\n  var color = getColorByPercentage(score);\n  var d = getArcPath(score, options);\n  oldPath.setAttribute('stroke', color);\n  oldPath.setAttribute('d', d);\n  updateScoreValue(score);\n}\n\nfunction getPercentageFromElement (holder) {\n  var scoreElement = window.$(holder).parent().find('.score-value');\n  return (scoreElement && parseInt(scoreElement.text(), 10)) || 0;\n}\n\nfunction initWooCounter (initialOptions) {\n  initialOptions = initialOptions || {};\n\n  var holder = initialOptions.holder || document.querySelector('.holder');\n  var percentage = isNumber(initialOptions.score)\n    ? initialOptions.score\n    : getPercentageFromElement(holder);\n\n  drawOptions.strokeSize = initialOptions.strokeSize || 5;\n  drawOptions.widthHeight = initialOptions.widthHeight || window.$(holder).width();\n  drawOptions.animate = !!initialOptions.animate;\n\n  drawOptions.padding = initialOptions.padding === undefined ? 3 : initialOptions.padding;\n  drawOptions.radius = initialOptions.radius || Math.floor(drawOptions.widthHeight / 2);\n\n  createSvg(holder, drawOptions);\n\n  // Set global holder\n  wooCounter = holder;\n\n  if (drawOptions.animate) {\n    currentScore = 0; // Animation starts from zero\n    drawInitial(holder, drawOptions, 0);\n    animateTo(percentage, drawOptions);\n  } else {\n    currentScore = percentage;\n    drawInitial(holder, drawOptions, percentage);\n  }\n}\n\nfunction finalizeWooCounter (score) {\n  if (window.isInsideReview) {\n    var rank;\n    var rankText;\n    if (score >= 70) {\n      rank = 'aplus';\n    } else if (score >= 60) {\n      rank = 'a';\n    } else if (score >= 50) {\n      rank = 'b';\n    } else if (score >= 40) {\n      rank = 'c';\n    } else if (score >= 30) {\n      rank = 'd';\n    } else {\n      rank = 'e';\n    }\n\n    rankText = rank.replace('plus', '<span class=\"plus\">+</span>');\n    $('#holder').removeClass(function (index, className) {\n      return className\n        .split(/\\s/)\n        .filter(className => /^rank-/.test(className))\n        .join(' ');\n    }).addClass('rank-' + rank);\n    $('#rank-value').html(rankText);\n  } else {\n    return animateTo(score, drawOptions);\n  }\n}\n\nmodule.exports = {\n  init: initWooCounter,\n  finalize: finalizeWooCounter\n};\n","'use strict';\n\nvar toggleInlineModal = require('./toggleInlineModal');\n\nfunction initDashboardFooter () {\n  return $('.inline-modal-opener').on('click', toggleInlineModal);\n}\n\nmodule.exports = initDashboardFooter;\n","'use strict';\n\n// calcul top green - orange -red bars if existing\nfunction calculTopBars () {\n  var wooGreenBar = $('#green-bar-counter');\n  var wooOrangeBar = $('#orange-bar-counter');\n  var wooRedBar = $('#red-bar-counter');\n  var greenCounter = $('.criterium.result-1').length;\n  var orangeCounter = $('.criterium.result-2').length;\n  var redCounter = $('.criterium.result-3').length;\n  var totalCounter = greenCounter + orangeCounter + redCounter;\n\n  wooGreenBar.find('.count').text(greenCounter);\n  wooOrangeBar.find('.count').text(orangeCounter);\n  wooRedBar.find('.count').text(redCounter);\n\n  if (totalCounter > 0) {\n    wooGreenBar.find('.progress-bar').stop().animate({\n      width: (100 / totalCounter * greenCounter) + '%'\n    }, 500);\n\n    wooOrangeBar.find('.progress-bar').stop().animate({\n      width: (100 / totalCounter * orangeCounter) + '%'\n    }, 500);\n\n    wooRedBar.find('.progress-bar').stop().animate({\n      width: (100 / totalCounter * redCounter) + '%'\n    }, 500);\n  } else {\n    $('#dashboard-bars .progress-bar').css('width', '0%');\n  }\n}\n\nmodule.exports = calculTopBars;\n","'use strict';\n\nvar competizeSocialImpact = require('./competizeSocialImpact');\nvar competizeBacklinks = require('./competizeBacklinks');\nvar competizeSharedCount = require('./competizeSharedCount');\nvar initCompTabs = require('./initCompTabs');\n\nfunction competizeAll (isPdf) {\n  if (isPdf == null) {\n    isPdf = false;\n  }\n\n  if (!isPdf) {\n    competizeSocialImpact();\n    competizeSharedCount();\n  }\n\n  competizeBacklinks('backlinks_counter');\n  competizeBacklinks('backlinks_ref_domains');\n\n  if (!isPdf) {\n    return initCompTabs();\n  }\n}\n\nmodule.exports = competizeAll;\n","'use strict';\n\nvar dashboardTooltip = require('./dashboardTooltip');\nvar dashboardProgressStatus = require('./dashboardProgressStatus');\n\nrequire('./dashboardDatePicker');\nrequire('./dashboardDownloadPdf');\nrequire('./dashboardShortURL');\n\nif ($('#dashboard-bars').length > 0) {\n  dashboardProgressStatus();\n}\n\ndashboardTooltip();\n","'use strict';\n\nvar Promise = require('bluebird');\nvar loadMarketingTasks = require('./loadMarketingTasks');\nvar loadMarketingMustaches = require('./loadMarketingMustaches');\nvar renderMarketingTasks = require('./renderMarketingTasks');\nvar mappingModules = require('./mappingModules');\n\nmodule.exports = function () {\n  var isAdvancedReview = $('body').hasClass('enrichrev');\n  var isSharedReview = $('body').hasClass('shared');\n  var projectTaskUrl = $('.marketing-checklist').attr('data-project-url');\n  var tasksPromise;\n  var mustachesPromise;\n\n  // No marketing plan for shared review !\n  if (isSharedReview) {\n    return;\n  }\n\n  mappingModules();\n\n  mustachesPromise = loadMarketingMustaches(isAdvancedReview)\n    .catch(err => {\n      window.Raven.captureMessage('Error loading marketingMustaches', {\n        extra: {\n          isAdvanced: isAdvancedReview,\n          errorThrown: err,\n          projectTaskUrl: projectTaskUrl\n        }\n      });\n      throw err;\n    });\n\n  if ($('#dashboard').hasClass('generating-report')) {\n    tasksPromise = new Promise(function (resolve, reject) {\n      $('#dashboard').on('generationComplete', function () {\n        resolve(loadMarketingTasks(projectTaskUrl));\n      });\n    });\n  } else {\n    tasksPromise = loadMarketingTasks(isAdvancedReview ? projectTaskUrl : null);\n  }\n\n  tasksPromise\n    .catch(err => {\n      window.Raven.captureMessage('Error loading marketingTasks', {\n        extra: {\n          isAdvanced: isAdvancedReview,\n          errorThrown: err,\n          projectTaskUrl: projectTaskUrl\n        }\n      });\n      throw err;\n    });\n\n  Promise.all([\n    mustachesPromise,\n    tasksPromise\n  ])\n    .spread(function (mustaches, tasks) {\n      renderMarketingTasks(mustaches, tasks, isAdvancedReview);\n    })\n    .catch(function (err) {\n      return window.Raven.captureMessage(\n        'Marketing checklist loading tasks error',\n        {\n          extra: {\n            isAdvanced: isAdvancedReview,\n            errorThrown: err,\n            projectUrl: projectTaskUrl\n          }\n        });\n    });\n};\n","'use strict';\n\nvar Promise = require('bluebird');\nvar getBadCriteriaIds = require('./getBadCriteriaIds');\n\nfunction loadMarketingTasks (projectUrl) {\n  var getTasksUrl;\n  var data = {};\n  var lang = window.wooGlobal.language;\n\n  if (projectUrl) {\n    getTasksUrl = '/' + lang + '/projects/' + projectUrl + '/tasks';\n  } else {\n    getTasksUrl = '/' + lang + '/tasks';\n    data = {\n      'criterum-ids': getBadCriteriaIds()\n    };\n  }\n\n  return Promise.resolve($.ajax({\n    type: 'GET',\n    cache: false,\n    data: data,\n    url: getTasksUrl,\n    dataType: 'json',\n    beforeSend: function (jqXHR, settings) {\n      jqXHR.url = settings.url;\n      jqXHR.data = settings.data;\n    }\n  }));\n}\n\nmodule.exports = loadMarketingTasks;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! github.com/micmro/PerfCascade Version:0.9.1 (10/03/2017) */\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;b=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,b.perfCascade=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error(\"Cannot find module '\"+g+\"'\");throw j.code=\"MODULE_NOT_FOUND\",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){\"use strict\";function d(a,b){var c=a.classList;return c?b.split(\" \").forEach(function(a){return c.add(a)}):a.setAttribute(\"class\",a.getAttribute(\"class\")+\" \"+b),a}function e(a,b){var c=a.classList;return c?c.remove(b):a.setAttribute(\"class\",a.getAttribute(\"class\").replace(new RegExp(\"(\\\\s|^)\"+b+\"(\\\\s|$)\",\"g\"),\"$2\")),a}function f(a){for(;a.hasChildNodes();)a.removeChild(a.lastChild);return a}Object.defineProperty(c,\"__esModule\",{value:!0}),c.addClass=d,c.removeClass=e,c.removeChildren=f},{}],2:[function(a,b,c){\"use strict\";function d(a){return function(b){return b.name.toLowerCase()===a}}function e(a,b){var c=d(b.toLowerCase());return a.some(c)}function f(a,b){var c=d(b.toLowerCase()),e=a.filter(c).pop();return e?e.value:void 0}Object.defineProperty(c,\"__esModule\",{value:!0}),c.hasHeader=e,c.getHeader=f},{}],3:[function(a,b,c){\"use strict\";function d(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-no-tls\",d,'<path d=\"m 18,6.2162 0,2.7692 q 0,0.2813 -0.205529,0.4868\\n    -0.205529,0.2055 -0.486779,0.2055 l -0.692307,0 q -0.28125,0 -0.486779,-0.2055 -0.205529,-0.2055 -0.205529,-0.4868\\n    l 0,-2.7692 q 0,-1.1466 -0.811298,-1.9579 -0.811298,-0.8113 -1.957933,-0.8113 -1.146634,0 -1.957933,0.8113\\n    -0.811298,0.8113 -0.811298,1.9579 l 0,2.0769 1.038462,0 q 0.432692,0 0.735577,0.3029 0.302884,0.3029\\n    0.302884,0.7356 l 0,6.2307 q 0,0.4327 -0.302884,0.7356 -0.302885,0.3029 -0.735577,0.3029 l -10.384615,0 q\\n    -0.432693,0 -0.735577,-0.3029 Q 0,15.995 0,15.5623 L 0,9.3316 Q 0,8.8989 0.302885,8.596 0.605769,8.2931\\n    1.038462,8.2931 l 7.26923,0 0,-2.0769 q 0,-2.0012 1.422476,-3.4237 1.422476,-1.4225 3.423678,-1.4225 2.001202,0\\n    3.423678,1.4225 Q 18,4.215 18,6.2162 Z\" />')}function e(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-redirect\",d,'<path d=\"M 17,2.3333333 17,7 q 0,0.2708444 -0.19792,0.4687111\\n    -0.197911,0.1979556 -0.468747,0.1979556 l -4.666666,0 q -0.437503,0 -0.614587,-0.4166223 -0.177084,-0.4063111\\n    0.14584,-0.7187555 L 12.635413,5.0937778 Q 11.093751,3.6666667 9,3.6666667 q -1.0833333,0 -2.0677067,0.4218666 Q\\n    5.94792,4.5104 5.2291644,5.2291556 4.5104178,5.9479111 4.0885422,6.9322667 3.6666667,7.9167111 3.6666667,9 q\\n    0,1.083378 0.4218755,2.067733 0.4218756,0.984356 1.1406222,1.703111 Q 5.94792,13.4896 6.9322933,13.911467\\n    7.9166667,14.333333 9,14.333333 q 1.239582,0 2.343751,-0.541689 1.104169,-0.5416 1.864578,-1.5312 0.07289,-0.104177\\n    0.239591,-0.125066 0.145831,0 0.260409,0.09378 l 1.427084,1.437511 q 0.09375,0.08356 0.09896,0.213511\\n    0.0053,0.130222 -0.07813,0.2344 -1.135413,1.375022 -2.75,2.130222 Q 10.791662,17 9,17 7.3749956,17\\n    5.8958311,16.364622 4.4166667,15.729156 3.3437511,14.656267 2.2708356,13.583378 1.6354133,12.104178 1,10.624978 1,9\\n    1,7.3750222 1.6354133,5.8958222 2.2708356,4.4167111 3.3437511,3.3437333 4.4166667,2.2708444 5.8958311,1.6353778\\n    7.3749956,1 9,1 q 1.531253,0 2.963538,0.5781333 1.432293,0.5781334 2.54688,1.6302223 L 15.864587,1.8646222 Q\\n    16.166667,1.5416889 16.593751,1.7187556 17,1.8958222 17,2.3333333 Z\" />')}function f(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-4xx\",d,'<path d=\"m 10.141566,13.833 0,-1.6945 q 0,-0.1249 -0.08472,-0.2096\\n    -0.084725,-0.084 -0.2006658,-0.084 l -1.7123482,0 q -0.1159402,0 -0.2006658,0.084 -0.084725,0.084 -0.084725,0.2096\\n    l 0,1.6945 q 0,0.1248 0.084725,0.2096 0.084725,0.084 0.2006658,0.084 l 1.7123482,0 q 0.1159402,0 0.2006658,-0.084\\n    0.08472,-0.084 0.08472,-0.2096 z m -0.01784,-3.3356 0.160533,-4.0936 q 0,-0.107 -0.08919,-0.1694 -0.115941,-0.098\\n    -0.2140439,-0.098 l -1.9620656,0 q -0.098103,0 -0.2140436,0.098 -0.089185,0.062 -0.089185,0.1873 l 0.1516221,4.0757\\n    q 0,0.089 0.089185,0.1472 0.089185,0.058 0.2140435,0.058 l 1.6499188,0 q 0.1248588,0 0.2095847,-0.058 0.08473,-0.058\\n    0.09364,-0.1472 z M 9.9988702,2.1676 16.848263,14.7248 q 0.312147,0.5619 -0.01784,1.1237 -0.151614,0.2587\\n    -0.414709,0.4103 -0.263093,0.1516 -0.566321,0.1516 l -13.6987852,0 q -0.3032283,0 -0.5663235,-0.1516 Q\\n    1.3211891,16.1072 1.169575,15.8485 0.83959124,15.2867 1.151738,14.7248 L 8.0011307,2.1676 Q 8.1527449,1.8911\\n    8.4202993,1.7306 8.6878537,1.57 9.0000005,1.57 q 0.3121468,0 0.5797012,0.1606 0.2675544,0.1605 0.4191685,0.437\\n    z\" />')}function g(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-5xx\",d,'<path d=\"m 10.141566,13.833 0,-1.6945 q 0,-0.1249 -0.08472,-0.2096\\n    -0.084725,-0.084 -0.2006658,-0.084 l -1.7123482,0 q -0.1159402,0 -0.2006658,0.084 -0.084725,0.084 -0.084725,0.2096 l\\n    0,1.6945 q 0,0.1248 0.084725,0.2096 0.084725,0.084 0.2006658,0.084 l 1.7123482,0 q 0.1159402,0 0.2006658,-0.084\\n    0.08472,-0.084 0.08472,-0.2096 z m -0.01784,-3.3356 0.160533,-4.0936 q 0,-0.107 -0.08919,-0.1694 -0.115941,-0.098\\n    -0.2140439,-0.098 l -1.9620656,0 q -0.098103,0 -0.2140436,0.098 -0.089185,0.062 -0.089185,0.1873 l 0.1516221,4.0757\\n    q 0,0.089 0.089185,0.1472 0.089185,0.058 0.2140435,0.058 l 1.6499188,0 q 0.1248588,0 0.2095847,-0.058 0.08473,-0.058\\n    0.09364,-0.1472 z M 9.9988702,2.1676 16.848263,14.7248 q 0.312147,0.5619 -0.01784,1.1237 -0.151614,0.2587\\n    -0.414709,0.4103 -0.263093,0.1516 -0.566321,0.1516 l -13.6987852,0 q -0.3032283,0 -0.5663235,-0.1516 Q\\n    1.3211891,16.1072 1.169575,15.8485 0.83959124,15.2867 1.151738,14.7248 L 8.0011307,2.1676 Q 8.1527449,1.8911\\n    8.4202993,1.7306 8.6878537,1.57 9.0000005,1.57 q 0.3121468,0 0.5797012,0.1606 0.2675544,0.1605 0.4191685,0.437\\n    z\" />')}function h(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-plain\",d,'<path d=\"m 15.247139,4.3928381 q 0.250004,0.2500571 0.428571,0.6786286\\n    0.178575,0.4285714 0.178575,0.7856761 l 0,10.2857142 q 0,0.357181 -0.250003,0.607162 Q 15.354285,17 14.997143,17 L\\n    2.9971428,17 Q 2.64,17 2.3899962,16.750019 2.14,16.500038 2.14,16.142857 l 0,-14.2857142 Q 2.14,1.5000381\\n    2.3899962,1.249981 2.64,1 2.9971428,1 l 8.0000002,0 q 0.357142,0 0.785714,0.1785905 0.428571,0.1785905\\n    0.678568,0.4285714 z m -3.964282,-2.1785143 0,3.3571047 3.357143,0 Q 14.550712,5.3125333 14.443573,5.2053333 L\\n    11.64893,2.4107428 q -0.107147,-0.1072 -0.366073,-0.196419 z m 3.428571,13.6428192 0,-9.1428573 -3.714285,0 q\\n    -0.357143,0 -0.607147,-0.2499809 Q 10.14,6.2143238 10.14,5.8571428 l 0,-3.7142856 -6.8571428,0 0,13.7142858\\n    11.4285708,0 z M 5.5685715,8.1428569 q 0,-0.1250285 0.080358,-0.2053333 0.080358,-0.080382 0.2053562,-0.080382 l\\n    6.2857143,0 q 0.124998,0 0.205356,0.080382 0.08036,0.080302 0.08036,0.2053333 l 0,0.5714284 q 0,0.1250294\\n    -0.08036,0.2053334 Q 12.264998,9 12.14,9 L 5.8542857,9 Q 5.7292876,9 5.6489295,8.9196178 5.5685713,8.8393156\\n    5.5685713,8.7142844 l 0,-0.5714284 z M 12.14,10.142857 q 0.124998,0 0.205356,0.08038 0.08036,0.0803 0.08036,0.205333\\n    l 0,0.571429 q 0,0.125028 -0.08036,0.205333 -0.08036,0.08038 -0.205356,0.08038 l -6.2857143,0 q -0.1249981,0\\n    -0.2053562,-0.08038 -0.080358,-0.0803 -0.080358,-0.205333 l 0,-0.571429 q 0,-0.125028 0.080358,-0.205333\\n    0.080358,-0.08038 0.2053562,-0.08038 l 6.2857143,0 z m 0,2.285715 q 0.124998,0 0.205356,0.08038 0.08036,0.0803\\n    0.08036,0.205333 l 0,0.571429 q 0,0.125029 -0.08036,0.205334 -0.08036,0.08038 -0.205356,0.08038 l -6.2857143,0 q\\n    -0.1249981,0 -0.2053562,-0.08038 -0.080358,-0.0803 -0.080358,-0.205334 l 0,-0.571429 q 0,-0.125028\\n    0.080358,-0.205333 0.080358,-0.08038 0.2053562,-0.08038 l 6.2857143,0 z\" />')}function i(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-other\",d,'<path d=\"m 10.801185,13.499991 0,3.000034 q 0,0.199966\\n    -0.149997,0.350003 Q 10.501188,17 10.301185,17 l -2.9999954,0 q -0.200003,0 -0.350002,-0.149972 -0.149998,-0.150037\\n    -0.149998,-0.350003 l 0,-3.000034 q 0,-0.199966 0.149998,-0.350004 0.149999,-0.149972 0.350002,-0.149972 l\\n    2.9999954,0 q 0.200003,0 0.350003,0.149972 0.149997,0.150038 0.149997,0.350004 z m 3.950001,-7.4999953 q 0,0.6749751\\n    -0.193752,1.2624809 -0.193746,0.5875065 -0.437493,0.956246 Q 13.876188,8.587526 13.43244,8.9624908\\n    12.988685,9.337519 12.713687,9.506231 12.43869,9.675006 11.951191,9.949989 q -0.5125,0.287495 -0.856252,0.8125\\n    -0.343749,0.525 -0.343749,0.837523 0,0.212477 -0.150001,0.406217 -0.150004,0.193802 -0.349999,0.193802 l\\n    -3.0000054,0 q -0.187495,0 -0.318749,-0.231277 -0.131246,-0.231284 -0.131246,-0.468725 l 0,-0.562543 q 0,-1.037488\\n    0.812497,-1.9562566 Q 8.4261846,8.0625246 9.4011886,7.6249911 10.138688,7.287504 10.451185,6.9249894\\n    10.76369,6.5624748 10.76369,5.9750331 q 0,-0.525002 -0.58125,-0.9250582 -0.5812494,-0.3999918 -1.3437494,-0.3999918\\n    -0.812504,0 -1.35,0.3625146 -0.437502,0.3125237 -1.3375,1.4374811 -0.162499,0.2000281 -0.387504,0.2000281\\n    -0.149997,0 -0.312498,-0.099982 L 3.4011866,4.9875343 Q 3.2386866,4.8625246 3.2074416,4.6750106 3.1761886,4.4874957\\n    3.2761906,4.3250097 5.2761886,1 9.0761896,1 q 0.9999984,0 2.0124974,0.3874782 1.012501,0.3875423 1.825003,1.0375531\\n    0.812497,0.649947 1.324997,1.5937436 0.512499,0.9437319 0.512499,1.9812208 z\" />')}function j(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-js\",d,'<g transform=\"matrix(0.03159732,0,0,0.03159732,0.93993349,0.955184)\"\\n    id=\"Layer_1\"><g><path d=\"m 112.155,67.644 84.212,0 0,236.019 c 0,106.375 -50.969,143.497 -132.414,143.497 -19.944,0\\n    -45.429,-3.324 -62.052,-8.864 L 11.32,370.15 c 11.635,3.878 26.594,6.648 43.214,6.648 35.458,0 57.621,-16.068\\n    57.621,-73.687 l 0,-235.467 z\" /><path id=\"path9\" d=\"m 269.484,354.634 c 22.161,11.635 57.62,23.27 93.632,23.27\\n    38.783,0 59.282,-16.066 59.282,-40.998 0,-22.715 -17.729,-36.565 -62.606,-52.079 -62.053,-22.162 -103.05,-56.512\\n    -103.05,-111.36 0,-63.715 53.741,-111.917 141.278,-111.917 42.662,0 73.132,8.313 95.295,18.838 l -18.839,67.592 c\\n    -14.404,-7.201 -41.553,-17.729 -77.562,-17.729 -36.567,0 -54.297,17.175 -54.297,36.013 0,23.824 20.499,34.349\\n    69.256,53.188 65.928,24.378 96.4,58.728 96.4,111.915 0,62.606 -47.647,115.794 -150.143,115.794 -42.662,0\\n    -84.77,-11.636 -105.82,-23.27 l 17.174,-69.257 z\"/></g></g>')}function k(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-image\",d,'<path d=\"M 6,6 Q 6,6.75 5.475,7.275 4.95,7.8 4.2,7.8 3.45,7.8\\n    2.925,7.275 2.4,6.75 2.4,6 2.4,5.25 2.925,4.725 3.45,4.2 4.2,4.2 4.95,4.2 5.475,4.725 6,5.25 6,6 Z m 9.6,3.6 0,4.2\\n    -13.2,0 0,-1.8 3,-3 1.5,1.5 4.8,-4.8 z M 16.5,3 1.5,3 Q 1.378125,3 1.289063,3.089 1.200003,3.178 1.200003,3.2999 l\\n    0,11.4 q 0,0.1219 0.08906,0.2109 0.08906,0.089 0.210937,0.089 l 15,0 q 0.121875,0 0.210938,-0.089 0.08906,-0.089\\n    0.08906,-0.2109 l 0,-11.4 q 0,-0.1219 -0.08906,-0.2109 Q 16.621878,3 16.5,3 Z m 1.5,0.3 0,11.4 q\\n    0,0.6188 -0.440625,1.0594 Q 17.11875,16.2 16.5,16.2 l -15,0 Q 0.88125,16.2 0.440625,15.7594 0,15.3188 0,14.7 L 0,3.3\\n    Q 0,2.6813 0.440625,2.2406 0.88125,1.8 1.5,1.8 l 15,0 q 0.61875,0 1.059375,0.4406 Q 18,2.6813 18,3.3 Z\" />')}function l(a,b,c,d){return void 0===d&&(d=1),k(a,b,c,d)}function m(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-html\",d,'<path d=\"m 5.62623,13.310467 -0.491804,0.4919 q -0.09836,0.098\\n    -0.226229,0.098 -0.127869,0 -0.22623,-0.098 L 0.098361,9.218667 Q 0,9.120367 0,8.992467 q 0,-0.1279 0.09836,-0.2262\\n    l 4.583606,-4.5836 q 0.09836,-0.098 0.22623,-0.098 0.127869,0 0.226229,0.098 l 0.491804,0.4918 q 0.09836,0.098\\n    0.09836,0.2262 0,0.1279 -0.09836,0.2262 l -3.865574,3.8656 3.865574,3.8656 q 0.09836,0.098 0.09836,0.2262 0,0.1279\\n    -0.09836,0.2262 z m 5.813114,-10.495 -3.668852,12.6983 q -0.03934,0.1279 -0.152459,0.1918 -0.113115,0.064\\n    -0.231148,0.025 l -0.609836,-0.1672 q -0.127869,-0.039 -0.191803,-0.1525 -0.06393,-0.1131 -0.02459,-0.2409 l\\n    3.668852,-12.6984 q 0.03934,-0.1279 0.152459,-0.1918 0.113115,-0.064 0.231148,-0.025 l 0.609836,0.1672 q\\n    0.127869,0.039 0.191803,0.1525 0.06393,0.1131 0.02459,0.241 z m 6.462295,6.4032 -4.583606,4.5837 q -0.09836,0.098\\n    -0.22623,0.098 -0.127869,0 -0.226229,-0.098 l -0.491804,-0.4919 q -0.09836,-0.098 -0.09836,-0.2262 0,-0.1278\\n    0.09836,-0.2262 l 3.865574,-3.8656 -3.865574,-3.8656 q -0.09836,-0.098 -0.09836,-0.2262 0,-0.1279 0.09836,-0.2262 l\\n    0.491804,-0.4918 q 0.09836,-0.098 0.226229,-0.098 0.127869,0 0.22623,0.098 l 4.583606,4.5836 Q 18,8.864567\\n    18,8.992467 q 0,0.1279 -0.09836,0.2262 z\" />')}function n(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-css\",d,'<path d=\"m 15.435754,0.98999905 q 0.625698,0 1.094972,0.41564445 Q\\n    17,1.8212879 17,2.4469768 q 0,0.5631111 -0.402235,1.3496889 -2.967597,5.6224 -4.156425,6.7217783 -0.867039,0.813421\\n    -1.948602,0.813421 -1.1262576,0 -1.9351961,-0.826755 -0.8089385,-0.8268443 -0.8089385,-1.9620443 0,-1.1441778\\n    0.8223463,-1.8949333 L 14.273743,1.4726657 Q 14.801117,0.98999905 15.435754,0.98999905 Z M 7.3106145,10.232488 q\\n    0.3486034,0.679289 0.9519554,1.161955 0.6033519,0.482666 1.3452513,0.679378 l 0.00894,0.634577 q 0.035753,1.903911\\n    -1.1575432,3.101689 -1.1932962,1.197778 -3.115084,1.197778 -1.0994413,0 -1.9486032,-0.415644 Q 2.5463687,16.176576\\n    2.0324022,15.452576 1.5184357,14.728576 1.2592179,13.816843 1,12.905109 1,11.850354 q 0.06257,0.04444\\n    0.3664804,0.268089 0.3039107,0.223466 0.55419,0.397778 0.2502793,0.174311 0.5273743,0.326311 0.2770949,0.151911\\n    0.4111732,0.151911 0.3664804,0 0.4916201,-0.330756 0.2234637,-0.589866 0.5139664,-1.005511 0.2905029,-0.415644\\n    0.6212291,-0.679377 0.3307262,-0.263644 0.7865922,-0.424533 0.4558659,-0.160889 0.9206704,-0.228 0.4648044,-0.06667\\n    1.1173184,-0.09378 z\" />')}function o(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-warning\",d,'<path d=\"m 10.141566,13.833 0,-1.6945 q 0,-0.1249 -0.08472,-0.2096\\n    -0.084725,-0.084 -0.2006658,-0.084 l -1.7123482,0 q -0.1159402,0 -0.2006658,0.084 -0.084725,0.084 -0.084725,0.2096 l\\n    0,1.6945 q 0,0.1248 0.084725,0.2096 0.084725,0.084 0.2006658,0.084 l 1.7123482,0 q 0.1159402,0 0.2006658,-0.084\\n    0.08472,-0.084 0.08472,-0.2096 z m -0.01784,-3.3356 0.160533,-4.0936 q 0,-0.107 -0.08919,-0.1694 -0.115941,-0.098\\n    -0.2140439,-0.098 l -1.9620656,0 q -0.098103,0 -0.2140436,0.098 -0.089185,0.062 -0.089185,0.1873 l 0.1516221,4.0757\\n    q 0,0.089 0.089185,0.1472 0.089185,0.058 0.2140435,0.058 l 1.6499188,0 q 0.1248588,0 0.2095847,-0.058 0.08473,-0.058\\n    0.09364,-0.1472 z M 9.9988702,2.1676 16.848263,14.7248 q 0.312147,0.5619 -0.01784,1.1237 -0.151614,0.2587\\n    -0.414709,0.4103 -0.263093,0.1516 -0.566321,0.1516 l -13.6987852,0 q -0.3032283,0 -0.5663235,-0.1516 Q\\n    1.3211891,16.1072 1.169575,15.8485 0.83959124,15.2867 1.151738,14.7248 L 8.0011307,2.1676 Q 8.1527449,1.8911\\n    8.4202993,1.7306 8.6878537,1.57 9.0000005,1.57 q 0.3121468,0 0.5797012,0.1606 0.2675544,0.1605 0.4191685,0.437\\n    z\" />')}function p(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-no-gzip\",d,'<path d=\"m 9,1 q 2.177084,0 4.015627,1.0728889 1.838542,1.0729778\\n    2.911457,2.9114667 Q 17,6.8229333 17,9 q 0,2.177067 -1.072916,4.015644 -1.072915,1.838489 -2.911457,2.911467 Q\\n    11.177084,17 9,17 6.8229156,17 4.9843733,15.927111 3.1458311,14.854133 2.0729156,13.015644 1,11.177067 1,9\\n    1,6.8229333 2.0729156,4.9843556 3.1458311,3.1458667 4.9843733,2.0728889 6.8229156,1 9,1 Z m 1.333333,12.9896\\n    0,-1.9792 q 0,-0.145778 -0.09375,-0.2448 -0.09375,-0.09893 -0.229164,-0.09893 l -2.0000001,0 q -0.1354222,0\\n    -0.2395822,0.104177 -0.1041689,0.104178 -0.1041689,0.239556 l 0,1.9792 q 0,0.135378 0.1041689,0.239556\\n    0.10416,0.104177 0.2395822,0.104177 l 2.0000001,0 q 0.135413,0 0.229164,-0.09893 0.09375,-0.09902 0.09375,-0.2448 z\\n    m -0.0208,-3.583378 0.187503,-6.4687109 q 0,-0.1249778 -0.104169,-0.1874667 -0.104169,-0.083556 -0.25,-0.083556 l\\n    -2.2916626,0 q -0.14584,0 -0.25,0.083556 -0.1041688,0.062222 -0.1041688,0.1874667 L 7.67712,10.406222 q 0,0.104178\\n    0.1041689,0.182311 0.10416,0.07822 0.25,0.07822 l 1.9270755,0 q 0.1458396,0 0.2447996,-0.07822 0.09895,-0.07822\\n    0.109369,-0.182311 z\" />')}function q(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-font\",d,'<path d=\"M 7.9711534,5.7542664 6.3365384,10.0812 q 0.3173075,0\\n    1.3124995,0.01956 0.9951928,0.01956 1.5432692,0.01956 0.1826924,0 0.5480773,-0.01956 Q 8.9038458,7.6680441\\n    7.9711534,5.754622 Z M 1,16.379245 1.0192356,15.619601 q 0.2211537,-0.06756 0.5384613,-0.120178 0.3173075,-0.05245\\n    0.5480764,-0.100978 0.2307697,-0.048 0.4759617,-0.139378 0.245192,-0.09138 0.4278844,-0.278844 0.1826925,-0.187556\\n    0.2980774,-0.4856 L 5.5865429,8.5715107 8.2788503,1.61 l 1.2307688,0 q 0.076924,0.1346666 0.1057698,0.2019555 L\\n    11.586543,6.427333 q 0.317307,0.7499556 1.01923,2.475911 0.701923,1.726045 1.096153,2.639467 0.144232,0.326934\\n    0.557693,1.389423 0.413462,1.062489 0.692307,1.620178 0.192309,0.432711 0.336539,0.548089 0.182692,0.144266\\n    0.846154,0.283644 0.663462,0.139467 0.807692,0.197156 Q 17,15.946534 17,16.129289 q 0,0.03822 -0.0048,0.124978\\n    -0.0048,0.08622 -0.0048,0.124978 -0.60577,0 -1.826923,-0.07644 -1.221154,-0.07733 -1.836539,-0.07733 -0.730769,0\\n    -2.067307,0.06756 -1.3365382,0.06755 -1.7115381,0.07733 0,-0.413511 0.038462,-0.750044 L 10.84617,15.351076 q\\n    0.0096,0 0.120192,-0.024 0.110577,-0.024 0.149039,-0.03378 0.03846,-0.0098 0.139423,-0.04356 0.100961,-0.03378\\n    0.144231,-0.06222 0.04327,-0.02933 0.105769,-0.07733 0.0625,-0.048 0.08653,-0.105777 0.02403,-0.05778\\n    0.02403,-0.134578 0,-0.153867 -0.298077,-0.927911 -0.298068,-0.774053 -0.692299,-1.706764 -0.394231,-0.932623\\n    -0.403846,-0.961512 l -4.3269223,-0.01956 q -0.25,0.55769 -0.7355768,1.879823 -0.4855769,1.322044\\n    -0.4855769,1.562489 0,0.211555 0.1346151,0.360533 0.1346151,0.149067 0.4182693,0.235556 0.2836533,0.08622\\n    0.4663458,0.129866 0.1826924,0.04356 0.5480773,0.08178 0.365384,0.03822 0.3942302,0.03822 0.00962,0.182667\\n    0.00962,0.557689 0,0.08622 -0.019236,0.259644 -0.5576924,0 -1.6778843,-0.09618 -1.1201929,-0.09618\\n    -1.6778844,-0.09618 -0.076924,0 -0.254808,0.03822 -0.1778844,0.03822 -0.2067306,0.03822 Q 2.0384613,16.379245\\n    1,16.379245 Z\" />')}function r(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-flash\",d,'<path d=\"m 13.724296,4.737962 q 0.194716,0.216309 0.07572,0.475924 L\\n    7.958654,17.729559 Q 7.818031,18 7.504329,18 7.461078,18 7.352885,17.97846 7.16899,17.924378 7.0770425,17.772918\\n    6.9850949,17.621512 7.0283513,17.4484 L 9.15937,8.708015 4.7675305,9.800549 q -0.043251,0.01077 -0.1298072,0.01077\\n    -0.1947161,0 -0.3353388,-0.118981 -0.1947107,-0.162286 -0.140628,-0.4219 L 6.3360428,0.34617 Q 6.3792939,0.194711\\n    6.5091226,0.097382 6.6389298,0 6.8120043,0 l 3.5480877,0 q 0.205532,0 0.346154,0.135193 0.140628,0.135248\\n    0.140628,0.319132 0,0.08656 -0.05409,0.194711 l -1.849763,5.008456 4.283664,-1.06011 q 0.08654,-0.02154\\n    0.129807,-0.02154 0.205532,0 0.367791,0.162285 z\" />')}function s(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-video\",d,'<path d=\"m 17,4.106999 0,9.7143 q 0,0.3751 -0.348214,0.5268\\n    -0.116071,0.044 -0.223214,0.044 -0.241072,0 -0.401786,-0.1696 l -3.598214,-3.5983 0,1.4822 q 0,1.0625\\n    -0.754464,1.8169 -0.754465,0.7552 -1.8169652,0.7552 l -6.2857143,0 q -1.0625,0 -1.8169642,-0.7545 Q 1,13.169599\\n    1,12.106999 l 0,-6.2857 q 0,-1.0624 0.7544643,-1.8169 0.7544642,-0.7544 1.8169642,-0.7544 l 6.2857143,0 q\\n    1.0625002,0 1.8169652,0.7544 0.754464,0.7545 0.754464,1.8169 l 0,1.4733 3.598214,-3.5893 q 0.160714,-0.1696\\n    0.401786,-0.1696 0.107143,0 0.223214,0.044 Q 17,3.732099 17,4.106999 Z\" />')}function t(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-audio\",d,'<path d=\"m 8.384615,3.7559 0,10.4615 q 0,0.2501 -0.182692,0.4327\\n    -0.182692,0.1827 -0.432692,0.1827 -0.25,0 -0.432692,-0.1827 l -3.201924,-3.2019 -2.51923,0 q -0.25,0\\n    -0.432693,-0.1827 Q 1,11.0828 1,10.8328 L 1,7.1405 Q 1,6.8905 1.182692,6.7078 1.365385,6.5251 1.615385,6.5251 l\\n    2.51923,0 3.201924,-3.2019 q 0.182692,-0.1827 0.432692,-0.1827 0.25,0 0.432692,0.1827 0.182692,0.1827\\n    0.182692,0.4327 z m 3.692308,5.2308 q 0,0.7307 -0.408654,1.3605 -0.408654,0.6299 -1.08173,0.8991 -0.09615,0.048\\n    -0.240385,0.048 -0.25,0 -0.432693,-0.1779 -0.182692,-0.1778 -0.182692,-0.4375 0,-0.2018 0.115385,-0.3413\\n    0.115385,-0.1394 0.278846,-0.2404 0.163461,-0.1009 0.326923,-0.2211 0.163462,-0.1202 0.278846,-0.3414\\n    0.115385,-0.2211 0.115385,-0.548 0,-0.327 -0.115385,-0.5481 Q 10.615385,8.2174 10.451923,8.0972 10.288461,7.9771\\n    10.125,7.8761 9.961539,7.7751 9.846154,7.6357 9.730769,7.4963 9.730769,7.2943 q 0,-0.2596 0.182692,-0.4374\\n    0.182693,-0.178 0.432693,-0.178 0.144231,0 0.240385,0.048 0.673076,0.2597 1.08173,0.8942 0.408654,0.6347\\n    0.408654,1.3655 z m 2.461538,0 q 0,1.4711 -0.817307,2.7163 -0.817308,1.2452 -2.163462,1.8125 -0.125,0.048\\n    -0.240384,0.048 -0.259616,0 -0.442308,-0.1827 -0.182692,-0.1827 -0.182692,-0.4327 0,-0.375 0.375,-0.5673\\n    0.538461,-0.2789 0.730769,-0.4231 0.711538,-0.5192 1.110577,-1.3029 0.399038,-0.7836 0.399038,-1.6682 0,-0.8847\\n    -0.399038,-1.6683 -0.399039,-0.7836 -1.110577,-1.3029 -0.192308,-0.1442 -0.730769,-0.4231 -0.375,-0.1923\\n    -0.375,-0.5672 0,-0.2501 0.182692,-0.4328 0.182692,-0.1826 0.432692,-0.1826 0.125,0 0.25,0.048 1.346154,0.5674\\n    2.163462,1.8125 0.817307,1.2452 0.817307,2.7164 z M 17,8.9867 q 0,2.2115 -1.221154,4.0624 -1.221154,1.851\\n    -3.25,2.726 -0.125,0.048 -0.25,0.048 -0.25,0 -0.432692,-0.1827 -0.182693,-0.1827 -0.182693,-0.4327 0,-0.3461\\n    0.375,-0.5673 0.06731,-0.038 0.216347,-0.1009 0.149038,-0.062 0.216346,-0.101 0.442307,-0.2404 0.788461,-0.4904\\n    1.182693,-0.875 1.846154,-2.1827 0.663462,-1.3077 0.663462,-2.7788 0,-1.4712 -0.663462,-2.7789 Q 14.442308,4.9\\n    13.259615,4.0251 12.913461,3.775 12.471154,3.5347 q -0.06731,-0.038 -0.216346,-0.101 -0.149039,-0.062\\n    -0.216347,-0.101 -0.375,-0.2212 -0.375,-0.5673 0,-0.25 0.182693,-0.4327 0.182692,-0.1827 0.432692,-0.1827 0.125,0\\n    0.25,0.048 2.028846,0.8751 3.25,2.726 Q 17,6.7751 17,8.9867 Z\" />')}function u(a,b,c,d){return void 0===d&&(d=1),v(a,b,c,\"icon-push\",d,'<path d=\"m 14.667614,9 q 0,0.415934 -0.284982,0.700867 L\\n      9.3685123,14.715 Q 9.0681257,15 8.6676124,15 8.2747991,15 7.9744123,14.715 L 7.3967524,14.137334 q\\n      -0.2926867,-0.292667 -0.2926867,-0.700867 0,-0.408201 0.2926867,-0.700934 l 2.2567399,-2.256734 -5.4223399,0 q\\n      -0.4005134,0 -0.6508334,-0.288798 -0.25032,-0.288868 -0.25032,-0.697068 l 0,-0.9858663 q 0,-0.4082 0.25032,\\n      -0.6970668 0.25032,-0.2887998 0.6508334,-0.2887998 l 5.4223399,0 L 7.3967524,5.2567334 Q 7.1040657,4.9794667\\n      7.1040657,4.5635333 q 0,-0.4159334 0.2926867,-0.6932 L 7.9744123,3.2926666 Q 8.267099,3 8.6676124,3 9.0758256,3\\n      9.3685123,3.2926666 L 14.382632,8.3067999 Q 14.667614,8.5764 14.667614,9 Z\" />')}Object.defineProperty(c,\"__esModule\",{value:!0});var v=function(a,b,c,d,e,f){return(new DOMParser).parseFromString('<svg x=\"'+a+'\" y=\"'+b+'\" xmlns=\"http://www.w3.org/2000/svg\">\\n    <g class=\"icon '+d+'\" transform=\"scale('+e+')\">\\n      '+f+\"\\n      <title>\"+c+\"</title>\\n    </g>\\n  </svg>\",\"image/svg+xml\").firstChild};c.noTls=d,c.err3xx=e,c.err4xx=f,c.err5xx=g,c.plain=h,c.other=i,c.javascript=j,c.image=k,c.svg=l,c.html=m,c.css=n,c.warning=o,c.error=p,c.font=q,c.flash=r,c.video=s,c.audio=t,c.push=u},{}],4:[function(a,b,c){\"use strict\";function d(a){var b=RegExp(\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\"),c=a.match(b);return{authority:c[4],fragment:c[9],path:c[5],query:c[7],scheme:c[2]}}function e(a,b){return a.some(function(a){return a===b})}function f(a,b){if(a.length<b)return a.replace(/https?:\\/\\//,\"\");var c=d(a);if((c.authority+c.path).length<b)return c.authority+c.path;var e=Math.floor(b/2)-3,f=Math.floor(b/2)-5,g=c.path.split(\"/\");return c.authority.length>e?c.authority.substr(0,e)+\"...\"+g[g.length-1].substr(-f):c.authority+\"...\"+g[g.length-1].substr(-f)}function g(a,b){return void 0===b&&(b=2),Math.round(a*Math.pow(10,b))/Math.pow(10,b)}function h(a,b,c){return a>=b&&a<=c}Object.defineProperty(c,\"__esModule\",{value:!0}),c.contains=e,c.resourceUrlFormatter=f,c.roundNumber=g,c.isInStatusCodeRange=h},{}],5:[function(a,b,c){\"use strict\";function d(a,b,c){if(void 0===b&&(b=e),void 0===c&&(c=f),void 0!==a){var d=b(a);if(void 0!==d)return c(d)}}function e(a){return a}function f(a){if(\"function\"==typeof a.toString)return a.toString();throw TypeError(\"Can't convert type ${typeof source} to string\")}function g(a){return a.trim().length>0?a:void 0}function h(a){var b=new Date(a);if(!isNaN(b.getTime()))return b}function i(a){return k(a,function(a){return a>=0})}function j(a){return k(a,function(a){return a>0})}function k(a,b){var c=function(a){return b(a)?a:void 0};if(\"string\"==typeof a){var d=parseInt(a,10);if(!isFinite(d))return;return c(d)}return c(a)}function l(a){return s.roundNumber(a,3)+\" ms\"}function m(a){var b=s.roundNumber(a,3)+\" s\";return a>v?b+\" (~\"+s.roundNumber(a/v,0)+\" days)\":a>u?b+\" (~\"+s.roundNumber(a/u,0)+\" hours)\":a>t?b+\" (~\"+s.roundNumber(a/t,0)+\" minutes)\":b}function n(a){return a.toUTCString()+\"</br>(local time: \"+a.toLocaleString()+\")\"}function o(a){var b=a+\" bytes\";return a>=x?b+\" (~\"+s.roundNumber(a/x,1)+\" MB)\":a>=w?b+\" (~\"+s.roundNumber(a/w,0)+\" kB)\":b}function p(a){if(void 0===a&&(a=\"\"),\"string\"!=typeof a){if(\"function\"!=typeof a.toString)throw TypeError(\"Invalid parameter\");a=a.toString()}return a.replace(z,function(a){return y[a]})}function q(a){return\"number\"==typeof a?a:\"string\"==typeof a?parseInt(a,10):void 0}function r(a){var b=function(b){if(a[b]=q(a[b]),void 0===a[b])throw TypeError('option \"'+b+'\" needs to be a number')},c=function(b){a[b]=!!a[b]};return b(\"leftColumnWith\"),b(\"rowHeight\"),b(\"selectedPage\"),c(\"showAlignmentHelpers\"),c(\"showIndicatorIcons\"),c(\"showMimeTypeIcon\"),a}Object.defineProperty(c,\"__esModule\",{value:!0});var s=a(\"./misc\");c.parseAndFormat=d,c.parseNonEmpty=g,c.parseDate=h,c.parseNonNegative=i,c.parsePositive=j,c.formatMilliseconds=l;var t=60,u=60*t,v=24*u;c.formatSeconds=m,c.formatDateLocalized=n;var w=1024,x=1024*w;c.formatBytes=o;var y={'\"':\"&quot\",\"&\":\"&amp\",\"'\":\"&#039\",\"<\":\"&lt\",\">\":\"&gt\"},z=new RegExp(Object.keys(y).join(\"|\"),\"g\");c.escapeHtml=p,c.toInt=q,c.validateOptions=r},{\"./misc\":4}],6:[function(a,b,c){\"use strict\";function d(a){for(var b=[],c=0,d=Object.keys(a);c<d.length;c++){var e=d[c];b.push([e,String(a[e])])}return b}function e(a,b,c){b in a||console.warn(new Error(\"Trying to set non-existing attribute \"+b+\" = \"+c+\" on a <\"+a.tagName.toLowerCase()+\">.\")),a.setAttributeNS(null,b,c)}function f(a,b,c){b in a.style?a.style[b]=c:console.warn(new Error(\"Trying to set non-existing style \"+b+\" = \"+c+\" on a <\"+a.tagName.toLowerCase()+\">.\"))}function g(a,b){var c=void 0===b?{}:b,g=c.attributes,h=void 0===g?{}:g,i=c.css,j=void 0===i?{}:i,k=c.text,l=void 0===k?\"\":k,m=c.className,n=void 0===m?\"\":m,o=document.createElementNS(\"http://www.w3.org/2000/svg\",a);return n&&r.addClass(o,n),l&&(o.textContent=l),d(j).forEach(function(a){return f(o,a[0],a[1])}),d(h).forEach(function(a){return e(o,a[0],a[1])}),o}function h(a,b,c){return void 0===c&&(c={}),g(\"svg\",{className:a,attributes:b,css:c})}function i(a,b,c){return void 0===b&&(b={}),void 0===c&&(c={}),g(\"g\",{className:a,attributes:b,css:c})}function j(a){return g(\"clipPath\",{attributes:{id:a}})}function k(a){return g(\"foreignObject\",{attributes:a})}function l(a){return g(\"a\",{className:a})}function m(a,b,c){return void 0===b&&(b=\"\"),void 0===c&&(c={}),g(\"rect\",{attributes:a,className:b,css:c})}function n(a,b){return void 0===b&&(b=\"\"),g(\"line\",{className:b,attributes:a})}function o(a){return g(\"title\",{text:a})}function p(a,b,c){return void 0===b&&(b={}),void 0===c&&(c={}),g(\"text\",{text:a,attributes:b,css:c})}function q(a,b){void 0===b&&(b=!1);var c,d=s();return c=b?a:a.cloneNode(!1),d.appendChild(c),c.style.textShadow=\"0\",window.document.body.appendChild(d),c.getBBox().width}Object.defineProperty(c,\"__esModule\",{value:!0});var r=a(\"./dom\");c.newSvg=h,c.newG=i,c.newClipPath=j,c.newForeignObject=k,c.newA=l,c.newRect=m,c.newLine=n,c.newTitle=o,c.newTextEl=p;var s=function(){var a,b;return function(){if(void 0===a){a=h(\"water-fall-chart temp\",{className:\"water-fall-chart temp\",width:\"9999px\"},{left:\"0px\",position:\"absolute\",top:\"0px\",visibility:\"hidden\",\"z-index\":\"99999\"})}return void 0===a.parentElement&&window.document.body.appendChild(a),clearTimeout(b),b=setTimeout(function(){a.parentNode.removeChild(a)},1e3),a}}();c.getNodeTextWidth=q},{\"./dom\":1}],7:[function(a,b,c){\"use strict\";function d(){var a=document.createElement(\"ul\");return a.className=\"resource-legend\",a.innerHTML='\\n        <li class=\"legend-blocked\" title=\"Time spent in a queue waiting for a network connection.\">Blocked</li>\\n        <li class=\"legend-dns\" title=\"DNS resolution time.\">DNS</li>\\n        <li class=\"legend-connect\" title=\"Time required to create TCP connection.\">Connect</li>\\n        <li class=\"legend-ssl\" title=\"Time required for SSL/TLS negotiation.\">SSL (TLS)</li>\\n        <li class=\"legend-send\" title=\"Time required to send HTTP request to the server.\">Send</li>\\n        <li class=\"legend-wait\" title=\"Waiting for a response from the server.\">Wait</li>\\n        <li class=\"legend-receive\" \\n        title=\"Time required to read entire response from the server (or cache).\">Receive</li>',a}Object.defineProperty(c,\"__esModule\",{value:!0}),c.makeLegend=d},{}],8:[function(a,b,c){\"use strict\";function d(a,b){void 0===b&&(b={});var c=h.validateOptions(g({},m,b)),d=new j.default(a,c.selectedPage),e=l.createWaterfallSvg(d.getSelectedPage(),c);return d.onPageUpdate(function(a,b){var d=e.parentElement,f=l.createWaterfallSvg(b,c);d.replaceChild(f,e),e=f}),c.pageSelector&&d.initPagingSelectBox(c.pageSelector),c.legendHolder&&(c.legendHolder.innerHTML=\"\",c.legendHolder.appendChild(i.makeLegend())),e}function e(a,b){return void 0===b&&(b={}),d(k.transformDoc(a),b)}function f(a,b){return void 0===b&&(b={}),d(a,b)}var g=this&&this.__assign||Object.assign||function(a){for(var b,c=1,d=arguments.length;c<d;c++){b=arguments[c];for(var e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a[e]=b[e])}return a};Object.defineProperty(c,\"__esModule\",{value:!0});var h=a(\"./helpers/parse\"),i=a(\"./legend/legend\");c.makeLegend=i.makeLegend;var j=a(\"./paging/paging\"),k=a(\"./transformers/har\"),l=a(\"./waterfall/svg-chart\"),m={leftColumnWith:25,legendHolder:void 0,pageSelector:void 0,rowHeight:23,selectedPage:0,showAlignmentHelpers:!0,showIndicatorIcons:!0,showMimeTypeIcon:!0};c.fromHar=e,c.fromPerfCascadeFormat=f;var n=k.transformDoc;c.transformHarToPerfCascade=n},{\"./helpers/parse\":5,\"./legend/legend\":7,\"./paging/paging\":9,\"./transformers/har\":13,\"./waterfall/svg-chart\":26}],9:[function(a,b,c){\"use strict\";Object.defineProperty(c,\"__esModule\",{value:!0});var d=a(\"../helpers/dom\"),e=function(){function a(a,b){void 0===b&&(b=0),this.doc=a,this.selectedPageIndex=b,this.onPageUpdateCbs=[],b>=this.doc.pages.length&&(this.selectedPageIndex=this.doc.pages.length-1)}return a.prototype.getPageCount=function(){return this.doc.pages.length},a.prototype.getSelectedPage=function(){return this.doc.pages[this.selectedPageIndex]},a.prototype.getSelectedPageIndex=function(){return this.selectedPageIndex},a.prototype.setSelectedPageIndex=function(a){var b=this;if(this.selectedPageIndex!==a){if(a<0||a>=this.getPageCount())throw new Error(\"Page does not exist - Invalid pageIndex selected\")\n;this.selectedPageIndex=a;var c=this.doc.pages[this.selectedPageIndex];this.onPageUpdateCbs.forEach(function(a){a(b.selectedPageIndex,c)})}},a.prototype.onPageUpdate=function(a){if(this.getPageCount()>1)return this.onPageUpdateCbs.push(a)},a.prototype.initPagingSelectBox=function(a){var b=this,c=this;if(this.getPageCount()<=1)return void(a.style.display=\"none\");d.removeChildren(a),this.doc.pages.forEach(function(c,d){var e=new Option(c.title,d.toString(),!1,d===b.selectedPageIndex);a.add(e)}),a.style.display=\"block\",a.addEventListener(\"change\",function(a){var b=parseInt(a.target.value,10);c.setSelectedPageIndex(b)})},a}();c.default=e},{\"../helpers/dom\":1}],10:[function(a,b,c){\"use strict\";function d(a,b,c){return[[\"Request Number\",\"#\"+c],[\"Started\",new Date(a.startedDateTime).toLocaleString()+(b>0?\" (\"+j.formatMilliseconds(b)+\" after page request started)\":\"\")],[\"Duration\",j.formatMilliseconds(a.time)],[\"Error/Status Code\",a.response.status+\" \"+a.response.statusText],[\"Server IPAddress\",a.serverIPAddress],[\"Connection\",a.connection],[\"Browser Priority\",a._priority||a._initialPriority],[\"Was pushed\",j.parseAndFormat(a._was_pushed,j.parsePositive,function(){return\"yes\"})],[\"Initiator (Loaded by)\",a._initiator],[\"Initiator Line\",a._initiator_line],[\"Host\",i.getHeader(a.request.headers,\"Host\")],[\"IP\",a._ip_addr],[\"Client Port\",j.parseAndFormat(a._client_port,j.parsePositive)],[\"Expires\",a._expires],[\"Cache Time\",j.parseAndFormat(a._cache_time,j.parsePositive,j.formatSeconds)],[\"CDN Provider\",a._cdn_provider],k(\"ObjectSize\",a._objectSize),k(\"Bytes In (downloaded)\",a._bytesIn),k(\"Bytes Out (uploaded)\",a._bytesOut),k(\"JPEG Scan Count\",a._jpeg_scan_count),k(\"Gzip Total\",a._gzip_total),k(\"Gzip Save\",a._gzip_save),k(\"Minify Total\",a._minify_total),k(\"Minify Save\",a._minify_save),k(\"Image Total\",a._image_total),k(\"Image Save\",a._image_save)].filter(function(a){return void 0!==a[1]&&\"\"!==a[1]})}function e(a){var b=a.request,c=function(a){return[a,i.getHeader(b.headers,a)]};return[[\"Method\",b.method],[\"HTTP Version\",b.httpVersion],k(\"Bytes Out (uploaded)\",a._bytesOut),k(\"Headers Size\",b.headersSize),k(\"Body Size\",b.bodySize),[\"Comment\",j.parseAndFormat(b.comment,j.parseNonEmpty)],c(\"User-Agent\"),c(\"Host\"),c(\"Connection\"),c(\"Accept\"),c(\"Accept-Encoding\"),c(\"Expect\"),c(\"Forwarded\"),c(\"If-Modified-Since\"),c(\"If-Range\"),c(\"If-Unmodified-Since\"),l(\"Querystring parameters count\",b.queryString.length),l(\"Cookies count\",b.cookies.length)].filter(function(a){return void 0!==a[1]&&\"\"!==a[1]})}function f(a){var b=a.response,c=b.content,d=b.headers,e=function(a,b){return void 0===b&&(b=a),[a,i.getHeader(d,b)]},f=function(a){var b=i.getHeader(d,a);return[a,j.parseAndFormat(b,j.parseDate,j.formatDateLocalized)]},g=i.getHeader(d,\"Content-Length\"),h=void 0;c.size!==-1&&g!==c.size.toString()&&(h=c.size);var l=i.getHeader(d,\"Content-Type\");return a._contentType&&a._contentType!==l&&(l=l+\" | \"+a._contentType),[[\"Status\",b.status+\" \"+b.statusText],[\"HTTP Version\",b.httpVersion],k(\"Bytes In (downloaded)\",a._bytesIn),k(\"Headers Size\",b.headersSize),k(\"Body Size\",b.bodySize),[\"Content-Type\",l],e(\"Cache-Control\"),e(\"Content-Encoding\"),f(\"Expires\"),f(\"Last-Modified\"),e(\"Pragma\"),k(\"Content-Length\",g),k(\"Content Size\",h),k(\"Content Compression\",c.compression),e(\"Connection\"),e(\"ETag\"),e(\"Accept-Patch\"),[\"Age\",j.parseAndFormat(i.getHeader(d,\"Age\"),j.parseNonNegative,j.formatSeconds)],e(\"Allow\"),e(\"Content-Disposition\"),e(\"Location\"),e(\"Strict-Transport-Security\"),e(\"Trailer (for chunked transfer coding)\",\"Trailer\"),e(\"Transfer-Encoding\"),e(\"Upgrade\"),e(\"Vary\"),e(\"Timing-Allow-Origin\"),[\"Redirect URL\",j.parseAndFormat(b.redirectURL,j.parseNonEmpty)],[\"Comment\",j.parseAndFormat(b.comment,j.parseNonEmpty)]]}function g(a,b,c){var d=a.timings,e=function(a){return j.parseAndFormat(a,j.parseNonNegative,j.formatMilliseconds)},f=\"number\"!=typeof b||\"number\"!=typeof c?void 0:c-b;return[[\"Total\",j.formatMilliseconds(f)],[\"Blocked\",e(d.blocked)],[\"DNS\",e(d.dns)],[\"Connect\",e(d.connect)],[\"SSL (TLS)\",e(d.ssl)],[\"Send\",j.formatMilliseconds(d.send)],[\"Wait\",j.formatMilliseconds(d.wait)],[\"Receive\",j.formatMilliseconds(d.receive)]]}function h(a,b,c,h){var i=a.request.headers,j=a.response.headers,k=function(a){return[a.name,a.value]};return{general:d(a,c,b),request:e(a),requestHeaders:i.map(k),response:f(a),responseHeaders:j.map(k),timings:g(a,c,h)}}Object.defineProperty(c,\"__esModule\",{value:!0});var i=a(\"../helpers/har\"),j=a(\"../helpers/parse\"),k=function(a,b){return[a,j.parseAndFormat(b,j.parsePositive,j.formatBytes)]},l=function(a,b){return[a,j.parseAndFormat(b,j.parsePositive)]};c.getKeys=h},{\"../helpers/har\":2,\"../helpers/parse\":5}],11:[function(a,b,c){\"use strict\";function d(a,b){if(a.response.bodySize<1e3)return!1;if(l.contains([\"html\",\"css\",\"javascript\",\"svg\",\"plain\"],b))return!0;var c=a.response.content.mimeType,d=[\"application/vnd.ms-fontobject\",\"application/x-font-opentype\",\"application/x-font-truetype\",\"application/x-font-ttf\",\"application/xml\",\"font/eot\",\"font/opentype\",\"font/otf\",\"image/vnd.microsoft.icon\"];return!(!l.contains([\"text\"],c.split(\"/\")[0])&&!l.contains(d,c.split(\";\")[0]))}function e(a){if(\"get\"!==a.request.method.toLowerCase())return!1;if(204===a.response.status||!l.isInStatusCodeRange(a.response.status,200,299))return!1;var b=a.response.headers;return!(k.hasHeader(b,\"Cache-Control\")||k.hasHeader(b,\"Expires\"))}function f(a,b){var c=a.response.headers;return!k.hasHeader(c,\"Content-Encoding\")&&d(a,b)}function g(a){return 0===a.request.url.indexOf(\"https://\")}function h(a){return 1===function(a){return\"string\"==typeof a?parseInt(a,10):a}(a._was_pushed)}function i(a){var b=a.filter(function(a){return!a.response.redirectURL})[0];return void 0===b?a.length>0&&g(a[0]):g(b)}function j(a,b,c){var d=[];return h(a)&&d.push({description:\"Response was pushed by the server using HTTP2 push.\",icon:\"push\",id:\"push\",title:\"Response was pushed by the server\",type:\"info\"}),b&&!g(a)&&d.push({description:\"Insecure request, it should use HTTPS.\",id:\"noTls\",title:\"Insecure Connection\",type:\"error\"}),e(a)&&d.push({description:\"The response is not allow to be cached on the client. Consider setting 'Cache-Control' headers.\",id:\"noCache\",title:\"Response not cached\",type:\"error\"}),f(a,c)&&d.push({description:\"The response is not compressed. Consider enabling HTTP compression on your server.\",id:\"noGzip\",title:\"no gzip\",type:\"error\"}),!a.response.content.mimeType&&l.isInStatusCodeRange(a.response.status,200,299)&&204!==a.response.status&&d.push({description:\"Response doesn't contain a 'Content-Type' header.\",id:\"warning\",title:\"No MIME Type defined\",type:\"warning\"}),d}Object.defineProperty(c,\"__esModule\",{value:!0});var k=a(\"../helpers/har\"),l=a(\"../helpers/misc\");c.documentIsSecure=i,c.collectIndicators=j},{\"../helpers/har\":2,\"../helpers/misc\":4}],12:[function(a,b,c){\"use strict\";function d(a,b,c,d,f,l){var o=[],p=m.getKeys(a,b,d,f);return o.push(g(p.general,l)),o.push(h(p.request,p.requestHeaders)),o.push(i(p.response,p.responseHeaders)),o.push(e(\"Timings\",n.makeDefinitionList(p.timings,!0))),o.push(j(a)),\"image\"===c&&o.push(k(a)),o.filter(function(a){return void 0!==a})}function e(a,b,c){return void 0===c&&(c=\"\"),{title:a,content:b,tabClass:c}}function f(a,b,c){return void 0===c&&(c=\"\"),{title:a,renderContent:b,tabClass:c}}function g(a,b){var c=n.makeDefinitionList(a);if(0===b.length)return e(\"General\",c);var d=\"<h2>General</h2>\\n    <dl>\"+c+\"<dl>\";c=\"\";var f=b.filter(function(a){return\"error\"===a.type}).map(function(a){return[a.title,a.description]}),g=b.filter(function(a){return\"warning\"===a.type}).map(function(a){return[a.title,a.description]}),h=b.filter(function(a){return\"error\"!==a.type&&\"warning\"!==a.type}).map(function(a){return[a.title,a.description]});f.length>0&&(c+='<h2 class=\"no-boder\">Error'+(f.length>1?\"s\":\"\")+\"</h2>\\n    <dl>\"+n.makeDefinitionList(f)+\"</dl>\"),g.length>0&&(c+='<h2 class=\"no-boder\">Warning'+(g.length>1?\"s\":\"\")+\"</h2>\\n    <dl>\"+n.makeDefinitionList(g)+\"</dl>\"),h.length>0&&(c+='<h2 class=\"no-boder\">Info</h2>\\n    <dl>'+n.makeDefinitionList(h)+\"</dl>\"),e(\"General\",c+d)}function h(a,b){return e(\"Request\",\"<dl>\\n      \"+n.makeDefinitionList(a)+\"\\n    </dl>\\n    <h2>All Request Headers</h2>\\n    <dl>\\n      \"+n.makeDefinitionList(b)+\"\\n    </dl>\")}function i(a,b){return e(\"Response\",\"<dl>\\n      \"+n.makeDefinitionList(a)+\"\\n    </dl>\\n    <h2>All Response Headers</h2>\\n    <dl>\\n      \"+n.makeDefinitionList(b)+\"\\n    </dl>\")}function j(a){return f(\"Raw Data\",function(){return\"<pre><code>\"+l.escapeHtml(JSON.stringify(a,null,2))+\"</code></pre>\"},\"raw-data\")}function k(a){return f(\"Preview\",function(b){return'<img class=\"preview\" style=\"max-height:'+(b-100)+'px\"\\n data-src=\"'+a.request.url+'\" />'})}Object.defineProperty(c,\"__esModule\",{value:!0});var l=a(\"../helpers/parse\"),m=a(\"./extract-details-keys\"),n=a(\"./helpers\");c.makeTabs=d},{\"../helpers/parse\":5,\"./extract-details-keys\":10,\"./helpers\":14}],13:[function(a,b,c){\"use strict\";function d(a){var b=this,c=void 0!==a.log?a.log:a,d=f(c);return console.log(\"HAR created by %s(%s) %s page(s)\",c.creator.name,c.creator.version,d.length),{pages:d.map(function(a,d){return b.transformPage(c,d)})}}function e(a,b,c,d){c=Math.round(c);var e=Math.round(l.toInt(a._all_end)||c+a.time),f=o.mimeToRequestType(a.response.content.mimeType),g=m.collectIndicators(a,d,f),i=j(a,g);return o.createWaterfallEntry(a.request.url,c,e,h(c,a),i,n.makeTabs(a,b+1,f,c,e,g))}function f(a){return a.pages&&a.pages.length>0?a.pages:[{id:\"\",pageTimings:{},startedDateTime:a.entries.reduce(function(a,b){var c=Date.parse(b.startedDateTime);return Date.parse(a)<c?a:b.startedDateTime},a.entries[0].startedDateTime),title:\"n/a\"}]}function g(a,b){void 0===b&&(b=0);var c=void 0!==a.log?a.log:a,d=f(c),g=d[b],h=new Date(g.startedDateTime).getTime(),i=g.pageTimings;console.log(\"%s: %s of %s page(s)\",g.title,b+1,d.length);var j=0,l=m.documentIsSecure(c.entries),n=c.entries.filter(function(a){return 0!==a.request.url.indexOf(\"data:\")&&(1===d.length&&\"\"===g.id||a.pageref===g.id)}).map(function(a,b){var c=new Date(a.startedDateTime).getTime()-h;return j=Math.max(j,c+a.time),e(a,b,c,l)}),o=Object.keys(i).filter(function(a){return\"number\"==typeof i[a]&&i[a]>=0}).sort(function(a,b){return i[a]>i[b]?1:-1}).map(function(a){var b=i[a];return j=Math.max(j,b),{name:a.replace(/^[_]/,\"\")+\" (\"+k.roundNumber(b,0)+\" ms)\",startTime:b}});return j+=100,{docIsTLS:l,durationMs:j,entries:n,marks:o,lines:[],title:g.title}}function h(a,b){var c=b.timings;return[\"blocked\",\"dns\",\"connect\",\"send\",\"wait\",\"receive\"].reduce(function(d,e){var f=i(e,b,d,a);if(f.end&&f.start>=f.end)return d;if(\"connect\"===e&&c.ssl&&c.ssl!==-1){var g=parseInt(b._ssl_start,10)||f.start,h=parseInt(b._ssl_end,10)||f.start+c.ssl,j=parseInt(b._ssl_start,10)?f.start:h;return d.concat([o.createWaterfallEntryTiming(\"ssl\",Math.round(g),Math.round(h))]).concat([o.createWaterfallEntryTiming(e,Math.round(j),Math.round(f.end))])}return d.concat([o.createWaterfallEntryTiming(e,Math.round(f.start),Math.round(f.end))])},[])}function i(a,b,c,d){var e;switch(a){case\"wait\":e=\"ttfb\";break;case\"receive\":e=\"download\";break;default:e=a}var f=parseInt(b[\"_\"+e+\"_start\"],10),g=parseInt(b[\"_\"+e+\"_end\"],10),h=isNaN(f)?c.length>0?c[c.length-1].end:d:f,i=isNaN(g)?h+b.timings[a]:g;return{end:Math.round(i),start:Math.round(h)}}function j(a,b){var c=o.mimeToRequestType(a.response.content.mimeType);return{icon:o.makeMimeTypeIcon(a.response.status,a.response.statusText,c,a.response.redirectURL),rowClass:o.makeRowCssClasses(a.response.status),indicators:b,requestType:c,statusCode:a.response.status}}Object.defineProperty(c,\"__esModule\",{value:!0});var k=a(\"../helpers/misc\"),l=a(\"../helpers/parse\"),m=a(\"./har-heuristics\"),n=a(\"./har-tabs\"),o=a(\"./helpers\");c.transformDoc=d,c.transformPage=g},{\"../helpers/misc\":4,\"../helpers/parse\":5,\"./har-heuristics\":11,\"./har-tabs\":12,\"./helpers\":14}],14:[function(a,b,c){\"use strict\";function d(a,b){void 0===b&&(b=!1);var c=function(a){return b?'class=\"'+(a.toLowerCase().replace(/[^a-z-]/g,\"\")||\"no-colour\")+'\"':\"\"};return a.filter(function(a){return void 0!==a[1]}).map(function(a){return\"\\n      <dt \"+c(a[0])+\">\"+a[0]+\"</dt>\\n      <dd>\"+k.escapeHtml(a[1])+\"</dd>\\n    \"}).join(\"\")}function e(a){if(void 0===a)return\"other\";var b=a.split(\"/\"),c=b[1];switch(void 0!==c&&(c=c.indexOf(\";\")>-1?c.split(\";\")[0]:c),b[0]){case\"image\":return\"svg+xml\"===c?\"svg\":\"image\";case\"font\":return\"font\";case\"video\":return\"video\";case\"audio\":return\"audio\"}switch(c){case\"xml\":case\"html\":return\"html\";case\"plain\":return\"plain\";case\"css\":return\"css\";case\"vnd.ms-fontobject\":case\"font-woff\":case\"font-woff2\":case\"x-font-truetype\":case\"x-font-opentype\":case\"x-font-woff\":return\"font\";case\"javascript\":case\"x-javascript\":case\"script\":case\"json\":return\"javascript\";case\"x-shockwave-flash\":return\"flash\";default:return\"other\"}}function f(a,b,c,d,e,f){return void 0===d&&(d=[]),{total:\"number\"!=typeof b||\"number\"!=typeof c?void 0:c-b,url:a,start:b,end:c,segments:d,responseDetails:e,tabs:f}}function g(a,b,c){return{total:\"number\"!=typeof b||\"number\"!=typeof c?void 0:c-b,type:a,start:b,end:c}}function h(a){var b=[\"row-item\"];return j.isInStatusCodeRange(a,500,599)?b.push(\"status5xx\"):j.isInStatusCodeRange(a,400,499)?b.push(\"status4xx\"):304!==a&&j.isInStatusCodeRange(a,300,399)&&b.push(\"status3xx\"),b.join(\" \")}function i(a,b,c,d){if(void 0===d&&(d=\"\"),d){var e=encodeURI(d.split(\"?\")[0]||\"\");return l.makeIcon(\"err3xx\",a+\" response status: Redirect to \"+e+\"...\")}return j.isInStatusCodeRange(a,400,499)?l.makeIcon(\"err4xx\",a+\" response status: \"+b):j.isInStatusCodeRange(a,500,599)?l.makeIcon(\"err5xx\",a+\" response status: \"+b):204===a?l.makeIcon(\"plain\",\"No content\"):l.makeIcon(c,c)}Object.defineProperty(c,\"__esModule\",{value:!0});var j=a(\"../helpers/misc\"),k=a(\"../helpers/parse\"),l=a(\"../waterfall/row/svg-indicators\");c.makeDefinitionList=d,c.mimeToRequestType=e,c.createWaterfallEntry=f,c.createWaterfallEntryTiming=g,c.makeRowCssClasses=h,c.makeMimeTypeIcon=i},{\"../helpers/misc\":4,\"../helpers/parse\":5,\"../waterfall/row/svg-indicators\":20}],15:[function(a,b,c){\"use strict\";function d(a){return\"block-\"+a}function e(a){return\"block-\"+a}Object.defineProperty(c,\"__esModule\",{value:!0}),c.requestTypeToCssClass=d,c.timingTypeToCssClass=e},{}],16:[function(a,b,c){\"use strict\";function d(a,b,c){var d=document.createElement(\"html\"),e=document.createElement(\"body\");e.setAttribute(\"xmlns\",\"http://www.w3.org/1999/xhtml\"),d.setAttributeNS(\"http://www.w3.org/2000/xmlns/\",\"xmlns\",\"http://www.w3.org/2000/xmlns/\");var f=c.tabs.map(function(a){return'<li><button class=\"tab-button\">'+a.title+\"</button></li>\"}).join(\"\\n\"),g=c.tabs.map(function(a){var c=\"tab\";a.tabClass&&(c+=\" \"+a.tabClass);var d=\"\";if(a.content)d=a.content;else{if(\"function\"!=typeof a.renderContent)throw TypeError(\"Invalid Details Tab\");d=a.renderContent(b),a.content=d}return'<div class=\"tab '+c+'\">'+d+\"</div>\"}).join(\"\\n\");return e.innerHTML='\\n    <div class=\"wrapper\">\\n      <header class=\"type-'+c.responseDetails.requestType+'\">\\n        <h3><strong>#'+a+'</strong> <a href=\"'+c.url+'\">'+c.url+'</a></h3>\\n        <nav class=\"tab-nav\">\\n        <ul>\\n          '+f+\"\\n        </ul>\\n        </nav>\\n      </header>\\n      \"+g+\"\\n    </div>\\n    \",d.appendChild(e),d}Object.defineProperty(c,\"__esModule\",{value:!0}),c.createDetailsBody=d},{}],17:[function(a,b,c){\"use strict\";Object.defineProperty(c,\"__esModule\",{value:!0});var d=a(\"../../helpers/dom\"),e=a(\"./svg-details-overlay\"),f=function(){function a(a,b){this.context=a,this.overlayHolder=b,this.openOverlays=[]}return a.prototype.getCombinedOverlayHeight=function(){return this.openOverlays.reduce(function(a,b){return a+b.height},0)},a.prototype.openOverlay=function(a,b,c,d,e){if(!this.openOverlays.some(function(b){return b.index===a})){var f=this;this.openOverlays.push({defaultY:b,entry:d,index:a,onClose:function(){f.closeOverlay(a,c,e)},openTabIndex:0}),this.renderOverlays(c),this.context.pubSub.publishToOverlayChanges({combinedOverlayHeight:f.getCombinedOverlayHeight(),openOverlays:f.openOverlays,type:\"open\"}),this.realignBars(e)}},a.prototype.toggleOverlay=function(a,b,c,d,e){this.openOverlays.some(function(b){return b.index===a})?this.closeOverlay(a,c,e):this.openOverlay(a,b,c,d,e)},a.prototype.closeOverlay=function(a,b,c){var d=this;this.openOverlays.splice(this.openOverlays.reduce(function(b,c,d){return c.index===a?d:b},-1),1),this.renderOverlays(b),this.context.pubSub.publishToOverlayChanges({combinedOverlayHeight:d.getCombinedOverlayHeight(),openOverlays:d.openOverlays,type:\"closed\"}),this.realignBars(c)},a.prototype.realignBars=function(a){var b=this;a.forEach(function(a,c){var d=b.getOverlayOffset(c);a.style.transform=\"translate(0, \"+d+\"px)\"})},a.prototype.getOverlayOffset=function(a){return this.openOverlays.reduce(function(b,c){return c.index<a?b+c.height:b},0)},a.prototype.renderOverlays=function(a){var b=this;d.removeChildren(this.overlayHolder);var c=0;this.openOverlays.sort(function(a,b){return a.index>b.index?1:-1}).forEach(function(d){var f=d.defaultY+c,g=e.createRowInfoOverlay(d,f,a),h=g.querySelector(\"img.preview\");h&&!h.src&&h.setAttribute(\"src\",h.attributes.getNamedItem(\"data-src\").value),b.overlayHolder.appendChild(g);var i=g.getBoundingClientRect().height;return c+=i,d.actualY=f,d.height=i,d})},a}();c.default=f},{\"../../helpers/dom\":1,\"./svg-details-overlay\":19}],18:[function(a,b,c){\"use strict\";Object.defineProperty(c,\"__esModule\",{value:!0});var d=function(){function a(){this.subscribers=[]}return a.prototype.subscribeToOverlayChanges=function(a){this.subscribers.push(a)},a.prototype.publishToOverlayChanges=function(a){this.subscribers.forEach(function(b){return b(a)})},a}();c.default=d},{}],19:[function(a,b,c){\"use strict\";function d(a,b){Array.prototype.forEach.call(a,b)}function e(a){var b=h.newA(\"info-overlay-close-btn\");return b.appendChild(h.newRect({height:23,width:23,x:\"100%\",y:a})),b.appendChild(h.newTextEl(\"✕\",{dx:7,dy:16,x:\"100%\",y:a})),b.appendChild(h.newTitle(\"Close Overlay\")),b}function f(a,b){var c=h.newG(\"info-overlay-holder\"),d=h.newRect({height:b,rx:2,ry:2,width:\"100%\",x:\"0\",y:a},\"info-overlay\");return c.appendChild(d),c}function g(a,b,c){var g=a.index+1,j=h.newG(\"outer-info-overlay-holder\"),k=f(b,c),l=h.newForeignObject({height:c,width:\"100%\",x:\"0\",y:b}),m=e(b);m.addEventListener(\"click\",function(){return a.onClose(a.index)});var n=i.createDetailsBody(g,c,a.entry),o=n.getElementsByClassName(\"tab-button\"),p=n.getElementsByClassName(\"tab\"),q=function(b){a.openTabIndex=b,d(p,function(a,c){a.style.display=b===c?\"block\":\"none\",o.item(c).classList.toggle(\"active\",b===c)})};return d(o,function(a,b){a.addEventListener(\"click\",function(){return q(b)})}),q(a.openTabIndex),l.appendChild(n),k.appendChild(l),k.appendChild(m),j.appendChild(k),j}Object.defineProperty(c,\"__esModule\",{value:!0});var h=a(\"../../helpers/svg\"),i=a(\"./html-details-body\");c.forEach=d,c.createRowInfoOverlay=g},{\"../../helpers/svg\":6,\"./html-details-body\":16}],20:[function(a,b,c){\"use strict\";function d(a,b){return{type:a,title:b,width:20}}function e(a){var b=a.responseDetails.indicators;if(0===b.length)return[];var c=[],e=\"\",f=b.filter(function(a){return\"error\"===a.type}),g=b.filter(function(a){return\"warning\"===a.type}),h=b.filter(function(a){return\"error\"!==a.type&&\"warning\"!==a.type});return f.length>0&&(c.push(\"Error\"+(f.length>1?\"s\":\"\")+\":\\n\"+f.map(function(a){return a.title}).join(\"\\n\")),e=\"error\"),g.length>0&&(c.push(\"Warning\"+(g.length>1?\"s\":\"\")+\":\\n\"+g.map(function(a){return a.title}).join(\"\\n\")),e=e||\"warning\"),h.length>0&&(c.push(\"Info:\\n\"+h.map(function(a){return a.title}).join(\"\\n\")),e=e||1!==h.length?e||\"info\":h[0].icon||h[0].type),[d(e,c.join(\"\\n\"))]}Object.defineProperty(c,\"__esModule\",{value:!0}),c.makeIcon=d,c.getIndicatorIcons=e},{}],21:[function(a,b,c){\"use strict\";function d(a,b){var c=a.height-1,d=q.newRect({height:c,width:p.roundNumber(a.width/a.unit)+\"%\",x:p.roundNumber(a.x/a.unit)+\"%\",y:a.y},b);return a.label&&d.appendChild(q.newTitle(a.label)),a.showOverlay&&a.hideOverlay&&(d.addEventListener(\"mouseenter\",a.showOverlay(a)),d.addEventListener(\"mouseleave\",a.hideOverlay(a))),d}function e(a,b){return{cssClass:r.timingTypeToCssClass(a.type),height:b.height-6,hideOverlay:b.hideOverlay,label:a.type+\" (\"+Math.round(a.start)+\"ms - \"+Math.round(a.end)+\"ms | total: \"+Math.round(a.total)+\"ms)\",showOverlay:b.showOverlay,unit:b.unit,width:a.total,x:a.start||.001,y:b.y}}function f(a,b,c){var d=a.y+a.height/1.5,e=Math.round(b)+\" ms\",f=(a.x+a.width)/a.unit+1,g=q.newTextEl(e,{x:p.roundNumber(f)+\"%\",y:d});return f+8*e.length/500*100>100&&(f=c/a.unit-1,g=q.newTextEl(e,{x:p.roundNumber(f)+\"%\",y:d},{textAnchor:\"end\"})),g}function g(a,b,c){var g=d(a,\"time-block \"+a.cssClass),h=q.newG(\"rect-holder\"),i=a.x;return h.appendChild(g),b&&b.length>0&&(b.forEach(function(b){if(b.total>0&&\"number\"==typeof b.start){var c=e(b,a),f=d(c,\"segment \"+c.cssClass);i=Math.min(i,c.x),h.appendChild(f)}}),h.appendChild(f(a,c,i))),h}function h(a,b,c,d,e){return b+=Math.round(d/2)+5,a+=e,q.newTextEl(c,{x:a,y:b},{\"text-anchor\":\"end\"})}function i(a,b,c,d){var e=k(a,b,c,d);return e.style.clipPath=\"url(#titleClipPath)\",e}function j(a,b,c,d){var e=k(a,b,c,d),f=q.newG(\"full-label\");return f.appendChild(q.newRect({height:d-4,rx:5,ry:5,width:q.getNodeTextWidth(e),x:a-3,y:b+3},\"label-full-bg\")),f.appendChild(e),f}function k(a,b,c,d){var e=p.resourceUrlFormatter(c,125);b=b+Math.round(d/2)+5;var f=q.newTextEl(e,{x:a,y:b});return f.appendChild(q.newTitle(c)),f.style.opacity=c.match(/js.map$/)?\"0.5\":\"1\",f}function l(a,b,c,d){var e=d.getElementsByTagName(\"rect\")[0],f=d.getElementsByTagName(\"text\")[0];d.style.display=\"none\",d.style.visibility=\"hidden\",a.appendChild(b),a.appendChild(c),a.appendChild(d),a.addEventListener(\"mouseenter\",function(){d.style.display=\"block\",c.style.display=\"none\",d.style.visibility=\"visible\",e.style.width=(f.clientWidth+10).toString()}),a.addEventListener(\"mouseleave\",function(){c.style.display=\"block\",d.style.display=\"none\",d.style.visibility=\"hidden\"})}function m(a,b,c){var d=c?\"even\":\"odd\";return q.newRect({height:b,width:\"100%\",x:0,y:a},d)}function n(a,b,c){var d=q.newG(\"row row-fixed\");return d.appendChild(q.newRect({height:b,width:\"100%\",x:\"0\",y:a},\"\",{opacity:0})),d.addEventListener(\"click\",c),d}function o(a,b,c){var d=q.newG(\"row row-flex\");return d.appendChild(q.newRect({height:b,width:\"100%\",x:\"0\",y:a},\"\",{opacity:0})),d.addEventListener(\"click\",c),d}Object.defineProperty(c,\"__esModule\",{value:!0});var p=a(\"../../helpers/misc\"),q=a(\"../../helpers/svg\"),r=a(\"../../transformers/styling-converters\");c.createRect=g,c.createRequestNumberLabel=h,c.createRequestLabelClipped=i,c.createRequestLabelFull=j,c.appendRequestLabels=l,c.createBgStripe=m,c.createNameRowBg=n,c.createRowBg=o},{\"../../helpers/misc\":4,\"../../helpers/svg\":6,\"../../transformers/styling-converters\":15}],22:[function(a,b,c){\"use strict\";function d(a,b,c,d,l,m,n){var o=l.y,p=l.height,q=a.options.leftColumnWith,r=g.newG(m.responseDetails.rowClass),s=g.newSvg(\"left-fixed-holder\",{width:q+\"%\",x:\"0\"}),t=g.newSvg(\"flex-scale-waterfall\",{width:100-q+\"%\",x:q+\"%\"}),u=i.createRect(l,m.segments,m.total),v=i.createNameRowBg(o,p,n),w=i.createRowBg(o,p,n),x=i.createBgStripe(o,p,b%2==0),y=k+c;if(a.options.showMimeTypeIcon){var z=m.responseDetails.icon;y-=z.width,v.appendChild(e[z.type](y,o+3,z.title))}a.options.showIndicatorIcons&&h.getIndicatorIcons(m).forEach(function(a){y-=a.width,v.appendChild(e[a.type](y,o+3,a.title))}),y=k+c;var A=\"\"+(b+1),B=i.createRequestNumberLabel(y,o,A,p,d);y+=d+4;var C=i.createRequestLabelClipped(y,o,f.resourceUrlFormatter(m.url,40),p),D=i.createRequestLabelFull(y,o,m.url,p);return w.appendChild(u),i.appendRequestLabels(v,B,C,D),t.appendChild(w),s.appendChild(j.cloneNode(!0)),s.appendChild(v),r.appendChild(x),r.appendChild(t),r.appendChild(s),r}Object.defineProperty(c,\"__esModule\",{value:!0});var e=a(\"../../helpers/icons\"),f=a(\"../../helpers/misc\"),g=a(\"../../helpers/svg\"),h=a(\"./svg-indicators\"),i=a(\"./svg-row-subcomponents\"),j=g.newClipPath(\"titleClipPath\");j.appendChild(g.newRect({height:\"100%\",width:\"100%\"}));var k=3;c.createRow=d},{\"../../helpers/icons\":3,\"../../helpers/misc\":4,\"../../helpers/svg\":6,\"./svg-indicators\":20,\"./svg-row-subcomponents\":21}],23:[function(a,b,c){\"use strict\";function d(a){return{endline:g.newLine({x1:\"0\",x2:\"0\",y1:\"0\",y2:a},\"line-end\"),startline:g.newLine({x1:\"0\",x2:\"0\",y1:\"0\",y2:a},\"line-start\")}}function e(a){return{onMouseEnterPartial:function(){return function(b){var c=b.target;f.addClass(c,\"active\");var d=c.x.baseVal.valueInSpecifiedUnits+c.width.baseVal.valueInSpecifiedUnits+\"%\",e=c.x.baseVal.valueInSpecifiedUnits+\"%\";a.endline.x1.baseVal.valueAsString=d,a.endline.x2.baseVal.valueAsString=d,a.startline.x1.baseVal.valueAsString=e,a.startline.x2.baseVal.valueAsString=e,f.addClass(a.endline,\"active\"),f.addClass(a.startline,\"active\")}},onMouseLeavePartial:function(){return function(b){var c=b.target;f.removeClass(c,\"active\"),f.removeClass(a.endline,\"active\"),f.removeClass(a.startline,\"active\")}}}}Object.defineProperty(c,\"__esModule\",{value:!0});var f=a(\"../../helpers/dom\"),g=a(\"../../helpers/svg\");c.createAlignmentLines=d,c.makeHoverEvtListeners=e},{\"../../helpers/dom\":1,\"../../helpers/svg\":6}],24:[function(a,b,c){\"use strict\";function d(a,b){for(var c=g.newG(\"time-scale full-width\"),d=200*Math.ceil(b/1e4),e=1e3/d,f=b/1e3,h=b/d,j=0;j<=h;j++){i(a,c,f,j/e,j%e<1e-9)}return c}function e(a,b){var c=g.newRect({height:a.diagramHeight,width:(b.total||1)/a.unit+\"%\",x:(b.start||.001)/a.unit+\"%\",y:0},h.requestTypeToCssClass(b.responseDetails.requestType));return c.appendChild(g.newTitle(b.url)),c}Object.defineProperty(c,\"__esModule\",{value:!0});var f=a(\"../../helpers/misc\"),g=a(\"../../helpers/svg\"),h=a(\"../../transformers/styling-converters\"),i=function(a,b,c,d,e){void 0===e&&(e=!1);var h,i=a.diagramHeight,j=100/c,k=\"sub-second-line\";if(e){var l=d>c-.2;k=\"second-line\";var m=f.roundNumber(j*d)+.5+\"%\",n={};l&&(m=f.roundNumber(j*d)-.5+\"%\",n[\"text-anchor\"]=\"end\"),h=g.newTextEl(d+\"s\",{x:m,y:i},n)}var o=f.roundNumber(j*d)+\"%\",p=g.newLine({x1:o,x2:o,y1:0,y2:i},k);a.pubSub.subscribeToOverlayChanges(function(a){var b=a.combinedOverlayHeight,c=(i+b)/i;p.setAttribute(\"transform\",\"scale(1, \"+c+\")\"),e&&h.setAttribute(\"transform\",\"translate(0, \"+b+\")\")}),b.appendChild(p),e&&b.appendChild(h)};c.createTimeScale=d,c.createBgRect=e},{\"../../helpers/misc\":4,\"../../helpers/svg\":6,\"../../transformers/styling-converters\":15}],25:[function(a,b,c){\"use strict\";function d(a,b){var c=a.diagramHeight,d=g.newG(\"marker-holder\",{transform:\"scale(1, 1)\"});return b.forEach(function(h,i){var j=f.roundNumber(h.startTime/a.unit),k=g.newG(\"mark-holder type-\"+h.name.toLowerCase().replace(/([0-9]+[ ]?ms)|\\W/g,\"\")),l=g.newG(\"line-holder\"),m=g.newG(\"line-label-holder\"),n=g.newTextEl(h.name,{x:j+\"%\",y:c+25});h.x=j;var o=g.newLine({x1:j+\"%\",x2:j+\"%\",y1:0,y2:c}),p=b[i-1];p&&h.x-p.x<2.5&&(n.setAttribute(\"x\",p.x+2.5+\"%\"),h.x=p.x+2.5);var q=g.newLine({x1:j+\"%\",x2:h.x+\"%\",y1:c,y2:c+23});l.appendChild(o),l.appendChild(q),a.pubSub.subscribeToOverlayChanges(function(a){var b=a.combinedOverlayHeight,d=(c+b)/c;o.setAttribute(\"transform\",\"scale(1, \"+d+\")\"),m.setAttribute(\"transform\",\"translate(0, \"+b+\")\"),q.setAttribute(\"transform\",\"translate(0, \"+b+\")\")});var r=!1,s=function(){r||(r=!0,e.addClass(l,\"active\"),k.parentNode.appendChild(k))},t=function(){r=!1,e.removeClass(l,\"active\")};n.addEventListener(\"mouseenter\",s),n.addEventListener(\"mouseleave\",t),m.appendChild(n),k.appendChild(g.newTitle(h.name)),k.appendChild(l),k.appendChild(m),d.appendChild(k)}),d}Object.defineProperty(c,\"__esModule\",{value:!0});var e=a(\"../../helpers/dom\"),f=a(\"../../helpers/misc\"),g=a(\"../../helpers/svg\");c.createMarks=d},{\"../../helpers/dom\":1,\"../../helpers/misc\":4,\"../../helpers/svg\":6}],26:[function(a,b,c){\"use strict\";function d(a){for(var b=Math.floor(Math.log(a)/Math.LN10)+1,c=\"\",d=0;d<b;d++)c+=\"0\";return c}function e(a,b){var c=a.reduce(function(a,b){var c={x:0,y:0};return Math.max(a,h.getNodeTextWidth(h.newTextEl(b.name,c),!0))},0);return Math.floor(b+c+35)}function f(a,b,c,d){var e=a.durationMs/100,f=(c.length+1)*b.rowHeight,g={diagramHeight:f,overlayManager:void 0,pubSub:new k.default,unit:e,options:b};return g.overlayManager=new j.default(g,d),g}function g(a,b){function c(){return(s+r.overlayManager.getCombinedOverlayHeight()).toString()+\"px\"}function g(a,c){var d=a.total||1,e=b.rowHeight*c,f=a.start||.001,g={cssClass:i.requestTypeToCssClass(a.responseDetails.requestType),height:b.rowHeight,hideOverlay:b.showAlignmentHelpers?k.onMouseLeavePartial:void 0,label:a.url+\" (\"+Math.round(a.start)+\"ms - \"+Math.round(a.end)+\"ms | total: \"+Math.round(a.total)+\"ms)\",showOverlay:b.showAlignmentHelpers?k.onMouseEnterPartial:void 0,unit:r.unit,width:d,x:f,y:e},h=function(){r.overlayManager.toggleOverlay(c,e+b.rowHeight,450,a,D)},j=l.createRow(r,c,A,C,g,a,h);D.push(j),v.appendChild(j)}var j,k,p=a.entries.filter(function(a){return\"number\"==typeof a.start&&\"number\"==typeof a.total}).sort(function(a,b){return(a.start||0)-(b.start||0)}),q=h.newG(\"overlays\"),r=f(a,b,p,q),s=e(a.marks,r.diagramHeight),t=h.newSvg(\"water-fall-chart\",{height:s}),u=h.newSvg(\"scale-and-marks-holder\",{width:100-b.leftColumnWith+\"%\",x:b.leftColumnWith+\"%\"}),v=h.newG(\"rows-holder\");if(b.showAlignmentHelpers){j=h.newG(\"hover-overlays\");var w=m.createAlignmentLines(r.diagramHeight);j.appendChild(w.startline),j.appendChild(w.endline),k=m.makeHoverEvtListeners(w)}u.appendChild(n.createTimeScale(r,a.durationMs)),u.appendChild(o.createMarks(r,a.marks)),a.lines.forEach(function(a){t.appendChild(n.createBgRect(r,a))});var x=p[0].responseDetails.icon.width,y=0;if(b.showMimeTypeIcon&&(y+=1),b.showIndicatorIcons){var z=p.map(function(a){return a.responseDetails.indicators.length>0?1:0});y+=Math.max.apply(null,z)}var A=y*x,B=d(p.length),C=h.getNodeTextWidth(h.newTextEl(\"\"+B),!0),D=[];return r.pubSub.subscribeToOverlayChanges(function(){t.style.height=c()}),p.forEach(g),b.showAlignmentHelpers&&u.appendChild(j),t.appendChild(u),t.appendChild(v),t.appendChild(q),t}Object.defineProperty(c,\"__esModule\",{value:!0});var h=a(\"../helpers/svg\"),i=a(\"../transformers/styling-converters\"),j=a(\"./details-overlay/overlay-manager\"),k=a(\"./details-overlay/pub-sub\"),l=a(\"./row/svg-row\"),m=a(\"./sub-components/svg-alignment-helper\"),n=a(\"./sub-components/svg-general-components\"),o=a(\"./sub-components/svg-marks\");c.createWaterfallSvg=g},{\"../helpers/svg\":6,\"../transformers/styling-converters\":15,\"./details-overlay/overlay-manager\":17,\"./details-overlay/pub-sub\":18,\"./row/svg-row\":22,\"./sub-components/svg-alignment-helper\":23,\"./sub-components/svg-general-components\":24,\"./sub-components/svg-marks\":25}]},{},[8])(8)});","import Promise from 'bluebird';\nimport wooGlobal from './wooGlobal';\n\nfunction deleteAdvancedReview (url) {\n  const lang = wooGlobal.language;\n  return Promise.resolve($.get('/' + lang + '/unstar/' + encodeURIComponent(url)))\n  .then(response => {\n    if (response.result === false) {\n      throw new Error(response.reason);\n    }\n  });\n}\n\nmodule.exports = {\n  deleteAdvancedReview\n};\n","'use strict';\n\nfunction searchDuplicateInputsValues (inputArray) {\n  inputArray = inputArray || [];\n  var valueArray = [];\n  var arrayOfDuplicates = [];\n  var i;\n\n  if (inputArray.length > 0) {\n    for (i = 0; i < inputArray.length; i++) {\n      if (\n        $.inArray(inputArray[i].value, valueArray) !== -1 &&\n        inputArray[i].value.length > 0\n      ) {\n        arrayOfDuplicates.push(inputArray[i]);\n      }\n      valueArray[i] = inputArray[i].value;\n    }\n  }\n\n  if (arrayOfDuplicates.length > 0) {\n    return arrayOfDuplicates;\n  }\n\n  return false;\n}\n\nmodule.exports = searchDuplicateInputsValues;\n","'use strict';\n\nwindow.wooGlobal.browser = null;\n\nif (typeof Modernizr !== 'undefined') {\n  window.Modernizr.Detectizr.detect();\n  window.wooGlobal.browser = window.Modernizr.Detectizr.device.browser;\n}\n","'use strict';\n\nvar Promise = require('bluebird');\n\nmodule.exports = function (url) {\n  return Promise.resolve($.ajax({\n    url: url,\n    type: 'GET',\n    dataType: 'html',\n    cache: true,\n    beforeSend: function (jqXHR, settings) {\n      jqXHR.url = settings.url;\n    }\n  }));\n};\n","'use strict';\n\nvar bindEventOnSettingsBox = require('./settingsBindevents');\nvar baseUrl = window.baseUrl || '/' + window.wooGlobal.language + '/';\n\nwindow.settingsInReviewUrl = window.settingsInReviewUrl ||\n  baseUrl + 'project/revsettings';\n\nfunction getSettingsDataFor ($container, mustacheName) {\n  return $.ajax({\n    url: window.settingsInReviewUrl,\n    type: 'GET',\n    data: 'domain=' + window.currentWebsite,\n    dataType: 'json',\n    cache: false,\n    success: function (json) {\n      var generatedHtml;\n\n      if (json.result && json.displayBox) {\n        generatedHtml = window.Mustache.render(\n          window.mustacheTemplates[mustacheName],\n          json.mustache\n        );\n        $container.append(generatedHtml).slideDown();\n        return bindEventOnSettingsBox($container, json);\n      } else {\n        return $container.remove();\n      }\n    },\n    error: function (jqXHR, textStatus, errorThrown) {\n      return window.Raven.captureMessage('Get settings data error', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          currentWebsite: window.currentWebsite\n        }\n      });\n    }\n  });\n}\n\nmodule.exports = getSettingsDataFor;\n","'use strict';\n\nfunction resolveDataURL (url) {\n  var lang = window.wooGlobal.language;\n\n  if (\n      typeof window.currentWebsite === 'undefined' ||\n      window.currentWebsite === null\n    ) {\n    window.currentWebsite = $('#dashboard-site>h1>a').data('url');\n  }\n\n  if (typeof url === 'string') {\n    url = url.replace('%url%', window.currentWebsite);\n    url = url.replace('%lang%', lang);\n\n    if (\n      typeof window.ajaxPjDataProxyUrl !== 'undefined' &&\n      window.ajaxPjDataProxyUrl !== null\n    ) {\n      return window.ajaxPjDataProxyUrl + encodeURIComponent(url);\n    }\n    return url;\n  }\n  return false;\n}\n\nmodule.exports = resolveDataURL;\n","'use strict';\n\nfunction sendMenuItemToApp () {\n  var iframe2;\n\n  clearTimeout(window.waypointTimer);\n  iframe2 = document.createElement('IFRAME');\n  iframe2.setAttribute('src', window.waypointUrl);\n  document.documentElement.appendChild(iframe2);\n  iframe2.parentNode.removeChild(iframe2);\n  iframe2 = null;\n}\n\nmodule.exports = sendMenuItemToApp;\n","'use strict';\n\nvar rgba2hex = require('../pdf/rgbaToHex');\nvar colors = require('./chartsColors');\nrequire('./chartsConfig');\n\nfunction adjustLegendSymbolRadius (chart, radius) {\n  // changes the radius of the symbol in the legend after the chart is created\n  // This functionality is not part of the highchrts API\n  $(chart.series).each(function (i, series) {\n    var originalRadius = series.legendSymbol.attr('width') / 2;\n    var originalX = series.legendSymbol.attr('x');\n    var originalY = series.legendSymbol.attr('y');\n\n    series.legendSymbol.attr('width', radius * 2);\n    series.legendSymbol.attr('height', radius * 2);\n    series.legendSymbol.attr('x', originalX + originalRadius - radius);\n    series.legendSymbol.attr('y', originalY + originalRadius - radius);\n  });\n}\n\nfunction renderLineChart ($part, data) {\n  var chart;\n  var chartConfig = window.buildChartConfig('line', {\n    chart: {\n      renderTo: $part.get(0)\n    },\n    series: data\n  });\n\n  chart = new window.Highcharts.Chart(chartConfig);\n  return adjustLegendSymbolRadius(chart, 5);\n}\n\nfunction renderPieChart ($part, data) {\n  var chartConfig = window.buildChartConfig('pie', {\n    chart: {\n      renderTo: $part.get(0),\n      height: $part.width() > 500 ? 130 : 190\n    },\n    series: [\n      {\n        type: 'pie',\n        data: data\n      }\n    ],\n    legend: {\n      verticalAlign: $part.width() > 500 ? 'middle' : 'bottom'\n    }\n  });\n\n  return new window.Highcharts.Chart(chartConfig);\n}\n\nfunction renderGenderAgeChart ($part, data) {\n  var chartConfig = window.buildChartConfig('gender-age-chart', {\n    chart: {\n      renderTo: $part.get(0)\n    },\n    series: data\n  });\n\n  return new window.Highcharts.Chart(chartConfig);\n}\n\nfunction renderGeoChart ($part, data) {\n  var $map = $('<div>')\n    .addClass('woomap')\n    .css({\n      width: '100%',\n      height: '330px'\n    });\n\n  $part.append($map);\n\n  var mapColors = window.mapColors;\n  var defaultColor = colors.primaryDarker;\n  var primaryColor;\n  var secondaryColor;\n  var r;\n  var g;\n  var b;\n\n  if (mapColors) {\n    primaryColor = window.mapColors[0];\n    secondaryColor = window.mapColors[100];\n  } else {\n    r = parseInt(defaultColor[1] + defaultColor[2], 16);\n    g = parseInt(defaultColor[3] + defaultColor[4], 16);\n    b = parseInt(defaultColor[5] + defaultColor[6], 16);\n    primaryColor = rgba2hex(r, g, b, 0.09);\n    secondaryColor = defaultColor;\n  }\n\n  $map.bind('regionMouseOver.jqvmap', function (event) {\n    return event.preventDefault();\n  });\n\n  $map.height(($map.height() + 40) + 'px');\n\n  $map.vectorMap({\n    map: 'world_en',\n    backgroundColor: colors.white,\n    color: colors.greylight,\n    scaleColors: [primaryColor, secondaryColor],\n    values: data,\n    borderColor: colors.white,\n    borderWidth: 1,\n    borderOpacity: 1,\n    hoverColor: colors.primary,\n    selectedColor: colors.primaryDarker,\n    enableZoom: false,\n    showTooltip: false\n  });\n}\n\nfunction renderChart ($part, data, type) {\n  var chart;\n  var chartConfig = window.buildChartConfig(type, $.extend(true, {\n    chart: {\n      renderTo: $part.get(0)\n    }\n  }, data));\n\n  chart = new window.Highcharts.Chart(chartConfig);\n  return chart;\n}\n\nwindow.Highcharts.setOptions({\n  plotOptions: {\n    series: {\n      animation: false\n    }\n  }\n});\n\nmodule.exports = {\n  line: renderLineChart,\n  pie: renderPieChart,\n  genderAge: renderGenderAgeChart,\n  geo: renderGeoChart,\n  render: renderChart\n};\n","'use strict';\n\nvar startSocketGeneration = require('./startSocketGeneration');\n\nwindow.competitorUrls = window.competitorUrls || [];\n\nfunction getCriteriumData () {\n  window.critsOnSocket = [];\n\n  $('.criterium-loading').each(function () {\n    var $this = $(this);\n    var id = $this.attr('id').replace('criterium-', '');\n    var isComp = $this.hasClass('criterium-have-comp');\n    var objTmp = {\n      name: id,\n      competitors: isComp\n    };\n\n    if (isComp) {\n      window.compCriteriums.push(id);\n    }\n\n    return window.critsOnSocket.push(objTmp);\n  });\n\n  $('#dashboard-competitors .url').each(function () {\n    return window.competitorUrls.push($(this).text());\n  });\n\n  return startSocketGeneration();\n}\n\nmodule.exports = getCriteriumData;\n","'use strict';\n\n// Preparing for mailcheck CDN failure\nif (typeof $.fn.mailcheck === 'undefined') {\n  require('../../lib/mailcheck');\n}\n\nvar clearErrorOnField = require('./clearErrorOnField');\nvar showErrorForField = require('./showErrorForField');\n\nfunction performMailCheckJs ($element) {\n  var value = $element.val();\n  var $parent = $element.parent();\n  var $suggest = $parent.prev().find('.suggest');\n  var suggestTextData = $suggest.attr('data-lang') || '';\n\n  // avoid validating crappy e-mails\n  if (value.length > 30) {\n    return clearErrorOnField($element);\n  } else {\n    return $element.mailcheck({\n      suggested: function (element, suggestion) {\n        // find suggestion container\n        $suggest.html(\n          suggestTextData +\n          ' <a href=\"#\" class=\"mailcheck-suggestion\">' +\n          suggestion.full +\n          '</a> ?'\n        );\n\n        showErrorForField($element, 'suggest');\n\n        // bind suggestion click event\n        return $suggest.find('a.mailcheck-suggestion')\n          .on('click', function (event) {\n            var $this = $(this);\n\n            event.preventDefault();\n            // replace with corrected content\n            $element.val($this.html());\n            $this.html('');\n            return clearErrorOnField($element);\n          });\n      },\n      empty: function () {\n        return clearErrorOnField($element);\n      }\n    });\n  }\n}\n\nmodule.exports = performMailCheckJs;\n","'use strict';\n\nfunction validateEmailAddress ($element) {\n  var value = $element.val();\n  var re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  return value.length === 0 || re.test(value);\n}\n\nmodule.exports = validateEmailAddress;\n","// Init the pricing module of recurly\nconst pricing = window.recurly.Pricing();\n\nconst euCountries = [\n  'AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'EE', 'ES', 'FI', 'FR',\n  'DE', 'GB', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT',\n  'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK', 'HR'\n];\n\nfunction getPrice (validCoupon, validVat) {\n  const $billingForm = $('#billing-form-container');\n  const subsciptionCode = $billingForm.find('#plan_code').val();\n  const countryCode = $billingForm.find('#countries_select').val();\n  const vatNumber = $billingForm.find('#vat_field').val();\n  const vatCleaned = vatNumber.toUpperCase().replace(/ |-|_|\\./g, '');\n  let couponCode = null;\n\n  if (euCountries.indexOf($('#countries_select').val()) < 0) {\n    $billingForm.find('#plus_tva').addClass('hidden');\n    $billingForm.find('.add-vat-group').addClass('hidden').collapse('hide');\n    $billingForm.find('.vat_number').collapse('hide');\n  } else {\n    $billingForm.find('.add-vat-group').removeClass('hidden');\n\n    if (validVat === false) {\n      $billingForm.find('#plus_tva').removeClass('hidden');\n    } else {\n      $billingForm.find('#plus_tva').addClass('hidden');\n    }\n  }\n\n  if (validCoupon) {\n    couponCode = $billingForm.find('#coupon_code').val();\n  } else {\n    couponCode = '';\n  }\n\n  pricing\n    .plan(subsciptionCode, {\n      quantity: 1\n    })\n    .currency('USD')\n    .address({\n      country: countryCode\n    })\n    .coupon(couponCode)\n    .tax({\n      tax_code: 'digital',\n      vat_number: vatCleaned\n    })\n    .done(price => {\n      $billingForm.find('#plan_price').html(price.next.subtotal);\n    });\n}\n\nmodule.exports = getPrice;\n","function activateToolTip () {\n  return $('#billing-form-container').find('.field .error').tooltip({\n    delay: {\n      show: 400,\n      hide: 100\n    },\n    title: function () {\n      return $(this).text();\n    }\n  });\n}\n\nmodule.exports = activateToolTip;\n","import getParameterByName from '../helpers/getParameterByName';\n\nconst updateBilling = getParameterByName('update-billing');\n\nfunction updateSubmitButton () {\n  let formIsValid = true;\n  const $billingForm = $('#billing-form-container');\n  const country = $billingForm.find('#countries_select').val() || '';\n  let submitText = $('#update_billing').text();\n\n  $billingForm.find('input:visible:not(.optional)').each(function (index, element) {\n    if (!$(this).hasClass('valid')) {\n      formIsValid = false;\n    }\n\n    if ($(this).hasClass('invalid')) {\n      formIsValid = false;\n    }\n\n    if (country.length !== 2) {\n      formIsValid = false;\n    }\n  });\n\n  if (!formIsValid) {\n    if (!updateBilling) {\n      submitText = $('#payment_please_fill_info').text();\n    }\n    $billingForm.find('.js-credit_submit')\n      .attr('disabled', true)\n      .text(submitText);\n  } else {\n    if (!updateBilling) {\n      submitText = $('#start_free_trial').text();\n    }\n    $billingForm.find('.js-credit_submit')\n      .attr('disabled', false)\n      .text(submitText);\n  }\n}\n\nmodule.exports = updateSubmitButton;\n","'use strict';\n\nimport {isTablet} from '../helpers/responsiveViewport';\n\nvar $genbar = $genbar || {};\nvar $modalReview = $('#generation-bar-modal');\nvar $modalBody = $modalReview.find('.modal-body');\nvar $modalLoader = $modalBody.find('.loader');\nvar $trialCta = $('.js-post-review');\nvar $iFrame = document.createElement('iframe');\n\nfunction resetModal () {\n  $modalBody.find('iframe').remove();\n  $modalLoader.removeClass('hidden');\n}\n\nfunction initListeners () {\n  window.addEventListener('message', (e) => {\n    if (e.data) {\n      if (e.data.indexOf('com.woorank.ready_to_receive') === 0) {\n        $trialCta.removeClass('hidden');\n        $genbar.remove();\n      } else if (e.data.indexOf('com.woorank.height') === 0) {\n        var newHeight = parseInt(e.data.split('_').pop(), 10);\n        if ('ontouchstart' in document.documentElement && !isTablet()) {\n          $iFrame.style.height = newHeight + 'px'; // calculate and update height if Mobile\n        }\n      }\n    }\n  }, false);\n\n  $modalReview.on('show.bs.modal', function () {\n    window.history.pushState(null, null, '#' + $(this).attr('id'));\n  }).on('hide.bs.modal', function () {\n    window.history.back();\n  });\n\n  $(window).on('popstate', function () {\n    if (($modalReview.data('bs.modal') || {}).isShown) {\n      $modalReview.modal('hide');\n    }\n  });\n}\n\nfunction generationBarPopup (url, form) {\n  $genbar = form || {};\n  initListeners();\n  resetModal();\n  $modalReview.modal('show');\n  $iFrame.src = url;\n  $iFrame.style.height = '100%';\n  $iFrame.style.width = '100%';\n  $iFrame.style.border = 'none';\n  $modalBody.append($iFrame);\n  $iFrame.onload = (evt) => {\n    $modalLoader.addClass('hidden');\n  };\n}\n\nmodule.exports = generationBarPopup;\n","'use strict';\n\nvar closeAllInlineModal = require('./closeAllInlineModal');\n\nfunction toggleInlineModal (event) {\n  var $this = $(this);\n  var $parent = $this.parent();\n  var $html = $('html:not(.bound-imc)');\n\n  event.preventDefault();\n  event.stopPropagation();\n  $parent.siblings().removeClass('open');\n  $parent.toggleClass('open');\n\n  if ($('#dashboard-footer .item.open').length > 0) {\n    return $html.addClass('bound-imc').on('click', closeAllInlineModal);\n  }\n}\n\nmodule.exports = toggleInlineModal;\n","'use strict';\n\n// adapt the layout of the social impact criterium\n// to look better with competitors\n\nvar putSidInArray = require('./putSidInArray');\nvar addTabsForSiComp = require('./addTabsForSiComp');\nvar addMainDataInSiComp = require('./addMainDataInSiComp');\nvar prettifyBigNumbers = require('../prettifyBigNumbers');\n\nprettifyBigNumbers.init();\n\nfunction competizeSocialImpact () {\n  var current;\n  var dataLength;\n  var graphTmp;\n  var id = 0;\n  var max;\n  var percent;\n  var progressBarHtml;\n  var totalTmp;\n  var url;\n  var $this = $(\n    '#criterium-social_impact.criterium-have-comp:not(.is-competized)'\n  );\n  var $content = $this.find('>div.criterium-content');\n  var $comp = $this.find('>div.competitor-content');\n  var data = {};\n\n  if ($this.length === 1 && $content.length === 1 && $comp.length > 0) {\n    $this.addClass('is-competized');\n    data = putSidInArray($content, data, 0);\n\n    $comp.each(function () {\n      var obj;\n      obj = $(this);\n      id++;\n      data = putSidInArray(obj, data, id);\n      return data;\n    });\n\n    dataLength = Object.keys(data).length;\n\n    $comp.each(function () {\n      var obj;\n      obj = $(this);\n      return addMainDataInSiComp(obj, data, dataLength);\n    });\n\n    addTabsForSiComp($content, data, dataLength);\n\n    // replace main content by progress bar\n    max = 0;\n\n    for (url in data) {\n      totalTmp = data[url].total;\n      if (totalTmp > max) {\n        max = totalTmp;\n      }\n    }\n\n    max *= 1.05;\n    progressBarHtml = '';\n\n    for (url in data) {\n      current = data[url];\n      percent = parseInt(current.total / max * 100, 10);\n\n      if (percent < 3) {\n        percent = 3;\n      }\n      graphTmp = {\n        graph_progressbar: {\n          htmlclass: percent < 33 ? 'low-percent' : false,\n          percent: percent,\n          title: current.url,\n          value: current.total\n        }\n      };\n\n      progressBarHtml += window.Mustache.render([\n        '<div class=\"part progressbar {{htmlclass}}\">',\n        '    {{#title}}<p class=\"title\"><span class=\"color\"></span>{{{title}}}</p>{{/title}}',\n        '    <div class=\"content{{#min}} has-min{{/min}}{{#max}} has-max{{/max}}{{#title}} has-title{{/title}}\">',\n        '        {{#min}}<span class=\"min\">{{min}}</span>{{/min}}',\n        '        {{#max}}<span class=\"max\">{{max}}</span>{{/max}}',\n        '        <span class=\"bar\"><span class=\"colored-bar\" style=\"width:{{percent}}%;\">{{#value}}{{value}}&nbsp;&nbsp;&nbsp;&nbsp;{{/value}}</span>{{#value}}<span class=\"value\" data-abs-value=\"{{absValue}}\">{{value}}</span>{{/value}}</span>',\n        '    </div>',\n        '</div>'\n      ].join('\\n'),\n      graphTmp.graph_progressbar\n      );\n    }\n\n    $content.addClass('full-width').html(progressBarHtml);\n    $content.find('.part.progressbar').prettifyBigNumbers();\n    $comp.find('table.social-media-compare').prettifyBigNumbers();\n    return;\n  }\n\n  return false;\n}\n\nmodule.exports = competizeSocialImpact;\n","'use strict';\n\n// recalculate percent of the progress bar to reflect relative size\n// to all including competitors\nfunction competizeBacklinks (criteria) {\n  var $this = $('#criterium-' + criteria + '.criterium-have-comp:not(.is-competized)');\n\n  if ($this.length === 1) {\n    var allProgressBars = $this.find('>div.criterium-content, >div.competitor-content');\n    var max = 0;\n\n    var getValue = function ($elem) {\n      return parseInt($elem.find('.progressbar .bar .value').data('absValue'), 10);\n    };\n\n    $this.addClass('is-competized');\n\n    allProgressBars.each(function () {\n      var value = getValue($(this));\n      max = Math.max(value, max);\n    });\n\n    max *= 1.05;\n\n    return allProgressBars.each(function () {\n      var $this = $(this);\n      var value = getValue($this);\n      var percent = parseInt(value / max * 100, 10);\n\n      $this.find('.progressbar .colored-bar').css('width', percent + '%');\n\n      if (percent < 33) {\n        return $this.addClass('low-percent');\n      }\n    });\n  }\n  return false;\n}\n\nmodule.exports = competizeBacklinks;\n","'use strict';\n\n// adapt the layout of the shared count criterium\n// to look better with competitors\n\nvar putSidInArray = require('./putSidInArray');\nvar addTabsForSiComp = require('./addTabsForSiComp');\nvar addMainDataInSiComp = require('./addMainDataInSiComp');\nvar prettifyBigNumbers = require('../prettifyBigNumbers');\n\nprettifyBigNumbers.init();\n\nfunction competizeSharedCount () {\n  var current;\n  var dataLength;\n  var graphTmp;\n  var id = 0;\n  var max;\n  var percent;\n  var progressBarHtml;\n  var totalTmp;\n  var url;\n  var $this = $(\n    '#criterium-shared_count.criterium-have-comp:not(.is-competized)'\n  );\n  var $content = $this.find('>div.criterium-content');\n  var $comp = $this.find('>div.competitor-content');\n  var data = {};\n\n  if ($this.length === 1 && $content.length === 1 && $comp.length > 0) {\n    $this.addClass('is-competized');\n    data = putSidInArray($content, data, 0);\n\n    $comp.each(function () {\n      var obj;\n      obj = $(this);\n      id++;\n      data = putSidInArray(obj, data, id);\n      return data;\n    });\n\n    dataLength = Object.keys(data).length;\n\n    $comp.each(function () {\n      var obj;\n      obj = $(this);\n      return addMainDataInSiComp(obj, data, dataLength);\n    });\n\n    addTabsForSiComp($content, data, dataLength);\n\n    // replace main content by progress bar\n    max = 0;\n\n    for (url in data) {\n      totalTmp = data[url].total;\n      if (totalTmp > max) {\n        max = totalTmp;\n      }\n    }\n\n    max *= 1.05;\n    progressBarHtml = '';\n\n    for (url in data) {\n      current = data[url];\n      percent = parseInt(current.total / max * 100, 10);\n\n      if (percent < 3) {\n        percent = 3;\n      }\n      graphTmp = {\n        graph_progressbar: {\n          htmlclass: percent < 33 ? 'low-percent' : false,\n          percent: percent,\n          title: current.url,\n          value: current.total\n        }\n      };\n\n      progressBarHtml += window.Mustache.render([\n        '<div class=\"part progressbar {{htmlclass}}\">',\n        '    {{#title}}<p class=\"title\"><span class=\"color\"></span>{{{title}}}</p>{{/title}}',\n        '    <div class=\"content{{#min}} has-min{{/min}}{{#max}} has-max{{/max}}{{#title}} has-title{{/title}}\">',\n        '        {{#min}}<span class=\"min\">{{min}}</span>{{/min}}',\n        '        {{#max}}<span class=\"max\">{{max}}</span>{{/max}}',\n        '        <span class=\"bar\"><span class=\"colored-bar\" style=\"width:{{percent}}%;\">{{#value}}{{value}}&nbsp;&nbsp;&nbsp;&nbsp;{{/value}}</span>{{#value}}<span class=\"value\" data-abs-value=\"{{absValue}}\">{{value}}</span>{{/value}}</span>',\n        '    </div>',\n        '</div>'\n      ].join('\\n'),\n      graphTmp.graph_progressbar\n      );\n    }\n\n    $content.addClass('full-width').html(progressBarHtml);\n    $content.find('.part.progressbar').prettifyBigNumbers();\n    $comp.find('table.social-media-compare').prettifyBigNumbers();\n  }\n}\n\nmodule.exports = competizeSharedCount;\n","'use strict';\n\nfunction initCompTabs () {\n  return $('.comp-tabs:not(.binded)').each(function () {\n    var tabsBar = $(this).addClass('binded');\n    var tabs = tabsBar.find('a.tab');\n    var tabsContent = tabsBar.nextAll('.tab-content');\n\n    $(tabs[0]).addClass('active');\n    $(tabsContent[0]).addClass('active');\n    return tabs.on('click', function (event) {\n      var clicked = $(this);\n      var activeIndex;\n\n      event.preventDefault();\n\n      if (clicked.hasClass('active')) {\n        return;\n      }\n\n      tabs.removeClass('active');\n      clicked.addClass('active');\n      activeIndex = tabs.index(clicked);\n      tabsContent.removeClass('active');\n      return $(tabsContent[activeIndex]).addClass('active');\n    });\n  });\n}\n\nmodule.exports = initCompTabs;\n","'use strict';\n\nimport {isTablet} from '../../helpers/responsiveViewport';\n\nfunction dashboardTooltip () {\n  var $dashboard = $('#dashboard-web .wootip') || {};\n  var tooltipOptions;\n  if (isTablet()) {\n    tooltipOptions = {\n      delay: {\n        show: 400,\n        hide: 100\n      }\n    };\n  } else {\n    tooltipOptions = 'destroy';\n  }\n  return $dashboard.tooltip(tooltipOptions);\n}\n\nmodule.exports = dashboardTooltip;\n","'use strict';\n\nvar lang = window.wooGlobal.language;\n\n// event when the user change the review date (+ analytics event)\n$('#dashboard .date-dropdown .dropdown-value').on('change', function () {\n  var url = '/' + lang + '/review/' + window.currentWebsite + '/' + $(this).val();\n  window.location = url;\n});\n","'use strict';\n\n$('#pdf-download-direct').on('click', function () {\n  var link = $(this);\n  var $target;\n  if (!link.hasClass('dl-disabled')) {\n    $target =\n      $('form#get-pdf button[value=pdf], form#get-pdf button[value=inpdf]');\n    return $target.trigger('click');\n  }\n});\n\n$('#pdf-download-templates .js-pdf-download-template').on('click', function () {\n  var $link = $(this);\n  var id = $link.data('templateId');\n  var $target =\n  $('form#get-pdf button[value=pdf], form#get-pdf button[value=inpdf]');\n  $('form#get-pdf input[name=template-lang]').remove();\n  $('form#get-pdf')\n    .append('<input type=\"invisble\" name=\"template\" value=\"' + id + '\">');\n  return $target.trigger('click');\n});\n\n$('#slide-download-direct').on('click', function () {\n  var link = $(this);\n  var $target;\n  if (!link.hasClass('dl-disabled')) {\n    $target =\n      $('form#get-pdf button[value=slide], form#get-pdf button[value=inslide]');\n    return $target.trigger('click');\n  }\n});\n","'use strict';\n\n$('#short-url a#short-label').on('click', function (event) {\n  var $this = $(this);\n  var currentWebsite = $('#dashboard-site > h1 > a').data('url');\n  var baseUrl = window.baseUrl || '/' + window.wooGlobal.language + '/';\n  var shortUrl = baseUrl + 'report/shorturl';\n\n  event.preventDefault();\n\n  if (!$this.hasClass('load')) {\n    $this.addClass('load').fadeTo(100, 0.5);\n    return $.ajax({\n      type: 'POST',\n      data: 'url=' + currentWebsite,\n      cache: false,\n      url: shortUrl,\n      dataType: 'html',\n      context: $(this).parent('#short-url'),\n      success: function (result) {\n        var $this = $(this);\n        var wooPre = $this.find('pre').removeClass('hidden');\n        var trimmedResult = $.trim(result);\n\n        $this.find('#short-label').remove();\n        return wooPre.html(\n          trimmedResult.replace('http://', '<span>http://</span>')\n        ).trigger('click');\n      },\n      error: function (jqXHR, textStatus, errorThrown) {\n        window.Raven.captureMessage('Review dashboard short URL error', {\n          extra: {\n            textStatus: textStatus,\n            errorThrown: errorThrown,\n            currentWebsite: currentWebsite\n          }\n        });\n\n        return $('#generic-error-modal').modal('show');\n      }\n    });\n  }\n});\n","'use strict';\n\nvar Promise = require('bluebird');\nvar loadMustache = require('../loadMustache');\nconst cdn = (window.wooGlobal.settings.cdn !== null) ? window.wooGlobal.settings.cdn : '/';\n\nfunction loadMarketingMustaches (isAdvanced) {\n  var mustachesToLoad = [{\n    name: 'marketingTasks',\n    url: cdn + 'assets/mustache/tasks/marketing-tasks.mustache?v=4'\n  }];\n\n  if (isAdvanced) {\n    mustachesToLoad.push({\n      name: 'marketingTasksFilter',\n      url: cdn + 'assets/mustache/tasks/marketing-tasks-filters.mustache?v=4'\n    });\n  }\n\n  return Promise.map(mustachesToLoad, function (mustacheDefinition) {\n    return loadMustache(mustacheDefinition.url)\n      .then(function (template) {\n        return {\n          name: mustacheDefinition.name,\n          template: template\n        };\n      });\n  })\n    .then(function (mustaches) {\n      return mustaches.reduce(function (mustachesMap, mustache) {\n        mustachesMap[mustache.name] = mustache.template;\n\n        return mustachesMap;\n      }, {});\n    });\n}\n\nmodule.exports = loadMarketingMustaches;\n","'use strict';\n\nvar renderTasks = require('./renderTasks');\nvar updateProgressBar = require('./updateProgressBar');\nvar renderFilter = require('./renderFilter');\nvar renderTasksDone = require('./renderTasksDone');\nvar toggleTasks = require('./toggleTasks');\nvar bindEvents = require('./marketingChecklistBindEvents');\nvar addTopPrioritiesLabelText = require('./addTopPrioritiesLabelText');\n\nfunction renderMarketingTasks (mustaches, tasksJson, isAdvancedReview) {\n  var $marketingChecklist = $('.marketing-checklist');\n  var tasks;\n  var tasksDone;\n\n  tasksJson.isAdvancedReview = isAdvancedReview;\n\n  if (isAdvancedReview) {\n    updateProgressBar($('#dashboard-tasks-bars'), tasksJson.stats);\n    updateProgressBar(\n      $marketingChecklist.find('.progress-container'), tasksJson.stats\n    );\n\n    renderFilter(\n      mustaches.marketingTasksFilter,\n      $marketingChecklist,\n      tasksJson.categories\n    );\n\n    tasks = tasksJson.tasksList.reduce(function (result, task) {\n      task.isAdvancedReview = isAdvancedReview;\n      task.done = task.checked || task.autochecked;\n      result.push(task);\n      return result;\n    }, []);\n\n    tasksDone = tasks.filter(function (task) {\n      return task.done;\n    });\n\n    if (tasksDone.length) {\n      renderTasksDone($marketingChecklist, tasksDone);\n    }\n  } else {\n    $marketingChecklist.find('.show-links').addClass('hidden');\n    tasks = tasksJson.tasksList;\n\n    tasks.forEach(function (task, i) {\n      tasks[i].quickTipCriterium = null;\n    });\n\n    if (tasks.length >= 3) {\n      $marketingChecklist.find('.show-links').removeClass('hidden');\n    }\n  }\n\n  if (tasks.length > 0) {\n    renderTasks(mustaches.marketingTasks, $marketingChecklist, tasks);\n  } else {\n    $marketingChecklist.find('.marketing-checklist-list-alldone').removeClass('hidden');\n    $marketingChecklist.find('.loader').addClass('hidden');\n  }\n\n  bindEvents(isAdvancedReview);\n  addTopPrioritiesLabelText($marketingChecklist);\n\n  if (isAdvancedReview) {\n    toggleTasks($marketingChecklist);\n  }\n  return $(window).trigger('projectTasksLoaded');\n}\n\nmodule.exports = renderMarketingTasks;\n","'use strict';\n\n// Map the criterium with thier parent module before they get deleted if no data\nfunction mappingModules () {\n  window.moduleMapping = {};\n\n  $('.module').each(function () {\n    var $this = $(this);\n    return $this.find('.criterium').each(function () {\n      var $subObj = $(this);\n      window.moduleMapping[$subObj.attr('id')] = $this.attr('id');\n    });\n  });\n}\n\nmodule.exports = mappingModules;\n","'use strict';\n\nfunction getBadCriteriaIds () {\n  var badcriteriaIds = [];\n\n  $('.criterium.result-2, .criterium.result-3').each(function () {\n    var criteriumName = $(this).attr('id').replace(/^criterium-/, '');\n    return badcriteriaIds.push(criteriumName);\n  });\n  return badcriteriaIds;\n}\n\nmodule.exports = getBadCriteriaIds;\n","module.exports = window.wooGlobal;\n","/*\r\n * Mailcheck https://github.com/Kicksend/mailcheck\r\n * Author\r\n * Derrick Ko (@derrickko)\r\n *\r\n * License\r\n * Copyright (c) 2012 Receivd, Inc.\r\n *\r\n * Licensed under the MIT License.\r\n *\r\n * v 1.1\r\n */\r\n\r\nvar Kicksend = {\r\n  mailcheck : {\r\n    threshold: 3,\r\n\r\n    defaultDomains: [\"yahoo.com\", \"google.com\", \"hotmail.com\", \"gmail.com\", \"me.com\", \"aol.com\", \"mac.com\",\r\n      \"live.com\", \"comcast.net\", \"googlemail.com\", \"msn.com\", \"hotmail.co.uk\", \"yahoo.co.uk\",\r\n      \"facebook.com\", \"verizon.net\", \"sbcglobal.net\", \"att.net\", \"gmx.com\", \"mail.com\"],\r\n\r\n    defaultTopLevelDomains: [\"co.uk\", \"com\", \"net\", \"org\", \"info\", \"edu\", \"gov\", \"mil\"],\r\n\r\n    run: function(opts) {\r\n      opts.domains = opts.domains || Kicksend.mailcheck.defaultDomains;\r\n      opts.topLevelDomains = opts.topLevelDomains || Kicksend.mailcheck.defaultTopLevelDomains;\r\n      opts.distanceFunction = opts.distanceFunction || Kicksend.sift3Distance;\r\n\r\n      var result = Kicksend.mailcheck.suggest(encodeURI(opts.email), opts.domains, opts.topLevelDomains, opts.distanceFunction);\r\n\r\n      if (result) {\r\n        if (opts.suggested) {\r\n          opts.suggested(result);\r\n        }\r\n      } else {\r\n        if (opts.empty) {\r\n          opts.empty();\r\n        }\r\n      }\r\n    },\r\n\r\n    suggest: function(email, domains, topLevelDomains, distanceFunction) {\r\n      email = email.toLowerCase();\r\n\r\n      var emailParts = this.splitEmail(email);\r\n\r\n      var closestDomain = this.findClosestDomain(emailParts.domain, domains, distanceFunction);\r\n\r\n      if (closestDomain) {\r\n        if (closestDomain != emailParts.domain) {\r\n          // The email address closely matches one of the supplied domains; return a suggestion\r\n          return { address: emailParts.address, domain: closestDomain, full: emailParts.address + \"@\" + closestDomain };\r\n        }\r\n      } else {\r\n        // The email address does not closely match one of the supplied domains\r\n        var closestTopLevelDomain = this.findClosestDomain(emailParts.topLevelDomain, topLevelDomains);\r\n        if (emailParts.domain && closestTopLevelDomain && closestTopLevelDomain != emailParts.topLevelDomain) {\r\n          // The email address may have a mispelled top-level domain; return a suggestion\r\n          var domain = emailParts.domain;\r\n          closestDomain = domain.substring(0, domain.lastIndexOf(emailParts.topLevelDomain)) + closestTopLevelDomain;\r\n          return { address: emailParts.address, domain: closestDomain, full: emailParts.address + \"@\" + closestDomain };\r\n        }\r\n      }\r\n      /* The email address exactly matches one of the supplied domains, does not closely\r\n       * match any domain and does not appear to simply have a mispelled top-level domain,\r\n       * or is an invalid email address; do not return a suggestion.\r\n       */\r\n      return false;\r\n    },\r\n\r\n    findClosestDomain: function(domain, domains, distanceFunction) {\r\n      var dist;\r\n      var minDist = 99;\r\n      var closestDomain = null;\r\n\r\n      if (!domain || !domains) {\r\n        return false;\r\n      }\r\n      if(!distanceFunction) {\r\n        distanceFunction = this.sift3Distance;\r\n      }\r\n\r\n      for (var i = 0; i < domains.length; i++) {\r\n        if (domain === domains[i]) {\r\n          return domain;\r\n        }\r\n        dist = distanceFunction(domain, domains[i]);\r\n        if (dist < minDist) {\r\n          minDist = dist;\r\n          closestDomain = domains[i];\r\n        }\r\n      }\r\n\r\n      if (minDist <= this.threshold && closestDomain !== null) {\r\n        return closestDomain;\r\n      } else {\r\n        return false;\r\n      }\r\n    },\r\n\r\n    sift3Distance: function(s1, s2) {\r\n      // sift3: http://siderite.blogspot.com/2007/04/super-fast-and-accurate-string-distance.html\r\n      if (s1 == null || s1.length === 0) {\r\n        if (s2 == null || s2.length === 0) {\r\n          return 0;\r\n        } else {\r\n          return s2.length;\r\n        }\r\n      }\r\n\r\n      if (s2 == null || s2.length === 0) {\r\n        return s1.length;\r\n      }\r\n\r\n      var c = 0;\r\n      var offset1 = 0;\r\n      var offset2 = 0;\r\n      var lcs = 0;\r\n      var maxOffset = 5;\r\n\r\n      while ((c + offset1 < s1.length) && (c + offset2 < s2.length)) {\r\n        if (s1.charAt(c + offset1) == s2.charAt(c + offset2)) {\r\n          lcs++;\r\n        } else {\r\n          offset1 = 0;\r\n          offset2 = 0;\r\n          for (var i = 0; i < maxOffset; i++) {\r\n            if ((c + i < s1.length) && (s1.charAt(c + i) == s2.charAt(c))) {\r\n              offset1 = i;\r\n              break;\r\n            }\r\n            if ((c + i < s2.length) && (s1.charAt(c) == s2.charAt(c + i))) {\r\n              offset2 = i;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n        c++;\r\n      }\r\n      return (s1.length + s2.length) /2 - lcs;\r\n    },\r\n\r\n    splitEmail: function(email) {\r\n      var parts = email.split('@');\r\n\r\n      if (parts.length < 2) {\r\n        return false;\r\n      }\r\n\r\n      for (var i = 0; i < parts.length; i++) {\r\n        if (parts[i] === '') {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      var domain = parts.pop();\r\n      var domainParts = domain.split('.');\r\n      var tld = '';\r\n\r\n      if (domainParts.length == 0) {\r\n        // The address does not have a top-level domain\r\n        return false;\r\n      } else if (domainParts.length == 1) {\r\n        // The address has only a top-level domain (valid under RFC)\r\n        tld = domainParts[0];\r\n      } else {\r\n        // The address has a domain and a top-level domain\r\n        for (var i = 1; i < domainParts.length; i++) {\r\n          tld += domainParts[i] + '.';\r\n        }\r\n        if (domainParts.length >= 2) {\r\n          tld = tld.substring(0, tld.length - 1);\r\n        }\r\n      }\r\n\r\n      return {\r\n        topLevelDomain: tld,\r\n        domain: domain,\r\n        address: parts.join('@')\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nif (window.jQuery) {\r\n  (function($){\r\n    $.fn.mailcheck = function(opts) {\r\n      var self = this;\r\n      if (opts.suggested) {\r\n        var oldSuggested = opts.suggested;\r\n        opts.suggested = function(result) {\r\n          oldSuggested(self, result);\r\n        };\r\n      }\r\n\r\n      if (opts.empty) {\r\n        var oldEmpty = opts.empty;\r\n        opts.empty = function() {\r\n          oldEmpty.call(null, self);\r\n        };\r\n      }\r\n\r\n      opts.email = this.val();\r\n      Kicksend.mailcheck.run(opts);\r\n    }\r\n  })(jQuery);\r\n}\r\n","'use strict';\n\nvar cookies = require('../helpers/cookies');\n\n// Settings in review page\nfunction bindEventOnSettingsBox ($container, data) {\n  $container.find('.tabs-container a.close, #review-settings-form a.js-close-last-tab').on('click', function (event) {\n    var projectId = data.mustache.projectId;\n\n    event.preventDefault();\n    cookies.set('settings-dismissed-' + projectId, true);\n    $container.slideUp('200', function () {\n      $container.remove();\n    });\n  });\n\n  $container.find('form#review-settings-form').on('submit', function (event) {\n    var $settingsForm = $(this);\n    var baseUrl = window.baseUrl || '/' + window.wooGlobal.language + '/';\n    var saveSettingsInReviewUrl = baseUrl + 'project/saverevsettings';\n    var data = $settingsForm.serialize();\n\n    event.preventDefault();\n    return $.ajax({\n      url: saveSettingsInReviewUrl,\n      type: 'POST',\n      data: data,\n      dataType: 'json',\n      cache: false,\n      success: function (json) {\n        if (json.success) {\n          return document.location.reload();\n        }\n        return $container.remove();\n      },\n      error: function (jqXHR, textStatus, errorThrown) {\n        window.Raven.captureMessage('Review settings submit error', {\n          extra: {\n            textStatus: textStatus,\n            errorThrown: errorThrown,\n            data: data\n          }\n        });\n\n        return $('#generic-error-modal').modal('show');\n      }\n    });\n  });\n\n  $container.find('a.tab-link').on('click', function (event) {\n    var $this = $(this);\n    var cHref = $this.attr('href');\n    var target = $(cHref);\n\n    event.preventDefault();\n    target.siblings().removeClass('active');\n    target.addClass('active');\n\n    if ($this.hasClass('js-btn-next')) {\n      $container.find('.tabs-container li')\n        .removeClass('active')\n        .each(function () {\n          if ($(this).find('>a.tab-link').attr('href') === cHref) {\n            return $(this).addClass('active');\n          }\n        });\n    } else {\n      $this.parent('li').siblings().removeClass('active');\n      $this.parent('li').addClass('active');\n    }\n  });\n\n  window.addEventListener('message', function (event) {\n    if (typeof event.data === 'object' && typeof event.data.event === 'string') {\n      var handlers = {\n        'auth-ga': handleGASyncEvent,\n        'auth-fb': handleFBSyncEvent\n      };\n\n      var handler = handlers[event.data.event];\n      if (handler) {\n        handler(event.data);\n      }\n    }\n  });\n\n  function handleGASyncEvent (data) {\n    if (!data.webPropertyId || !data.name) {\n      return;\n    }\n\n    return $('.js-ga-settings-container').replaceWith(\n      '<span class=\"ga-profile-value\">' +\n      '<i class=\"icons icon-ok\"></i>' +\n      '&nbsp;&nbsp;' + data.name + ' - [' + data.webPropertyId + ']' + '</span>');\n  }\n\n  function handleFBSyncEvent (data) {\n    if (!data.name) {\n      return;\n    }\n\n    return $('.js-fb-settings-container').replaceWith(\n      '<span class=\"fb-page-ok\"><i class=\"icons icon-ok\"></i></span>'\n    );\n  }\n\n  $container.find('.load-in-modal').on('click', function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    var $this = $(this);\n    var url = $this.attr('href');\n\n    return window.open(url, '_blank', 'height=600,width=900');\n  });\n}\n\nmodule.exports = bindEventOnSettingsBox;\n","'use strict';\n\nvar colors = require('./chartsColors');\nvar highchartsTheme = require('./highchartsTheme')();\nvar truncateFormatter = function () {\n  var MAX_LENGTH = 30;\n\n  if (this.name.length > MAX_LENGTH) {\n    return (this.name.slice(0, MAX_LENGTH)) + '\\u2026';\n  } else {\n    return this.name;\n  }\n};\n\nvar defaults = {\n  'pie': {\n    chart: {\n      defaultSeriesType: 'pie'\n    },\n    colors: [\n      colors.primaryDarker,\n      colors.greySmoke,\n      colors.grey,\n      colors.greyMedium\n    ],\n    legend: {\n      align: 'center',\n      verticalAlign: 'middle',\n      layout: 'vertical',\n      margin: 0,\n      floating: true,\n      labelFormatter: function () {\n        return this.name + '  ( ' + this.y + '% )';\n      }\n    },\n    plotOptions: {\n      pie: {\n        states: {\n          hover: {\n            enabled: false\n          }\n        },\n        allowPointSelect: false,\n        cursor: 'default',\n        shadow: false,\n        borderColor: null,\n        showInLegend: true,\n        center: [38, 38],\n        size: 96,\n        dataLabels: {\n          enabled: false\n        }\n      }\n    }\n  },\n  'line': {\n    chart: {\n      defaultSeriesType: 'spline',\n      height: 250,\n      marginRight: 0,\n      marginLeft: 36,\n      marginBottom: 80\n    },\n    xAxis: {\n      type: 'datetime',\n      dateTimeLabelFormats: {\n        day: '%e %b'\n      },\n      lineColor: colors.greySmoke,\n      tickWidth: 0,\n      minPadding: 0.05,\n      maxPadding: 0.05\n    },\n    yAxis: {\n      gridLineWidth: 0,\n      lineColor: null,\n      lineWidth: 0,\n      minPadding: 0.05,\n      maxPadding: 0.1,\n      minRange: 0.01,\n      endOnTick: false,\n      min: 0,\n      max: null,\n      allowDecimals: false,\n      labels: {\n        x: -7,\n        formatter: function () {\n          var value = this.value;\n          var sign = value < 0 ? '-' : '';\n\n          value = Math.abs(value);\n\n          if (value >= 1000 && value < 1000000) {\n            value = Math.floor(value / 100) / 10;\n            value += 'k';\n          } else if (value >= 1000000) {\n            value = Math.floor(value / 100000) / 10;\n            value += 'M';\n          }\n          return sign + value;\n        }\n      }\n    },\n    legend: {\n      align: 'left',\n      verticalAlign: 'bottom',\n      margin: 0,\n      x: -18,\n      labelFormatter: truncateFormatter\n    },\n    tooltip: {\n      enabled: true\n    },\n    plotOptions: {\n      spline: {\n        groupPadding: 0,\n        borderColor: null,\n        stickyTracking: false,\n        marker: {\n          enabled: true,\n          symbol: 'circle',\n          radius: 2,\n          states: {\n            hover: {\n              radius: 3\n            }\n          }\n        },\n        shadow: false,\n        connectNulls: true\n      }\n    }\n  },\n  'gender-age-chart': {\n    chart: {\n      type: 'column',\n      height: 250,\n      marginBottom: 130\n    },\n    xAxis: {\n      categories: ['13-17', '18-24', '25-34', '35-44', '45-54', '55-64', '65+'],\n      lineWidth: 0,\n      lineColor: colors.greySmoke,\n      tickWidth: 0,\n      minPadding: 0.05,\n      maxPadding: 0.05\n    },\n    yAxis: {\n      lineColor: null,\n      lineWidth: 0,\n      minPadding: 0.05,\n      maxPadding: 0.1,\n      endOnTick: false,\n      labels: {\n        formatter: function () {\n          return Math.abs(this.value);\n        }\n      }\n    },\n    legend: {\n      align: 'left',\n      verticalAlign: 'bottom',\n      floating: true,\n      margin: 0,\n      labelFormatter: truncateFormatter\n    },\n    tooltip: {\n      enabled: true,\n      formatter: function () {\n        var s = '<b>' + this.x + '</b>';\n\n        $.each(this.points, function (i, point) {\n          s += '<br/>' + point.series.name + ' : ' + Math.abs(point.y);\n        });\n        return s;\n      },\n      shared: true\n    },\n    plotOptions: {\n      column: {\n        stacking: 'normal',\n        groupPadding: 0.15,\n        pointWidth: 22,\n        borderColor: null,\n        shadow: false\n      }\n    }\n  },\n  'column': {\n    chart: {\n      type: 'column',\n      height: 250,\n      marginRight: 0,\n      marginLeft: 36,\n      marginBottom: 20\n    },\n    xAxis: {\n      type: 'datetime',\n      dateTimeLabelFormats: {\n        day: '%e %b'\n      },\n      lineColor: colors.greySmoke,\n      tickWidth: 0,\n      minPadding: 0.05,\n      maxPadding: 0.05\n    },\n    yAxis: {\n      gridLineWidth: 0,\n      lineColor: null,\n      lineWidth: 0,\n      minPadding: 0.05,\n      maxPadding: 0.1,\n      endOnTick: false,\n      labels: {\n        formatter: function () {\n          var val = (this.value <= 0.01 ? 0 : this.value);\n          var hours = Math.floor(val / 60);\n          var minutes = Math.floor(val) % 60;\n          var seconds = Math.floor((val - hours * 60 - minutes) * 60);\n\n          if (hours > 0) {\n            return hours + 'h';\n          } else if (minutes > 0) {\n            return minutes + 'm';\n          } else if (seconds > 0) {\n            return seconds + 's';\n          } else {\n            return val;\n          }\n        }\n      }\n    },\n    legend: {\n      align: 'left',\n      verticalAlign: 'top',\n      margin: 0,\n      floating: true,\n      x: 36,\n      labelFormatter: truncateFormatter\n    },\n    tooltip: {\n      enabled: true,\n      formatter: function () {\n        var label = '';\n        var val = (this.y <= 0.01 ? 0 : this.y);\n        var hours = Math.floor(val / 60);\n        var minutes = Math.floor(val) % 60;\n        var seconds = Math.floor((val - hours * 60 - minutes) * 60);\n\n        label += (hours > 0 ? ' ' + hours + 'h' : '');\n        label += (minutes > 0 ? ' ' + minutes + 'm' : '');\n        label += (seconds > 0 ? ' ' + seconds + 's' : '');\n\n        if (label.length === 0) {\n          label = '0';\n        }\n        return '' + window.Highcharts.dateFormat('%e. %b %Y', this.x) + ' : ' + label;\n      }\n    },\n    plotOptions: {\n      column: {\n        borderWidth: 0,\n        shadow: false,\n        color: colors.error\n      }\n    }\n  }\n};\n\nwindow.Highcharts.theme = highchartsTheme;\nwindow.Highcharts.setOptions(highchartsTheme);\n\n// update charts setting for avoid bugs in pdf generation\nif ($('body').hasClass('pdf')) {\n  defaults.line.plotOptions.spline.enableMouseTracking = false;\n  defaults.line.plotOptions.spline.animation = false;\n  defaults.line.plotOptions.spline.shadow = false;\n}\n\nwindow.buildChartConfig = function (type, overwrites) {\n  return $.extend(true, {}, defaults[type], overwrites);\n};\n","'use strict';\n\nvar updateCrits = require('./updateCrits');\nvar generateAllCrits = require('./generateAllCrits');\nvar throttle = require('lodash.throttle');\nvar counter = require('../review/counter/counter');\nvar io = require('socket.io-client');\nvar qs = require('querystring');\nvar receiveCriterium = require('./receiveCriterium');\n\nvar intialized = false;\n\nfunction generationComplete (data) {\n  var critMap = window.critMap || {};\n\n  Promise.all(Object.keys(critMap).map(function (key) {\n    return receiveCriterium(critMap[key]);\n  }))\n  .then(function () {\n    return $('#dashboard').trigger('generationComplete');\n  });\n}\n\nfunction startSocketGeneration () {\n  var lang = window.wooGlobal.language;\n  var userId = window.wooGlobal.user && window.wooGlobal.user.id;\n  var url = window.currentWebsite;\n  var competitors = window.competitorUrls;\n\n  var connectParams = {\n    language: lang,\n    userId: userId,\n    url: url,\n    competitors: competitors.join('|')\n  };\n\n  var socket = io(window.socketSUrl, { query: qs.stringify(connectParams) });\n\n  var buffer = [];\n\n  function updateBuffer () {\n    if (buffer.length > 0) {\n      updateCrits(buffer);\n      buffer = [];\n    }\n  }\n\n  var updateBufferThrottled = throttle(updateBuffer, 1000);\n\n  socket.on('data', function (data) {\n    buffer = buffer.concat(data);\n    updateBufferThrottled();\n  });\n\n  socket.on('score-update', function (data) {\n    if (data.url === url) {\n      counter.finalize(data.newScore);\n    } else {\n      var score = Math.round(data.newScore * 10) / 10;\n      if (data.newScore > 0) {\n        $('#dashboard-competitors li[title=\"' + data.url + '\"] .score')\n          .text(score);\n      }\n    }\n  });\n\n  socket.on('pdf-available', function (data) {\n    if (data.url === url) {\n      generationComplete(data);\n      socket.disconnect();\n    }\n  });\n\n  socket.on('initialized', function () {\n    if (!intialized) {\n      intialized = true;\n      generateAllCrits({});\n    }\n  });\n}\n\nmodule.exports = startSocketGeneration;\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","'use strict';\n\n// DO NOT USE THIS ANYMORE, IT'S BUGGY !\n\nfunction init () {\n  $.fn.extend({\n    prettifyBigNumbers: function () {\n      var nbrRegExp = /([\\D]{1})([\\d]{4,})([\\D]{1})/g;\n\n      return this.each(function () {\n        var $this = $(this);\n        var inner = $this.html();\n        var replacedInner;\n\n        if ($this.find('a').length > 0) {\n          return;\n        }\n\n        replacedInner = inner.replace(nbrRegExp,\n          function (match, p1, p2, p3) {\n            if (p1 === '.' || p1 === ',') {\n              return match;\n            }\n\n            var returnStr = '</abbr>' + p3;\n            var beginStr = p1 + '<abbr class=\"big-nbr-container\">';\n            var numberLength = p2.length;\n            var numberLoop = Math.floor(numberLength / 3);\n            var numberRest = numberLength % 3;\n            var i = 1;\n\n            while (i <= numberLoop) {\n              if (i === numberLoop && numberRest === 0) {\n                returnStr = p2.substr(-3 * i, 3) + returnStr;\n              } else {\n                returnStr = '<abbr>' +\n                  p2.substr(-3 * i, 3) +\n                  '</abbr>' +\n                  returnStr;\n              }\n              i++;\n            }\n            i--;\n            returnStr =\n              beginStr + p2.substr(\n                (-3 * i) - numberRest, numberRest\n              ) + returnStr;\n            return returnStr;\n          }\n        );\n        return $this.html(replacedInner);\n      });\n    }\n  });\n}\n\nmodule.exports = {\n  init: init\n};\n","'use strict';\n\nfunction closeAllInlineModal (event) {\n  var $target = $(event.target);\n\n  if (\n    !$target.hasClass('.inline-modal') &&\n    !$target.hasClass('inline-modal-opener') &&\n    !$target.parents('.inline-modal').length > 0\n  ) {\n    $('#dashboard-footer .item.open').removeClass('open');\n    return $(this).removeClass('bound-imc').off('click');\n  }\n}\n\nmodule.exports = closeAllInlineModal;\n","'use strict';\n\n// put social data in array\nfunction putSIDataInArray ($element, data, id) {\n  var total = 0;\n  var medias = {};\n  var tmp = {\n    url: $element.find('h4').text(),\n    id: id\n  };\n\n  $element.find('.part.text p').each(function () {\n    var thisTmp = $(this);\n    var val = parseInt(thisTmp.find('.big-right-aligned-content').text(), 10);\n    var name = thisTmp.find('.big-right-aligned').text();\n\n    if (!isNaN(val) && name !== '') {\n      medias[name] = val;\n      total += val;\n      return total;\n    }\n  });\n\n  tmp.medias = medias;\n  tmp.total = total;\n  data[tmp.url] = tmp;\n  return data;\n}\n\nmodule.exports = putSIDataInArray;\n","'use strict';\n\nfunction addTabsForSIComp ($element, data, dataLength) {\n  var current;\n  var innerHtml;\n  var url;\n  var visualUrl;\n  var tabs = $('<div class=\"social-media-tabs comp-tabs\"></div>');\n\n  for (url in data) {\n    current = data[url];\n    visualUrl = current.url;\n    innerHtml = '<span class=\"color\"></span>' + visualUrl;\n\n    if (url === window.currentWebsite) {\n      tabs.prepend(\n        '<span class=\"not-tab\" title=\"' + visualUrl + '\">' +\n        innerHtml +\n        '</span>'\n      );\n    } else {\n      tabs.append(\n        '<a class=\"tab no-advice-target\" title=\"' + visualUrl + '\">' +\n        innerHtml +\n        '</a>'\n      );\n    }\n  }\n  return $element.after(tabs);\n}\n\nmodule.exports = addTabsForSIComp;\n","'use strict';\n\nfunction addMainDataInSIComp ($element, data, dataLength) {\n  var $content;\n  var visualBaseUrl;\n  var visualCompUrl;\n  var objUrl = $element.find('h4').text();\n  var baseData = data[window.currentWebsite];\n  var compData = data[objUrl];\n  var maxUrlLength = 18;\n\n  if ((baseData != null) && (compData != null)) {\n    visualBaseUrl = (baseData.url.length < maxUrlLength)\n      ? baseData.url : baseData.url.substr(0, maxUrlLength - 3) + '...';\n\n    visualCompUrl = (compData.url.length < maxUrlLength)\n      ? compData.url : compData.url.substr(0, maxUrlLength - 3) + '...';\n\n    $content = $(\n      '<table class=\"social-media-compare comp-' + compData.id + '\">' +\n      '<thead><tr><th></th><th><span class=\"color\"></span>' +\n      visualBaseUrl + '</th><th><span class=\"color\"></span>' +\n      visualCompUrl + '</th></tr></thead><tbody></tbody></table>'\n    );\n\n    $element.find('p span.big-right-aligned').each(function () {\n      var baseTd;\n      var compTd;\n      var line;\n      var socialMediaObj = $(this);\n      var socialMediaName = socialMediaObj.text();\n      var baseInt = parseInt(baseData.medias[socialMediaName], 10);\n      var compInt = parseInt(compData.medias[socialMediaName], 10);\n\n      if (isNaN(baseInt)) {\n        baseTd = '<td>?</td>';\n      } else if (baseInt > compInt) {\n        baseTd = '<td class=\"bold\">' + baseInt + '</td>';\n      } else {\n        baseTd = '<td>' + baseInt + '</td>';\n      }\n      if (isNaN(compInt)) {\n        compTd = '<td>?</td>';\n      } else if (compInt > baseInt) {\n        compTd = '<td class=\"bold\">' + compInt + '</td>';\n      } else {\n        compTd = '<td>' + compInt + '</td>';\n      }\n\n      line = '<tr><td>' +\n        $('<div>').append(socialMediaObj.clone()).html() +\n        '</td>' + baseTd + compTd + '</tr>';\n      return $content.find('tbody').append(line);\n    });\n    return $element\n      .addClass('social-media-tab-content tab-content full-width')\n      .html($content);\n  }\n}\n\nmodule.exports = addMainDataInSIComp;\n","'use strict';\n\nfunction renderTasks (mustache, $marketingChecklist, tasks) {\n  var tasksHtml = window.Mustache.render(\n    mustache,\n    {\n      tasksList: tasks,\n      domain: window.currentWebsite,\n      reportUrl: encodeURIComponent(window.location.href)\n    }\n  );\n\n  $marketingChecklist.find('.marketing-checklist-list').html(tasksHtml);\n}\n\nmodule.exports = renderTasks;\n","'use strict';\n\nfunction updateProgressBar ($bar, stats) {\n  var checkedTotal;\n\n  if (stats != null) {\n    checkedTotal = stats.autochecked + stats.checked;\n    $bar.find('.progress-label').text(checkedTotal + '/' + stats.all);\n    $bar.find('.progress-bar').attr({\n      'aria-valuemin': 0,\n      'aria-valuenow': checkedTotal,\n      'aria-valuemax': stats.all,\n      'data-autochecked': stats.autochecked,\n      'data-checked': stats.checked,\n      'data-percent': stats.percent,\n      'data-all': stats.all\n    }).css('width', stats.percent + '%');\n  }\n}\n\nmodule.exports = updateProgressBar;\n","'use strict';\n\nfunction renderFilter (mustache, $marketingChecklist, categories) {\n  var filterData = {};\n  var key;\n  var filterHtml;\n\n  filterData.categories = [];\n\n  for (key in categories) {\n    filterData.categories.push({\n      'id': key,\n      'name': categories[key].name,\n      'count': categories[key].count,\n      'disabled': categories[key].count === 0 ? 'disabled' : undefined\n    });\n  }\n\n  filterHtml = window.Mustache.render(\n    mustache, filterData\n  );\n\n  $marketingChecklist\n    .find('#marketing-checklist-filter .dropdown-menu')\n    .prepend(filterHtml);\n}\n\nmodule.exports = renderFilter;\n","'use strict';\n\nfunction renderTasksDone ($marketingChecklist, tasksDone) {\n  $marketingChecklist\n    .find('[data-tasks-category=done] .badge')\n    .text(tasksDone.length);\n}\n\nmodule.exports = renderTasksDone;\n","'use strict';\n\nvar allTasksDone = require('./allTasksDone');\nvar hideMoreOrLessLinks = require('./hideMoreOrLessLinks');\n\nfunction toggleTasks ($marketingChecklist) {\n  var $tasksList = $marketingChecklist.find('.marketing-checklist-list');\n  var $tasks = $tasksList.find('.task-container');\n  var showToDo = $tasksList.hasClass('show-todo');\n  var open = $tasksList.hasClass('open');\n  var defaultTaskShown = 3;\n  var $activeTasks;\n  var $activeTasksFiltered;\n\n  $tasks.addClass('hidden');\n\n  if (showToDo === true) {\n    $activeTasks = $tasks.not('.checked');\n  } else {\n    $activeTasks = $tasks.filter('.checked');\n  }\n\n  if (open === true) {\n    $activeTasksFiltered = $activeTasks.not('.filtered-out');\n  } else {\n    $activeTasksFiltered = $activeTasks.not('.filtered-out')\n      .filter(function (index) {\n        return index < defaultTaskShown;\n      });\n  }\n\n  $activeTasksFiltered.removeClass('hidden');\n  $tasks.find('.label').addClass('hidden');\n  $tasks.not('.checked').first().find('.label').removeClass('hidden');\n  allTasksDone($marketingChecklist);\n  return hideMoreOrLessLinks($marketingChecklist);\n}\n\nmodule.exports = toggleTasks;\n","'use strict';\n\nvar showMoreBehaviour = require('./showMoreBehaviour');\nvar checkBehaviour = require('./checkBehaviour');\nvar filterBehaviour = require('./filterBehaviour');\n\nfunction bindEvents (isAdvancedReview) {\n  var $marketingChecklist = $('.marketing-checklist');\n\n  $marketingChecklist.find('[data-toggle=tooltip]').tooltip();\n  $('#dashboard-tasks-bars').find('[data-toggle=tooltip]').tooltip();\n\n  $marketingChecklist.find('[data-toggle=popover]').popover({\n    content: $marketingChecklist.find('#tasks-popover-content').html(),\n    html: true\n  });\n\n  $marketingChecklist.find('.show-links-custom')\n  .on('click', function (event) {\n    event.preventDefault();\n    return showMoreBehaviour(\n      $marketingChecklist, $(this), $(event.target).hasClass('show-less')\n    );\n  });\n\n  $marketingChecklist.find('#marketing-checklist-filter .dropdown-menu')\n  .on('click', 'li', function (event) {\n    event.preventDefault();\n\n    if ($(this).hasClass('disabled')) {\n      return event.stopPropagation();\n    } else {\n      return filterBehaviour($marketingChecklist, $(this));\n    }\n  });\n\n  $marketingChecklist.find('.task-container .task-header')\n  .on('click', function (event) {\n    var $taskContainer;\n\n    if ($(event.target).attr('id') !== 'marketing-checklist-popover-link') {\n      $taskContainer = $(this).parent('.task-container');\n      $taskContainer.siblings().removeClass('open');\n      return $taskContainer.toggleClass('open');\n    }\n  });\n\n  $marketingChecklist.find('.container-checkbox')\n  .on('click', function (event) {\n    return event.stopPropagation();\n  });\n\n  $marketingChecklist.find(\n    '.task-container:not(.proccessing) .container-checkbox')\n  .on('click', function (event) {\n    var $checkElem;\n    var checked;\n\n    event.preventDefault();\n\n    if (window.isAdvancedReview) {\n      $checkElem = $(this);\n      checked = $checkElem.parents('.task-container').hasClass('checked');\n      return checkBehaviour($checkElem.parents('.task-container'), checked);\n    }\n  });\n\n  $marketingChecklist.find('.task-container')\n  .on('click', '.task-quicktip', function (event) {\n    var href = $(this).attr('href') || '';\n\n    window.moduleMapping = window.moduleMapping || [];\n    event.preventDefault();\n\n    if ($(href).length === 0) {\n      href = '#' + window.moduleMapping[href.substr(1)];\n    }\n\n    return window.location.replace(href);\n  });\n}\n\nmodule.exports = bindEvents;\n","'use strict';\n\nfunction addTopPrioritiesLabelText ($marketingChecklist) {\n  $marketingChecklist = $marketingChecklist || $('.marketing-checklist');\n\n  $marketingChecklist\n    .find('.marketing-checklist-item-title .label')\n    .text(\n      $marketingChecklist.find('#top-priorities-label').attr('data-content')\n  );\n\n  $marketingChecklist\n    .find('.marketing-checklist-list .task-container')\n    .first()\n    .find('.label')\n    .removeClass('hidden');\n}\n\nmodule.exports = addTopPrioritiesLabelText;\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 (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\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 map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], 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\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n","/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar debounce = require('lodash.debounce');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\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 invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\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] Specify invoking on the leading\n *  edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n *  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 * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n *   'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction 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 (options === false) {\n    leading = false;\n  } else 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, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\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(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = throttle;\n","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  } else if (opts && 'object' === typeof opts.query) {\n    opts.query = encodeQueryString(opts.query);\n  }\n  return io.socket(parsed.path, opts);\n}\n/**\n *  Helper method to parse query objects to string.\n * @param {object} query\n * @returns {string}\n */\nfunction encodeQueryString (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  }\n  return str.join('&');\n}\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n","'use strict';\n\nvar colors = require('./chartsColors');\n\nfunction highchartsTheme () {\n  var Highcharts = Highcharts || {};\n  var fonts = {\n    fontFamily: '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n    fontSize: '12px',\n    fontWeight: 400\n  };\n  var theme = {\n    colors: [\n      colors.primaryDarker,\n      colors.success,\n      colors.warning,\n      colors.error,\n      colors.greyDark\n    ],\n    chart: {\n      backgroundColor: null,\n      plotBackgroundColor: null,\n      plotBorderWidth: null,\n      plotShadow: false,\n      animation: false,\n      style: {\n        fontFamily: fonts.fontFamily,\n        fontSize: fonts.fontSize,\n        color: colors.greyDarker\n      }\n    },\n    credits: {\n      enabled: false\n    },\n    title: {\n      text: null\n    },\n    tooltip: {\n      enabled: false,\n      style: {\n        fontFamily: fonts.fontFamily,\n        fontSize: fonts.fontSize,\n        color: colors.greyDarker\n      }\n    },\n    xAxis: {\n      enabled: false,\n      gridLineColor: colors.greySmoke,\n      labels: {\n        style: {\n          fontFamily: fonts.fontFamily,\n          fontSize: fonts.fontSize,\n          color: colors.greyMedium\n        }\n      },\n      title: {\n        style: {\n          fontFamily: fonts.fontFamily,\n          fontSize: fonts.fontSize,\n          color: colors.greyMedium\n        }\n      }\n    },\n    yAxis: {\n      gridLineColor: colors.greySmoke,\n      labels: {\n        style: {\n          fontFamily: fonts.fontFamily,\n          fontSize: fonts.fontSize,\n          color: colors.greyMedium\n        }\n      },\n      title: {\n        text: null,\n        style: {\n          fontFamily: fonts.fontFamily,\n          fontSize: fonts.fontSize,\n          color: colors.greyMedium\n        }\n      }\n    },\n    legend: {\n      borderWidth: null,\n      itemStyle: {\n        fontFamily: fonts.fontFamily,\n        fontSize: fonts.fontSize,\n        fontWeight: fonts.fontWeight,\n        color: colors.greyDark\n      },\n      itemHoverStyle: {\n        color: colors.greyDarker\n      },\n      itemHiddenStyle: {\n        color: colors.greyMedium\n      }\n    },\n    labels: {\n      style: {\n        color: colors.greyMedium\n      }\n    }\n  };\n\n  return theme;\n}\n\nmodule.exports = highchartsTheme;\n","'use strict';\n\nvar aggregateCompetitors = require('./aggregateCompetitors');\nvar receiveCriterium = require('./receiveCriterium');\nvar calculTopBars = require('../review/dashboard/dashboardProgressStatus');\nvar checkEmptyModules = require('../review/checkEmptyModules');\nvar replaceExtLink = require('../helpers/replaceExtLink');\nvar prettifyUrlInReviewLists = require('../review/prettifyBigURLs');\nvar renderCharts = require('../charts/chartsRender');\n\nfunction updateCrits (toUpdate) {\n  toUpdate.forEach(function (rawCrit) {\n    var crit = aggregateCompetitors(rawCrit);\n    receiveCriterium(crit);\n  });\n\n  calculTopBars();\n  checkEmptyModules();\n  replaceExtLink();\n  prettifyUrlInReviewLists();\n  renderCharts();\n\n  $('.criterium [data-toggle=\"tooltip\"]').tooltip();\n}\n\nmodule.exports = updateCrits;\n","'use strict';\n\nvar checkEmptyModuleSection = require('../review/checkEmptyModules');\n\nfunction generateAllCrits (options) {\n  setTimeout(function () {\n    $('.criterium.criterium-loading')\n      .addClass('hidden')\n      .removeClass('criterium-loading');\n\n    checkEmptyModuleSection();\n  }, 120000);\n\n  window.competitorUrls = window.competitorUrls || [];\n  var lang = window.wooGlobal.language;\n  var userId = window.wooGlobal.user && window.wooGlobal.user.id || 0;\n  var generationParams = {\n    channel: options.channel,\n    userId: userId,\n    url: window.currentWebsite,\n    lang: lang,\n    client: 'front-browser',\n    competitors: window.competitorUrls\n  };\n\n  return $.post(window.socketSUrl + 'generations', generationParams, function (data) {\n    window.totalRequestedCrits = window.critsOnSocket.length;\n    window.curentGeneratedCrits = window.curentNPVal = 0;\n    return window.curentGeneratedCrits;\n  });\n}\n\nmodule.exports = generateAllCrits;\n","'use strict';\n\nvar insertInHtml = require('./insertInHTML');\nvar loadMustachesFiles = require('../review/loadMustachesFiles');\n\nfunction receiveCriterium (crit) {\n  var j;\n  var len;\n  var url;\n  var compData = [];\n  var competitorUrls = window.competitorUrls || [];\n  var criterium;\n  var selector;\n  var $element;\n  var currentWebsiteData = null;\n\n  var currentWebsiteShort = window.currentWebsite.split('/')[0];\n  if (crit && crit[currentWebsiteShort]) {\n    currentWebsiteData = crit[currentWebsiteShort];\n  }\n\n  if (!currentWebsiteData || !currentWebsiteData.mustache) {\n    return;\n  }\n\n  if (Object.keys(crit).length > 1) {\n    for (j = 0, len = competitorUrls.length; j < len; j++) {\n      url = competitorUrls[j];\n      if ((crit[url] != null) && (crit[url].mustache != null)) {\n        compData.push(crit[url].mustache);\n      }\n    }\n  }\n\n  if (compData.length > 0) {\n    currentWebsiteData.mustache.competitors = {\n      clist: compData\n    };\n  }\n\n  criterium = currentWebsiteData.criterium;\n  selector = '#criterium-' + criterium;\n  $element = $(selector);\n\n  return loadMustachesFiles().then(function (templates) {\n    return insertInHtml($element, currentWebsiteData, templates);\n  });\n}\n\nmodule.exports = receiveCriterium;\n","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || global.location;\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  this.encoder = new parser.Encoder();\n  this.decoder = new parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.engine.id;\n    }\n  }\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.engine.id;\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting evnet is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar hasBin = require('has-binary');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var parserType = parser.EVENT; // default\n  if (hasBin(args)) { parserType = parser.BINARY_EVENT; } // binary\n  var packet = { type: parserType, data: args };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  delete this.flags;\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      this.packet({type: parser.CONNECT, query: this.query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  if (packet.nsp !== this.nsp) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    var type = hasBin(args) ? parser.BINARY_ACK : parser.ACK;\n    self.packet({\n      type: type,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags = this.flags || {};\n  this.flags.compress = compress;\n  return this;\n};\n","/**\n * lodash 3.1.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeNow = getNative(Date, 'now');\n\n/**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\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 function to be invoked\n */\nvar now = nativeNow || function() {\n  return new Date().getTime();\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 invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\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] Specify invoking on the leading\n *  edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n *  delayed before it is invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n *  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 the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').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 source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n *   'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n *     todoChanges.cancel();\n *   }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n  var args,\n      maxTimeoutId,\n      result,\n      stamp,\n      thisArg,\n      timeoutId,\n      trailingCall,\n      lastCalled = 0,\n      maxWait = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = wait < 0 ? 0 : (+wait || 0);\n  if (options === true) {\n    var leading = true;\n    trailing = false;\n  } else if (isObject(options)) {\n    leading = !!options.leading;\n    maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function cancel() {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n    if (maxTimeoutId) {\n      clearTimeout(maxTimeoutId);\n    }\n    lastCalled = 0;\n    maxTimeoutId = timeoutId = trailingCall = undefined;\n  }\n\n  function complete(isCalled, id) {\n    if (id) {\n      clearTimeout(id);\n    }\n    maxTimeoutId = timeoutId = trailingCall = undefined;\n    if (isCalled) {\n      lastCalled = now();\n      result = func.apply(thisArg, args);\n      if (!timeoutId && !maxTimeoutId) {\n        args = thisArg = undefined;\n      }\n    }\n  }\n\n  function delayed() {\n    var remaining = wait - (now() - stamp);\n    if (remaining <= 0 || remaining > wait) {\n      complete(trailingCall, maxTimeoutId);\n    } else {\n      timeoutId = setTimeout(delayed, remaining);\n    }\n  }\n\n  function maxDelayed() {\n    complete(trailing, timeoutId);\n  }\n\n  function debounced() {\n    args = arguments;\n    stamp = now();\n    thisArg = this;\n    trailingCall = trailing && (timeoutId || !leading);\n\n    if (maxWait === false) {\n      var leadingCall = leading && !timeoutId;\n    } else {\n      if (!maxTimeoutId && !leading) {\n        lastCalled = stamp;\n      }\n      var remaining = maxWait - (stamp - lastCalled),\n          isCalled = remaining <= 0 || remaining > maxWait;\n\n      if (isCalled) {\n        if (maxTimeoutId) {\n          maxTimeoutId = clearTimeout(maxTimeoutId);\n        }\n        lastCalled = stamp;\n        result = func.apply(thisArg, args);\n      }\n      else if (!maxTimeoutId) {\n        maxTimeoutId = setTimeout(maxDelayed, remaining);\n      }\n    }\n    if (isCalled && timeoutId) {\n      timeoutId = clearTimeout(timeoutId);\n    }\n    else if (!timeoutId && wait !== maxWait) {\n      timeoutId = setTimeout(delayed, wait);\n    }\n    if (leadingCall) {\n      isCalled = true;\n      result = func.apply(thisArg, args);\n    }\n    if (isCalled && !timeoutId && !maxTimeoutId) {\n      args = thisArg = undefined;\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\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(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = debounce;\n","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (window.console && (console.firebug || (console.exception && console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n  var args = arguments;\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return args;\n\n  var c = 'color: ' + this.color;\n  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n  return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    return exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (typeof process !== 'undefined' && 'env' in process) {\n    return process.env.DEBUG;\n  }\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar json = require('json3');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT == obj.type || exports.BINARY_ACK == obj.type) {\n    encodeAsBinary(obj, callback);\n  }\n  else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n  var str = '';\n  var nsp = false;\n\n  // first is type\n  str += obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT == obj.type || exports.BINARY_ACK == obj.type) {\n    str += obj.attachments;\n    str += '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' != obj.nsp) {\n    nsp = true;\n    str += obj.nsp;\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    if (nsp) {\n      str += ',';\n      nsp = false;\n    }\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    if (nsp) str += ',';\n    str += json.stringify(obj.data);\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an ecoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if ('string' == typeof obj) {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT == packet.type || exports.BINARY_ACK == packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  }\n  else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  }\n  else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var p = {};\n  var i = 0;\n\n  // look up type\n  p.type = Number(str.charAt(0));\n  if (null == exports.types[p.type]) return error();\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT == p.type || exports.BINARY_ACK == p.type) {\n    var buf = '';\n    while (str.charAt(++i) != '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) != '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' == str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' == c) break;\n      p.nsp += c;\n      if (i == str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i == str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    p = tryParse(p, str.substr(i));\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(p, str) {\n  try {\n    p.data = json.parse(str);\n  } catch(e){\n    return error();\n  }\n  return p; \n};\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length == this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(data){\n  return {\n    type: exports.ERROR,\n    data: 'parser error'\n  };\n}\n","'use strict';\n\nfunction allTasksDone ($marketingChecklist) {\n  var allDone = false;\n  var $list = $marketingChecklist.find('.marketing-checklist-list');\n  var $taskContainer = $marketingChecklist.find('.task-container');\n\n  if ($list.hasClass('show-todo')) {\n    if ($taskContainer.not('.checked').length < 1) {\n      allDone = true;\n    }\n  }\n\n  $marketingChecklist\n    .find('.marketing-checklist-list, .show-links-custom')\n    .toggleClass('hidden', allDone);\n\n  $marketingChecklist\n    .find('.marketing-checklist-list-alldone')\n    .toggleClass('hidden', !allDone);\n}\n\nmodule.exports = allTasksDone;\n","'use strict';\n\nfunction hideMoreOrLessLinks ($marketingChecklist) {\n  var $tasksList = $('.list-of-tasks:not(.hidden)');\n  var $tasks = $tasksList.find('.task-container');\n  var $showMore = $marketingChecklist.find('.show-links-custom');\n  var activeFilter =\n    $marketingChecklist.find('#marketing-checklist-filter .active')\n      .attr('data-tasks-category');\n  var $activeTasks;\n  var tasksLeft;\n\n  if (activeFilter === 'done') {\n    $activeTasks = $tasks.filter('.checked');\n  } else {\n    $activeTasks = $tasks.not('.checked');\n  }\n\n  tasksLeft = $activeTasks.not('.filtered-out').length;\n  $showMore.toggleClass('hidden', tasksLeft <= 3);\n\n  if (tasksLeft < 1) {\n    $marketingChecklist\n      .find('#marketing-checklist-filter')\n      .find('[data-tasks-category=all]')\n      .trigger('click');\n  }\n}\n\nmodule.exports = hideMoreOrLessLinks;\n","'use strict';\n\nvar toggleTasks = require('./toggleTasks');\nvar scrollToElement = require('../../helpers/scrollToElement');\n\nfunction showMoreBehaviour ($marketingChecklist, $showMore, showLess) {\n  var $tasksList = $marketingChecklist.find('.marketing-checklist-list');\n\n  $showMore.toggleClass('open', !showLess);\n  $tasksList.toggleClass('open', !showLess);\n\n  if (showLess === true) {\n    scrollToElement($marketingChecklist);\n  }\n\n  return toggleTasks($marketingChecklist);\n}\n\nmodule.exports = showMoreBehaviour;\n","'use strict';\n\nvar taskDone = require('./taskDone');\n\nfunction checkBehaviour ($taskContainer, checked) {\n  var lang = window.wooGlobal.language;\n  var check = !checked;\n  var category = $taskContainer.attr('data-category');\n  var taskId = $taskContainer.attr('id').replace('project-task-', '');\n  var projectTaskUrl = $('.marketing-checklist').attr('data-project-url');\n  var checkUrl = '/' +\n    lang + '/projects/' +\n    projectTaskUrl + '/tasks/' +\n    taskId + '/check';\n\n  $taskContainer.addClass('proccessing');\n\n  return $.ajax({\n    type: 'POST',\n    cache: false,\n    data: {\n      check: check ? 1 : 0\n    },\n    url: checkUrl,\n    dataType: 'json',\n    success: function (res) {\n      if (res.checked == null) {\n        res.checked = false;\n      }\n\n      $taskContainer.fadeOut(400, function () {\n        taskDone($taskContainer, category, res.checked);\n      });\n    },\n    error: function (jqXHR, textStatus, errorThrown) {\n      window.Raven.captureMessage('Marketing checklist checking item error', {\n        extra: {\n          textStatus: textStatus,\n          errorThrown: errorThrown,\n          currentWebsite: window.currentWebsite\n        }\n      });\n\n      return $taskContainer.removeClass('proccessing');\n    }\n  });\n}\n\nmodule.exports = checkBehaviour;\n","'use strict';\n\nvar filterTaskByCategory = require('./filterTaskByCategory');\n\nfunction filterBehaviour ($marketingChecklist, $filter) {\n  $marketingChecklist = $marketingChecklist || $('.marketing-checklist');\n  $marketingChecklist.find('.dropdown-menu li').removeClass('active');\n  $filter.addClass('active');\n  $marketingChecklist.find('.js-dropdown-button-label').text($filter.find('.name').text());\n  return filterTaskByCategory(\n    $marketingChecklist, $filter.attr('data-tasks-category')\n  );\n}\n\nmodule.exports = filterBehaviour;\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug.debug = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n  return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n  // define the `disabled` version\n  function disabled() {\n  }\n  disabled.enabled = false;\n\n  // define the `enabled` version\n  function enabled() {\n\n    var self = enabled;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // add the `color` if not set\n    if (null == self.useColors) self.useColors = exports.useColors();\n    if (null == self.color && self.useColors) self.color = selectColor();\n\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %o\n      args = ['%o'].concat(args);\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting\n    args = exports.formatArgs.apply(self, args);\n\n    var logFn = enabled.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  enabled.enabled = true;\n\n  var fn = exports.enabled(namespace) ? enabled : disabled;\n\n  fn.namespace = namespace;\n\n  return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  var split = (namespaces || '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/[\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet){\n  var buffers = [];\n  var packetData = packet.data;\n\n  function _deconstructPacket(data) {\n    if (!data) return data;\n\n    if (isBuf(data)) {\n      var placeholder = { _placeholder: true, num: buffers.length };\n      buffers.push(data);\n      return placeholder;\n    } else if (isArray(data)) {\n      var newData = new Array(data.length);\n      for (var i = 0; i < data.length; i++) {\n        newData[i] = _deconstructPacket(data[i]);\n      }\n      return newData;\n    } else if ('object' == typeof data && !(data instanceof Date)) {\n      var newData = {};\n      for (var key in data) {\n        newData[key] = _deconstructPacket(data[key]);\n      }\n      return newData;\n    }\n    return data;\n  }\n\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  var curPlaceHolder = 0;\n\n  function _reconstructPacket(data) {\n    if (data && data._placeholder) {\n      var buf = buffers[data.num]; // appropriate buffer (should be natural order anyway)\n      return buf;\n    } else if (isArray(data)) {\n      for (var i = 0; i < data.length; i++) {\n        data[i] = _reconstructPacket(data[i]);\n      }\n      return data;\n    } else if (data && 'object' == typeof data) {\n      for (var key in data) {\n        data[key] = _reconstructPacket(data[key]);\n      }\n      return data;\n    }\n    return data;\n  }\n\n  packet.data = _reconstructPacket(packet.data);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((global.Blob && obj instanceof Blob) ||\n        (global.File && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (obj && 'object' == typeof obj && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n","\nmodule.exports = isBuf;\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (global.Buffer && global.Buffer.isBuffer(obj)) ||\n         (global.ArrayBuffer && obj instanceof ArrayBuffer);\n}\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n","\nmodule.exports = require('./lib/index');\n","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n","\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Right now only Buffer and ArrayBuffer are supported..\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary(data) {\n\n  function _hasBinary(obj) {\n    if (!obj) return false;\n\n    if ( (global.Buffer && global.Buffer.isBuffer && global.Buffer.isBuffer(obj)) ||\n         (global.ArrayBuffer && obj instanceof ArrayBuffer) ||\n         (global.Blob && obj instanceof Blob) ||\n         (global.File && obj instanceof File)\n        ) {\n      return true;\n    }\n\n    if (isArray(obj)) {\n      for (var i = 0; i < obj.length; i++) {\n          if (_hasBinary(obj[i])) {\n              return true;\n          }\n      }\n    } else if (obj && 'object' == typeof obj) {\n      // see: https://github.com/Automattic/has-binary/pull/4\n      if (obj.toJSON && 'function' == typeof obj.toJSON) {\n        obj = obj.toJSON();\n      }\n\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key) && _hasBinary(obj[key])) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  return _hasBinary(data);\n}\n","/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\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 */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\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(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  return ('WebkitAppearance' in document.documentElement.style) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (window.console && (console.firebug || (console.exception && console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n  var args = arguments;\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return args;\n\n  var c = 'color: ' + this.color;\n  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n  return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n","\n/**\n * Expose `Emitter`.\n */\n\nmodule.exports = Emitter;\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n  if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks[event] = this._callbacks[event] || [])\n    .push(fn);\n  return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n  var self = this;\n  this._callbacks = this._callbacks || {};\n\n  function on() {\n    self.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks[event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks[event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n  return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n  var args = [].slice.call(arguments, 1)\n    , callbacks = this._callbacks[event];\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks[event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n","'use strict';\n\nfunction aggregateCompetitors (rawCrit) {\n  var crit;\n  var hasParts = false;\n  var isComplete;\n  var isMain;\n  var id = rawCrit.criterium.id;\n  var hasComps = rawCrit.criterium.competitors;\n  var baseUrl = rawCrit.url.split('/')[0];\n  var nrOfComps = (window.competitorUrls || []).length;\n  window.critMap = window.critMap || [];\n  window.nrResolved = window.nrResolved || [];\n\n  if (rawCrit.rendered) {\n    hasParts = (rawCrit.rendered.parts || []).length > 0;\n  }\n\n  if (!window.critMap[id]) {\n    window.critMap[id] = {};\n    window.nrResolved[id] = 0;\n  }\n\n  crit = window.critMap[id];\n  isMain = rawCrit.url === window.currentWebsite;\n\n  if (hasParts || isMain) {\n    crit[baseUrl] = {\n      criterium: id,\n      mustache: rawCrit.rendered,\n      url: rawCrit.url\n    };\n  }\n\n  window.nrResolved[id] += 1;\n  isComplete = !hasComps || window.nrResolved[id] >= nrOfComps + 1;\n\n  if (isComplete) {\n    delete window.critMap[id];\n    return crit;\n  } else {\n    return null;\n  }\n}\n\nmodule.exports = aggregateCompetitors;\n","'use strict';\n\nvar competizeAll = require('../review/competitors/competizeAll');\nvar scrollToElement = require('../helpers/scrollToElement');\n\nfunction renderParts (mustache) {\n  if (Array.isArray(mustache.parts)) {\n    mustache.parts = mustache.parts\n      .map(function (part) {\n        if (!part.data || !part.template) {\n          return part;\n        }\n\n        if (part.templateId === 'tabbed') {\n          part.data.tabs.forEach(function (tab) {\n            tab.parts = Array.isArray(tab.parts) ? tab.parts : [ tab.parts ];\n            renderParts(tab);\n          });\n        }\n\n        return {\n          rawHtml: window.Mustache.render(part.template, part.data)\n        };\n      })\n      .filter(function (part) {\n        return part;\n      });\n  }\n\n  var clist = mustache.competitors && mustache.competitors.clist;\n  if (Array.isArray(clist)) {\n    clist.forEach(renderParts);\n  }\n}\n\nfunction insertInHtml ($element, json, templates) {\n  var mustache = json.mustache;\n  if (!mustache) {\n    return;\n  }\n\n  var objectId = $element.attr('id');\n  var hidden = $element.hasClass('hidden');\n\n  if (mustache.parts && !Array.isArray(mustache.parts)) {\n    console.warn('Expected a parts array in %s', objectId);\n    mustache.parts = null;\n  }\n\n  var isEmpty = !mustache.parts || mustache.parts.length === 0;\n\n  renderParts(mustache);\n\n  var htmlContent = window.Mustache.render(templates.main, mustache);\n  var $htmlContent = $(htmlContent);\n  $element.replaceWith($htmlContent);\n  $element = $htmlContent;\n\n  $element.toggleClass('hidden', hidden || isEmpty);\n\n  competizeAll();\n\n  $('#' + objectId + ' .simple-tooltip').tooltip({\n    delay: {\n      show: 400,\n      hide: 100\n    }\n  });\n\n  if (isEmpty) {\n    return;\n  }\n\n  $element.formatTime();\n  $element.externalLinks();\n  $element.truncate();\n\n  var event = document.createEvent('Event');\n\n  // Define that the event name is 'crit-inserted-to-html'.\n  event.initEvent('crit-inserted-to-html', true, true);\n  window.dispatchEvent(event);\n\n  if (objectId === 'criterium-local_directories') {\n    return $('.goto-local-reviews').on('click', function (event) {\n      event.preventDefault();\n      return scrollToElement($('#criterium-local_online_reviews'));\n    });\n  }\n}\n\nmodule.exports = insertInHtml;\n","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n  // Detect the `define` function exposed by asynchronous module loaders. The\n  // strict `define` check is necessary for compatibility with `r.js`.\n  var isLoader = typeof define === \"function\" && define.amd;\n\n  // A set of types used to distinguish objects from primitives.\n  var objectTypes = {\n    \"function\": true,\n    \"object\": true\n  };\n\n  // Detect the `exports` object exposed by CommonJS implementations.\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  // Use the `global` object exposed by Node (including Browserify via\n  // `insert-module-globals`), Narwhal, and Ringo as the default context,\n  // and the `window` object in browsers. Rhino exports a `global` function\n  // instead.\n  var root = objectTypes[typeof window] && window || this,\n      freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n  if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  // Public: Initializes JSON 3 using the given `context` object, attaching the\n  // `stringify` and `parse` functions to the specified `exports` object.\n  function runInContext(context, exports) {\n    context || (context = root[\"Object\"]());\n    exports || (exports = root[\"Object\"]());\n\n    // Native constructor aliases.\n    var Number = context[\"Number\"] || root[\"Number\"],\n        String = context[\"String\"] || root[\"String\"],\n        Object = context[\"Object\"] || root[\"Object\"],\n        Date = context[\"Date\"] || root[\"Date\"],\n        SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n        TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n        Math = context[\"Math\"] || root[\"Math\"],\n        nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n    // Delegate to the native `stringify` and `parse` implementations.\n    if (typeof nativeJSON == \"object\" && nativeJSON) {\n      exports.stringify = nativeJSON.stringify;\n      exports.parse = nativeJSON.parse;\n    }\n\n    // Convenience aliases.\n    var objectProto = Object.prototype,\n        getClass = objectProto.toString,\n        isProperty, forEach, undef;\n\n    // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n    var isExtended = new Date(-3509827334573292);\n    try {\n      // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n      // results for certain dates in Opera >= 10.53.\n      isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n        // Safari < 2.0.2 stores the internal millisecond time value correctly,\n        // but clips the values returned by the date methods to the range of\n        // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n        isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n    } catch (exception) {}\n\n    // Internal: Determines whether the native `JSON.stringify` and `parse`\n    // implementations are spec-compliant. Based on work by Ken Snyder.\n    function has(name) {\n      if (has[name] !== undef) {\n        // Return cached feature test result.\n        return has[name];\n      }\n      var isSupported;\n      if (name == \"bug-string-char-index\") {\n        // IE <= 7 doesn't support accessing string characters using square\n        // bracket notation. IE 8 only supports this for primitives.\n        isSupported = \"a\"[0] != \"a\";\n      } else if (name == \"json\") {\n        // Indicates whether both `JSON.stringify` and `JSON.parse` are\n        // supported.\n        isSupported = has(\"json-stringify\") && has(\"json-parse\");\n      } else {\n        var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n        // Test `JSON.stringify`.\n        if (name == \"json-stringify\") {\n          var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n          if (stringifySupported) {\n            // A test function object with a custom `toJSON` method.\n            (value = function () {\n              return 1;\n            }).toJSON = value;\n            try {\n              stringifySupported =\n                // Firefox 3.1b1 and b2 serialize string, number, and boolean\n                // primitives as object literals.\n                stringify(0) === \"0\" &&\n                // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n                // literals.\n                stringify(new Number()) === \"0\" &&\n                stringify(new String()) == '\"\"' &&\n                // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n                // does not define a canonical JSON representation (this applies to\n                // objects with `toJSON` properties as well, *unless* they are nested\n                // within an object or array).\n                stringify(getClass) === undef &&\n                // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n                // FF 3.1b3 pass this test.\n                stringify(undef) === undef &&\n                // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n                // respectively, if the value is omitted entirely.\n                stringify() === undef &&\n                // FF 3.1b1, 2 throw an error if the given value is not a number,\n                // string, array, object, Boolean, or `null` literal. This applies to\n                // objects with custom `toJSON` methods as well, unless they are nested\n                // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n                // methods entirely.\n                stringify(value) === \"1\" &&\n                stringify([value]) == \"[1]\" &&\n                // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n                // `\"[null]\"`.\n                stringify([undef]) == \"[null]\" &&\n                // YUI 3.0.0b1 fails to serialize `null` literals.\n                stringify(null) == \"null\" &&\n                // FF 3.1b1, 2 halts serialization if an array contains a function:\n                // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n                // elides non-JSON values from objects and arrays, unless they\n                // define custom `toJSON` methods.\n                stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n                // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n                // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n                stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n                // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n                stringify(null, value) === \"1\" &&\n                stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n                // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n                // serialize extended years.\n                stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n                // The milliseconds are optional in ES 5, but required in 5.1.\n                stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n                // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n                // four-digit years instead of six-digit years. Credits: @Yaffle.\n                stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n                // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n                // values less than 1000. Credits: @Yaffle.\n                stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n            } catch (exception) {\n              stringifySupported = false;\n            }\n          }\n          isSupported = stringifySupported;\n        }\n        // Test `JSON.parse`.\n        if (name == \"json-parse\") {\n          var parse = exports.parse;\n          if (typeof parse == \"function\") {\n            try {\n              // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n              // Conforming implementations should also coerce the initial argument to\n              // a string prior to parsing.\n              if (parse(\"0\") === 0 && !parse(false)) {\n                // Simple parsing test.\n                value = parse(serialized);\n                var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n                if (parseSupported) {\n                  try {\n                    // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n                    parseSupported = !parse('\"\\t\"');\n                  } catch (exception) {}\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n                      // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n                      // certain octal literals.\n                      parseSupported = parse(\"01\") !== 1;\n                    } catch (exception) {}\n                  }\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n                      // points. These environments, along with FF 3.1b1 and 2,\n                      // also allow trailing commas in JSON objects and arrays.\n                      parseSupported = parse(\"1.\") !== 1;\n                    } catch (exception) {}\n                  }\n                }\n              }\n            } catch (exception) {\n              parseSupported = false;\n            }\n          }\n          isSupported = parseSupported;\n        }\n      }\n      return has[name] = !!isSupported;\n    }\n\n    if (!has(\"json\")) {\n      // Common `[[Class]]` name aliases.\n      var functionClass = \"[object Function]\",\n          dateClass = \"[object Date]\",\n          numberClass = \"[object Number]\",\n          stringClass = \"[object String]\",\n          arrayClass = \"[object Array]\",\n          booleanClass = \"[object Boolean]\";\n\n      // Detect incomplete support for accessing string characters by index.\n      var charIndexBuggy = has(\"bug-string-char-index\");\n\n      // Define additional utility methods if the `Date` methods are buggy.\n      if (!isExtended) {\n        var floor = Math.floor;\n        // A mapping between the months of the year and the number of days between\n        // January 1st and the first of the respective month.\n        var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n        // Internal: Calculates the number of days between the Unix epoch and the\n        // first day of the given month.\n        var getDay = function (year, month) {\n          return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n        };\n      }\n\n      // Internal: Determines if a property is a direct property of the given\n      // object. Delegates to the native `Object#hasOwnProperty` method.\n      if (!(isProperty = objectProto.hasOwnProperty)) {\n        isProperty = function (property) {\n          var members = {}, constructor;\n          if ((members.__proto__ = null, members.__proto__ = {\n            // The *proto* property cannot be set multiple times in recent\n            // versions of Firefox and SeaMonkey.\n            \"toString\": 1\n          }, members).toString != getClass) {\n            // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n            // supports the mutable *proto* property.\n            isProperty = function (property) {\n              // Capture and break the object's prototype chain (see section 8.6.2\n              // of the ES 5.1 spec). The parenthesized expression prevents an\n              // unsafe transformation by the Closure Compiler.\n              var original = this.__proto__, result = property in (this.__proto__ = null, this);\n              // Restore the original prototype chain.\n              this.__proto__ = original;\n              return result;\n            };\n          } else {\n            // Capture a reference to the top-level `Object` constructor.\n            constructor = members.constructor;\n            // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n            // other environments.\n            isProperty = function (property) {\n              var parent = (this.constructor || constructor).prototype;\n              return property in this && !(property in parent && this[property] === parent[property]);\n            };\n          }\n          members = null;\n          return isProperty.call(this, property);\n        };\n      }\n\n      // Internal: Normalizes the `for...in` iteration algorithm across\n      // environments. Each enumerated key is yielded to a `callback` function.\n      forEach = function (object, callback) {\n        var size = 0, Properties, members, property;\n\n        // Tests for bugs in the current environment's `for...in` algorithm. The\n        // `valueOf` property inherits the non-enumerable flag from\n        // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n        (Properties = function () {\n          this.valueOf = 0;\n        }).prototype.valueOf = 0;\n\n        // Iterate over a new instance of the `Properties` class.\n        members = new Properties();\n        for (property in members) {\n          // Ignore all properties inherited from `Object.prototype`.\n          if (isProperty.call(members, property)) {\n            size++;\n          }\n        }\n        Properties = members = null;\n\n        // Normalize the iteration algorithm.\n        if (!size) {\n          // A list of non-enumerable properties inherited from `Object.prototype`.\n          members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n          // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n          // properties.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, length;\n            var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n            for (property in object) {\n              // Gecko <= 1.0 enumerates the `prototype` property of functions under\n              // certain conditions; IE does not.\n              if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for each non-enumerable property.\n            for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n          };\n        } else if (size == 2) {\n          // Safari <= 2.0.4 enumerates shadowed properties twice.\n          forEach = function (object, callback) {\n            // Create a set of iterated properties.\n            var members = {}, isFunction = getClass.call(object) == functionClass, property;\n            for (property in object) {\n              // Store each property name to prevent double enumeration. The\n              // `prototype` property of functions is not enumerated due to cross-\n              // environment inconsistencies.\n              if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n          };\n        } else {\n          // No bugs detected; use the standard `for...in` algorithm.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n            for (property in object) {\n              if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for the `constructor` property due to\n            // cross-environment inconsistencies.\n            if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n              callback(property);\n            }\n          };\n        }\n        return forEach(object, callback);\n      };\n\n      // Public: Serializes a JavaScript `value` as a JSON string. The optional\n      // `filter` argument may specify either a function that alters how object and\n      // array members are serialized, or an array of strings and numbers that\n      // indicates which properties should be serialized. The optional `width`\n      // argument may be either a string or number that specifies the indentation\n      // level of the output.\n      if (!has(\"json-stringify\")) {\n        // Internal: A map of control characters and their escaped equivalents.\n        var Escapes = {\n          92: \"\\\\\\\\\",\n          34: '\\\\\"',\n          8: \"\\\\b\",\n          12: \"\\\\f\",\n          10: \"\\\\n\",\n          13: \"\\\\r\",\n          9: \"\\\\t\"\n        };\n\n        // Internal: Converts `value` into a zero-padded string such that its\n        // length is at least equal to `width`. The `width` must be <= 6.\n        var leadingZeroes = \"000000\";\n        var toPaddedString = function (width, value) {\n          // The `|| 0` expression is necessary to work around a bug in\n          // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n          return (leadingZeroes + (value || 0)).slice(-width);\n        };\n\n        // Internal: Double-quotes a string `value`, replacing all ASCII control\n        // characters (characters with code unit values between 0 and 31) with\n        // their escaped equivalents. This is an implementation of the\n        // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n        var unicodePrefix = \"\\\\u00\";\n        var quote = function (value) {\n          var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n          var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n          for (; index < length; index++) {\n            var charCode = value.charCodeAt(index);\n            // If the character is a control character, append its Unicode or\n            // shorthand escape sequence; otherwise, append the character as-is.\n            switch (charCode) {\n              case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n                result += Escapes[charCode];\n                break;\n              default:\n                if (charCode < 32) {\n                  result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n                  break;\n                }\n                result += useCharIndex ? symbols[index] : value.charAt(index);\n            }\n          }\n          return result + '\"';\n        };\n\n        // Internal: Recursively serializes an object. Implements the\n        // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n        var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n          var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n          try {\n            // Necessary for host object support.\n            value = object[property];\n          } catch (exception) {}\n          if (typeof value == \"object\" && value) {\n            className = getClass.call(value);\n            if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n              if (value > -1 / 0 && value < 1 / 0) {\n                // Dates are serialized according to the `Date#toJSON` method\n                // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n                // for the ISO 8601 date time string format.\n                if (getDay) {\n                  // Manually compute the year, month, date, hours, minutes,\n                  // seconds, and milliseconds if the `getUTC*` methods are\n                  // buggy. Adapted from @Yaffle's `date-shim` project.\n                  date = floor(value / 864e5);\n                  for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n                  for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n                  date = 1 + date - getDay(year, month);\n                  // The `time` value specifies the time within the day (see ES\n                  // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n                  // to compute `A modulo B`, as the `%` operator does not\n                  // correspond to the `modulo` operation for negative numbers.\n                  time = (value % 864e5 + 864e5) % 864e5;\n                  // The hours, minutes, seconds, and milliseconds are obtained by\n                  // decomposing the time within the day. See section 15.9.1.10.\n                  hours = floor(time / 36e5) % 24;\n                  minutes = floor(time / 6e4) % 60;\n                  seconds = floor(time / 1e3) % 60;\n                  milliseconds = time % 1e3;\n                } else {\n                  year = value.getUTCFullYear();\n                  month = value.getUTCMonth();\n                  date = value.getUTCDate();\n                  hours = value.getUTCHours();\n                  minutes = value.getUTCMinutes();\n                  seconds = value.getUTCSeconds();\n                  milliseconds = value.getUTCMilliseconds();\n                }\n                // Serialize extended years correctly.\n                value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n                  \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n                  // Months, dates, hours, minutes, and seconds should have two\n                  // digits; milliseconds should have three.\n                  \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n                  // Milliseconds are optional in ES 5.0, but required in 5.1.\n                  \".\" + toPaddedString(3, milliseconds) + \"Z\";\n              } else {\n                value = null;\n              }\n            } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n              // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n              // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n              // ignores all `toJSON` methods on these objects unless they are\n              // defined directly on an instance.\n              value = value.toJSON(property);\n            }\n          }\n          if (callback) {\n            // If a replacement function was provided, call it to obtain the value\n            // for serialization.\n            value = callback.call(object, property, value);\n          }\n          if (value === null) {\n            return \"null\";\n          }\n          className = getClass.call(value);\n          if (className == booleanClass) {\n            // Booleans are represented literally.\n            return \"\" + value;\n          } else if (className == numberClass) {\n            // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n            // `\"null\"`.\n            return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n          } else if (className == stringClass) {\n            // Strings are double-quoted and escaped.\n            return quote(\"\" + value);\n          }\n          // Recursively serialize objects and arrays.\n          if (typeof value == \"object\") {\n            // Check for cyclic structures. This is a linear search; performance\n            // is inversely proportional to the number of unique nested objects.\n            for (length = stack.length; length--;) {\n              if (stack[length] === value) {\n                // Cyclic structures cannot be serialized by `JSON.stringify`.\n                throw TypeError();\n              }\n            }\n            // Add the object to the stack of traversed objects.\n            stack.push(value);\n            results = [];\n            // Save the current indentation level and indent one additional level.\n            prefix = indentation;\n            indentation += whitespace;\n            if (className == arrayClass) {\n              // Recursively serialize array elements.\n              for (index = 0, length = value.length; index < length; index++) {\n                element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n                results.push(element === undef ? \"null\" : element);\n              }\n              result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n            } else {\n              // Recursively serialize object members. Members are selected from\n              // either a user-specified list of property names, or the object\n              // itself.\n              forEach(properties || value, function (property) {\n                var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n                if (element !== undef) {\n                  // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n                  // is not the empty string, let `member` {quote(property) + \":\"}\n                  // be the concatenation of `member` and the `space` character.\"\n                  // The \"`space` character\" refers to the literal space\n                  // character, not the `space` {width} argument provided to\n                  // `JSON.stringify`.\n                  results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n                }\n              });\n              result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n            }\n            // Remove the object from the traversed object stack.\n            stack.pop();\n            return result;\n          }\n        };\n\n        // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n        exports.stringify = function (source, filter, width) {\n          var whitespace, callback, properties, className;\n          if (objectTypes[typeof filter] && filter) {\n            if ((className = getClass.call(filter)) == functionClass) {\n              callback = filter;\n            } else if (className == arrayClass) {\n              // Convert the property names array into a makeshift set.\n              properties = {};\n              for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n            }\n          }\n          if (width) {\n            if ((className = getClass.call(width)) == numberClass) {\n              // Convert the `width` to an integer and create a string containing\n              // `width` number of space characters.\n              if ((width -= width % 1) > 0) {\n                for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n              }\n            } else if (className == stringClass) {\n              whitespace = width.length <= 10 ? width : width.slice(0, 10);\n            }\n          }\n          // Opera <= 7.54u2 discards the values associated with empty string keys\n          // (`\"\"`) only if they are used directly within an object member list\n          // (e.g., `!(\"\" in { \"\": 1})`).\n          return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n        };\n      }\n\n      // Public: Parses a JSON source string.\n      if (!has(\"json-parse\")) {\n        var fromCharCode = String.fromCharCode;\n\n        // Internal: A map of escaped control characters and their unescaped\n        // equivalents.\n        var Unescapes = {\n          92: \"\\\\\",\n          34: '\"',\n          47: \"/\",\n          98: \"\\b\",\n          116: \"\\t\",\n          110: \"\\n\",\n          102: \"\\f\",\n          114: \"\\r\"\n        };\n\n        // Internal: Stores the parser state.\n        var Index, Source;\n\n        // Internal: Resets the parser state and throws a `SyntaxError`.\n        var abort = function () {\n          Index = Source = null;\n          throw SyntaxError();\n        };\n\n        // Internal: Returns the next token, or `\"$\"` if the parser has reached\n        // the end of the source string. A token may be a string, number, `null`\n        // literal, or Boolean literal.\n        var lex = function () {\n          var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n          while (Index < length) {\n            charCode = source.charCodeAt(Index);\n            switch (charCode) {\n              case 9: case 10: case 13: case 32:\n                // Skip whitespace tokens, including tabs, carriage returns, line\n                // feeds, and space characters.\n                Index++;\n                break;\n              case 123: case 125: case 91: case 93: case 58: case 44:\n                // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n                // the current position.\n                value = charIndexBuggy ? source.charAt(Index) : source[Index];\n                Index++;\n                return value;\n              case 34:\n                // `\"` delimits a JSON string; advance to the next character and\n                // begin parsing the string. String tokens are prefixed with the\n                // sentinel `@` character to distinguish them from punctuators and\n                // end-of-string tokens.\n                for (value = \"@\", Index++; Index < length;) {\n                  charCode = source.charCodeAt(Index);\n                  if (charCode < 32) {\n                    // Unescaped ASCII control characters (those with a code unit\n                    // less than the space character) are not permitted.\n                    abort();\n                  } else if (charCode == 92) {\n                    // A reverse solidus (`\\`) marks the beginning of an escaped\n                    // control character (including `\"`, `\\`, and `/`) or Unicode\n                    // escape sequence.\n                    charCode = source.charCodeAt(++Index);\n                    switch (charCode) {\n                      case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n                        // Revive escaped control characters.\n                        value += Unescapes[charCode];\n                        Index++;\n                        break;\n                      case 117:\n                        // `\\u` marks the beginning of a Unicode escape sequence.\n                        // Advance to the first character and validate the\n                        // four-digit code point.\n                        begin = ++Index;\n                        for (position = Index + 4; Index < position; Index++) {\n                          charCode = source.charCodeAt(Index);\n                          // A valid sequence comprises four hexdigits (case-\n                          // insensitive) that form a single hexadecimal value.\n                          if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n                            // Invalid Unicode escape sequence.\n                            abort();\n                          }\n                        }\n                        // Revive the escaped character.\n                        value += fromCharCode(\"0x\" + source.slice(begin, Index));\n                        break;\n                      default:\n                        // Invalid escape sequence.\n                        abort();\n                    }\n                  } else {\n                    if (charCode == 34) {\n                      // An unescaped double-quote character marks the end of the\n                      // string.\n                      break;\n                    }\n                    charCode = source.charCodeAt(Index);\n                    begin = Index;\n                    // Optimize for the common case where a string is valid.\n                    while (charCode >= 32 && charCode != 92 && charCode != 34) {\n                      charCode = source.charCodeAt(++Index);\n                    }\n                    // Append the string as-is.\n                    value += source.slice(begin, Index);\n                  }\n                }\n                if (source.charCodeAt(Index) == 34) {\n                  // Advance to the next character and return the revived string.\n                  Index++;\n                  return value;\n                }\n                // Unterminated string.\n                abort();\n              default:\n                // Parse numbers and literals.\n                begin = Index;\n                // Advance past the negative sign, if one is specified.\n                if (charCode == 45) {\n                  isSigned = true;\n                  charCode = source.charCodeAt(++Index);\n                }\n                // Parse an integer or floating-point value.\n                if (charCode >= 48 && charCode <= 57) {\n                  // Leading zeroes are interpreted as octal literals.\n                  if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n                    // Illegal octal literal.\n                    abort();\n                  }\n                  isSigned = false;\n                  // Parse the integer component.\n                  for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n                  // Floats cannot contain a leading decimal point; however, this\n                  // case is already accounted for by the parser.\n                  if (source.charCodeAt(Index) == 46) {\n                    position = ++Index;\n                    // Parse the decimal component.\n                    for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal trailing decimal.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Parse exponents. The `e` denoting the exponent is\n                  // case-insensitive.\n                  charCode = source.charCodeAt(Index);\n                  if (charCode == 101 || charCode == 69) {\n                    charCode = source.charCodeAt(++Index);\n                    // Skip past the sign following the exponent, if one is\n                    // specified.\n                    if (charCode == 43 || charCode == 45) {\n                      Index++;\n                    }\n                    // Parse the exponential component.\n                    for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal empty exponent.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Coerce the parsed value to a JavaScript number.\n                  return +source.slice(begin, Index);\n                }\n                // A negative sign may only precede numbers.\n                if (isSigned) {\n                  abort();\n                }\n                // `true`, `false`, and `null` literals.\n                if (source.slice(Index, Index + 4) == \"true\") {\n                  Index += 4;\n                  return true;\n                } else if (source.slice(Index, Index + 5) == \"false\") {\n                  Index += 5;\n                  return false;\n                } else if (source.slice(Index, Index + 4) == \"null\") {\n                  Index += 4;\n                  return null;\n                }\n                // Unrecognized token.\n                abort();\n            }\n          }\n          // Return the sentinel `$` character if the parser has reached the end\n          // of the source string.\n          return \"$\";\n        };\n\n        // Internal: Parses a JSON `value` token.\n        var get = function (value) {\n          var results, hasMembers;\n          if (value == \"$\") {\n            // Unexpected end of input.\n            abort();\n          }\n          if (typeof value == \"string\") {\n            if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n              // Remove the sentinel `@` character.\n              return value.slice(1);\n            }\n            // Parse object and array literals.\n            if (value == \"[\") {\n              // Parses a JSON array, returning a new JavaScript array.\n              results = [];\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing square bracket marks the end of the array literal.\n                if (value == \"]\") {\n                  break;\n                }\n                // If the array literal contains elements, the current token\n                // should be a comma separating the previous element from the\n                // next.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"]\") {\n                      // Unexpected trailing `,` in array literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each array element.\n                    abort();\n                  }\n                }\n                // Elisions and leading commas are not permitted.\n                if (value == \",\") {\n                  abort();\n                }\n                results.push(get(value));\n              }\n              return results;\n            } else if (value == \"{\") {\n              // Parses a JSON object, returning a new JavaScript object.\n              results = {};\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing curly brace marks the end of the object literal.\n                if (value == \"}\") {\n                  break;\n                }\n                // If the object literal contains members, the current token\n                // should be a comma separator.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"}\") {\n                      // Unexpected trailing `,` in object literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each object member.\n                    abort();\n                  }\n                }\n                // Leading commas are not permitted, object property names must be\n                // double-quoted strings, and a `:` must separate each property\n                // name and value.\n                if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n                  abort();\n                }\n                results[value.slice(1)] = get(lex());\n              }\n              return results;\n            }\n            // Unexpected token encountered.\n            abort();\n          }\n          return value;\n        };\n\n        // Internal: Updates a traversed object member.\n        var update = function (source, property, callback) {\n          var element = walk(source, property, callback);\n          if (element === undef) {\n            delete source[property];\n          } else {\n            source[property] = element;\n          }\n        };\n\n        // Internal: Recursively traverses a parsed JSON object, invoking the\n        // `callback` function for each value. This is an implementation of the\n        // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n        var walk = function (source, property, callback) {\n          var value = source[property], length;\n          if (typeof value == \"object\" && value) {\n            // `forEach` can't be used to traverse an array in Opera <= 8.54\n            // because its `Object#hasOwnProperty` implementation returns `false`\n            // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n            if (getClass.call(value) == arrayClass) {\n              for (length = value.length; length--;) {\n                update(value, length, callback);\n              }\n            } else {\n              forEach(value, function (property) {\n                update(value, property, callback);\n              });\n            }\n          }\n          return callback.call(source, property, value);\n        };\n\n        // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n        exports.parse = function (source, callback) {\n          var result, value;\n          Index = 0;\n          Source = \"\" + source;\n          result = get(lex());\n          // If a JSON string contains multiple tokens, it is invalid.\n          if (lex() != \"$\") {\n            abort();\n          }\n          // Reset the parser state.\n          Index = Source = null;\n          return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n        };\n      }\n    }\n\n    exports[\"runInContext\"] = runInContext;\n    return exports;\n  }\n\n  if (freeExports && !isLoader) {\n    // Export for CommonJS environments.\n    runInContext(root, freeExports);\n  } else {\n    // Export for web browsers and JavaScript engines.\n    var nativeJSON = root.JSON,\n        previousJSON = root[\"JSON3\"],\n        isRestored = false;\n\n    var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n      // Public: Restores the original value of the global `JSON` object and\n      // returns a reference to the `JSON3` object.\n      \"noConflict\": function () {\n        if (!isRestored) {\n          isRestored = true;\n          root.JSON = nativeJSON;\n          root[\"JSON3\"] = previousJSON;\n          nativeJSON = previousJSON = null;\n        }\n        return JSON3;\n      }\n    }));\n\n    root.JSON = {\n      \"parse\": JSON3.parse,\n      \"stringify\": JSON3.stringify\n    };\n  }\n\n  // Export for asynchronous module loaders.\n  if (isLoader) {\n    define(function () {\n      return JSON3;\n    });\n  }\n}).call(this);\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n  return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n  // define the `disabled` version\n  function disabled() {\n  }\n  disabled.enabled = false;\n\n  // define the `enabled` version\n  function enabled() {\n\n    var self = enabled;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // add the `color` if not set\n    if (null == self.useColors) self.useColors = exports.useColors();\n    if (null == self.color && self.useColors) self.color = selectColor();\n\n    var args = Array.prototype.slice.call(arguments);\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %o\n      args = ['%o'].concat(args);\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    if ('function' === typeof exports.formatArgs) {\n      args = exports.formatArgs.apply(self, args);\n    }\n    var logFn = enabled.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  enabled.enabled = true;\n\n  var fn = exports.enabled(namespace) ? enabled : disabled;\n\n  fn.namespace = namespace;\n\n  return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  var split = (namespaces || '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n","module.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","/**\n * Helpers.\n */\n\nvar s = 1000\nvar m = s * 60\nvar h = m * 60\nvar d = h * 24\nvar y = d * 365.25\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {}\n  var type = typeof val\n  if (type === 'string' && val.length > 0) {\n    return parse(val)\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ?\n\t\t\tfmtLong(val) :\n\t\t\tfmtShort(val)\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val))\n}\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str)\n  if (str.length > 10000) {\n    return\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str)\n  if (!match) {\n    return\n  }\n  var n = parseFloat(match[1])\n  var type = (match[2] || 'ms').toLowerCase()\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n\n    default:\n      return undefined\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd'\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h'\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm'\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's'\n  }\n  return ms + 'ms'\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms'\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's'\n}\n","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parsejson = require('parsejson');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (global.location && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (global.location ? location.hostname : 'localhost');\n  this.port = opts.port || (global.location && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? null : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // other options for Node.js client\n  var freeGlobal = typeof global === 'object' && global;\n  if (freeGlobal.global === freeGlobal) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n  debug('creating transport \"%s\"', name);\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    agent: this.agent,\n    hostname: this.hostname,\n    port: this.port,\n    secure: this.secure,\n    path: this.path,\n    query: query,\n    forceJSONP: this.forceJSONP,\n    jsonp: this.jsonp,\n    forceBase64: this.forceBase64,\n    enablesXDR: this.enablesXDR,\n    timestampRequests: this.timestampRequests,\n    timestampParam: this.timestampParam,\n    policyPort: this.policyPort,\n    socket: this,\n    pfx: this.pfx,\n    key: this.key,\n    passphrase: this.passphrase,\n    cert: this.cert,\n    ca: this.ca,\n    ciphers: this.ciphers,\n    rejectUnauthorized: this.rejectUnauthorized,\n    perMessageDeflate: this.perMessageDeflate,\n    extraHeaders: this.extraHeaders,\n    forceNode: this.forceNode,\n    localAddress: this.localAddress\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n  debug('setting transport %s', transport.name);\n  var self = this;\n\n  if (this.transport) {\n    debug('clearing existing transport %s', this.transport.name);\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n  debug('probing transport \"%s\"', name);\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n    debug('probe transport \"%s\" opened', name);\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n        debug('probe transport \"%s\" pong', name);\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n        debug('pausing current transport \"%s\"', self.transport.name);\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n          debug('changing transport and sending upgrade packet');\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n        debug('probe transport \"%s\" failed', name);\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n  debug('socket open');\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n    debug('starting upgrade probes');\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(parsejson(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n    debug('packet received with socket readyState \"%s\"', this.readyState);\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n    debug('flushing %d packets in socket', this.writeBuffer.length);\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n    debug('socket closing - telling transport to close');\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n  debug('socket error %j', err);\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n    debug('socket close with reason: \"%s\"', reason);\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (global.location) {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options){\n  options = options || {};\n  if ('string' == typeof val) return parse(val);\n  return options.long\n    ? long(val)\n    : short(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = '' + str;\n  if (str.length > 10000) return;\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) return;\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction short(ms) {\n  if (ms >= d) return Math.round(ms / d) + 'd';\n  if (ms >= h) return Math.round(ms / h) + 'h';\n  if (ms >= m) return Math.round(ms / m) + 'm';\n  if (ms >= s) return Math.round(ms / s) + 's';\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction long(ms) {\n  return plural(ms, d, 'day')\n    || plural(ms, h, 'hour')\n    || plural(ms, m, 'minute')\n    || plural(ms, s, 'second')\n    || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) return;\n  if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('wtf-8');\n\nvar base64encoder;\nif (global && global.ArrayBuffer) {\n  base64encoder = require('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = require('blob');\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if ('function' == typeof supportsBinary) {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if ('function' == typeof utf8encode) {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (global.ArrayBuffer && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (Blob && data instanceof global.Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    packet.data = fr.result;\n    exports.encodePacket(packet, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (Blob && packet.data instanceof global.Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += global.btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data == 'string') {\n    if (data.charAt(0) == 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data);\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary == 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, true, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data != 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data == '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = ''\n    , n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (':' != chr) {\n      length += chr;\n    } else {\n      if ('' == length || (length != (n = Number(length)))) {\n        // parser error - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      msg = data.substr(i + 1, n);\n\n      if (length != msg.length) {\n        // parser error - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      if (msg.length) {\n        packet = exports.decodePacket(msg, binaryType, true);\n\n        if (err.type == packet.type && err.data == packet.data) {\n          // parser error in individual packet - ignoring payload\n          return callback(err, 0, 1);\n        }\n\n        var ret = callback(packet, i + n, l);\n        if (false === ret) return;\n      }\n\n      // advance cursor\n      i += n;\n      length = '';\n    }\n  }\n\n  if (length != '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  var numberTooLong = false;\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] == 255) break;\n\n      if (msgLength.length > 310) {\n        numberTooLong = true;\n        break;\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    if(numberTooLong) return callback(err, 0, 1);\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new global[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n","/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n\n  if (global.location) {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = opts.hostname !== global.location.hostname ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  } else {\n    this.extraHeaders = opts.extraHeaders;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n  debug('xhr poll');\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n    debug('xhr open %s: %s', this.method, this.uri);\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n    if (this.supportsBinary) {\n      // This has to be done after open because Firefox is stupid\n      // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension\n      xhr.responseType = 'arraybuffer';\n    }\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = true;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(xhr.status);\n          }, 0);\n        }\n      };\n    }\n\n    debug('xhr data %s', this.data);\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (global.document) {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (global.document) {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type').split(';')[0];\n    } catch (e) {}\n    if (contentType === 'application/octet-stream') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      if (!this.supportsBinary) {\n        data = this.xhr.responseText;\n      } else {\n        try {\n          data = String.fromCharCode.apply(null, new Uint8Array(this.xhr.response));\n        } catch (e) {\n          var ui8Arr = new Uint8Array(this.xhr.response);\n          var dataArray = [];\n          for (var idx = 0, length = ui8Arr.length; idx < length; idx++) {\n            dataArray.push(ui8Arr[idx]);\n          }\n\n          data = String.fromCharCode.apply(null, dataArray);\n        }\n      }\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (global.document) {\n  if (global.attachEvent) {\n    global.attachEvent('onunload', unloadHandler);\n  } else if (global.addEventListener) {\n    global.addEventListener('beforeunload', unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n","\n/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    if (!global.___eio) global.___eio = [];\n    callbacks = global.___eio;\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (global.document && global.addEventListener) {\n    global.addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\nvar BrowserWebSocket = global.WebSocket || global.MozWebSocket;\nvar NodeWebSocket;\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocket = BrowserWebSocket;\nif (!WebSocket && typeof window === 'undefined') {\n  WebSocket = NodeWebSocket;\n}\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  if (!this.usingBrowserWebSocket) {\n    WebSocket = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = void (0);\n  var opts = {\n    agent: this.agent,\n    perMessageDeflate: this.perMessageDeflate\n  };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws = this.usingBrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? global.Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n          debug('websocket closed before onclose event');\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);\n};\n","'use strict';\n\nvar updateProgressBar = require('./updateProgressBar');\nvar updateFilterBadges = require('./updateFilterBadges');\nvar updateFilterStatus = require('./updateFilterStatus');\nvar toggleTasks = require('./toggleTasks');\n\nfunction taskDone (taskElement, category, checked) {\n  var $marketingChecklist = $('.marketing-checklist');\n  var $bar = $marketingChecklist.find('.progress-bar');\n  var stats = {};\n  var counterModifier = checked ? 1 : -1;\n  var cssClass = checked ? 'checked' : '';\n\n  stats.autochecked = parseInt($bar.attr('data-autochecked'), 10);\n  stats.checked = parseInt($bar.attr('data-checked'), 10) + counterModifier;\n  stats.all = parseInt($bar.attr('data-all'), 10);\n  stats.percent = ((stats.autochecked + stats.checked) / stats.all) * 100;\n\n  updateProgressBar($('#dashboard-tasks-bars'), stats);\n  updateProgressBar($marketingChecklist.find('.progress-container'), stats);\n  updateFilterBadges($marketingChecklist, category, checked);\n  updateFilterStatus($marketingChecklist);\n\n  if (taskElement != null) {\n    taskElement.attr('class', 'task-container ' + cssClass).removeAttr('style');\n  }\n\n  return toggleTasks($marketingChecklist);\n}\n\nmodule.exports = taskDone;\n","'use strict';\n\nvar toggleTasks = require('./toggleTasks');\n\nfunction filterTaskByCategory ($marketingChecklist, category) {\n  var $tasksList = $marketingChecklist.find('.marketing-checklist-list');\n  var $tasks = $tasksList.find('.task-container');\n  var showDone = category === 'done';\n\n  $tasksList.removeClass('show-done show-todo');\n\n  if (showDone) {\n    $tasksList.addClass('show-done');\n  } else {\n    $tasksList.addClass('show-todo');\n  }\n\n  $tasks.removeClass('filtered-out');\n\n  if (category !== 'all' && category !== 'done') {\n    $tasks.each(function (index) {\n      if ($(this).attr('data-category') !== category) {\n        return $(this).addClass('filtered-out');\n      }\n    });\n  }\n\n  return toggleTasks($marketingChecklist);\n}\n\nmodule.exports = filterTaskByCategory;\n","/**\r\n * JSON parse.\r\n *\r\n * @see Based on jQuery#parseJSON (MIT) and JSON2\r\n * @api private\r\n */\r\n\r\nvar rvalidchars = /^[\\],:{}\\s]*$/;\r\nvar rvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\r\nvar rvalidtokens = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\r\nvar rvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g;\r\nvar rtrimLeft = /^\\s+/;\r\nvar rtrimRight = /\\s+$/;\r\n\r\nmodule.exports = function parsejson(data) {\r\n  if ('string' != typeof data || !data) {\r\n    return null;\r\n  }\r\n\r\n  data = data.replace(rtrimLeft, '').replace(rtrimRight, '');\r\n\r\n  // Attempt to parse using the native JSON parser first\r\n  if (global.JSON && JSON.parse) {\r\n    return JSON.parse(data);\r\n  }\r\n\r\n  if (rvalidchars.test(data.replace(rvalidescape, '@')\r\n      .replace(rvalidtokens, ']')\r\n      .replace(rvalidbraces, ''))) {\r\n    return (new Function('return ' + data))();\r\n  }\r\n};","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n","\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = require('xmlhttprequest-ssl');\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n    debug('paused');\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n      debug('we are currently polling - waiting to pause');\n      total++;\n      this.once('pollComplete', function () {\n        debug('pre-pause polling complete');\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n      debug('we are currently writing - waiting to pause');\n      total++;\n      this.once('drain', function () {\n        debug('pre-pause writing complete');\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n  debug('polling');\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n  debug('polling got data %s', data);\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState) {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n      debug('ignoring poll - transport state \"%s\"', this.readyState);\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n    debug('writing close packet');\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n    debug('transport open - closing');\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n    debug('transport not open - deferring close');\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n","/*! https://mths.be/wtf8 v1.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar 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// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\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}\n\t\treturn output;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction wtf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte.\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read the first byte.\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid WTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction wtf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar wtf8 = {\n\t\t'version': '1.0.0',\n\t\t'encode': wtf8encode,\n\t\t'decode': wtf8decode\n\t};\n\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(function() {\n\t\t\treturn wtf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = wtf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in wtf8) {\n\t\t\t\thasOwnProperty.call(wtf8, key) && (freeExports[key] = wtf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.wtf8 = wtf8;\n\t}\n\n}(this));\n","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n","module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n","/**\n * Create a blob builder even when vendor prefixes exist\n */\n\nvar BlobBuilder = global.BlobBuilder\n  || global.WebKitBlobBuilder\n  || global.MSBlobBuilder\n  || global.MozBlobBuilder;\n\n/**\n * Check if Blob constructor is supported\n */\n\nvar blobSupported = (function() {\n  try {\n    var a = new Blob(['hi']);\n    return a.size === 2;\n  } catch(e) {\n    return false;\n  }\n})();\n\n/**\n * Check if Blob constructor supports ArrayBufferViews\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\n */\n\nvar blobSupportsArrayBufferView = blobSupported && (function() {\n  try {\n    var b = new Blob([new Uint8Array([1,2])]);\n    return b.size === 2;\n  } catch(e) {\n    return false;\n  }\n})();\n\n/**\n * Check if BlobBuilder is supported\n */\n\nvar blobBuilderSupported = BlobBuilder\n  && BlobBuilder.prototype.append\n  && BlobBuilder.prototype.getBlob;\n\n/**\n * Helper function that maps ArrayBufferViews to ArrayBuffers\n * Used by BlobBuilder constructor and old browsers that didn't\n * support it in the Blob constructor.\n */\n\nfunction mapArrayBufferViews(ary) {\n  for (var i = 0; i < ary.length; i++) {\n    var chunk = ary[i];\n    if (chunk.buffer instanceof ArrayBuffer) {\n      var buf = chunk.buffer;\n\n      // if this is a subarray, make a copy so we only\n      // include the subarray region from the underlying buffer\n      if (chunk.byteLength !== buf.byteLength) {\n        var copy = new Uint8Array(chunk.byteLength);\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\n        buf = copy.buffer;\n      }\n\n      ary[i] = buf;\n    }\n  }\n}\n\nfunction BlobBuilderConstructor(ary, options) {\n  options = options || {};\n\n  var bb = new BlobBuilder();\n  mapArrayBufferViews(ary);\n\n  for (var i = 0; i < ary.length; i++) {\n    bb.append(ary[i]);\n  }\n\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\n};\n\nfunction BlobConstructor(ary, options) {\n  mapArrayBufferViews(ary);\n  return new Blob(ary, options || {});\n};\n\nmodule.exports = (function() {\n  if (blobSupported) {\n    return blobSupportsArrayBufferView ? global.Blob : BlobConstructor;\n  } else if (blobBuilderSupported) {\n    return BlobBuilderConstructor;\n  } else {\n    return undefined;\n  }\n})();\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n  \"use strict\";\n\n  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n  // Use a lookup table to find the index.\n  var lookup = new Uint8Array(256);\n  for (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n  }\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = lookup[base64.charCodeAt(i)];\n      encoded2 = lookup[base64.charCodeAt(i+1)];\n      encoded3 = lookup[base64.charCodeAt(i+2)];\n      encoded4 = lookup[base64.charCodeAt(i+3)];\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})();\n","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n","\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};","'use strict';\n\nfunction updateFilterStatus ($marketingChecklist) {\n  var $filter = $marketingChecklist.find('#marketing-checklist-filter');\n\n  $filter.find('.dropdown-menu li').each(function () {\n    var count = parseInt($('.badge', this).text(), 10);\n    $(this).toggleClass('disabled', count === 0);\n  });\n}\n\nmodule.exports = updateFilterStatus;\n","'use strict';\n\nfunction updateFilterBadges ($marketingChecklist, category, checked) {\n  var counterModifier = checked ? -1 : 1;\n  var $filter = $marketingChecklist.find('#marketing-checklist-filter');\n  var $filterItem = $filter.find('[data-tasks-category=' + category + ']');\n  var filterItemCount = parseInt($filterItem.find('.badge').text(), 10);\n  var filterTotal = parseInt(\n    $filter.find('[data-tasks-category=all] .badge').text(), 10\n  );\n  var filterDone = parseInt(\n    $filter.find('[data-tasks-category=done] .badge').text(), 10\n  );\n\n  $filterItem.find('.badge').text(filterItemCount + counterModifier);\n  $filter.find('[data-tasks-category=all] .badge')\n    .text(filterTotal + counterModifier);\n  $filter.find('[data-tasks-category=done] .badge')\n    .text(filterDone - counterModifier);\n}\n\nmodule.exports = updateFilterBadges;\n"]}