{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/underscore/modules/_setup.js","webpack:///external \"window.jQuery\"","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack:///./public/js/game-list/views/mixins/handleLinkClicked.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack:///./public/js/widgets/ping.js","webpack:///./public/js/widgets/detector.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./public/js/game-list/index.entry.js","webpack:///./public/js/game-list/models/ListModel.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./public/js/game-list/views/MainContainer.js","webpack:///./public/js/game-list/views/QrCodeContainer.js","webpack:///./public/js/game-list/views/FilterNav/index.js","webpack:///./public/js/game-list/views/NavManager/index.js","webpack:///./public/js/game-list/views/NavManager/mixins/newgameHelpers.js","webpack:///./public/js/game-list/views/NavManager/mixins/shouyouHelpers.js","webpack:///./public/js/game-list/views/NavManager/mixins/vrHelpers.js","webpack:///./public/js/game-list/views/FilterNav/tmpl.handlebars","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack:///./node_modules/@173/173js/lib/ui/preventEmptyHrefClick.js","webpack:///./node_modules/handlebars/runtime.js","webpack:///(webpack)/buildin/global.js","webpack:///./public/js/widgets/applyQrCode.js","webpack:///./public/js/vendor/qrcode.js","webpack:///./node_modules/underscore/modules/restArguments.js","webpack:///./node_modules/underscore/modules/isObject.js","webpack:///./node_modules/underscore/modules/isNull.js","webpack:///./node_modules/underscore/modules/isUndefined.js","webpack:///./node_modules/underscore/modules/isBoolean.js","webpack:///./node_modules/underscore/modules/isElement.js","webpack:///./node_modules/underscore/modules/_tagTester.js","webpack:///./node_modules/underscore/modules/isString.js","webpack:///./node_modules/underscore/modules/isNumber.js","webpack:///./node_modules/underscore/modules/isDate.js","webpack:///./node_modules/underscore/modules/isRegExp.js","webpack:///./node_modules/underscore/modules/isError.js","webpack:///./node_modules/underscore/modules/isSymbol.js","webpack:///./node_modules/underscore/modules/isArrayBuffer.js","webpack:///./node_modules/underscore/modules/isFunction.js","webpack:///./node_modules/underscore/modules/_hasObjectTag.js","webpack:///./node_modules/underscore/modules/_stringTagBug.js","webpack:///./node_modules/underscore/modules/isDataView.js","webpack:///./node_modules/underscore/modules/isArray.js","webpack:///./node_modules/underscore/modules/_has.js","webpack:///./node_modules/underscore/modules/isArguments.js","webpack:///./node_modules/underscore/modules/isFinite.js","webpack:///./node_modules/underscore/modules/isNaN.js","webpack:///./node_modules/underscore/modules/constant.js","webpack:///./node_modules/underscore/modules/_createSizePropertyCheck.js","webpack:///./node_modules/underscore/modules/_shallowProperty.js","webpack:///./node_modules/underscore/modules/_getByteLength.js","webpack:///./node_modules/underscore/modules/_isBufferLike.js","webpack:///./node_modules/underscore/modules/isTypedArray.js","webpack:///./node_modules/underscore/modules/_getLength.js","webpack:///./node_modules/underscore/modules/_collectNonEnumProps.js","webpack:///./node_modules/underscore/modules/keys.js","webpack:///./node_modules/underscore/modules/isEmpty.js","webpack:///./node_modules/underscore/modules/isMatch.js","webpack:///./node_modules/underscore/modules/underscore.js","webpack:///./node_modules/underscore/modules/_toBufferView.js","webpack:///./node_modules/underscore/modules/isEqual.js","webpack:///./node_modules/underscore/modules/allKeys.js","webpack:///./node_modules/underscore/modules/_methodFingerprint.js","webpack:///./node_modules/underscore/modules/isMap.js","webpack:///./node_modules/underscore/modules/isWeakMap.js","webpack:///./node_modules/underscore/modules/isSet.js","webpack:///./node_modules/underscore/modules/isWeakSet.js","webpack:///./node_modules/underscore/modules/values.js","webpack:///./node_modules/underscore/modules/pairs.js","webpack:///./node_modules/underscore/modules/invert.js","webpack:///./node_modules/underscore/modules/functions.js","webpack:///./node_modules/underscore/modules/_createAssigner.js","webpack:///./node_modules/underscore/modules/extend.js","webpack:///./node_modules/underscore/modules/extendOwn.js","webpack:///./node_modules/underscore/modules/defaults.js","webpack:///./node_modules/underscore/modules/_baseCreate.js","webpack:///./node_modules/underscore/modules/create.js","webpack:///./node_modules/underscore/modules/clone.js","webpack:///./node_modules/underscore/modules/tap.js","webpack:///./node_modules/underscore/modules/toPath.js","webpack:///./node_modules/underscore/modules/_toPath.js","webpack:///./node_modules/underscore/modules/_deepGet.js","webpack:///./node_modules/underscore/modules/get.js","webpack:///./node_modules/underscore/modules/has.js","webpack:///./node_modules/underscore/modules/identity.js","webpack:///./node_modules/underscore/modules/matcher.js","webpack:///./node_modules/underscore/modules/property.js","webpack:///./node_modules/underscore/modules/_optimizeCb.js","webpack:///./node_modules/underscore/modules/_baseIteratee.js","webpack:///./node_modules/underscore/modules/iteratee.js","webpack:///./node_modules/underscore/modules/_cb.js","webpack:///./node_modules/underscore/modules/mapObject.js","webpack:///./node_modules/underscore/modules/noop.js","webpack:///./node_modules/underscore/modules/propertyOf.js","webpack:///./node_modules/underscore/modules/times.js","webpack:///./node_modules/underscore/modules/random.js","webpack:///./node_modules/underscore/modules/now.js","webpack:///./node_modules/underscore/modules/_createEscaper.js","webpack:///./node_modules/underscore/modules/_escapeMap.js","webpack:///./node_modules/underscore/modules/escape.js","webpack:///./node_modules/underscore/modules/unescape.js","webpack:///./node_modules/underscore/modules/_unescapeMap.js","webpack:///./node_modules/underscore/modules/templateSettings.js","webpack:///./node_modules/underscore/modules/template.js","webpack:///./node_modules/underscore/modules/result.js","webpack:///./node_modules/underscore/modules/uniqueId.js","webpack:///./node_modules/underscore/modules/chain.js","webpack:///./node_modules/underscore/modules/_executeBound.js","webpack:///./node_modules/underscore/modules/partial.js","webpack:///./node_modules/underscore/modules/bind.js","webpack:///./node_modules/underscore/modules/_isArrayLike.js","webpack:///./node_modules/underscore/modules/_flatten.js","webpack:///./node_modules/underscore/modules/bindAll.js","webpack:///./node_modules/underscore/modules/memoize.js","webpack:///./node_modules/underscore/modules/delay.js","webpack:///./node_modules/underscore/modules/defer.js","webpack:///./node_modules/underscore/modules/throttle.js","webpack:///./node_modules/underscore/modules/debounce.js","webpack:///./node_modules/underscore/modules/wrap.js","webpack:///./node_modules/underscore/modules/negate.js","webpack:///./node_modules/underscore/modules/compose.js","webpack:///./node_modules/underscore/modules/after.js","webpack:///./node_modules/underscore/modules/before.js","webpack:///./node_modules/underscore/modules/once.js","webpack:///./node_modules/underscore/modules/findKey.js","webpack:///./node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack:///./node_modules/underscore/modules/findIndex.js","webpack:///./node_modules/underscore/modules/findLastIndex.js","webpack:///./node_modules/underscore/modules/sortedIndex.js","webpack:///./node_modules/underscore/modules/_createIndexFinder.js","webpack:///./node_modules/underscore/modules/indexOf.js","webpack:///./node_modules/underscore/modules/lastIndexOf.js","webpack:///./node_modules/underscore/modules/find.js","webpack:///./node_modules/underscore/modules/findWhere.js","webpack:///./node_modules/underscore/modules/each.js","webpack:///./node_modules/underscore/modules/map.js","webpack:///./node_modules/underscore/modules/_createReduce.js","webpack:///./node_modules/underscore/modules/reduce.js","webpack:///./node_modules/underscore/modules/reduceRight.js","webpack:///./node_modules/underscore/modules/filter.js","webpack:///./node_modules/underscore/modules/reject.js","webpack:///./node_modules/underscore/modules/every.js","webpack:///./node_modules/underscore/modules/some.js","webpack:///./node_modules/underscore/modules/contains.js","webpack:///./node_modules/underscore/modules/invoke.js","webpack:///./node_modules/underscore/modules/pluck.js","webpack:///./node_modules/underscore/modules/where.js","webpack:///./node_modules/underscore/modules/max.js","webpack:///./node_modules/underscore/modules/min.js","webpack:///./node_modules/underscore/modules/sample.js","webpack:///./node_modules/underscore/modules/shuffle.js","webpack:///./node_modules/underscore/modules/sortBy.js","webpack:///./node_modules/underscore/modules/_group.js","webpack:///./node_modules/underscore/modules/groupBy.js","webpack:///./node_modules/underscore/modules/indexBy.js","webpack:///./node_modules/underscore/modules/countBy.js","webpack:///./node_modules/underscore/modules/partition.js","webpack:///./node_modules/underscore/modules/toArray.js","webpack:///./node_modules/underscore/modules/size.js","webpack:///./node_modules/underscore/modules/_keyInObj.js","webpack:///./node_modules/underscore/modules/pick.js","webpack:///./node_modules/underscore/modules/omit.js","webpack:///./node_modules/underscore/modules/initial.js","webpack:///./node_modules/underscore/modules/first.js","webpack:///./node_modules/underscore/modules/rest.js","webpack:///./node_modules/underscore/modules/last.js","webpack:///./node_modules/underscore/modules/compact.js","webpack:///./node_modules/underscore/modules/flatten.js","webpack:///./node_modules/underscore/modules/difference.js","webpack:///./node_modules/underscore/modules/without.js","webpack:///./node_modules/underscore/modules/uniq.js","webpack:///./node_modules/underscore/modules/union.js","webpack:///./node_modules/underscore/modules/intersection.js","webpack:///./node_modules/underscore/modules/unzip.js","webpack:///./node_modules/underscore/modules/zip.js","webpack:///./node_modules/underscore/modules/object.js","webpack:///./node_modules/underscore/modules/range.js","webpack:///./node_modules/underscore/modules/chunk.js","webpack:///./node_modules/underscore/modules/_chainResult.js","webpack:///./node_modules/underscore/modules/mixin.js","webpack:///./node_modules/underscore/modules/underscore-array-methods.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./node_modules/backbone/backbone.js","webpack:///./node_modules/@173/173js/lib/url.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/base.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","VERSION","root","self","global","Function","ArrayProto","Array","ObjProto","SymbolProto","push","slice","toString","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","pow","window","jQuery","_interopRequireDefault","obj","registerDefaultHelpers","instance","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","helpers","hooks","_utils","logger","methodMap","level","lookupLevel","levelMap","indexOf","toLowerCase","parseInt","log","console","method","_len","arguments","length","message","_key","apply","rPjaxRoute","rWithHttp","rNewgame","$","urlUtils","pingjs","e","link","currentTarget","href","attr","title","test","data","split","join","preventDefault","getRelativeUrl","location","origin","history","pushState","this","model","trigger","trackPageview","closest","$el","scrollTo","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","properties","whitelist","_createNewLookupObject","createNewLookupObject","allowedProtoProperties","defaultValue","allowProtoPropertiesByDefault","methods","allowedProtoMethods","allowProtoMethodsByDefault","resultIsAllowed","result","protoAccessControl","propertyName","checkWhiteList","resetLoggedProperties","loggedProperties","forEach","newObj","_interopRequireWildcard","protoAccessControlForType","undefined","logUnexpecedPropertyAccessOnce","types","MOBILE_GAME_DOWNLOADED_IN_ANDROID","MOBILE_GAME_DOWNLOADED_IN_IOS","OPEN_GAME_DOWNLOADED_QRCODE","DOWNLOAD_MOBILE_GAME_SIMULATOR","IOS_GAME_DOWNLOADED_IN_PC","ANDROID_GAME_DOWNLOADED_IN_PC","trackEventWithKey","hrefOrAction","options","_jc_ping","withCurrentHref","addParam","action","rNON_URL","trackEvent","eventType","applyTrackLink","on","element","trackOptions","is","applyTrackBlock","each","index","blockElement","applyBiClick","gameCode","applyTrackArea","areaElement","applyBgArea","_","hasPushState","memoize","hasHashChange","document","documentMode","supportCanvas","elem","createElement","getContext","isWexinQQBrowser","ua","navigator","userAgent","isWexinBrowser","isAndroid","isiOS","isMobile","checkOpen","cb","_clickTime","Date","intHandle","_count","setInterval","elsTime","clearInterval","hidden","webkitHidden","check","base","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","_handlebarsNoConflict2","hb","HandlebarsEnvironment","extend","SafeString","Exception","escapeExpression","VM","template","spec","inst","registerHelper","context","inverse","fn","ids","createFrame","contextPath","appendContextPath","_exception","_exception2","priorKey","ret","execIteration","field","last","first","blockParams","isFunction","j","iterator","newContext","it","next","done","ListModel","MainContainer","QrCodeContainer","FilterNav","detector","win","getToolHtml","el","tools","v","classname","links","item","categoryIds","smallTitle","url","pageUrl","toolsItemHtml","typeId","map","append","listModel","render","gameCodes","gameCodesArr","find","ajax","type","dataType","channelCode","oldGameCodes","pageNo","pageSize","success","games","parents","getGameCode","Backbone","Model","fetchList","handleLinkClicked","View","initialize","listenTo","handleRouteChanged","events","relativeUrl","css","resp","html","fail","alert","always","applyQrCode","toggleQrCode","container","parent","width","height","margin","display","NavManager","ued","tmpl","renderNavs","breadcrumbs","navConfigs","navManager","getRenderNavHelpers","renderBreadcrumbs","label","chain","trim","text","filter","labelContainer","breadcrumbContents","contents","splice","listUrlAndControllerMap","game","helperMixinAndControllerMap","currentControllerId","helpersMixin","currentListUrl","getUrlParams","urlParams","params","getURLParameters","search","page","methodName","bindAll","pick","commonParamKeys","defaultParamKeys","concat","defaultParamKeysWhenTenParam","rParamValueArray","pathname","matched","match","paramValueArray","paramKeys","getNavClass","every","param","paramKey","getFilterUrl","targetParamValues","defaultParam","targetParam","keywordParams","isEmptyObject","keyword","createGameList","clone","paramValue","Handlebars","depth0","partials","stack1","helper","alias1","nullContext","lookupProperty","helperMissing","program","noop","alias2","alias3","conditional","hash","includeZero","isEmpty","array","len","string","toHTML","possible","replace","badChars","escapeChar","frame","_parent","path","id","escape","chr","args","registerDefaultDecorators","_decoratorsInline2","_decoratorsInline","registerDecorator","props","original","sources","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","runtimeVersions","REVISION_CHANGES","compilerVersions","templateSpec","env","main","decorator","main_d","compiler","templateWasPrecompiledWithCompilerV7","strict","loc","_internalProtoAccess","lookup","depths","lambda","current","invokePartial","partial","resolvePartial","extendedOptions","compile","compilerOptions","indent","lines","programs","declaredBlockParams","programWrapper","wrapProgram","depth","mergeIfNeeded","common","seal","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","decorators","mergedHelpers","_internalWrapHelper","wrapHelper","passLookupPropertyOption","wrapHelpersToPassLookupProperty","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_helpers","_child","currentPartialBlock","partialBlock","prog","currentDepths","transformOptionsFn","$Handlebars","noConflict","errorProps","node","line","endLineNumber","column","endColumn","start","end","tmp","Error","constructor","idx","captureStackTrace","lineNumber","nop","g","QRCode","selector","f","QR8bitByte","QRMode","MODE_8BIT_BYTE","parsedData","byteArray","code","charCodeAt","unshift","QRCodeModel","typeNumber","errorCorrectLevel","moduleCount","dataCache","dataList","getLength","buffer","write","put","addData","newData","isDark","row","col","getModuleCount","make","makeImpl","getBestMaskPattern","maskPattern","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","minLostPoint","pattern","lostPoint","QRUtil","getLostPoint","createMovieClip","target_mc","instance_name","qr_mc","createEmptyMovieClip","y","x","beginFill","moveTo","lineTo","endFill","pos","getPatternPosition","bits","getBCHTypeNumber","mod","floor","getBCHTypeInfo","inc","bitIndex","byteIndex","dark","getMask","PAD0","PAD1","rsBlocks","QRRSBlock","getRSBlocks","QRBitBuffer","getLengthInBits","totalDataCount","dataCount","putBit","createBytes","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","rsPoly","getErrorCorrectPolynomial","modPoly","QRPolynomial","modIndex","totalCodeCount","MODE_NUMBER","MODE_ALPHA_NUM","MODE_KANJI","QRErrorCorrectLevel","L","M","Q","H","QRMaskPattern","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","errorCorrectLength","a","multiply","QRMath","gexp","qrCode","sameCount","count","darkCount","abs","glog","LOG_TABLE","EXP_TABLE","num","shift","ratio","RS_BLOCK_TABLE","rsBlock","getRsBlockTable","list","bufIndex","bit","QRCodeLimitLength","_getAndroid","android","sAgent","aMat","parseFloat","svgDrawer","Drawing","htOption","_el","_htOption","draw","oQRCode","nCount","makeSVG","tag","attrs","createElementNS","k","setAttribute","clear","svg","String","colorLight","setAttributeNS","appendChild","colorDark","child","hasChildNodes","removeChild","lastChild","documentElement","tagName","CanvasRenderingContext2D","nWidth","nHeight","aHTML","innerHTML","elTable","childNodes","nLeftMarginTable","offsetWidth","nTopMarginTable","offsetHeight","style","_onMakeImage","_elImage","src","_elCanvas","toDataURL","_android","factor","devicePixelRatio","drawImage","image","sx","sy","sw","sh","dx","dy","dw","dh","nodeName","_safeSetDataURI","fSuccess","fFail","_fFail","_fSuccess","_bSupportDataURI","fOnError","onabort","onerror","onload","_bIsPainted","_oContext","alt","nRoundedWidth","round","nRoundedHeight","bIsDark","nLeft","nTop","strokeStyle","lineWidth","fillStyle","fillRect","strokeRect","ceil","makeImage","isPainted","clearRect","nNumber","_getTypeNumber","sText","nCorrectLevel","nType","replacedText","encodeURI","_getUTF8Length","nLimit","vOption","correctLevel","getElementById","_oQRCode","_oDrawer","useSVG","_oDrawing","makeCode","CorrectLevel","restArguments","func","startIndex","rest","isObject","isNull","isUndefined","isBoolean","isElement","nodeType","tagTester","nodelist","Int8Array","hasStringTagBug","isIE11","Map","isDataView","getInt8","isArrayBuffer","has","isArguments","isSymbol","isNumber","constant","createSizePropertyCheck","getSizeProperty","collection","sizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","contains","emulatedSet","nonEnumIdx","proto","prop","isString","isMatch","_keys","_wrapped","toBufferView","bufferSource","Uint8Array","byteOffset","valueOf","toJSON","eq","b","aStack","bStack","deepEq","className","areArrays","aCtor","bCtor","pop","isEqual","allKeys","ie11fingerprint","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","values","pairs","invert","functions","names","sort","createAssigner","keysFunc","defaults","source","baseCreate","Ctor","extendOwn","tap","interceptor","toPath","deepGet","identity","optimizeCb","argCount","accumulator","baseIteratee","Infinity","iteratee","mapObject","results","currentKey","propertyOf","times","accum","random","min","getTime","createEscaper","escaper","testRegexp","RegExp","replaceRegexp","templateSettings","evaluate","interpolate","noMatch","escapes","escapeRegExp","bareIdentifier","settings","oldSettings","matcher","argument","variable","fallback","idCounter","uniqueId","prefix","_chain","executeBound","sourceFunc","boundFunc","callingContext","boundArgs","placeholder","bound","position","TypeError","callArgs","flatten","input","output","hasher","cache","address","wait","setTimeout","delay","throttle","timeout","previous","later","leading","now","throttled","_now","remaining","clearTimeout","trailing","cancel","debounce","immediate","passed","debounced","_args","wrap","wrapper","negate","predicate","compose","after","before","memo","findKey","createPredicateIndexFinder","dir","low","high","mid","createIndexFinder","predicateFind","sortedIndex","findIndex","findLastIndex","findWhere","createReduce","reducer","initial","reject","some","fromIndex","guard","pluck","where","computed","lastComputed","sample","rand","temp","shuffle","sortBy","criteria","left","right","group","behavior","partition","pass","reStrSymbol","toArray","size","keyInObj","compact","Boolean","otherArrays","difference","uniq","isSorted","seen","arrays","intersection","argsLength","unzip","range","stop","step","chunk","chainResult","mixin","previousBackbone","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","callback","opts","_events","onApi","ctx","listening","_listeners","interop","_listenId","listeningTo","_listeningTo","Listening","error","tryCatchOn","handlers","off","offApi","listeners","stopListening","handler","_callback","cleanup","once","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","all","triggerEvents","ev","a1","a2","a3","listener","unbind","attributes","preinitialize","cid","cidPrefix","parse","set","changed","validationError","idAttribute","sync","matches","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","prev","_pending","hasChanged","changedAttributes","diff","old","previousAttributes","fetch","serverAttrs","wrapError","save","validate","isNew","patch","xhr","destroy","defer","urlError","encodeURIComponent","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","insert","at","tail","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","event","prevId","$$iterator","kind","_collection","_kind","_index","viewOptions","_ensureElement","delegateEventSplitter","_removeElement","setElement","undelegateEvents","_setElement","delegateEvents","delegate","eventName","undelegate","_createElement","_setAttributes","addUnderscoreMethods","Class","attribute","defaultVal","addMethod","modelMatcher","collect","reduce","foldl","inject","reduceRight","foldr","detect","select","any","include","includes","invoke","head","take","drop","without","lastIndexOf","groupBy","countBy","indexBy","omit","config","Base","mappings","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","route","isRegExp","_routeToRegExp","router","fragment","_extractParameters","execute","navigate","optional","exec","decodeURIComponent","History","checkUrl","routeStripper","rootStripper","pathStripper","started","interval","atRoot","getSearch","matchRoot","decodeFragment","decodeURI","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","_useHashChange","_wantsPushState","_hasPushState","rootPath","iframe","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","addEventListener","attachEvent","_checkUrlInterval","loadUrl","removeEventListener","detachEvent","decodedFragment","assign","_updateHash","protoProps","staticProps","__super__","factory","rNonQuerystring","deparam","paramsArray","pair","paramName","substr","normalize","str","joined","getUrlCompontents","hashIndex","markIndex","resetParams","compontents","removeSearch","paramString","hasSameOrigin","originUrl","getURLParameter","rQuestionMark","_decorators","_logger2","1","2","3","4","5","6","7","8","unregisterHelper","registerPartial","unregisterPartial","unregisterDecorator","resetLoggedPropertyAccesses"],"mappings":"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AAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,G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","file":"js/game-list/index.entry.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//ue.17173cdn.com/a/newgame/index/v5.4.7/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 178);\n","// Current version.\nexport var VERSION = '1.12.1';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","module.exports = window.jQuery;","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","var rPjaxRoute = /\\/(shouyou-list|vr-list|game-list)/\n , rWithHttp = /^http/i\n , rNewgame = /(newgame\\.17173\\.com|newgame\\.test\\.17173\\.com)/\n , $ = require('jquery')\n , urlUtils = require('@173js/url')\n , pingjs = require('widgets/ping.js')\n\nfunction getPathname(url) {\n var parts = url.split('/')\n , pathnameStartIndex = 3\n\n return '/' + parts.slice(pathnameStartIndex).join('/')\n}\n\nmodule.exports = function(e) {\n var link = $(e.currentTarget)\n , href = link.attr('href')\n , title = $('title')\n\n if (!rPjaxRoute.test(href) || link.data('ignore-pjax')) { return }\n\n if (rWithHttp.test(href) && rNewgame.test(href)) {\n href = getPathname(href)\n }\n\n e.preventDefault()\n\n var currentHref = urlUtils.getRelativeUrl(\n window.location.href, window.location.origin\n )\n\n if (currentHref === href) { return }\n\n history.pushState({}, title, href)\n this.model.trigger('changeRoute')\n pingjs.trackPageview()\n\n var linkIsPaginationItem = !!link.closest('.pagination', this.$el).length\n\n if (linkIsPaginationItem || link.data('pjax-to-top')) { window.scrollTo(0, 0) }\n};\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar logger = _interopRequireWildcard(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=\n","var types = {\n MOBILE_GAME_DOWNLOADED_IN_ANDROID: 'mEB3q2'\n, MOBILE_GAME_DOWNLOADED_IN_IOS: 'yyEfAv'\n, OPEN_GAME_DOWNLOADED_QRCODE: '7nQVju'\n, DOWNLOAD_MOBILE_GAME_SIMULATOR: '73UBVf'\n, IOS_GAME_DOWNLOADED_IN_PC: 'UZ77nm'\n, ANDROID_GAME_DOWNLOADED_IN_PC: 'I7b6na'\n}\n\nvar urlUtils = require('@173js/url')\n\nfunction trackEventWithKey(key, hrefOrAction, options) {\n var _jc_ping = window._jc_ping || [];\n options = options || {}\n\n if (options.withCurrentHref) {\n hrefOrAction = urlUtils.addParam(\n window.location.href, { action: hrefOrAction }\n )\n }\n\n _jc_ping.push([\n '_trackBlockClick'\n , key\n , hrefOrAction\n ])\n\n window._jc_ping = _jc_ping\n}\n\nvar rNON_URL = /^(#|javascript:)/\n , $ = require('jquery')\n\nmodule.exports = {\n trackEvent: function(eventType, href) {\n trackEventWithKey(types[eventType], href)\n }\n, trackEventWithKey: trackEventWithKey\n, trackPageview: function() {\n // See more: http://bi.local.17173.com/pages/viewpage.action?pageId=983282\n window._jc_ping = window._jc_ping || []\n _jc_ping.push(['_trackPageview'])\n }\n, applyTrackLink: function() {\n $('body').on('mousedown', 'a[data-track-link]', function(e) {\n //TODO: DRY\n var element = $(e.currentTarget)\n , hrefOrAction = element.attr('href')\n , key = element.data('track-link')\n , trackOptions = { withCurrentHref : false }\n\n if (rNON_URL.test(hrefOrAction)) {\n if (!element.is('[data-track-action]')) { return }\n hrefOrAction = element.data('track-action')\n trackOptions.withCurrentHref = true\n }\n\n trackEventWithKey(key, hrefOrAction, trackOptions)\n })\n }\n, applyTrackBlock: function() {\n $('[data-track-block]').each(function(index, blockElement) {\n blockElement = $(blockElement)\n var key = $(blockElement).data('track-block')\n\n blockElement.on('mousedown', 'a, .trackDiv, button', function(e) {\n var element = $(e.currentTarget)\n , hrefOrAction = element.attr('href') || element.attr('class')\n , trackOptions = { withCurrentHref : false }\n\n if (rNON_URL.test(hrefOrAction) || hrefOrAction.indexOf('trackDiv') != -1) {\n if (!element.is('[data-track-action]')) { return }\n hrefOrAction = element.data('track-action')\n trackOptions.withCurrentHref = true\n }\n\n trackEventWithKey(key, hrefOrAction, trackOptions)\n })\n })\n }\n, applyBiClick: function(gameCode) {\n window._jc_ping = window._jc_ping || [];\n _jc_ping.push([ '_trackBiClick', 'g_1_'+gameCode+'_gift-follow']);\n }\n, applyTrackArea: function() {\n $('[data-track-area]').each(function(index, areaElement) {\n areaElement = $(areaElement)\n var key = $(areaElement).data('track-area')\n\n window._jc_ping = window._jc_ping || [];\n _jc_ping.push([\n '_trackModuleArea',\n areaElement,\n key\n ]);\n })\n }\n, applyBgArea:function(){\n $('[data-bg-area]').each(function(index, areaElement) {\n areaElement = $(areaElement)\n var key = $(areaElement).data('bg-area')\n window._jc_ping = window._jc_ping || [];\n _jc_ping.push([\n '_trackModule',\n areaElement,\n key\n ]);\n })\n }\n}\n\n","var Backbone = require('backbone')\n , _ = require('underscore')\n\n\nfunction createElement() {\n if (typeof document.createElement !== 'function') {\n // This is the case in IE7, where the type of createElement is \"object\".\n // For this reason, we cannot call apply() as Object is not a Function.\n return document.createElement(arguments[0]);\n } else {\n return document.createElement.apply(document, arguments);\n }\n}\n\nmodule.exports = {\n hasPushState: _.memoize(function() {\n return !! (window.history && window.history.pushState)\n })\n, hasHashChange: _.memoize(function() {\n return ('onhashchange' in window\n && (document.documentMode === void 0 || document.documentMode > 7))\n })\n, supportCanvas: _.memoize(function() {\n var elem = createElement('canvas')\n return !!(elem.getContext && elem.getContext('2d'));\n })\n, isWexinQQBrowser: _.memoize(function() {\n var ua = navigator.userAgent.toLowerCase()\n return /(micromessenger|QQ\\/)/i.test(ua)\n })\n, isWexinBrowser: _.memoize(function() {\n var ua = navigator.userAgent\n return /micromessenger/i.test(ua)\n })\n, isAndroid: _.memoize(function() {\n var ua = navigator.userAgent\n return /Android/i.test(ua)\n })\n, isiOS: _.memoize(function() {\n var ua = navigator.userAgent\n return /iPhone|iPad|iPod/i.test(ua)\n })\n, isMobile: _.memoize(function() {\n var ua = navigator.userAgent\n return /Android|webOS|iPhone|iPod|BlackBerry|Windows Phone/i.test(ua)\n })\n, checkOpen: function(cb) {\n var _clickTime = +(new Date());\n function check(elsTime) {\n if (elsTime > 3000 || document.hidden || document.webkitHidden) {\n cb(1);\n } else {\n cb(0);\n }\n }\n //启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束\n var _count = 0, intHandle;\n intHandle = setInterval(function () {\n _count++;\n var elsTime = +(new Date()) - _clickTime;\n if (_count >= 100 || elsTime > 3000) {\n clearInterval(intHandle);\n check(elsTime);\n }\n }, 20);\n }\n}\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n var newContext = [];\n var iterator = context[global.Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","var $ = require('jquery')\n , ListModel = require('./models/ListModel')\n , MainContainer = require('./views/MainContainer')\n , QrCodeContainer = require('./views/QrCodeContainer')\n , FilterNav = require('./views/FilterNav')\n , detector = require('widgets/detector')\n\nrequire('@173js/ui/preventEmptyHrefClick')\n\nvar win = $(window)\n\nfunction setupPjaxFilter() {\n\n var listModel = new ListModel()\n\n var mainContainer = new MainContainer({\n el: $('.pn-game-all')\n , model: listModel\n })\n mainContainer.render()\n\n var filterNav = new FilterNav({\n el: $('.pn-game-filter')\n , model: listModel\n })\n\n filterNav.render()\n\n win.on('popstate', function () {\n listModel.trigger('changeRoute')\n })\n}\n\nfunction getToolHtml(data, el) {\n // console.log('data', data)\n var types = ['510324,注册指南,zczn', '510325,游戏加速,yxjs', '510326,组队,zd', '510327,充值,cz', '510328,汉化,hh', '510329,玩家交流群,ghzr']\n var tools = {}\n types.forEach(v => {\n const [key, name, classname, links] = [...v.split(','), []]\n tools[key] = { name, classname, links }\n })\n data.forEach((item, index) => {\n item.categoryIds.split(',').forEach(v => {\n if (tools[v] && tools[v].links.length < 2) {\n tools[v].links.push(\n {\n title: item.smallTitle,\n url: item.pageUrl\n }\n )\n }\n })\n })\n var toolsItemHtml = []\n types.forEach((v, i) => {\n var typeId = []\n typeId.push(v.split(',')[0])\n tools[typeId].links.length > 0 && toolsItemHtml.push(`\n
\n
${v.split(',')[1]}
\n \n
\n `\n )\n })\n el.append(\n `
\n
\n
外服指南
\n
\n
\n
\n ${toolsItemHtml.join('')}\n
\n
\n `\n )\n}\n\nfunction getGameCode() {\n let gameCodes = ''\n let gameCodesArr = []\n $('.ptlist-pc li').each(function () {\n gameCodes += `${$(this).find('.channel a').last().attr('href').split('.html')[0].split('list-')[1]},`\n gameCodesArr.push($(this).find('.channel a').last().attr('href').split('.html')[0].split('list-')[1])\n })\n gameCodes && $.ajax({\n type: \"get\",\n url: '//interface.17173.com/content/list.jsonp',\n dataType: \"jsonp\",\n data: {\n categoryIds: \"510324,510325,510326,510327,510328,510329\",//所属分类,多个用逗号隔开\n channelCode: 90117,//频道编号\n oldGameCodes: gameCodes,\n pageNo: 1,//默认1\n pageSize: 50,//默认20,最大值200\n },\n success: function (data) {\n // console.log(data)\n let games = {}\n data.data.forEach(function (v, i) {\n v.oldGameCodes.split(',').forEach(function (j) {\n if (!games[j]) {\n games[j] = []\n }\n games[j].push(v)\n })\n })\n\n // console.log('games', games)\n // 工具tool\n for (const key in games) {\n if (games.hasOwnProperty(key)) {\n getToolHtml(games[key], $(`.ptlist-pc p.tit a[href*=${key}]`).parents('li'))\n }\n }\n }\n })\n}\n\n$(function () {\n var qrCodeContainer = new QrCodeContainer({\n el: $('.pn-game-all')\n })\n qrCodeContainer.render()\n\n if (!detector.hasPushState()) { return }\n setupPjaxFilter()\n getGameCode()\n})\n","var Backbone = require('backbone')\n\nmodule.exports = Backbone.Model.extend({\n fetchList: function(options) {\n return $.ajax({ url: options.url })\n }\n})\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","var Backbone = require('backbone')\n , _ = require('underscore')\n , urlUtils = require('@173js/url')\n , handleLinkClicked = require('./mixins/handleLinkClicked')\n\nmodule.exports = Backbone.View.extend({\n initialize: function() {\n this.listenTo(this.model, 'changeRoute', this.handleRouteChanged, this)\n }\n, events: {\n // 'click a[href!=\"#\"]': 'handleLinkClicked'\n }\n, handleLinkClicked: handleLinkClicked\n, handleRouteChanged: function() {\n var relativeUrl = urlUtils.getRelativeUrl(\n window.location.href, window.location.origin\n )\n\n this.$el.css({\n 'opacity': 0.5\n , 'pointer-events': 'none'\n })\n\n this.model.fetchList({ url: relativeUrl })\n .done(_.bind(function(resp) {\n this.$el.html(resp.html)\n }, this))\n .fail(function() { alert('网络出现了问题') })\n .always(_.bind(function() {\n this.$el.css({\n 'opacity': 1\n , 'pointer-events': 'auto'\n })\n }, this))\n }\n})\n","var Backbone = require('backbone')\n , _ = require('underscore')\n , urlUtils = require('@173js/url')\n , applyQrCode = require('widgets/applyQrCode')\n\nmodule.exports = Backbone.View.extend({\n events: {\n 'mouseenter .btn-mobile-game-download': 'toggleQrCode'\n , 'mouseleave .btn-mobile-game-download': 'toggleQrCode'\n }\n, toggleQrCode: function(e) {\n var item = $(e.currentTarget)\n , container = item.parent()\n\n if (!container.data('hasInitializeQrcode')) {\n applyQrCode('.qrcode-container', container, { width: 100, height: 100 })\n\n // Bugfix IE8 下 qrcode 样式错误\n container.find('table').css({\n margin: 0,\n 'line-height': 1,\n display: 'inline-block'\n })\n\n container.data('hasInitializeQrcode', true)\n }\n\n container\n .find('.tooltip')[e.type === 'mouseenter' ? 'show' : 'hide']()\n }\n})\n","var Backbone = require('backbone')\n , _ = require('underscore')\n , handleLinkClicked = require('../mixins/handleLinkClicked')\n , NavManager = require('../NavManager')\n\nvar ued = window.ued || {}\n , tmpl = require('./tmpl.handlebars')\n\nmodule.exports = Backbone.View.extend({\n initialize: function() {\n this.listenTo(this.model, 'changeRoute', this.renderNavs, this)\n this.breadcrumbs = $('.local-bar .breadcrumbs')\n }\n, events: {\n // 'click a[href!=\"#\"]': 'handleLinkClicked'\n }\n, renderNavs: function() {\n var navConfigs = ued.navConfigs\n , navManager = new NavManager()\n\n this.$('.list-cate').html(\n tmpl(navConfigs, { helpers: navManager.getRenderNavHelpers() })\n )\n\n this.renderBreadcrumbs()\n }\n, renderBreadcrumbs: function() {\n var label = _.chain(this.$('.pn-bd .current'))\n .map(function(element) {\n element = $(element)\n return $.trim(element.text())\n })\n .filter(function(text) { return text !== '不限' })\n .value().join(' ')\n\n var labelContainer = this.breadcrumbs.find('span')\n\n if (!labelContainer.length) {\n this.breadcrumbs.append(' > ')\n labelContainer = $('')\n this.breadcrumbs.append(labelContainer)\n }\n\n if (!label) {\n var breadcrumbContents = this.breadcrumbs.contents()\n this.breadcrumbs.html(\n breadcrumbContents.splice(0, breadcrumbContents.length - 2)\n )\n } else {\n labelContainer.text(label)\n }\n }\n, handleLinkClicked: handleLinkClicked\n})\n","var $ = require('jquery')\n , _ = require('underscore')\n , urlUtils = require('@173js/url')\n , ued = window.ued || {}\n\nvar listUrlAndControllerMap = {\n game: '/game-list.html'\n, 'shouyou/syGame': '/shouyou-list.html'\n, 'vr/vrGame': '/vr-list.html?template=newgame'\n}\n\nvar helperMixinAndControllerMap = {\n game: require('./mixins/newgameHelpers.js')\n, 'shouyou/syGame': require('./mixins/shouyouHelpers.js')\n, 'vr/vrGame': require('./mixins/vrHelpers')\n}\n\nvar currentControllerId = ued.currentControllerId\n , helpersMixin = helperMixinAndControllerMap[currentControllerId]\n\nfunction NavManager() {\n this.initialize()\n this.currentListUrl = listUrlAndControllerMap[currentControllerId]\n}\n\nNavManager.prototype.initialize = function() {\n if (this.getUrlParams) {\n this.urlParams = this.getUrlParams()\n } else {\n var params = urlUtils.getURLParameters(window.location.search)\n ;delete params.page;\n this.urlParams = params\n }\n}\n\n_.each(helpersMixin, function(method, methodName) {\n NavManager.prototype[methodName] = method\n})\n\nNavManager.prototype.getRenderNavHelpers = function() {\n //TODO: DRY\n _.bindAll(this, 'getNavClass', 'getFilterUrl')\n return _.pick(this, 'getNavClass', 'getFilterUrl')\n}\n\nmodule.exports = NavManager\n","var _ = require('underscore')\n , urlUtils = require('@173js/url')\n , EMPTY = '0'\n\nvar commonParamKeys = [\n \"game_frame\"\n, \"charge_mode\"\n, \"test_status\"\n, \"game_type\"\n, \"game_theme\"\n, \"star_level\"\n, \"game_area\"\n, \"game_feature\"\n]\n\nvar defaultParamKeys = commonParamKeys.concat([\n \"game_style\"\n, \"fight_mode\"\n, \"sortord\"\n, \"view_type\"\n, \"game_kind\"\n, \"game_platform\"\n])\n\nvar defaultParamKeysWhenTenParam = commonParamKeys.concat([\n \"sortord\"\n, \"view_type\"\n])\n\nfunction createGameList(params) {\n\n var targetParamValues = []\n , DEFAULT_SORT = '3'\n , DEFAULT_VIEW_TYPE = '2'\n\n _.each(defaultParamKeys, function(defaultParam) {\n var targetParam = params[defaultParam]\n\n if (!targetParam && defaultParam === 'sortord') {\n targetParam = DEFAULT_SORT\n } else if (!targetParam && defaultParam === 'view_type') {\n targetParam = DEFAULT_VIEW_TYPE\n } else if (!targetParam) {\n targetParam = EMPTY\n }\n\n targetParamValues.push(targetParam)\n })\n\n var keywordParams = urlUtils.getURLParameters(window.location.search)\n ;delete keywordParams.page;\n\n if (!$.isEmptyObject(keywordParams)) {\n return '/game-list-' + targetParamValues.join('-') + '.html?keyword='+keywordParams.keyword+''\n }\n\n return '/game-list-' + targetParamValues.join('-') + '.html'\n}\n\nvar rParamValueArray = /\\/game-list(.*)\\.html/\n , PARAMS_LENGTH_IS_TEN = 10\n\nfunction getUrlParams(pathname) {\n var matched = pathname.match(rParamValueArray)\n\n if (!matched) { return {} }\n var paramValueArray =\n _.filter(matched[1].split('-'), function(value) { return !!value })\n , params = {}\n\n var paramKeys = paramValueArray.length === PARAMS_LENGTH_IS_TEN\n ? defaultParamKeysWhenTenParam : defaultParamKeys\n\n _.each(paramValueArray, function(value, index) {\n params[paramKeys[index]] = value\n })\n\n return params\n}\n\nexports.getUrlParams = function(params) {\n return getUrlParams(window.location.pathname)\n}\n\nexports.getNavClass = function(params) {\n var urlParams = this.urlParams\n , isCurrent = _.every(\n _.map(params, function(param, paramKey) {\n param = '' + param\n\n return param === urlParams[paramKey] ||\n param === EMPTY && !urlParams[paramKey]\n })\n )\n\n return isCurrent ? 'current' : ''\n}\n\nexports.getFilterUrl = function(params) {\n params = _.extend(_.clone(this.urlParams), params)\n\n return createGameList(params)\n}\n","var _ = require('underscore')\n , urlUtils = require('@173js/url')\n , EMTPY = '0'\n\nexports.getNavClass = function(params) {\n var urlParams = this.urlParams\n , isCurrent = _.every(\n _.map(params, function(param, paramKey) {\n param = '' + param\n\n return param === urlParams[paramKey] ||\n param === EMTPY && !urlParams[paramKey]\n })\n )\n\n return isCurrent ? 'current' : ''\n}\n\nexports.getFilterUrl = function(params) {\n return urlUtils.addParam(\n this.currentListUrl\n , _.extend(_.clone(this.urlParams), params)\n )\n}\n","var _ = require('underscore')\n , urlUtils = require('@173js/url')\n , EMTPY = 'null'\n\nexports.getNavClass = function(params) {\n var urlParams = this.urlParams\n , isCurrent = _.every(\n _.map(params, function(paramValue, paramKey) {\n paramValue = '' + paramValue\n\n return paramValue === urlParams[paramKey] ||\n paramValue === EMTPY && !urlParams[paramKey]\n })\n )\n\n return isCurrent ? 'current' : ''\n}\n\nfunction filterNullValue(obj) {\n var result = {}\n _.each(obj, function(value, key) {\n if (value === null) { return }\n result[key] = value\n })\n return result\n}\n\nexports.getFilterUrl = function(params) {\n var urlParams = this.urlParams\n ;delete urlParams.template;\n\n return urlUtils.addParam(\n this.currentListUrl\n , filterNullValue(_.extend(\n _.clone(urlParams)\n , params\n ))\n )\n}\n","var Handlebars = require(\"../../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
\\n
\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"key\") || (data && lookupProperty(data,\"key\"))) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"key\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":8},\"end\":{\"line\":3,\"column\":16}}}) : helper)))\n + \"
\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":8,\"column\":13}}})) != null ? stack1 : \"\")\n + \"
\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
\\n \"\n + alias3(((helper = (helper = lookupProperty(helpers,\"label\") || (depth0 != null ? lookupProperty(depth0,\"label\") : depth0)) != null ? helper : alias2),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"label\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":44},\"end\":{\"line\":6,\"column\":53}}}) : helper)))\n + \"\\n
\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":10,\"column\":9}}})) != null ? stack1 : \"\");\n},\"useData\":true});","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","var $ = require('jquery')\n\n$(document).on('click', 'a[href=\"#\"]', function(e) {\n e.preventDefault()\n})\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var QRCode = require('vendor/qrcode')\n , $ = require('jquery')\n , urlUtils = require('@173js/url')\n\nmodule.exports = function(selector, context, options) {\n options = options || {}\n $(context).find(selector).each(function(i, el) {\n var url = urlUtils.addParam(\n $(el).data('url') || window.location.href\n , { f: 'scan' } // For bi's track\n )\n\n var qrcode = new QRCode(el\n , $.extend({\n text: url\n , width: 110\n , height: 110\n }, options))\n })\n};\n","/**\n * @fileoverview\n * - Using the 'QRCode for Javascript library'\n * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.\n * - this library has no dependencies.\n * \n * @author davidshimjs\n * @see http://www.d-project.com/\n * @see http://jeromeetienne.github.com/jquery-qrcode/\n */\nvar QRCode;\n(function () {\n\t//---------------------------------------------------------------------\n\t// QRCode for JavaScript\n\t//\n\t// Copyright (c) 2009 Kazuhiko Arase\n\t//\n\t// URL: http://www.d-project.com/\n\t//\n\t// Licensed under the MIT license:\n\t// http://www.opensource.org/licenses/mit-license.php\n\t//\n\t// The word \"QR Code\" is registered trademark of \n\t// DENSO WAVE INCORPORATED\n\t// http://www.denso-wave.com/qrcode/faqpatent-e.html\n\t//\n\t//---------------------------------------------------------------------\n\tfunction QR8bitByte(data) {\n\t\tthis.mode = QRMode.MODE_8BIT_BYTE;\n\t\tthis.data = data;\n\t\tthis.parsedData = [];\n\n\t\t// Added to support UTF-8 Characters\n\t\tfor (var i = 0, l = this.data.length; i < l; i++) {\n\t\t\tvar byteArray = [];\n\t\t\tvar code = this.data.charCodeAt(i);\n\n\t\t\tif (code > 0x10000) {\n\t\t\t\tbyteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\n\t\t\t\tbyteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\n\t\t\t\tbyteArray[3] = 0x80 | (code & 0x3F);\n\t\t\t} else if (code > 0x800) {\n\t\t\t\tbyteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\n\t\t\t\tbyteArray[2] = 0x80 | (code & 0x3F);\n\t\t\t} else if (code > 0x80) {\n\t\t\t\tbyteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\n\t\t\t\tbyteArray[1] = 0x80 | (code & 0x3F);\n\t\t\t} else {\n\t\t\t\tbyteArray[0] = code;\n\t\t\t}\n\n\t\t\tthis.parsedData.push(byteArray);\n\t\t}\n\n\t\tthis.parsedData = Array.prototype.concat.apply([], this.parsedData);\n\n\t\tif (this.parsedData.length != this.data.length) {\n\t\t\tthis.parsedData.unshift(191);\n\t\t\tthis.parsedData.unshift(187);\n\t\t\tthis.parsedData.unshift(239);\n\t\t}\n\t}\n\n\tQR8bitByte.prototype = {\n\t\tgetLength: function (buffer) {\n\t\t\treturn this.parsedData.length;\n\t\t},\n\t\twrite: function (buffer) {\n\t\t\tfor (var i = 0, l = this.parsedData.length; i < l; i++) {\n\t\t\t\tbuffer.put(this.parsedData[i], 8);\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction QRCodeModel(typeNumber, errorCorrectLevel) {\n\t\tthis.typeNumber = typeNumber;\n\t\tthis.errorCorrectLevel = errorCorrectLevel;\n\t\tthis.modules = null;\n\t\tthis.moduleCount = 0;\n\t\tthis.dataCache = null;\n\t\tthis.dataList = [];\n\t}\n\n\tQRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+\",\"+col);}\n\treturn this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);}\n\tif(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}\n\tthis.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}\n\treturn pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}\n\tfor(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}\n\tfor(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}\n\tthis.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);}\n\tvar mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}\n\tthis.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}\n\trow+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error(\"code length overflow. (\"\n\t+buffer.getLengthInBits()\n\t+\">\"\n\t+totalDataCount*8\n\t+\")\");}\n\tif(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}\n\twhile(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}\n\twhile(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}\n\tbuffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}\n\tbuffer.put(QRCodeModel.PAD1,8);}\n\treturn QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}}\n\tvar totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}\n\treturn((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}\n\treturn(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}\n\treturn digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error(\"bad maskPattern:\"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}}\n\tfor(var row=0;row=256){n-=255;}\n\treturn QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}\n\tif(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}\n\tthis.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];\n\t\n\tfunction _isSupportCanvas() {\n\t\treturn typeof CanvasRenderingContext2D != \"undefined\";\n\t}\n\t\n\t// android 2.x doesn't support Data-URI spec\n\tfunction _getAndroid() {\n\t\tvar android = false;\n\t\tvar sAgent = navigator.userAgent;\n\t\t\n\t\tif (/android/i.test(sAgent)) { // android\n\t\t\tandroid = true;\n\t\t\tvar aMat = sAgent.toString().match(/android ([0-9]\\.[0-9])/i);\n\t\t\t\n\t\t\tif (aMat && aMat[1]) {\n\t\t\t\tandroid = parseFloat(aMat[1]);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn android;\n\t}\n\t\n\tvar svgDrawer = (function() {\n\n\t\tvar Drawing = function (el, htOption) {\n\t\t\tthis._el = el;\n\t\t\tthis._htOption = htOption;\n\t\t};\n\n\t\tDrawing.prototype.draw = function (oQRCode) {\n\t\t\tvar _htOption = this._htOption;\n\t\t\tvar _el = this._el;\n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\n\n\t\t\tthis.clear();\n\n\t\t\tfunction makeSVG(tag, attrs) {\n\t\t\t\tvar el = document.createElementNS('http://www.w3.org/2000/svg', tag);\n\t\t\t\tfor (var k in attrs)\n\t\t\t\t\tif (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tvar svg = makeSVG(\"svg\" , {'viewBox': '0 0 ' + String(nCount) + \" \" + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});\n\t\t\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\t\t\t_el.appendChild(svg);\n\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorLight, \"width\": \"100%\", \"height\": \"100%\"}));\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorDark, \"width\": \"1\", \"height\": \"1\", \"id\": \"template\"}));\n\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\tif (oQRCode.isDark(row, col)) {\n\t\t\t\t\t\tvar child = makeSVG(\"use\", {\"x\": String(col), \"y\": String(row)});\n\t\t\t\t\t\tchild.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", \"#template\")\n\t\t\t\t\t\tsvg.appendChild(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tDrawing.prototype.clear = function () {\n\t\t\twhile (this._el.hasChildNodes())\n\t\t\t\tthis._el.removeChild(this._el.lastChild);\n\t\t};\n\t\treturn Drawing;\n\t})();\n\n\tvar useSVG = document.documentElement.tagName.toLowerCase() === \"svg\";\n\n\t// Drawing in DOM by using Table tag\n\tvar Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {\n\t\tvar Drawing = function (el, htOption) {\n\t\t\tthis._el = el;\n\t\t\tthis._htOption = htOption;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Draw the QRCode\n\t\t * \n\t\t * @param {QRCode} oQRCode\n\t\t */\n\t\tDrawing.prototype.draw = function (oQRCode) {\n var _htOption = this._htOption;\n var _el = this._el;\n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\n\t\t\tvar aHTML = [''];\n\t\t\t\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\taHTML.push('');\n\t\t\t\t\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\taHTML.push('');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\taHTML.push('');\n\t\t\t}\n\t\t\t\n\t\t\taHTML.push('
');\n\t\t\t_el.innerHTML = aHTML.join('');\n\t\t\t\n\t\t\t// Fix the margin values as real size.\n\t\t\tvar elTable = _el.childNodes[0];\n\t\t\tvar nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;\n\t\t\tvar nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;\n\t\t\t\n\t\t\tif (nLeftMarginTable > 0 && nTopMarginTable > 0) {\n\t\t\t\telTable.style.margin = nTopMarginTable + \"px \" + nLeftMarginTable + \"px\";\t\n\t\t\t}\n\t\t};\n\t\t\n\t\t/**\n\t\t * Clear the QRCode\n\t\t */\n\t\tDrawing.prototype.clear = function () {\n\t\t\tthis._el.innerHTML = '';\n\t\t};\n\t\t\n\t\treturn Drawing;\n\t})() : (function () { // Drawing in Canvas\n\t\tfunction _onMakeImage() {\n\t\t\tthis._elImage.src = this._elCanvas.toDataURL(\"image/png\");\n\t\t\tthis._elImage.style.display = \"block\";\n\t\t\tthis._elCanvas.style.display = \"none\";\t\t\t\n\t\t}\n\t\t\n\t\t// Android 2.1 bug workaround\n\t\t// http://code.google.com/p/android/issues/detail?id=5141\n\t\tif (this._android && this._android <= 2.1) {\n\t \tvar factor = 1 / window.devicePixelRatio;\n\t var drawImage = CanvasRenderingContext2D.prototype.drawImage; \n\t \tCanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {\n\t \t\tif ((\"nodeName\" in image) && /img/i.test(image.nodeName)) {\n\t\t \tfor (var i = arguments.length - 1; i >= 1; i--) {\n\t\t \targuments[i] = arguments[i] * factor;\n\t\t \t}\n\t \t\t} else if (typeof dw == \"undefined\") {\n\t \t\t\targuments[1] *= factor;\n\t \t\t\targuments[2] *= factor;\n\t \t\t\targuments[3] *= factor;\n\t \t\t\targuments[4] *= factor;\n\t \t\t}\n\t \t\t\n\t \tdrawImage.apply(this, arguments); \n\t \t};\n\t\t}\n\t\t\n\t\t/**\n\t\t * Check whether the user's browser supports Data URI or not\n\t\t * \n\t\t * @private\n\t\t * @param {Function} fSuccess Occurs if it supports Data URI\n\t\t * @param {Function} fFail Occurs if it doesn't support Data URI\n\t\t */\n\t\tfunction _safeSetDataURI(fSuccess, fFail) {\n var self = this;\n self._fFail = fFail;\n self._fSuccess = fSuccess;\n\n // Check it just once\n if (self._bSupportDataURI === null) {\n var el = document.createElement(\"img\");\n var fOnError = function() {\n self._bSupportDataURI = false;\n\n if (self._fFail) {\n self._fFail.call(self);\n }\n };\n var fOnSuccess = function() {\n self._bSupportDataURI = true;\n\n if (self._fSuccess) {\n self._fSuccess.call(self);\n }\n };\n\n el.onabort = fOnError;\n el.onerror = fOnError;\n el.onload = fOnSuccess;\n el.src = \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"; // the Image contains 1px data.\n return;\n } else if (self._bSupportDataURI === true && self._fSuccess) {\n self._fSuccess.call(self);\n } else if (self._bSupportDataURI === false && self._fFail) {\n self._fFail.call(self);\n }\n\t\t};\n\t\t\n\t\t/**\n\t\t * Drawing QRCode by using canvas\n\t\t * \n\t\t * @constructor\n\t\t * @param {HTMLElement} el\n\t\t * @param {Object} htOption QRCode Options \n\t\t */\n\t\tvar Drawing = function (el, htOption) {\n \t\tthis._bIsPainted = false;\n \t\tthis._android = _getAndroid();\n\t\t\n\t\t\tthis._htOption = htOption;\n\t\t\tthis._elCanvas = document.createElement(\"canvas\");\n\t\t\tthis._elCanvas.width = htOption.width;\n\t\t\tthis._elCanvas.height = htOption.height;\n\t\t\tel.appendChild(this._elCanvas);\n\t\t\tthis._el = el;\n\t\t\tthis._oContext = this._elCanvas.getContext(\"2d\");\n\t\t\tthis._bIsPainted = false;\n\t\t\tthis._elImage = document.createElement(\"img\");\n\t\t\tthis._elImage.alt = \"Scan me!\";\n\t\t\tthis._elImage.style.display = \"none\";\n\t\t\tthis._el.appendChild(this._elImage);\n\t\t\tthis._bSupportDataURI = null;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Draw the QRCode\n\t\t * \n\t\t * @param {QRCode} oQRCode \n\t\t */\n\t\tDrawing.prototype.draw = function (oQRCode) {\n var _elImage = this._elImage;\n var _oContext = this._oContext;\n var _htOption = this._htOption;\n \n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = _htOption.width / nCount;\n\t\t\tvar nHeight = _htOption.height / nCount;\n\t\t\tvar nRoundedWidth = Math.round(nWidth);\n\t\t\tvar nRoundedHeight = Math.round(nHeight);\n\n\t\t\t_elImage.style.display = \"none\";\n\t\t\tthis.clear();\n\t\t\t\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\tvar bIsDark = oQRCode.isDark(row, col);\n\t\t\t\t\tvar nLeft = col * nWidth;\n\t\t\t\t\tvar nTop = row * nHeight;\n\t\t\t\t\t_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\n\t\t\t\t\t_oContext.lineWidth = 1;\n\t\t\t\t\t_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\t\t\t\t\t\n\t\t\t\t\t_oContext.fillRect(nLeft, nTop, nWidth, nHeight);\n\t\t\t\t\t\n\t\t\t\t\t// 안티 앨리어싱 방지 처리\n\t\t\t\t\t_oContext.strokeRect(\n\t\t\t\t\t\tMath.floor(nLeft) + 0.5,\n\t\t\t\t\t\tMath.floor(nTop) + 0.5,\n\t\t\t\t\t\tnRoundedWidth,\n\t\t\t\t\t\tnRoundedHeight\n\t\t\t\t\t);\n\t\t\t\t\t\n\t\t\t\t\t_oContext.strokeRect(\n\t\t\t\t\t\tMath.ceil(nLeft) - 0.5,\n\t\t\t\t\t\tMath.ceil(nTop) - 0.5,\n\t\t\t\t\t\tnRoundedWidth,\n\t\t\t\t\t\tnRoundedHeight\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._bIsPainted = true;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Make the image from Canvas if the browser supports Data URI.\n\t\t */\n\t\tDrawing.prototype.makeImage = function () {\n\t\t\tif (this._bIsPainted) {\n\t\t\t\t_safeSetDataURI.call(this, _onMakeImage);\n\t\t\t}\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Return whether the QRCode is painted or not\n\t\t * \n\t\t * @return {Boolean}\n\t\t */\n\t\tDrawing.prototype.isPainted = function () {\n\t\t\treturn this._bIsPainted;\n\t\t};\n\t\t\n\t\t/**\n\t\t * Clear the QRCode\n\t\t */\n\t\tDrawing.prototype.clear = function () {\n\t\t\tthis._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);\n\t\t\tthis._bIsPainted = false;\n\t\t};\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param {Number} nNumber\n\t\t */\n\t\tDrawing.prototype.round = function (nNumber) {\n\t\t\tif (!nNumber) {\n\t\t\t\treturn nNumber;\n\t\t\t}\n\t\t\t\n\t\t\treturn Math.floor(nNumber * 1000) / 1000;\n\t\t};\n\t\t\n\t\treturn Drawing;\n\t})();\n\t\n\t/**\n\t * Get the type by string length\n\t * \n\t * @private\n\t * @param {String} sText\n\t * @param {Number} nCorrectLevel\n\t * @return {Number} type\n\t */\n\tfunction _getTypeNumber(sText, nCorrectLevel) {\t\t\t\n\t\tvar nType = 1;\n\t\tvar length = _getUTF8Length(sText);\n\t\t\n\t\tfor (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {\n\t\t\tvar nLimit = 0;\n\t\t\t\n\t\t\tswitch (nCorrectLevel) {\n\t\t\t\tcase QRErrorCorrectLevel.L :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.M :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.Q :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][2];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.H :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][3];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tif (length <= nLimit) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tnType++;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (nType > QRCodeLimitLength.length) {\n\t\t\tthrow new Error(\"Too long data\");\n\t\t}\n\t\t\n\t\treturn nType;\n\t}\n\n\tfunction _getUTF8Length(sText) {\n\t\tvar replacedText = encodeURI(sText).toString().replace(/\\%[0-9a-fA-F]{2}/g, 'a');\n\t\treturn replacedText.length + (replacedText.length != sText ? 3 : 0);\n\t}\n\t\n\t/**\n\t * @class QRCode\n\t * @constructor\n\t * @example \n\t * new QRCode(document.getElementById(\"test\"), \"http://jindo.dev.naver.com/collie\");\n\t *\n\t * @example\n\t * var oQRCode = new QRCode(\"test\", {\n\t * text : \"http://naver.com\",\n\t * width : 128,\n\t * height : 128\n\t * });\n\t * \n\t * oQRCode.clear(); // Clear the QRCode.\n\t * oQRCode.makeCode(\"http://map.naver.com\"); // Re-create the QRCode.\n\t *\n\t * @param {HTMLElement|String} el target element or 'id' attribute of element.\n\t * @param {Object|String} vOption\n\t * @param {String} vOption.text QRCode link data\n\t * @param {Number} [vOption.width=256]\n\t * @param {Number} [vOption.height=256]\n\t * @param {String} [vOption.colorDark=\"#000000\"]\n\t * @param {String} [vOption.colorLight=\"#ffffff\"]\n\t * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] \n\t */\n\tQRCode = function (el, vOption) {\n\t\tthis._htOption = {\n\t\t\twidth : 256, \n\t\t\theight : 256,\n\t\t\ttypeNumber : 4,\n\t\t\tcolorDark : \"#000000\",\n\t\t\tcolorLight : \"#ffffff\",\n\t\t\tcorrectLevel : QRErrorCorrectLevel.H\n\t\t};\n\t\t\n\t\tif (typeof vOption === 'string') {\n\t\t\tvOption\t= {\n\t\t\t\ttext : vOption\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Overwrites options\n\t\tif (vOption) {\n\t\t\tfor (var i in vOption) {\n\t\t\t\tthis._htOption[i] = vOption[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (typeof el == \"string\") {\n\t\t\tel = document.getElementById(el);\n\t\t}\n\t\t\n\t\tthis._android = _getAndroid();\n\t\tthis._el = el;\n\t\tthis._oQRCode = null;\n this._oDrawer = this._htOption.useSVG ? svgDrawer : Drawing\n\t\tthis._oDrawing = new this._oDrawer(this._el, this._htOption);\n\t\t\n\t\tif (this._htOption.text) {\n\t\t\tthis.makeCode(this._htOption.text);\t\n\t\t}\n\t};\n\t\n\t/**\n\t * Make the QRCode\n\t * \n\t * @param {String} sText link data\n\t */\n\tQRCode.prototype.makeCode = function (sText) {\n\t\tthis._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);\n\t\tthis._oQRCode.addData(sText);\n\t\tthis._oQRCode.make();\n\t\tthis._el.title = sText;\n\t\tthis._oDrawing.draw(this._oQRCode);\t\t\t\n\t\tthis.makeImage();\n\t};\n\t\n\t/**\n\t * Make the Image from Canvas element\n\t * - It occurs automatically\n\t * - Android below 3 doesn't support Data-URI spec.\n\t * \n\t * @private\n\t */\n\tQRCode.prototype.makeImage = function () {\n\t\tif (typeof this._oDrawing.makeImage == \"function\" && (!this._android || this._android >= 3)) {\n\t\t\tthis._oDrawing.makeImage();\n\t\t}\n\t};\n\t\n\t/**\n\t * Clear the QRCode\n\t */\n\tQRCode.prototype.clear = function () {\n\t\tthis._oDrawing.clear();\n\t};\n\t\n\t/**\n\t * @name QRCode.CorrectLevel\n\t */\n\tQRCode.CorrectLevel = QRErrorCorrectLevel;\n})();\n\nmodule.exports = QRCode\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\nexport var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\nfunction ie10IsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasStringTagBug ? ie10IsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n if (!bareIdentifier.test(argument)) throw new Error(argument);\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport clone from './clone.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","// Backbone.js 1.4.0\n\n// (c) 2010-2019 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.4.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n create: 'POST',\n update: 'PUT',\n patch: 'PATCH',\n delete: 'DELETE',\n read: 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","var rNonQuerystring = /\\+/g\n\nvar deparam = exports.deparam = function (string) {\n var params = {}\n , paramsArray = string.replace(rNonQuerystring, ' ').split('&')\n\n for (var i = 0, l = paramsArray.length; i < l; i++) {\n var paramString = paramsArray[i]\n , pair = paramString.split('=')\n , paramName = decodeURIComponent([pair[0]])\n , paramValue = pair.length>2?decodeURIComponent([pair.slice(1).join('=')]):decodeURIComponent([pair[1]])\n if(/^.*\\[\\]$/.test(paramName)){\n paramName=paramName.substr(0,paramName.length-2);\n params[paramName]=params[paramName]||[];\n params[paramName].push(paramValue);\n continue;\n }\n paramName&&(params[paramName] = paramValue)\n }\n\n return params\n}\n\n// copy from\n// https://github.com/jfromaniello/url-join/blob/master/lib/url-join.js\n// version: b02169596877a1e6cd518f1b0d711f38c721fb02\nfunction normalize(str) {\n return str\n .replace(/[\\/]+/g, '/')\n .replace(/\\/\\?/g, '?')\n .replace(/\\/\\#/g, '#')\n .replace(/\\:\\//g, '://')\n}\n\nvar join = exports.join = function() {\n var joined = [].slice.call(arguments, 0).join('/')\n return normalize(joined)\n}\n\n\nfunction getUrlCompontents(url) {\n var hash = ''\n , search = ''\n , rest = url\n , hashIndex = rest.indexOf('#')\n , markIndex = rest.indexOf('?')\n\n if (hashIndex !== -1) {\n hash = rest.substr(hashIndex)\n rest = rest.slice(0, hashIndex)\n }\n\n if (markIndex !== -1) {\n search = rest.substr(markIndex)\n rest = rest.slice(0, markIndex)\n }\n\n return { rest: rest, search: search, hash: hash }\n}\n\nfunction removeSearch(url) {\n var compontents = getUrlCompontents(url)\n return compontents.rest + (compontents.hash || '')\n}\n\nexports.resetParams = function(url, params) {\n return exports.addParam(removeSearch(url), params)\n}\n\nexports.addParam = function(url, params) {\n var paramString = ''\n\n for (var key in params) {\n if (!params.hasOwnProperty(key)) { continue }\n\n var value = params[key]\n if (value === '' || typeof value === 'undefined') { continue }\n\n if (paramString) { paramString += '&' }\n paramString += encodeURIComponent(key)\n + '=' + encodeURIComponent(value)\n }\n\n if (!paramString) { return url }\n\n var compontents = getUrlCompontents(url);\n\n var hash = compontents.hash\n , search = compontents.search\n , rest = compontents.rest\n\n return (rest\n + (search ? (search + '&' + paramString) : ('?' + paramString))\n + (hash ? hash : ''))\n}\n\nvar hasSameOrigin = exports.hasSameOrigin = function(url, originUrl) {\n if (url[0] === '/') { return true }\n var rOrigin = new RegExp('^' + originUrl)\n return rOrigin.test(url)\n}\n\nexports.getRelativeUrl = function(url, originUrl) {\n if (url[0] === '/' || !hasSameOrigin(url, originUrl)) { return url }\n return join('/', url.substr(originUrl.length))\n}\n\nexports.getURLParameter = function(name, search) {\n search = search || location.search\n var param = search.split(name + '=')[1];\n return param ? decodeURIComponent(param.split('&')[0]) : null\n}\n\nvar rQuestionMark = /^\\?/\nexports.getURLParameters = function(search) {\n search = search || location.search\n search = search.replace(rQuestionMark, '');\n return deparam(search)\n}\n\n// Copy From Backbone.js#Backbone.Route\n// Gets the true hash value. Cannot use location.hash directly due to bug\n// in Firefox where location.hash will always be decoded.\nexports.getHash = function() {\n var match = window.location.href.match(/#(.*)$/)\n return match ? match[1] : ''\n}\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.7';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy43JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n"],"sourceRoot":""}