Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / underscore.coffee
Size: Mime:
€]q(cpygments.token
_TokenType
qXTextq…q…qq}q(Xsubtypesqcbuiltins
set
q]q	(hhXRootq
†q…qq
}q(hh]q…qRqXparentqhubhhXSymbolq†q…qq}q(hh]q…qRqhhubhhXRagq†q…qq}q(hh]q …q!Rq"hhubhhX
Whitespaceq#†q$…q%q&}q'(hh]q(…q)Rq*hhubhhXBeerq+†q,…q-q.}q/(hh]q0…q1Rq2hhubhhXPunctuationq3†q4…q5q6}q7(hh]q8…q9Rq:hhube…q;Rq<hh)…q=q>}q?(hh]q@(hXEscapeqA…qB…qCqD}qE(hh]qF…qGRqHhh>ubhXOperatorqI…qJ…qKqL}qM(hh]qN(hhIXDBSqO†qP…qQqR}qS(hh]qT…qURqVhhLubhhIXWordqW†qX…qYqZ}q[(hh]q\…q]Rq^hhLube…q_Rq`hh>hWhZhOhRubhXNameqa…qb…qcqd}qe(hh]qf(hhaXTagqg†qh…qiqj}qk(hh]ql…qmRqnhhdubhhaXEntityqo†qp…qqqr}qs(hh]qthhahohO‡qu…qvqw}qx(hh]qy…qzRq{hhruba…q|Rq}hhdhOhwubhhaX	Exceptionq~†q…q€q}q‚(hh]qƒ…q„Rq…hhdubhhaX	Decoratorq††q‡…qˆq‰}qŠ(hh]q‹…qŒRqhhdubhhaXClassqކq…qq‘}q’(hh]q“(hhahŽhO‡q”…q•q–}q—(hh]q˜…q™Rqšhh‘ubhhahŽXStartq›‡qœ…qqž}qŸ(hh]q …q¡Rq¢hh‘ube…q£Rq¤hhdh›hžhOh–ubhhaXVariableq¥†q¦…q§q¨}q©(hh]qª(hhah¥X	Anonymousq«‡q¬…q­q®}q¯(hh]q°…q±Rq²hh¨ubhhah¥hއq³…q´qµ}q¶(hh]q·…q¸Rq¹hh¨ubhhah¥XMagicqº‡q»…q¼q½}q¾(hh]q¿…qÀRqÁhh¨ubhhah¥XGlobalq‡qÅqāqÅ}qÆ(hh]qDžqÈRqÉhh¨ubhhah¥XInstanceqʇq˅q́qÍ}qÎ(hh]qυqÐRqÑhh¨ube…qÒRqÓhhdhŽhµhÂhÅhÊhÍhºh½h«h®ubhhaX	AttributeqԆqՅqցq×}qØ(hh]qÙhhahÔh¥‡qڅqہqÜ}qÝ(hh]qޅqßRqàhh×uba…qáRqâhhdh¥hÜubhhaX	Namespaceqã†qä…qåqæ}qç(hh]qè…qéRqêhhdubhhaXPropertyqë†qì…qíqî}qï(hh]qð…qñRqòhhdubhhah†qó…qôqõ}qö(hh]q÷…qøRqùhhdubhhaXClassesqú†qû…qüqý}qþ(hh]qÿ…rRrhhdubhhaXPseudor†r…rr}r(hh]r…rRr	hhdubhhaXLabelr
†r…rr
}r(hh]r…rRrhhdubhhahI†r…rr}r(hh]r…rRrhhdubhhaXBuiltinr†r…rr}r(hh]r(hhajj‡r…r r!}r"(hh]r#…r$Rr%hjubhhajXTyper&‡r'…r(r)}r*(hh]r+…r,Rr-hjube…r.Rr/hhdjj!j&j)ubhhaXFieldr0†r1…r2r3}r4(hh]r5…r6Rr7hhdubhhaXOtherr8†r9…r:r;}r<(hh]r=hhaj8XMemberr>‡r?…r@rA}rB(hh]rC…rDRrEhj;uba…rFRrGhhdj>jAubhhaXFunctionrH†rI…rJrK}rL(hh]rMhhajHhº‡rN…rOrP}rQ(hh]rR…rSRrThjKuba…rURrVhhdhºjPubhhaj&†rW…rXrY}rZ(hh]r[…r\Rr]hhdubhhaXConstantr^†r_…r`ra}rb(hh]rc…rdRrehhdube…rfRrghh>hÔh×jjhŽh‘j^jah†h‰hohrh~hjHjKhëhîj
j
hãhæj8j;hghjh¥h¨j0j3hhõjjhIjhúhýj&jYubhXLiteralrh…ri…rjrk}rl(hh]rm(hjhj8†rn…rorp}rq(hh]rr…rsRrthjkubhjhXCharru†rv…rwrx}ry(hh]rz…r{Rr|hjkubhjhXDater}†r~…rr€}r(hh]r‚…rƒRr„hjkubhjhXScalarr…†r†…r‡rˆ}r‰(hh]rŠhjhj…XPlainr‹‡rŒ…rrŽ}r(hh]r…r‘Rr’hjˆuba…r“Rr”hjkj‹jŽubhjhXStringr•†r–…r—r˜}r™(hh]rš(hjhj•XInterpolr›‡rœ…rrž}rŸ(hh]r …r¡Rr¢hj˜ubhjhj•X	Delimeterr£‡r¤…r¥r¦}r§(hh]r¨…r©Rrªhj˜ubhjhj•ju‡r«…r¬r­}r®(hh]r¯…r°Rr±hj˜ubhjhj•h‡r²…r³r´}rµ(hh]r¶…r·Rr¸hj˜ubhjhj•XSingler¹‡rº…r»r¼}r½(hh]r¾…r¿RrÀhj˜ubhjhj•j8‡rÁ…rrÃ}rÄ(hh]rÅ…rÆRrÇhj˜ubhjhj•XBacktickrȇrÉ…rʁrË}rÌ(hh]rÍ…rÎRrÏhj˜ubhjhj•hA‡rÐ…rсrÒ}rÓ(hh]rÔ…rÕRrÖhj˜ubhjhj•XRegexrׇrØ…rفrÚ}rÛ(hh]rÜ…rÝRrÞhj˜ubhjhj•XMomentr߇rà…rárâ}rã(hh]rä…råRræhj˜ubhjhj•XBooleanrç‡rè…rérê}rë(hh]rì…ríRrîhj˜ubhjhj•X	Characterrï‡rð…rñrò}ró(hh]rô…rõRröhj˜ubhjhj•X	Delimiterr÷‡rø…rùrú}rû(hh]rü…rýRrþhj˜ubhjhj•XDocrÿ‡r…rr}r(hh]r…rRrhj˜ubhjhj•ha‡r…rr	}r
(hh]r…rRr
hj˜ubhjhj•XAffixr‡r…rr}r(hh]r…rRrhj˜ubhjhj•XHeredocr‡r…rr}r(hh]r…rRrhj˜ubhjhj•XDoubler‡r…r r!}r"(hh]r#…r$Rr%hj˜ubhjhj•XInterpr&‡r'…r(r)}r*(hh]r+…r,Rr-hj˜ubhjhj•XAtomr.‡r/…r0r1}r2(hh]r3…r4Rr5hj˜ube…r6Rr7hjkjjjÈjËjuj­j÷jújÿjjj!hAjÒjjj›jžj8jÃj×jÚj¹j¼hj´jïjòjßjâj&j)jçjêj£j¦j.j1haj	ubhjhXNumberr8†r9…r:r;}r<(hh]r=(hjhj8XFloatr>‡r?…r@rA}rB(hh]rC…rDRrEhj;ubhjhj8XDecrF‡rG…rHrI}rJ(hh]rK…rLRrMhj;ubhjhj8XRadixrN‡rO…rPrQ}rR(hh]rS…rTRrUhj;ubhjhj8XOctrV‡rW…rXrY}rZ(hh]r[…r\Rr]hj;ubhjhj8XBinr^‡r_…r`ra}rb(hh]rc…rdRrehj;ubhjhj8hԇrf…rgrh}ri(hh]rj…rkRrlhj;ubhjhj8XHexrm‡rn…rorp}rq(hh]rr…rsRrthj;ubhjhj8XIntegerru‡rv…rwrx}ry(hh]rzh(jhj8juXLongr{tr|…r}r~}r(hh]r€…rRr‚hjxuba…rƒRr„hj;j{j~ubhjhj8XDecimalr…‡r†…r‡rˆ}r‰(hh]rŠ…r‹RrŒhj;ube…rRrŽhjkj^jaj>jAjmjpjujxjVjYjNjQhÔjhj…jˆjFjIube…rRrhh>j•j˜j8j;j}j€j…jˆj8jpjujxubhXGenericr‘…r’…r“r”}r•(hh]r–(hj‘XErrorr—†r˜…r™rš}r›(hh]rœ…rRržhj”ubhj‘X
SubheadingrŸ†r …r¡r¢}r£(hh]r¤…r¥Rr¦hj”ubhj‘X	Tracebackr§†r¨…r©rª}r«(hh]r¬…r­Rr®hj”ubhj‘XOutputr¯†r°…r±r²}r³(hh]r´…rµRr¶hj”ubhj‘XPromptr·†r¸…r¹rº}r»(hh]r¼…r½Rr¾hj”ubhj‘XDeletedr¿†rÀ…rÁrÂ}rÃ(hh]rÄ…rÅRrÆhj”ubhj‘XInsertedrdžrÈ…rɁrÊ}rË(hh]rÌ…rÍRrÎhj”ubhj‘XHeadingrφrÐ…rсrÒ}rÓ(hh]rÔ…rÕRrÖhj”ubhj‘XStrongr׆rØ…rفrÚ}rÛ(hh]rÜ…rÝRrÞhj”ubhj‘XEmphr߆rà…rárâ}rã(hh]rä…råRræhj”ube…rçRrèhh>j¿jÂjßjâj—jšjÏjÒjÇjÊj¯j²j·jºj×jÚjŸj¢j§jªubhj—…ré…rêrë}rì(hh]rí…rîRrïhh>ubhXKeywordrð…rñ…ròró}rô(hh]rõ(hjðhW†rö…r÷rø}rù(hh]rú…rûRrühjóubhjðjð†rý…rþrÿ}r(hh]r…rRrhjóubhjðj&†r…rr}r(hh]r…r	Rr
hjóubhjðXPreProcr†r…r
r}r(hh]r…rRrhjóubhjðXControlr†r…rr}r(hh]r…rRrhjóubhjðj^†r…rr}r(hh]r…r Rr!hjóubhjðhã†r"…r#r$}r%(hh]r&…r'Rr(hjóubhjðj†r)…r*r+}r,(hh]r-…r.Rr/hjóubhjðXDeclarationr0†r1…r2r3}r4(hh]r5…r6Rr7hjóubhjðXReservedr8†r9…r:r;}r<(hh]r=…r>Rr?hjóube…r@RrAhh>j^jj0j3hãj$jj+j8j;j&jjjjðjÿjjhWjøubhj8…rB…rCrD}rE(hh]rF…rGRrHhh>ubhhXCommentrI…rJ…rKrL}rM(hh]rN(hjIXPreprocrO†rP…rQrR}rS(hh]rT…rURrVhjLubhjIXMultirW†rX…rYrZ}r[(hh]r\…r]Rr^hjLubhjIXHashbangr_†r`…rarb}rc(hh]rd…reRrfhjLubhjIj¹†rg…rhri}rj(hh]rk…rlRrmhjLubhjIX
SingleLinern†ro…rprq}rr(hh]rs…rtRruhjLubhjIjÿ†rv…rwrx}ry(hh]rz…r{Rr|hjLubhjIX	Directiver}†r~…rr€}r(hh]r‚…rƒRr„hjLubhjIX	Multiliner…†r†…r‡rˆ}r‰(hh]rŠ…r‹RrŒhjLubhjIX
Singleliner†rŽ…rr}r‘(hh]r’…r“Rr”hjLubhjIXPreprocFiler•†r–…r—r˜}r™(hh]rš…r›RrœhjLubhjIXSpecialr†rž…rŸr }r¡(hh]r¢…r£Rr¤hjLube…r¥Rr¦hh>j_jbj…jˆjOjRj•j˜j¹jijj j}j€jnjqjÿjxjWjZjjubhh3…r§…r¨r©}rª(hh]r«hh3X	Indicatorr¬†r­…r®r¯}r°(hh]r±…r²Rr³hj©uba…r´Rrµhh>j¬j¯ube…r¶Rr·hhhAhDj—jëj8jDjðjóhahdjhjkh3j©hIhLjIjLj‘j”XTokenr¸h>j•j˜j8j;ubh#h&hhh3h6h
h
h+h.hhubX  r¹†rºjiX# Underscore.coffee
r»†r¼hX  r½†r¾jiX/# (c) 2010 Jeremy Ashkenas, DocumentCloud Inc.
r¿†rÀhX  rÁ†rÂjiXI# Underscore is freely distributable under the terms of the MIT license.
rÆrÄhX  rņrÆjiXH# Portions of Underscore are inspired by or borrowed from Prototype.js,
rdžrÈhX  rɆrÊjiXA# Oliver Steele's Functional, and John Resig's Micro-Templating.
rˆrÌhX  r͆rÎjiX%# For all details and documentation:
rφrÐhX  rцrÒjiX.# http://documentcloud.github.com/underscore/
rÓ†rÔhX

  rÕ†rÖjiXM# ------------------------- Baseline setup ---------------------------------
r׆rØhX
  rÙ†rÚjiXQ# Establish the root object, "window" in the browser, or "global" on the server.
rÛ†rÜhX  r݆rÞh¨Xroot: r߆ràjóXthisrá†râhX


  rã†räjiX/# Save the previous value of the "_" variable.
rå†ræhX  rç†rèh¨XpreviousUnderscore: ré†rêj;Xrootrë†rìj©X.rí†rîj;X_rï†rðhX


  rñ†ròjiXJ# If Underscore is called as a function, it returns a wrapped object that
ró†rôhX  rõ†röjiXG# can be used OO-style. This wrapper holds altered versions of all the
r÷†røhX  rù†rújiX8# underscore functions. Wrapped objects may be chained.
rû†rühX  rý†rþh¨X	wrapper: rÿ†rjKX(obj) ->r†rhX
    r†rjóXthisr†rj©jí†rh¨X
_wrapped: r†r	j;Xobjr
†rhX
    r†r
jóXthisr†rhX


  r†rjiXJ# Establish the object that gets thrown to break out of a loop iteration.
r†rhX  r†rh¨X	breaker: r†rjóXifr†rhX r†rjóXtypeofr†rj©X(r†rj;X
StopIterationr †r!j©X)r"†r#hj†r$hLXisr%†r&hj†r'j˜X'r(†r)j˜X	undefinedr*†r+j˜j(†r,hj†r-jóXthenr.†r/hj†r0j˜j(†r1j˜X	__break__r2†r3j˜j(†r4hj†r5jóXelser6†r7hj†r8j;X
StopIterationr9†r:hX


  r;†r<jiXG# Create a safe reference to the Underscore object forreference below.
r=†r>hX  r?†r@h¨X_: rA†rBh¨Xroot._: rC†rDjKX(obj) ->rE†rFhj†rGjóXnewrH†rIhj†rJj;XwrapperrK†rLj©j†rMj;XobjrN†rOj©j"†rPhX


  rQ†rRjiX-# Export the Underscore object for CommonJS.
rS†rThX  rU†rVjóXifrW†rXhj†rYjóXtypeofrZ†r[j©j†r\j;Xexportsr]†r^j©j"†r_hj†r`hLX!=ra†rbhj†rcj˜j(†rdj˜X	undefinedre†rfj˜j(†rghj†rhjóXthenri†rjhj†rkh¨Xexports._: rl†rmj;jï†rnhX


  ro†rpjiXH# Create quick reference variables for speed access to core prototypes.
rq†rrhX  rs†rth¨Xslice: ru†rvhX               rw†rxjXArrayry†rzhLX:r{†r|hLj{†r}j;Xslicer~†rhX
  r€†rh¨X	unshift: r‚†rƒhX
             r„†r…jXArrayr††r‡hLj{†rˆhLj{†r‰j;XunshiftrІr‹hX
  rŒ†rh¨X
toString: rކrhX            r†r‘jXObjectr’†r“hLj{†r”hLj{†r•j;XtoStringr–†r—hX
  r˜†r™h¨XhasOwnProperty: rš†r›hX      rœ†rjXObjectrž†rŸhLj{†r hLj{†r¡j;XhasOwnPropertyr¢†r£hX
  r¤†r¥h¨XpropertyIsEnumerable: r¦†r§jXObjectr¨†r©hLj{†rªhLj{†r«j;XpropertyIsEnumerabler¬†r­hX


  r®†r¯jiX# Current version.
r°†r±hX  r²†r³h¨X_.VERSION: r´†rµj˜j(†r¶j˜X0.5.7r·†r¸j˜j(†r¹hX


  rº†r»jiXM# ------------------------ Collection Functions: ---------------------------
r¼†r½hX
  r¾†r¿jiX+# The cornerstone, an each implementation.
rÀ†rÁhX  r†rÃjiXA# Handles objects implementing forEach, arrays, and raw objects.
rĆrÅhX  rƆrÇh¨X_.each: rȆrÉjKX(obj, iterator, context) ->rʆrËhX
    r̆rÍh¨Xindex: rΆrÏjxX0rІrÑhX
    rÒ†rÓjóXtryrÔ†rÕhX
      rÖ†r×jóXreturnr؆rÙhj†rÚj;XobjrÛ†rÜj©jí†rÝj;XforEachrÞ†rßj©j†ràj;Xiteratorrá†râj©X,rã†rähj†råj;Xcontextræ†rçj©j"†rèhj†réjóXifrê†rëhj†rìj;Xobjrí†rîj©jí†rïj;XforEachrð†rñhX
      rò†rójóXifrô†rõhj†röj;jï†r÷j©jí†røj;XisArrayrù†rúj©j†rûj;Xobjrü†rýj©j"†rþhj†rÿhLXorr†rhj†rj;jï†rj©jí†rj;XisArgumentsr†rj©j†rj;Xobjr†r	j©j"†r
hX	
        r†rjóXreturnr
†rhj†rj;Xiteratorr†rj©jí†rj;Xcallr†rj©j†rj;Xcontextr†rj©jã†rhj†rj;Xobjr†rj©X[r†rj;Xir†rj©X]r †r!j©jã†r"hj†r#j;j†r$j©jã†r%hj†r&j;Xobjr'†r(j©j"†r)hj†r*jóXforr+†r,hj†r-j;j†r.hj†r/jóXinr0†r1hj†r2j©j†r3jxjІr4j©jí†r5j©jí†r6j©jí†r7j;Xobjr8†r9j©jí†r:j;Xlengthr;†r<j©j †r=hX
      r>†r?j;Xiteratorr@†rAj©jí†rBj;XcallrC†rDj©j†rEj;XcontextrF†rGj©jã†rHhj†rIj;XvalrJ†rKj©jã†rLhj†rMj;XkeyrN†rOj©jã†rPhj†rQj;XobjrR†rSj©j"†rThj†rUjóXforrV†rWhj†rXj;XkeyrY†rZj©jã†r[hj†r\j;Xvalr]†r^hj†r_jóXofr`†rahj†rbj;Xobjrc†rdhX
    re†rfjóXcatchrg†rhhj†rij;Xerj†rkhX
      rl†rmjóXthrowrn†rohj†rpj;jj†rqhj†rrjóXifrs†rthj†ruj;jj†rvhj†rwhLXisntrx†ryhj†rzj;Xbreakerr{†r|hX
    r}†r~j;Xobjr†r€hX


  r†r‚jiXN# Return the results of applying the iterator to each element. Use JavaScript
rƒ†r„hX  r…†r†jiX%# 1.6's version of map, if possible.
r‡†rˆhX  r‰†rŠh¨X_.map: r‹†rŒjKX(obj, iterator, context) ->r†rŽhX
    r†rjóXreturnr‘†r’hj†r“j;Xobjr”†r•j©jí†r–j;Xmapr—†r˜j©j†r™j;Xiteratorrš†r›j©jã†rœhj†rj;Xcontextrž†rŸj©j"†r hj†r¡jóXifr¢†r£hj†r¤j©j†r¥j;Xobjr¦†r§hj†r¨hLXandr©†rªhj†r«j;jï†r¬j©jí†r­j;X
isFunctionr®†r¯j©j†r°j;Xobjr±†r²j©jí†r³j;Xmapr´†rµj©j"†r¶j©j"†r·hX
    r¸†r¹h¨X	results: rº†r»j©j†r¼j©j †r½hX
    r¾†r¿j;jï†rÀj©jí†rÁj;Xeachr†rÃhj†rÄj;XobjrņrÆj©jã†rÇhj†rÈjKX(value, index, list) ->rɆrÊhX
      rˆrÌj;Xresultsr͆rÎj©jí†rÏj;XpushrІrÑj©j†rÒj;XiteratorrÓ†rÔj©jí†rÕj;XcallrÖ†r×j©j†rØj;XcontextrÙ†rÚj©jã†rÛhj†rÜj;Xvaluer݆rÞj©jã†rßhj†ràj;Xindexrá†râj©jã†rãhj†räj;Xlistrå†ræj©j"†rçj©j"†rèhX
    ré†rêj;Xresultsrë†rìhX


  rí†rîjiXH# Reduce builds up a single result from a list of values. Also known as
rï†rðhX  rñ†ròjiXJ# inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible.
ró†rôhX  rõ†röh¨X
_.reduce: r÷†røjKX!(obj, memo, iterator, context) ->rù†rúhX
    rû†rüjóXreturnrý†rþhj†rÿj;Xobjr†rj©jí†rj;Xreducer†rj©j†rj;jï†rj©jí†rj;Xbindr†r	j©j†r
j;Xiteratorr†rj©jã†r
hj†rj;Xcontextr†rj©j"†rj©jã†rhj†rj;Xmemor†rj©j"†rhj†rjóXifr†rhj†rj©j†rj;Xobjr†rhj†rhLXandr†r hj†r!j;jï†r"j©jí†r#j;X
isFunctionr$†r%j©j†r&j;Xobjr'†r(j©jí†r)j;Xreducer*†r+j©j"†r,j©j"†r-hX
    r.†r/j;jï†r0j©jí†r1j;Xeachr2†r3hj†r4j;Xobjr5†r6j©jã†r7hj†r8jKX(value, index, list) ->r9†r:hX
      r;†r<h¨Xmemo: r=†r>j;Xiteratorr?†r@j©jí†rAj;XcallrB†rCj©j†rDj;XcontextrE†rFj©jã†rGhj†rHj;XmemorI†rJj©jã†rKhj†rLj;XvaluerM†rNj©jã†rOhj†rPj;XindexrQ†rRj©jã†rShj†rTj;XlistrU†rVj©j"†rWhX
    rX†rYj;XmemorZ†r[hX


  r\†r]jiXE# The right-associative version of reduce, also known as foldr. Uses
r^†r_hX  r`†rajiX9# JavaScript 1.8's version of reduceRight, if available.
rb†rchX  rd†reh¨X_.reduceRight: rf†rgjKX!(obj, memo, iterator, context) ->rh†rihX
    rj†rkjóXreturnrl†rmhj†rnj;Xobjro†rpj©jí†rqj;XreduceRightrr†rsj©j†rtj;jï†ruj©jí†rvj;Xbindrw†rxj©j†ryj;Xiteratorrz†r{j©jã†r|hj†r}j;Xcontextr~†rj©j"†r€j©jã†rhj†r‚j;Xmemorƒ†r„j©j"†r…hj†r†jóXifr‡†rˆhj†r‰j©j†rŠj;Xobjr‹†rŒhj†rhLXandrކrhj†rj;jï†r‘j©jí†r’j;X
isFunctionr“†r”j©j†r•j;Xobjr–†r—j©jí†r˜j;XreduceRightr™†ršj©j"†r›j©j"†rœhX
    r†ržj;jï†rŸj©jí†r j;Xeachr¡†r¢hj†r£j;jï†r¤j©jí†r¥j;Xcloner¦†r§j©j†r¨j;jï†r©j©jí†rªj;XtoArrayr«†r¬j©j†r­j;Xobjr®†r¯j©j"†r°j©j"†r±j©jí†r²j;Xreverser³†r´j©j†rµj©j"†r¶j©jã†r·hj†r¸jKX(value, index) ->r¹†rºhX
      r»†r¼h¨Xmemo: r½†r¾j;Xiteratorr¿†rÀj©jí†rÁj;Xcallr†rÃj©j†rÄj;XcontextrņrÆj©jã†rÇhj†rÈj;XmemorɆrÊj©jã†rËhj†rÌj;Xvaluer͆rÎj©jã†rÏhj†rÐj;XindexrцrÒj©jã†rÓhj†rÔj;XobjrÕ†rÖj©j"†r×hX
    r؆rÙj;XmemorÚ†rÛhX


  r܆rÝjiX4# Return the first value which passes a truth test.
rÞ†rßhX  rà†ráh¨X
_.detect: râ†rãjKX(obj, iterator, context) ->rä†råhX
    ræ†rçh¨Xresult: rè†réjXnullrê†rëhX
    rì†ríj;jï†rîj©jí†rïj;Xeachrð†rñhj†ròj;Xobjró†rôj©jã†rõhj†röjKX(value, index, list) ->r÷†røhX
      rù†rújóXifrû†rühj†rýj;Xiteratorrþ†rÿj©jí†rj;Xcallr†rj©j†rj;Xcontextr†rj©jã†rhj†rj;Xvaluer†r	j©jã†r
hj†rj;Xindexr†r
j©jã†rhj†rj;Xlistr†rj©j"†rhX	
        r†rh¨Xresult: r†rj;Xvaluer†rhX	
        r†rj;jï†rj©jí†rj;X	breakLoopr†rj©j†rj©j"†r hX
    r!†r"j;Xresultr#†r$hX


  r%†r&jiXG# Return all the elements that pass a truth test. Use JavaScript 1.6's
r'†r(hX  r)†r*jiX# filter(), if it exists.
r+†r,hX  r-†r.h¨X
_.select: r/†r0jKX(obj, iterator, context) ->r1†r2hX
    r3†r4jóXifr5†r6hj†r7j;Xobjr8†r9hj†r:hLXandr;†r<hj†r=j;jï†r>j©jí†r?j;X
isFunctionr@†rAj©j†rBj;XobjrC†rDj©jí†rEj;XfilterrF†rGj©j"†rHhj†rIjóXthenrJ†rKhj†rLjóXreturnrM†rNhj†rOj;XobjrP†rQj©jí†rRj;XfilterrS†rTj©j†rUj;XiteratorrV†rWj©jã†rXhj†rYj;XcontextrZ†r[j©j"†r\hX
    r]†r^h¨X	results: r_†r`j©j†raj©j †rbhX
    rc†rdj;jï†rej©jí†rfj;Xeachrg†rhhj†rij;Xobjrj†rkj©jã†rlhj†rmjKX(value, index, list) ->rn†rohX
      rp†rqj;Xresultsrr†rsj©jí†rtj;Xpushru†rvj©j†rwj;Xvaluerx†ryj©j"†rzhj†r{jóXifr|†r}hj†r~j;Xiteratorr†r€j©jí†rj;Xcallr‚†rƒj©j†r„j;Xcontextr…†r†j©jã†r‡hj†rˆj;Xvaluer‰†rŠj©jã†r‹hj†rŒj;Xindexr†rŽj©jã†rhj†rj;Xlistr‘†r’j©j"†r“hX
    r”†r•j;Xresultsr–†r—hX


  r˜†r™jiX8# Return all the elements for which a truth test fails.
rš†r›hX  rœ†rh¨X
_.reject: rž†rŸjKX(obj, iterator, context) ->r †r¡hX
    r¢†r£h¨X	results: r¤†r¥j©j†r¦j©j †r§hX
    r¨†r©j;jï†rªj©jí†r«j;Xeachr¬†r­hj†r®j;Xobjr¯†r°j©jã†r±hj†r²jKX(value, index, list) ->r³†r´hX
      rµ†r¶j;Xresultsr·†r¸j©jí†r¹j;Xpushrº†r»j©j†r¼j;Xvaluer½†r¾j©j"†r¿hj†rÀjóXifrÁ†rÂhj†rÃhLXnotrĆrÅhj†rÆj;XiteratorrdžrÈj©jí†rÉj;XcallrʆrËj©j†rÌj;Xcontextr͆rÎj©jã†rÏhj†rÐj;XvaluerцrÒj©jã†rÓhj†rÔj;XindexrÕ†rÖj©jã†r×hj†rØj;XlistrÙ†rÚj©j"†rÛhX
    r܆rÝj;XresultsrÞ†rßhX


  rà†rájiXH# Determine whether all of the elements match a truth test. Delegate to
râ†rãhX  rä†råjiX.# JavaScript 1.6's every(), if it is present.
ræ†rçhX  rè†réh¨X_.all: rê†rëjKX(obj, iterator, context) ->rì†ríhX
    rî†rïj;Xiteratorrð†rñhj†ròhLX||ró†rôhLX=rõ†röhj†r÷j;jï†røj©jí†rùj;Xidentityrú†rûhX
    rü†rýjóXreturnrþ†rÿhj†rj;Xobjr†rj©jí†rj;Xeveryr†rj©j†rj;Xiteratorr†rj©jã†r	hj†r
j;Xcontextr†rj©j"†r
hj†rjóXifr†rhj†rj;Xobjr†rhj†rhLXandr†rhj†rj;jï†rj©jí†rj;X
isFunctionr†rj©j†rj;Xobjr†rj©jí†rj;Xeveryr †r!j©j"†r"hX
    r#†r$h¨Xresult: r%†r&jXtruer'†r(hX
    r)†r*j;jï†r+j©jí†r,j;Xeachr-†r.hj†r/j;Xobjr0†r1j©jã†r2hj†r3jKX(value, index, list) ->r4†r5hX
      r6†r7j;jï†r8j©jí†r9j;X	breakLoopr:†r;j©j†r<j©j"†r=hj†r>jóXunlessr?†r@hj†rAj©j†rBh¨Xresult: rC†rDj;XresultrE†rFhj†rGhLXandrH†rIhj†rJj;XiteratorrK†rLj©jí†rMj;XcallrN†rOj©j†rPj;XcontextrQ†rRj©jã†rShj†rTj;XvaluerU†rVj©jã†rWhj†rXj;XindexrY†rZj©jã†r[hj†r\j;Xlistr]†r^j©j"†r_j©j"†r`hX
    ra†rbj;Xresultrc†rdhX


  re†rfjiXL# Determine if at least one element in the object matches a truth test. Use
rg†rhhX  ri†rjjiX)# JavaScript 1.6's some(), if it exists.
rk†rlhX  rm†rnh¨X_.any: ro†rpjKX(obj, iterator, context) ->rq†rrhX
    rs†rtj;Xiteratorru†rvhj†rwhLX||rx†ryhLjõ†rzhj†r{j;jï†r|j©jí†r}j;Xidentityr~†rhX
    r€†rjóXreturnr‚†rƒhj†r„j;Xobjr…†r†j©jí†r‡j;Xsomerˆ†r‰j©j†rŠj;Xiteratorr‹†rŒj©jã†rhj†rŽj;Xcontextr†rj©j"†r‘hj†r’jóXifr“†r”hj†r•j;Xobjr–†r—hj†r˜hLXandr™†ršhj†r›j;jï†rœj©jí†rj;X
isFunctionrž†rŸj©j†r j;Xobjr¡†r¢j©jí†r£j;Xsomer¤†r¥j©j"†r¦hX
    r§†r¨h¨Xresult: r©†rªjXfalser«†r¬hX
    r­†r®j;jï†r¯j©jí†r°j;Xeachr±†r²hj†r³j;Xobjr´†rµj©jã†r¶hj†r·jKX(value, index, list) ->r¸†r¹hX
      rº†r»j;jï†r¼j©jí†r½j;X	breakLoopr¾†r¿j©j†rÀj©j"†rÁhj†rÂjóXifrÆrÄhj†rÅj©j†rÆh¨Xresult: rdžrÈj;XiteratorrɆrÊj©jí†rËj;Xcallr̆rÍj©j†rÎj;XcontextrφrÐj©jã†rÑhj†rÒj;XvaluerÓ†rÔj©jã†rÕhj†rÖj;Xindexr׆rØj©jã†rÙhj†rÚj;XlistrÛ†rÜj©j"†rÝj©j"†rÞhX
    r߆ràj;Xresultrá†râhX


  rã†räjiXA# Determine if a given value is included in the array or object,
rå†ræhX  rç†rèjiX# based on '==='.
ré†rêhX  rë†rìh¨X_.include: rí†rîjKX(obj, target) ->rï†rðhX
    rñ†ròjóXreturnró†rôhj†rõj;jï†röj©jí†r÷j;XindexOfrø†rùj©j†rúj;Xobjrû†rüj©jã†rýhj†rþj;Xtargetrÿ†r	j©j"†r	hj†r	hLXisntr	†r	hj†r	hLX-r	†r	jxX1r	†r		hj†r
	jóXifr	†r	hj†r
	j;jï†r	j©jí†r	j;XisArrayr	†r	j©j†r	j;Xobjr	†r	j©j"†r	hX
    r	†r	jóXforr	†r	hj†r	j;Xkeyr	†r	j©jã†r	hj†r	j;Xvalr	†r 	hj†r!	jóXofr"	†r#	hj†r$	j;Xobjr%	†r&	hX
      r'	†r(	jóXreturnr)	†r*	hj†r+	jXtruer,	†r-	hj†r.	jóXifr/	†r0	hj†r1	j;Xvalr2	†r3	hj†r4	hLXisr5	†r6	hj†r7	j;Xtargetr8	†r9	hX
    r:	†r;	jXfalser<	†r=	hX


  r>	†r?	jiX@# Invoke a method with arguments on every item in a collection.
r@	†rA	hX  rB	†rC	h¨X
_.invoke: rD	†rE	jKX(obj, method) ->rF	†rG	hX
    rH	†rI	h¨Xargs: rJ	†rK	j;jï†rL	j©jí†rM	j;XrestrN	†rO	j©j†rP	j;X	argumentsrQ	†rR	j©jã†rS	hj†rT	jxX2rU	†rV	j©j"†rW	hX
    rX	†rY	j©j†rZ	jóXifr[	†r\	hj†r]	j;Xmethodr^	†r_	hj†r`	jóXthenra	†rb	hj†rc	j;Xvalrd	†re	j©j†rf	j;Xmethodrg	†rh	j©j †ri	hj†rj	jóXelserk	†rl	hj†rm	j;Xvalrn	†ro	j©j"†rp	j©jí†rq	j;Xapplyrr	†rs	j©j†rt	j;Xvalru	†rv	j©jã†rw	hj†rx	j;Xargsry	†rz	j©j"†r{	hj†r|	jóXforr}	†r~	hj†r	j;Xvalr€	†r	hj†r‚	jóXinrƒ	†r„	hj†r…	j;Xobjr†	†r‡	hX


  rˆ	†r‰	jiXH# Convenience version of a common use case of map: fetching a property.
rŠ	†r‹	hX  rŒ	†r	h¨X	_.pluck: rŽ	†r	jKX
(obj, key) ->r	†r‘	hX
    r’	†r“	j;jï†r”	j©jí†r•	j;Xmapr–	†r—	j©j†r˜	j;Xobjr™	†rš	j©jã†r›	hj†rœ	j©j†r	jKX(val) ->rž	†rŸ	hj†r 	j;Xvalr¡	†r¢	j©j†r£	j;Xkeyr¤	†r¥	j©j †r¦	j©j"†r§	j©j"†r¨	hX


  r©	†rª	jiX7# Return the maximum item or (item-based computation).
r«	†r¬	hX  r­	†r®	h¨X_.max: r¯	†r°	jKX(obj, iterator, context) ->r±	†r²	hX
    r³	†r´	jóXreturnrµ	†r¶	hj†r·	jXMathr¸	†r¹	j©jí†rº	j;Xmaxr»	†r¼	j©jí†r½	j;Xapplyr¾	†r¿	j©j†rÀ	jXMathrÁ	†rÂ	j©jã†rÃ	e(hj†rÄ	j;XobjrÅ	†rÆ	j©j"†rÇ	hj†rÈ	jóXifrÉ	†rÊ	hj†rË	hLXnotrÌ	†rÍ	hj†rÎ	j;XiteratorrÏ	†rÐ	hj†rÑ	hLXandrÒ	†rÓ	hj†rÔ	j;jï†rÕ	j©jí†rÖ	j;XisArrayr×	†rØ	j©j†rÙ	j;XobjrÚ	†rÛ	j©j"†rÜ	hX
    rÝ	†rÞ	h¨Xresult: rß	†rà	j©X{rá	†râ	h¨X
computed: rã	†rä	hLj	†rå	jXInfinityræ	†rç	j©X}rè	†ré	hX
    rê	†rë	j;jï†rì	j©jí†rí	j;Xeachrî	†rï	hj†rð	j;Xobjrñ	†rò	j©jã†ró	hj†rô	jKX(value, index, list) ->rõ	†rö	hX
      r÷	†rø	h¨X
computed: rù	†rú	jóXifrû	†rü	hj†rý	j;Xiteratorrþ	†rÿ	hj†r
jóXthenr
†r
hj†r
j;Xiteratorr
†r
j©jí†r
j;Xcallr
†r
j©j†r	
j;Xcontextr

†r
j©jã†r
hj†r
j;Xvaluer
†r
j©jã†r
hj†r
j;Xindexr
†r
j©jã†r
hj†r
j;Xlistr
†r
j©j"†r
hj†r
jóXelser
†r
hj†r
j;Xvaluer
†r
hX
      r
†r 
j;Xcomputedr!
†r"
hj†r#
hLX>=r$
†r%
hj†r&
j;Xresultr'
†r(
j©jí†r)
j;Xcomputedr*
†r+
hj†r,
hLXandr-
†r.
hj†r/
j©j†r0
h¨Xresult: r1
†r2
j©já	†r3
h¨Xvalue: r4
†r5
j;Xvaluer6
†r7
j©jã†r8
hj†r9
h¨X
computed: r:
†r;
j;Xcomputedr<
†r=
j©jè	†r>
j©j"†r?
hX
    r@
†rA
j;XresultrB
†rC
j©jí†rD
j;XvaluerE
†rF
hX


  rG
†rH
jiX=# Return the minimum element (or element-based computation).
rI
†rJ
hX  rK
†rL
h¨X_.min: rM
†rN
jKX(obj, iterator, context) ->rO
†rP
hX
    rQ
†rR
jóXreturnrS
†rT
hj†rU
jXMathrV
†rW
j©jí†rX
j;XminrY
†rZ
j©jí†r[
j;Xapplyr\
†r]
j©j†r^
jXMathr_
†r`
j©jã†ra
hj†rb
j;Xobjrc
†rd
j©j"†re
hj†rf
jóXifrg
†rh
hj†ri
hLXnotrj
†rk
hj†rl
j;Xiteratorrm
†rn
hj†ro
hLXandrp
†rq
hj†rr
j;jï†rs
j©jí†rt
j;XisArrayru
†rv
j©j†rw
j;Xobjrx
†ry
j©j"†rz
hX
    r{
†r|
h¨Xresult: r}
†r~
j©já	†r
h¨X
computed: r€
†r
jXInfinityr‚
†rƒ
j©jè	†r„
hX
    r…
†r†
j;jï†r‡
j©jí†rˆ
j;Xeachr‰
†rŠ
hj†r‹
j;XobjrŒ
†r
j©jã†rŽ
hj†r
jKX(value, index, list) ->r
†r‘
hX
      r’
†r“
h¨X
computed: r”
†r•
jóXifr–
†r—
hj†r˜
j;Xiteratorr™
†rš
hj†r›
jóXthenrœ
†r
hj†rž
j;XiteratorrŸ
†r 
j©jí†r¡
j;Xcallr¢
†r£
j©j†r¤
j;Xcontextr¥
†r¦
j©jã†r§
hj†r¨
j;Xvaluer©
†rª
j©jã†r«
hj†r¬
j;Xindexr­
†r®
j©jã†r¯
hj†r°
j;Xlistr±
†r²
j©j"†r³
hj†r´
jóXelserµ
†r¶
hj†r·
j;Xvaluer¸
†r¹
hX
      rº
†r»
j;Xcomputedr¼
†r½
hj†r¾
hLX<r¿
†rÀ
hj†rÁ
j;XresultrÂ
†rÃ
j©jí†rÄ
j;XcomputedrÅ
†rÆ
hj†rÇ
hLXandrÈ
†rÉ
hj†rÊ
j©j†rË
h¨Xresult: rÌ
†rÍ
j©já	†rÎ
h¨Xvalue: rÏ
†rÐ
j;XvaluerÑ
†rÒ
j©jã†rÓ
hj†rÔ
h¨X
computed: rÕ
†rÖ
j;Xcomputedr×
†rØ
j©jè	†rÙ
j©j"†rÚ
hX
    rÛ
†rÜ
j;XresultrÝ
†rÞ
j©jí†rß
j;Xvaluerà
†rá
hX


  râ
†rã
jiXB# Sort the object's values by a criteria produced by an iterator.
rä
†rå
hX  ræ
†rç
h¨X
_.sortBy: rè
†ré
jKX(obj, iterator, context) ->rê
†rë
hX
    rì
†rí
j;jï†rî
j©jí†rï
j;Xpluckrð
†rñ
j©j†rò
j©j†ró
j©j†rô
j;jï†rõ
j©jí†rö
j;Xmapr÷
†rø
hj†rù
j;Xobjrú
†rû
j©jã†rü
hj†rý
jKX(value, index, list) ->rþ
†rÿ
hX
      r†rj©já	†rh¨Xvalue: r†rj;Xvaluer†rj©jã†rhj†rh¨X
criteria: r	†r
j;Xiteratorr†rj©jí†r
j;Xcallr†rj©j†rj;Xcontextr†rj©jã†rhj†rj;Xvaluer†rj©jã†rhj†rj;Xindexr†rj©jã†rhj†rj;Xlistr†rj©j"†rj©jè	†r hX
    r!†r"j©j"†r#j©jí†r$j;Xsortr%†r&j©j†r'jKX(left, right) ->r(†r)hX
      r*†r+h¨Xa: r,†r-j;Xleftr.†r/j©jí†r0j;Xcriteriar1†r2j©X;r3†r4hj†r5h¨Xb: r6†r7j;Xrightr8†r9j©jí†r:j;Xcriteriar;†r<hX
      r=†r>jóXifr?†r@hj†rAj;XarB†rChj†rDhLj¿
†rEhj†rFj;XbrG†rHhj†rIjóXthenrJ†rKhj†rLhLj	†rMjxj	†rNhj†rOjóXelserP†rQhj†rRjóXifrS†rThj†rUj;jB†rVhj†rWhLX>rX†rYhj†rZj;jG†r[hj†r\jóXthenr]†r^hj†r_jxj	†r`hj†rajóXelserb†rchj†rdjxjІrehX
    rf†rgj©j"†rhj©j"†rij©jã†rjhj†rkj˜j(†rlj˜Xvaluerm†rnj˜j(†roj©j"†rphX


  rq†rrjiXI# Use a comparator function to figure out at what index an object should
rs†rthX  ru†rvjiX;# be inserted so as to maintain order. Uses binary search.
rw†rxhX  ry†rzh¨X_.sortedIndex: r{†r|jKX(array, obj, iterator) ->r}†r~hX
    r†r€j;Xiteratorr†r‚hj†rƒhLX||r„†r…hLjõ†r†hj†r‡j;jï†rˆj©jí†r‰j;XidentityrІr‹hX
    rŒ†rh¨Xlow: rކrjxjІrj©j3†r‘hj†r’h¨Xhigh: r“†r”j;Xarrayr•†r–j©jí†r—j;Xlengthr˜†r™hX
    rš†r›jóXwhilerœ†rhj†ržj;XlowrŸ†r hj†r¡hLj¿
†r¢hj†r£j;Xhighr¤†r¥hX
      r¦†r§h¨Xmid: r¨†r©j©j†rªj;Xlowr«†r¬hj†r­hLX+r®†r¯hj†r°j;Xhighr±†r²j©j"†r³hj†r´hLX>>rµ†r¶hj†r·jxj	†r¸hX
      r¹†rºjóXifr»†r¼hj†r½j;Xiteratorr¾†r¿j©j†rÀj;XarrayrÁ†rÂj©j†rÃj;XmidrĆrÅj©j †rÆj©j"†rÇhj†rÈhLj¿
†rÉhj†rÊj;XiteratorrˆrÌj©j†rÍj;XobjrΆrÏj©j"†rÐhj†rÑjóXthenrÒ†rÓhj†rÔh¨Xlow: rÕ†rÖj;Xmidr׆rØhj†rÙhLj®†rÚhj†rÛjxj	†rÜhj†rÝjóXelserÞ†rßhj†ràh¨Xhigh: rá†râj;Xmidrã†rähX
    rå†ræj;Xlowrç†rèhX


  ré†rêjiX5# Convert anything iterable into a real, live array.
rë†rìhX  rí†rîh¨X_.toArray: rï†rðjKX
(iterable) ->rñ†ròhX
    ró†rôjóXreturnrõ†röhj†r÷j©j†røj©j †rùhX                   rú†rûjóXifrü†rýhj†rþj©j†rÿhLX!r†rj;Xiterabler†rj©j"†rhX
    r†rjóXreturnr†rhj†r	j;Xiterabler
†rj©jí†rj;XtoArrayr
†rj©j†rj©j"†rhX   r†rjóXifr†rhj†rj©j†rj;Xiterabler†rj©jí†rj;XtoArrayr†rj©j"†rhX
    r†rjóXreturnr†r hj†r!j;Xiterabler"†r#hX
             r$†r%jóXifr&†r'hj†r(j©j†r)j;jï†r*j©jí†r+j;XisArrayr,†r-j©j†r.j;Xiterabler/†r0j©j"†r1j©j"†r2hX
    r3†r4jóXreturnr5†r6hj†r7j;Xslicer8†r9j©jí†r:j;Xcallr;†r<j©j†r=j;Xiterabler>†r?j©j"†r@hj†rAjóXifrB†rChj†rDj©j†rEj;jï†rFj©jí†rGj;XisArgumentsrH†rIj©j†rJj;XiterablerK†rLj©j"†rMj©j"†rNhX
    rO†rPj;jï†rQj©jí†rRj;XvaluesrS†rTj©j†rUj;XiterablerV†rWj©j"†rXhX


  rY†rZjiX.# Return the number of elements in an object.
r[†r\hX  r]†r^h¨X_.size: r_†r`jKX(obj) ->ra†rbhj†rcj;jï†rdj©jí†rej;XtoArrayrf†rgj©j†rhj;Xobjri†rjj©j"†rkj©jí†rlj;Xlengthrm†rnhX


  ro†rpjiXM# -------------------------- Array Functions: ------------------------------
rq†rrhX
  rs†rtjiXI# Get the first element of an array. Passing "n" will return the first N
ru†rvhX  rw†rxjiXN# values in the array. Aliased as "head". The "guard" check allows it to work
ry†rzhX  r{†r|jiX# with _.map.
r}†r~hX  r†r€h¨X	_.first: r†r‚jKX(array, n, guard) ->rƒ†r„hX
    r…†r†jóXifr‡†rˆhj†r‰j;XnrŠ†r‹hj†rŒhLXandr†rŽhj†rhLXnotr†r‘hj†r’j;Xguardr“†r”hj†r•jóXthenr–†r—hj†r˜j;Xslicer™†ršj©jí†r›j;Xcallrœ†rj©j†ržj;XarrayrŸ†r j©jã†r¡hj†r¢jxjІr£j©jã†r¤hj†r¥j;jŠ†r¦j©j"†r§hj†r¨jóXelser©†rªhj†r«j;Xarrayr¬†r­j©j†r®jxjІr¯j©j †r°hX


  r±†r²jiXJ# Returns everything but the first entry of the array. Aliased as "tail".
r³†r´hX  rµ†r¶jiXL# Especially useful on the arguments object. Passing an "index" will return
r·†r¸hX  r¹†rºjiXJ# the rest of the values in the array from that index onward. The "guard"
r»†r¼hX  r½†r¾jiX&# check allows it to work with _.map.
r¿†rÀhX  rÁ†rÂh¨X_.rest: rÃ†rÄjKX(array, index, guard) ->rÅ†rÆhX
    rÇ†rÈj;XslicerÉ†rÊj©jí†rËj;XcallrÌ†rÍj©j†rÎj;XarrayrÏ†rÐj©jã†rÑhj†rÒjóXifrÓ†rÔhj†rÕj;jï†rÖj©jí†r×j;XisUndefinedrØ†rÙj©j†rÚj;XindexrÛ†rÜj©j"†rÝhj†rÞhLXorrß†ràhj†ráj;Xguardrâ†rãhj†räjóXthenrå†ræhj†rçjxj	†rèhj†réjóXelserê†rëhj†rìj;Xindexrí†rîj©j"†rïhX


  rð†rñjiX$# Get the last element of an array.
rò†róhX  rô†rõh¨X_.last: rö†r÷jKX
(array) ->rø†rùhj†rúj;Xarrayrû†rüj©j†rýj;Xarrayrþ†rÿj©jí†r
j;Xlengthr
†r
hj†r
hLj	†r
hj†r
jxj	†r
j©j †r
hX


  r
†r	
jiX+# Trim out all falsy values from an array.
r

†r
hX  r
†r

h¨X_.compact: r
†r
jKX
(array) ->r
†r
hj†r
j;Xarrayr
†r
j©j†r
j;j†r
j©j †r
hj†r
jóXforr
†r
hj†r
j;j†r
hj†r
jóXinr
†r
hj†r 
j©j†r!
jxjІr"
j©jí†r#
j©jí†r$
j©jí†r%
j;Xarrayr&
†r'
j©jí†r(
j;Xlengthr)
†r*
j©j †r+
hj†r,
jóXwhenr-
†r.
hj†r/
j;Xarrayr0
†r1
j©j†r2
j;j†r3
j©j †r4
hX


  r5
†r6
jiX5# Return a completely flattened version of an array.
r7
†r8
hX  r9
†r:
h¨X_.flatten: r;
†r<
jKX
(array) ->r=
†r>
hX
    r?
†r@
j;jï†rA
j©jí†rB
j;XreducerC
†rD
hj†rE
j;XarrayrF
†rG
j©jã†rH
hj†rI
j©j†rJ
j©j †rK
j©jã†rL
hj†rM
jKX(memo, value) ->rN
†rO
hX
      rP
†rQ
jóXreturnrR
†rS
hj†rT
j;XmemorU
†rV
j©jí†rW
j;XconcatrX
†rY
j©j†rZ
j;jï†r[
j©jí†r\
j;Xflattenr]
†r^
j©j†r_
j;Xvaluer`
†ra
j©j"†rb
j©j"†rc
hj†rd
jóXifre
†rf
hj†rg
j;jï†rh
j©jí†ri
j;XisArrayrj
†rk
j©j†rl
j;Xvaluerm
†rn
j©j"†ro
hX
      rp
†rq
j;Xmemorr
†rs
j©jí†rt
j;Xpushru
†rv
j©j†rw
j;Xvaluerx
†ry
j©j"†rz
hX
      r{
†r|
j;Xmemor}
†r~
hX


  r
†r€
jiXN# Return a version of the array that does not contain the specified value(s).
r
†r‚
hX  rƒ
†r„
h¨X_.without: r…
†r†
jKX
(array) ->r‡
†rˆ
hX
    r‰
†rŠ
h¨Xvalues: r‹
†rŒ
j;jï†r
j©jí†rŽ
j;Xrestr
†r
j©j†r‘
j;X	argumentsr’
†r“
j©j"†r”
hX
    r•
†r–
j;Xvalr—
†r˜
hj†r™
jóXforrš
†r›
hj†rœ
j;Xvalr
†rž
hj†rŸ
jóXinr 
†r¡
hj†r¢
j;jï†r£
j©jí†r¤
j;XtoArrayr¥
†r¦
j©j†r§
j;Xarrayr¨
†r©
j©j"†rª
hj†r«
jóXwhenr¬
†r­
hj†r®
hLXnotr¯
†r°
hj†r±
j;jï†r²
j©jí†r³
j;Xincluder´
†rµ
j©j†r¶
j;Xvaluesr·
†r¸
j©jã†r¹
hj†rº
j;Xvalr»
†r¼
j©j"†r½
hX


  r¾
†r¿
jiXJ# Produce a duplicate-free version of the array. If the array has already
rÀ
†rÁ
hX  rÂ
†rÃ
jiX@# been sorted, you have the option of using a faster algorithm.
rÄ
†rÅ
hX  rÆ
†rÇ
h¨X_.uniq: rÈ
†rÉ
jKX(array, isSorted) ->rÊ
†rË
hX
    rÌ
†rÍ
h¨Xmemo: rÎ
†rÏ
j©j†rÐ
j©j †rÑ
hX
    rÒ
†rÓ
jóXforrÔ
†rÕ
hj†rÖ
j;Xelr×
†rØ
j©jã†rÙ
hj†rÚ
j;j†rÛ
hj†rÜ
jóXinrÝ
†rÞ
hj†rß
j;jï†rà
j©jí†rá
j;XtoArrayrâ
†rã
j©j†rä
j;Xarrayrå
†ræ
j©j"†rç
hX
      rè
†ré
j;Xmemorê
†rë
j©jí†rì
j;Xpushrí
†rî
j©j†rï
j;Xelrð
†rñ
j©j"†rò
hj†ró
jóXifrô
†rõ
hj†rö
j;j†r÷
hj†rø
hLXisrù
†rú
hj†rû
jxjІrü
hj†rý
hLX||rþ
†rÿ
hj†rj©j†rjóXifr†rhj†rj;XisSortedr†rhj†rhLXisr†r	hj†r
jXtruer†rhj†r
jóXthenr†rhj†rj;jï†rj©jí†rj;Xlastr†rj©j†rj;Xmemor†rj©j"†rhj†rhLXisntr†rhj†rj;Xelr†rhj†rjóXelser †r!hj†r"hLXnotr#†r$hj†r%j;jï†r&j©jí†r'j;Xincluder(†r)j©j†r*j;Xmemor+†r,j©jã†r-hj†r.j;Xelr/†r0j©j"†r1j©j"†r2hX
    r3†r4j;Xmemor5†r6hX


  r7†r8jiXC# Produce an array that contains every item shared between all the
r9†r:hX  r;†r<jiX# passed-in arrays.
r=†r>hX  r?†r@h¨X
_.intersect: rA†rBjKX
(array) ->rC†rDhX
    rE†rFh¨Xrest: rG†rHj;jï†rIj©jí†rJj;XrestrK†rLj©j†rMj;X	argumentsrN†rOj©j"†rPhX
    rQ†rRj;jï†rSj©jí†rTj;XselectrU†rVhj†rWj;jï†rXj©jí†rYj;XuniqrZ†r[j©j†r\j;Xarrayr]†r^j©j"†r_j©jã†r`hj†rajKX	(item) ->rb†rchX
      rd†rej;jï†rfj©jí†rgj;Xallrh†rihj†rjj;Xrestrk†rlj©jã†rmhj†rnjKX
(other) ->ro†rphX	
        rq†rrj;jï†rsj©jí†rtj;XindexOfru†rvj©j†rwj;Xotherrx†ryj©jã†rzhj†r{j;Xitemr|†r}j©j"†r~hj†rhLX>=r€†rhj†r‚jxjІrƒhX


  r„†r…jiXI# Zip together multiple lists into a single array -- elements that share
r††r‡hX  rˆ†r‰jiX# an index go together.
rІr‹hX  rŒ†rh¨X_.zip: rކrjKX->r†r‘hX
    r’†r“h¨Xlength: r”†r•hX    r–†r—j;jï†r˜j©jí†r™j;Xmaxrš†r›j©j†rœj;jï†rj©jí†ržj;XpluckrŸ†r j©j†r¡j;X	argumentsr¢†r£j©jã†r¤hj†r¥j˜j(†r¦j˜Xlengthr§†r¨j˜j(†r©j©j"†rªj©j"†r«hX
    r¬†r­h¨X	results: r®†r¯hX   r°†r±jóXnewr²†r³hj†r´jXArrayrµ†r¶j©j†r·j;Xlengthr¸†r¹j©j"†rºhX
    r»†r¼jóXforr½†r¾hj†r¿j;j†rÀhj†rÁjóXinr†rÃhj†rÄj©j†rÅjxjІrÆj©jí†rÇj©jí†rÈj©jí†rÉj;XlengthrʆrËj©j †rÌhX
      r͆rÎj;XresultsrφrÐj©j†rÑj;j†rÒj©j †rÓhLj{†rÔhj†rÕj;jï†rÖj©jí†r×j;Xpluckr؆rÙj©j†rÚj;X	argumentsrÛ†rÜj©jã†rÝhj†rÞjXStringr߆ràj©j†ráj;j†râj©j"†rãj©j"†rähX
    rå†ræj;Xresultsrç†rèhX


  ré†rêjiXL# If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
rë†rìhX  rí†rîjiXJ# we need this function. Return the position of the first occurence of an
rï†rðhX  rñ†ròjiXD# item in an array, or -1 if the item is not included in the array.
ró†rôhX  rõ†röh¨X_.indexOf: r÷†røjKX(array, item) ->rù†rúhX
    rû†rüjóXreturnrý†rþhj†rÿj;Xarrayr†rj©jí†rj;XindexOfr†rj©j†rj;Xitemr†rj©j"†rhj†r	jóXifr
†rhj†rj;Xarrayr
†rj©jí†rj;XindexOfr†rhX
    r†rh¨Xi: r†rjxjІrj©j3†rhj†rh¨Xl: r†rj;Xarrayr†rj©jí†rj;Xlengthr†rhX
    r †r!jóXwhiler"†r#hj†r$j;Xlr%†r&hj†r'hLj	†r(hj†r)j;j†r*hX
      r+†r,jóXifr-†r.hj†r/j;Xarrayr0†r1j©j†r2j;j†r3j©j †r4hj†r5hLXisr6†r7hj†r8j;Xitemr9†r:hj†r;jóXthenr<†r=hj†r>jóXreturnr?†r@hj†rAj;j†rBhj†rCjóXelserD†rEhj†rFj;j†rGhLX++rH†rIhX
    rJ†rKhLj	†rLjxj	†rMhX


  rN†rOjiXK# Provide JavaScript 1.6's lastIndexOf, delegating to the native function,
rP†rQhX  rR†rSjiX# if possible.
rT†rUhX  rV†rWh¨X_.lastIndexOf: rX†rYjKX(array, item) ->rZ†r[hX
    r\†r]jóXreturnr^†r_hj†r`j;Xarrayra†rbj©jí†rcj;XlastIndexOfrd†rej©j†rfj;Xitemrg†rhj©j"†rihj†rjjóXifrk†rlhj†rmj;Xarrayrn†roj©jí†rpj;XlastIndexOfrq†rrhX
    rs†rth¨Xi: ru†rvj;Xarrayrw†rxj©jí†ryj;Xlengthrz†r{hX
    r|†r}jóXwhiler~†rhj†r€j;j†rhX
      r‚†rƒjóXifr„†r…hj†r†j;Xarrayr‡†rˆj©j†r‰j;j†rŠj©j †r‹hj†rŒhLXisr†rŽhj†rj;Xitemr†r‘hj†r’jóXthenr“†r”hj†r•jóXreturnr–†r—hj†r˜j;j†r™e(hj†ršjóXelser›†rœhj†rj;j†ržhLj	†rŸhLj	†r hX
    r¡†r¢hLj	†r£jxj	†r¤hX


  r¥†r¦jiXL# Generate an integer Array containing an arithmetic progression. A port of
r§†r¨hX  r©†rªjiX+# the native Python range() function. See:
r«†r¬hX  r­†r®jiX6# http://docs.python.org/library/functions.html#range
r¯†r°hX  r±†r²h¨X	_.range: r³†r´jKX(start, stop, step) ->rµ†r¶hX
    r·†r¸h¨Xa: r¹†rºhX       r»†r¼j;X	argumentsr½†r¾hX
    r¿†rÀh¨Xsolo: rÁ†rÂhX    rÆrÄj;jB†rÅj©jí†rÆj;XlengthrdžrÈhj†rÉhLX<=rʆrËhj†rÌjxj	†rÍhX
    rΆrÏh¨Xi: rІrÑh¨Xstart: rÒ†rÓjóXifrÔ†rÕhj†rÖj;Xsolor׆rØhj†rÙjóXthenrÚ†rÛhj†rÜjxjІrÝhj†rÞjóXelser߆ràhj†ráj;jB†râj©j†rãjxjІräj©j †råj©j3†ræhX
    rç†rèh¨Xstop: ré†rêhX    rë†rìjóXifrí†rîhj†rïj;Xsolorð†rñhj†ròjóXthenró†rôhj†rõj;jB†röj©j†r÷jxjІrøj©j †rùhj†rújóXelserû†rühj†rýj;jB†rþj©j†rÿjxj	†rj©j †rj©j3†rhX
    r†rh¨Xstep: r†rhX    r†rj;jB†r	j©j†r
jxjU	†rj©j †rhj†r
hLXorr†rhj†rjxj	†rhX
    r†rh¨Xlen: r†rhX     r†rjXMathr†rj©jí†rj;Xceilr†rj©j†rj©j†rj;Xstopr†r hj†r!hLj	†r"hj†r#j;Xstartr$†r%j©j"†r&hj†r'hLX/r(†r)hj†r*j;Xstepr+†r,j©j"†r-hX
    r.†r/jóXreturnr0†r1hj†r2j©j†r3j©j †r4hj†r5jóXifr6†r7hj†r8j;Xlenr9†r:hj†r;hLX<=r<†r=hj†r>jxjІr?hX
    r@†rAh¨Xrange: rB†rChX   rD†rEjóXnewrF†rGhj†rHjXArrayrI†rJj©j†rKj;XlenrL†rMj©j"†rNhX
    rO†rPh¨Xidx: rQ†rRhX     rS†rTjxjІrUhX
    rV†rWjóXwhilerX†rYhj†rZjXtruer[†r\hX
      r]†r^jóXreturnr_†r`hj†raj;Xrangerb†rchj†rdjóXifre†rfhj†rgj©j†rhjóXifri†rjhj†rkj;Xsteprl†rmhj†rnhLjX†rohj†rpjxjІrqhj†rrjóXthenrs†rthj†ruj;j†rvhj†rwhLj	†rxhj†ryj;Xstoprz†r{hj†r|jóXelser}†r~hj†rj;Xstopr€†rhj†r‚hLj	†rƒhj†r„j;j†r…j©j"†r†hj†r‡hLX>=rˆ†r‰hj†rŠjxjІr‹hX
      rŒ†rj;Xrangerކrj©j†rj;Xidxr‘†r’j©j †r“hLj{†r”hj†r•j;j†r–hX
      r—†r˜j;Xidxr™†ršhLX++r›†rœhX
      r†ržj;j†rŸhLX+=r †r¡hj†r¢j;Xstepr£†r¤hX


  r¥†r¦jiXL# ----------------------- Function Functions: -----------------------------
r§†r¨hX
  r©†rªjiXN# Create a function bound to a given object (assigning 'this', and arguments,
r«†r¬hX  r­†r®jiX@# optionally). Binding with arguments is also known as 'curry'.
r¯†r°hX  r±†r²h¨X_.bind: r³†r´jKX(func, obj) ->rµ†r¶hX
    r·†r¸h¨Xargs: r¹†rºj;jï†r»j©jí†r¼j;Xrestr½†r¾jKX(arguments, 2)
    ->r¿†rÀhj†rÁj;Xfuncr†rÃj©jí†rÄj;XapplyrņrÆj©j†rÇj;XobjrȆrÉhj†rÊhLXorrˆrÌhj†rÍj;XrootrΆrÏj©jã†rÐhj†rÑj;XargsrÒ†rÓj©jí†rÔj;XconcatrÕ†rÖj©j†r×j;X	argumentsr؆rÙj©j"†rÚj©j"†rÛhX


  r܆rÝjiXK# Bind all of an object's methods to that object. Useful for ensuring that
rÞ†rßhX  rà†rájiX3# all callbacks defined on an object belong to it.
râ†rãhX  rä†råh¨X_.bindAll: ræ†rçjKX(obj) ->rè†réhX
    rê†rëh¨Xfuncs: rì†ríjóXifrî†rïhj†rðj;X	argumentsrñ†ròj©jí†rój;Xlengthrô†rõhj†röhLjX†r÷hj†røjxj	†rùhj†rújóXthenrû†rühj†rýj;jï†rþj©jí†rÿj;Xrestr†rj©j†rj;X	argumentsr†rj©j"†rhj†rjóXelser†rhj†r	j;jï†r
j©jí†rj;X	functionsr†r
j©j†rj;Xobjr†rj©j"†rhX
    r†rj;jï†rj©jí†rj;Xeachr†rj©j†rj;Xfuncsr†rj©jã†rhj†rjKX(f) ->r†rhj†rj;Xobjr †r!j©j†r"j;Xfr#†r$j©j †r%hLj{†r&hj†r'j;jï†r(j©jí†r)j;Xbindr*†r+j©j†r,j;Xobjr-†r.j©j†r/j;j#†r0j©j †r1j©jã†r2hj†r3j;Xobjr4†r5j©j"†r6j©j"†r7hX
    r8†r9j;Xobjr:†r;hX


  r<†r=jiXI# Delays a function for the given number of milliseconds, and then calls
r>†r?hX  r@†rAjiX"# it with the arguments supplied.
rB†rChX  rD†rEh¨X	_.delay: rF†rGjKX(func, wait) ->rH†rIhX
    rJ†rKh¨Xargs: rL†rMj;jï†rNj©jí†rOj;XrestrP†rQj©j†rRj;X	argumentsrS†rTj©jã†rUhj†rVjxjU	†rWj©j"†rXhX
    rY†rZj;X
setTimeoutr[†r\j©j†r]j©j†r^jKX->r_†r`hj†raj;Xfuncrb†rcj©jí†rdj;Xapplyre†rfj©j†rgj;Xfuncrh†rij©jã†rjhj†rkj;Xargsrl†rmj©j"†rnj©j"†roj©jã†rphj†rqj;Xwaitrr†rsj©j"†rthX


  ru†rvjiXK# Defers a function, scheduling it to run after the current call stack has
rw†rxhX  ry†rzjiX# cleared.
r{†r|hX  r}†r~h¨X	_.defer: r†r€jKX	(func) ->r†r‚hX
    rƒ†r„j;jï†r…j©jí†r†j;Xdelayr‡†rˆj©jí†r‰j;XapplyrІr‹j©j†rŒj;jï†rj©jã†rŽhj†rj©j†rj;Xfuncr‘†r’j©jã†r“hj†r”jxj	†r•j©j †r–j©jí†r—j;Xconcatr˜†r™j©j†ršj;jï†r›j©jí†rœj;Xrestr†ržj©j†rŸj;X	argumentsr †r¡j©j"†r¢j©j"†r£j©j"†r¤hX


  r¥†r¦jiXB# Returns the first function passed as an argument to the second,
r§†r¨hX  r©†rªjiXC# allowing you to adjust arguments, run code before and after, and
r«†r¬hX  r­†r®jiX/# conditionally execute the original function.
r¯†r°hX  r±†r²h¨X_.wrap: r³†r´jKX(func, wrapper) ->rµ†r¶hX
    r·†r¸jKX->r¹†rºhj†r»j;Xwrapperr¼†r½j©jí†r¾j;Xapplyr¿†rÀj©j†rÁj;Xwrapperr†rÃj©jã†rÄhj†rÅj©j†rÆj;XfuncrdžrÈj©j †rÉj©jí†rÊj;XconcatrˆrÌj©j†rÍj;X	argumentsrΆrÏj©j"†rÐj©j"†rÑhX


  rÒ†rÓjiXJ# Returns a function that is the composition of a list of functions, each
rÔ†rÕhX  rÖ†r×jiX;# consuming the return value of the function that follows.
r؆rÙhX  rÚ†rÛh¨X_.compose: r܆rÝjKX->rÞ†rßhX
    rà†ráh¨Xfuncs: râ†rãj;X	argumentsrä†råhX
    ræ†rçjKX->rè†réhX
      rê†rëh¨Xargs: rì†ríj;X	argumentsrî†rïhX
      rð†rñjóXforrò†róhj†rôj;j†rõhj†röjóXinr÷†røhj†rùj©j†rúj©j†rûj;Xfuncsrü†rýj©jí†rþj;Xlengthrÿ†rhj†rhLj	†rhj†rjxj	†rj©j"†rj©jí†rj©jí†rjxjІrj©j †r	hX	
        r
†rh¨Xargs: r†r
j©j†rj;Xfuncsr†rj©j†rj;j†rj©j †rj©jí†rj;Xapplyr†rj©j†rjóXthisr†rj©jã†rhj†rj;Xargsr†rj©j"†rj©j †rhX
      r †r!j;Xargsr"†r#j©j†r$jxjІr%j©j †r&hX


  r'†r(jiXK# ------------------------- Object Functions: ----------------------------
r)†r*hX
  r+†r,jiX0# Retrieve the names of an object's properties.
r-†r.hX  r/†r0h¨X_.keys: r1†r2jKX(obj) ->r3†r4hX
    r5†r6jóXreturnr7†r8hj†r9j;jï†r:j©jí†r;j;Xranger<†r=j©j†r>jxjІr?j©jã†r@hj†rAj;XobjrB†rCj©jí†rDj;XlengthrE†rFj©j"†rGhj†rHjóXifrI†rJhj†rKj;jï†rLj©jí†rMj;XisArrayrN†rOj©j†rPj;XobjrQ†rRj©j"†rShX
    rT†rUj;XkeyrV†rWhj†rXjóXforrY†rZhj†r[j;Xkeyr\†r]j©jã†r^hj†r_j;Xvalr`†rahj†rbjóXofrc†rdhj†rej;Xobjrf†rghX


  rh†rijiX1# Retrieve the values of an object's properties.
rj†rkhX  rl†rmh¨X
_.values: rn†rojKX(obj) ->rp†rqhX
    rr†rsj;jï†rtj©jí†ruj;Xmaprv†rwj©j†rxj;Xobjry†rzj©jã†r{hj†r|j;jï†r}j©jí†r~j;Xidentityr†r€j©j"†rhX


  r‚†rƒjiXF# Return a sorted list of the function names available in Underscore.
r„†r…hX  r††r‡h¨X
_.functions: rˆ†r‰jKX(obj) ->rІr‹hX
    rŒ†rj;jï†rŽj©jí†rj;Xselectr†r‘j©j†r’j;jï†r“j©jí†r”j;Xkeysr•†r–j©j†r—j;Xobjr˜†r™j©j"†ršj©jã†r›hj†rœjKX(key) ->r†ržhj†rŸj;jï†r j©jí†r¡j;X
isFunctionr¢†r£j©j†r¤j;Xobjr¥†r¦j©j†r§j;Xkeyr¨†r©j©j †rªj©j"†r«j©j"†r¬j©jí†r­j;Xsortr®†r¯j©j†r°j©j"†r±hX


  r²†r³jiXG# Extend a given object with all of the properties in a source object.
r´†rµhX  r¶†r·h¨X
_.extend: r¸†r¹jKX(destination, source) ->rº†r»hX
    r¼†r½jóXforr¾†r¿hj†rÀj;XkeyrÁ†rÂj©jã†rÃhj†rÄj;XvalrņrÆhj†rÇjóXofrȆrÉhj†rÊj;XsourcerˆrÌhX
      r͆rÎj;XdestinationrφrÐj©j†rÑj;XkeyrÒ†rÓj©j †rÔhLj{†rÕhj†rÖj;Xvalr׆rØhX
    rÙ†rÚj;XdestinationrÛ†rÜhX


  r݆rÞjiX4# Create a (shallow-cloned) duplicate of an object.
r߆ràhX  rá†râh¨X	_.clone: rã†räjKX(obj) ->rå†ræhX
    rç†rèjóXreturnré†rêhj†rëj;Xobjrì†ríj©jí†rîj;Xslicerï†rðj©j†rñjxjІròj©j"†róhj†rôjóXifrõ†röhj†r÷j;jï†røj©jí†rùj;XisArrayrú†rûj©j†rüj;Xobjrý†rþj©j"†rÿhX
    r†rj;jï†rj©jí†rj;Xextendr†rj©j†rj©já	†rj©jè	†rj©jã†r	hj†r
j;Xobjr†rj©j"†r
hX


  r†rjiX:# Invokes interceptor with the obj, and then returns obj.
r†rhX  r†rjiX# The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
r†rhX  r†rh¨X_.tap: r†rjKX(obj, interceptor) ->r†rhX
    r†rj;Xinterceptorr†rj©j†r j;Xobjr!†r"j©j"†r#hX
    r$†r%j;Xobjr&†r'hX


  r(†r)jiX?# Perform a deep comparison to check if two objects are equal.
r*†r+hX  r,†r-h¨X_.isEqual: r.†r/jKX	(a, b) ->r0†r1hX
    r2†r3jiX# Check object identity.
r4†r5hX    r6†r7jóXreturnr8†r9hj†r:jXtruer;†r<hj†r=jóXifr>†r?hj†r@j;jB†rAhj†rBhLXisrC†rDhj†rEj;jG†rFhX
    rG†rHjiX# Different types?
rI†rJhX    rK†rLh¨Xatype: rM†rNjóXtypeofrO†rPj©j†rQj;jB†rRj©j"†rSj©j3†rThj†rUh¨Xbtype: rV†rWjóXtypeofrX†rYj©j†rZj;jG†r[j©j"†r\hX
    r]†r^jóXreturnr_†r`hj†rajXfalserb†rchj†rdjóXifre†rfhj†rgj;Xatyperh†rihj†rjhLXisntrk†rlhj†rmj;Xbtypern†rohX
    rp†rqjiX1# Basic equality test (watch out for coercions).
rr†rshX    rt†rujóXreturnrv†rwhj†rxjXtruery†rzhj†r{jóXifr|†r}hj†r~hLX`r†r€j;jB†rhj†r‚hLX==rƒ†r„hj†r…j;jG†r†hLj†r‡hX
    rˆ†r‰jiX%# One is falsy and the other truthy.
rІr‹hX    rŒ†rjóXreturnrކrhj†rjXfalser‘†r’hj†r“jóXifr”†r•hj†r–j©j†r—hLj†r˜j;jB†r™hj†ršhLXandr›†rœhj†rj;jG†ržj©j"†rŸhj†r hLXorr¡†r¢hj†r£j©j†r¤j;jB†r¥hj†r¦hLXandr§†r¨hj†r©hLj†rªj;jG†r«j©j"†r¬hX
    r­†r®jiX'# One of them implements an isEqual()?
r¯†r°hX    r±†r²jóXreturnr³†r´hj†rµj;jB†r¶j©jí†r·j;XisEqualr¸†r¹j©j†rºj;jG†r»j©j"†r¼hj†r½jóXifr¾†r¿hj†rÀj;jB†rÁj©jí†rÂj;XisEqualrÆrÄhX
    rņrÆjiX# Check dates' integer values.
rdžrÈhX    rɆrÊjóXreturnrˆrÌhj†rÍj;jB†rÎj©jí†rÏj;XgetTimerІrÑj©j†rÒj©j"†rÓhj†rÔhLXisrÕ†rÖhj†r×j;jG†rØj©jí†rÙj;XgetTimerÚ†rÛj©j†rÜj©j"†rÝhj†rÞjóXifr߆ràhj†ráj;jï†râj©jí†rãj;XisDaterä†råj©j†ræj;jB†rçj©j"†rèhj†réhLXandrê†rëhj†rìj;jï†ríj©jí†rîj;XisDaterï†rðj©j†rñj;jG†ròj©j"†róhX
    rô†rõjiX# Both are NaN?
rö†r÷hX    rø†rùjóXreturnrú†rûhj†rüjXtruerý†rþhj†rÿjóXifr†rhj†rj;jï†rj©jí†rjXisNaNr†rj©j†rj;jB†rj©j"†r	hj†r
hLXandr†rhj†r
j;jï†rj©jí†rjXisNaNr†rj©j†rj;jG†rj©j"†rhX
    r†rjiX# Compare regular expressions.
r†rhX    r†rjóXifr†rhj†rj;jï†rj©jí†rj;XisRegExpr †r!j©j†r"j;jB†r#j©j"†r$hj†r%hLXandr&†r'hj†r(j;jï†r)j©jí†r*j;XisRegExpr+†r,j©j†r-j;jG†r.j©j"†r/hX
      r0†r1jóXreturnr2†r3hj†r4j;jB†r5j©jí†r6j;Xsourcer7†r8hX     r9†r:hLXisr;†r<hj†r=j;jG†r>j©jí†r?j;Xsourcer@†rAhj†rBhLXandrC†rDhX
             rE†rFj;jB†rGj©jí†rHj;XglobalrI†rJhX     rK†rLhLXisrM†rNhj†rOj;jG†rPj©jí†rQj;XglobalrR†rShj†rThLXandrU†rVhX
             rW†rXj;jB†rYj©jí†rZj;X
ignoreCaser[†r\hj†r]hLXisr^†r_hj†r`j;jG†raj©jí†rbj;X
ignoreCaserc†rdhj†rehLXandrf†rghX
             rh†rij;jB†rjj©jí†rkj;X	multilinerl†rmhX  rn†rohLXisrp†rqhj†rrj;jG†rsj©jí†rtj;X	multilineru†rvhX
    rw†rxjiX;# If a is not an object by this point, we can't handle it.
ry†rzhX    r{†r|jóXreturnr}†r~hj†rjXfalser€†rhj†r‚jóXifrƒ†r„hj†r…j;Xatyper††r‡hj†rˆhLXisntr‰†rŠhj†r‹j˜j(†rŒj˜Xobjectr†rŽj˜j(†rhX
    r†r‘jiX?# Check for different array lengths before comparing contents.
r’†r“hX    r”†r•jóXreturnr–†r—hj†r˜jXfalser™†ršhj†r›jóXifrœ†rhj†ržj;jB†rŸj©jí†r j;Xlengthr¡†r¢hj†r£hLXandr¤†r¥hj†r¦j©j†r§j;jB†r¨j©jí†r©j;Xlengthrª†r«hj†r¬hLXisntr­†r®hj†r¯j;jG†r°j©jí†r±j;Xlengthr²†r³j©j"†r´hX
    rµ†r¶jiX2# Nothing else worked, deep compare the contents.
r·†r¸hX    r¹†rºh¨XaKeys: r»†r¼j;jï†r½j©jí†r¾j;Xkeysr¿†rÀj©j†rÁj;jB†rÂj©j"†rÃj©j3†rÄhj†rÅh¨XbKeys: rƆrÇj;jï†rÈj©jí†rÉj;XkeysrʆrËj©j†rÌj;jG†rÍj©j"†rÎhX
    rφrÐjiX# Different object sizes?
rцrÒhX    rÓ†rÔjóXreturnrÕ†rÖhj†r×jXfalser؆rÙhj†rÚjóXifrÛ†rÜhj†rÝj;XaKeysrÞ†rßj©jí†ràj;Xlengthrá†râhj†rãhLXisnträ†råhj†ræj;XbKeysrç†rèj©jí†réj;Xlengthrê†rëhX
    rì†ríjiX$# Recursive comparison of contents.
rî†rïhX    rð†rñjiXC# for (var key in a) if (!_.isEqual(a[key], b[key])) return false;
rò†róhX    rô†rõjóXreturnrö†r÷hj†røjXtruerù†rúhX


  rû†rüjiX$# Is a given array or object empty?
rý†rþhX  rÿ†rh¨X_.isEmpty: r†rhX     r†rjKX(obj) ->r†rhj†rj;jï†rj©jí†r	j;Xkeysr
†rj©j†rj;Xobjr
†rj©j"†rj©jí†rj;Xlengthr†rhj†rhLXisr†rhj†rjxjІrhX


  r†rjiX"# Is a given value a DOM element?
r†rhX  r†rh¨X
_.isElement: r†rhX   r †r!jKX(obj) ->r"†r#hj†r$j;Xobjr%†r&hj†r'hLXandr(†r)hj†r*j;Xobjr+†r,j©jí†r-j;XnodeTyper.†r/hj†r0hLXisr1†r2hj†r3jxj	†r4hX


  r5†r6jiX# Is a given value an array?
r7†r8hX  r9†r:h¨X_.isArray: r;†r<hX     r=†r>jKX(obj) ->r?†r@hj†rAhLj†rBhLj†rCj©j†rDj;XobjrE†rFhj†rGhLXandrH†rIhj†rJj;XobjrK†rLj©jí†rMj;XconcatrN†rOhj†rPhLXandrQ†rRhj†rSj;XobjrT†rUj©jí†rVj;XunshiftrW†rXj©j"†rYhX


  rZ†r[jiX+# Is a given variable an arguments object?
r\†r]hX  r^†r_h¨X_.isArguments: r`†rahj†rbjKX(obj) ->rc†rdhj†rej;Xobjrf†rge(hj†rhhLXandri†rjhj†rkj;jï†rlj©jí†rmj;XisNumberrn†roj©j†rpj;Xobjrq†rrj©jí†rsj;Xlengthrt†ruj©j"†rvhj†rwhLXandrx†ryhj†rzhLXnotr{†r|hj†r}j;Xobjr~†rj©jí†r€j;Xconcatr†r‚hj†rƒhLXandr„†r…hX
                           r††r‡hLXnotrˆ†r‰hj†rŠj;Xobjr‹†rŒj©jí†rj;Xsubstrrކrhj†rhLXandr‘†r’hj†r“hLXnotr”†r•hj†r–j;Xobjr—†r˜j©jí†r™j;Xapplyrš†r›hj†rœhLXandr†ržhj†rŸhLXnotr †r¡hj†r¢j;XpropertyIsEnumerabler£†r¤j©jí†r¥j;Xcallr¦†r§j©j†r¨j;Xobjr©†rªj©jã†r«hj†r¬j˜j(†r­j˜Xlengthr®†r¯j˜j(†r°j©j"†r±hX


  r²†r³jiX!# Is the given value a function?
r´†rµhX  r¶†r·h¨X_.isFunction: r¸†r¹hX  rº†r»jKX(obj) ->r¼†r½hj†r¾hLj†r¿hLj†rÀj©j†rÁj;Xobjr†rÃhj†rÄhLXandrņrÆhj†rÇj;XobjrȆrÉj©jí†rÊj;XconstructorrˆrÌhj†rÍhLXandrΆrÏhj†rÐj;XobjrцrÒj©jí†rÓj;XcallrÔ†rÕhj†rÖhLXandr׆rØhj†rÙj;XobjrÚ†rÛj©jí†rÜj;Xapplyr݆rÞj©j"†rßhX


  rà†rájiX# Is the given value a string?
râ†rãhX  rä†råh¨X_.isString: ræ†rçhX    rè†réjKX(obj) ->rê†rëhj†rìhLj†ríhLj†rîj©j†rïj;Xobjrð†rñhj†ròhLXisró†rôhj†rõj˜j(†röj˜j(†r÷hj†røhLXorrù†rúhj†rûj©j†rüj;Xobjrý†rþhj†rÿhLXandr†rhj†rj;Xobjr†rj©jí†rj;X
charCodeAtr†rhj†rhLXandr	†r
hj†rj;Xobjr†r
j©jí†rj;Xsubstrr†rj©j"†rj©j"†rhX


  r†rjiX# Is a given value a number?
r†rhX  r†rh¨X_.isNumber: r†rhX    r†rjKX(obj) ->r†rhj†rj©j†r j;Xobjr!†r"hj†r#hLXisr$†r%hj†r&hLj®†r'j;Xobjr(†r)j©j"†r*hj†r+hLXorr,†r-hj†r.j;XtoStringr/†r0j©jí†r1j;Xcallr2†r3j©j†r4j;Xobjr5†r6j©j"†r7hj†r8hLXisr9†r:hj†r;j˜j(†r<j˜X[object Number]r=†r>j˜j(†r?hX


  r@†rAjiX# Is a given value a Date?
rB†rChX  rD†rEh¨X
_.isDate: rF†rGhX      rH†rIjKX(obj) ->rJ†rKhj†rLhLj†rMhLj†rNj©j†rOj;XobjrP†rQhj†rRhLXandrS†rThj†rUj;XobjrV†rWj©jí†rXj;XgetTimezoneOffsetrY†rZhj†r[hLXandr\†r]hj†r^j;Xobjr_†r`j©jí†raj;XsetUTCFullYearrb†rcj©j"†rdhX


  re†rfjiX+# Is the given value a regular expression?
rg†rhhX  ri†rjh¨X_.isRegExp: rk†rlhX    rm†rnjKX(obj) ->ro†rphj†rqhLj†rrhLj†rsj©j†rtj;Xobjru†rvhj†rwhLXandrx†ryhj†rzj;Xobjr{†r|j©jí†r}j;Xexecr~†rhj†r€hLXandr†r‚hj†rƒj©j†r„j;Xobjr…†r†j©jí†r‡j;X
ignoreCaserˆ†r‰hj†rŠhLXorr‹†rŒhj†rj;Xobjrކrj©jí†rj;X
ignoreCaser‘†r’hj†r“hLXisr”†r•hj†r–jXfalser—†r˜j©j"†r™j©j"†ršhX


  r›†rœjiXE# Is the given value NaN -- this one is interesting. NaN != NaN, and
r†ržhX  rŸ†r jiXA# isNaN(undefined) == true, so we make sure it's a number first.
r¡†r¢hX  r£†r¤h¨X	_.isNaN: r¥†r¦hX       r§†r¨jKX(obj) ->r©†rªhj†r«j;jï†r¬j©jí†r­j;XisNumberr®†r¯j©j†r°j;Xobjr±†r²j©j"†r³hj†r´hLXandrµ†r¶hj†r·jXwindowr¸†r¹j©jí†rºjXisNaNr»†r¼j©j†r½j;Xobjr¾†r¿j©j"†rÀhX


  rÁ†rÂjiX"# Is a given value equal to null?
rÆrÄhX  rņrÆh¨X
_.isNull: rdžrÈhX      rɆrÊjKX(obj) ->rˆrÌhj†rÍj;XobjrΆrÏhj†rÐhLXisrцrÒhj†rÓjXnullrÔ†rÕhX


  rÖ†r×jiX!# Is a given variable undefined?
r؆rÙhX  rÚ†rÛh¨X_.isUndefined: r܆rÝhj†rÞjKX(obj) ->r߆ràhj†rájóXtypeofrâ†rãhj†räj;Xobjrå†ræhj†rçhLXisrè†réhj†rêj˜j(†rëj˜X	undefinedrì†ríj˜j(†rîhX


  rï†rðjiXK# -------------------------- Utility Functions: --------------------------
rñ†ròhX
  ró†rôjiXJ# Run Underscore.js in noConflict mode, returning the '_' variable to its
rõ†röhX  r÷†røjiX@# previous owner. Returns a reference to the Underscore object.
rù†rúhX  rû†rüh¨X_.noConflict: rý†rþjKX->rÿ†rhX
    r†rh¨Xroot._: r†rj;XpreviousUnderscorer†rhX
    r†rjóXthisr	†r
hX


  r†rjiX;# Keep the identity function around for default iterators.
r
†rhX  r†rh¨X_.identity: r†rjKX
(value) ->r†rhj†rj;Xvaluer†rhX


  r†rjiX+# Break out of the middle of an iteration.
r†rhX  r†rh¨X
_.breakLoop: r†rjKX->r †r!hj†r"jóXthrowr#†r$hj†r%j;Xbreakerr&†r'hX


  r(†r)jiXJ# Generate a unique integer id (unique within the entire client session).
r*†r+hX  r,†r-jiX # Useful for temporary DOM ids.
r.†r/hX  r0†r1h¨XidCounter: r2†r3jxjІr4hX
  r5†r6h¨X_.uniqueId: r7†r8jKX(prefix) ->r9†r:hX
    r;†r<j©j†r=j;Xprefixr>†r?hj†r@hLXorrA†rBhj†rCj˜j(†rDj˜j(†rEj©j"†rFhj†rGhLj®†rHhj†rIj;X	idCounterrJ†rKhLX++rL†rMhX


  rN†rOjiXH# By default, Underscore uses ERB-style template delimiters, change the
rP†rQhX  rR†rSjiX=# following template settings to use alternative delimiters.
rT†rUhX  rV†rWh¨X_.templateSettings: rX†rYj©já	†rZhX
    r[†r\h¨Xstart: r]†r^hX       r_†r`j˜j(†raj˜X<%rb†rcj˜j(†rdhX
    re†rfh¨Xend: rg†rhhX	         ri†rjj˜j(†rkj˜X%>rl†rmj˜j(†rnhX
    ro†rph¨X
interpolate: rq†rrhj†rsjÚX
/<%=(.+?)%>/grt†ruhX
  rv†rwj©jè	†rxhX


  ry†rzjiX=# JavaScript templating a-la ERB, pilfered from John Resig's
r{†r|hX  r}†r~jiX.# "Secrets of the JavaScript Ninja", page 83.
r†r€hX  r†r‚jiX0# Single-quotea fix from Rick Strahl's version.
rƒ†r„hX  r…†r†h¨X_.template: r‡†rˆjKX(str, data) ->r‰†rŠhX
    r‹†rŒh¨Xc: r†rŽj;jï†rj©jí†rj;XtemplateSettingsr‘†r’hX
    r“†r”h¨Xfn: r•†r–jóXnewr—†r˜hj†r™jXFunctionrš†r›hj†rœj˜j(†rj˜Xobjrž†rŸj˜j(†r j©jã†r¡hX
      r¢†r£j˜j(†r¤j˜X6var p=[],print=function(){p.push.apply(p,arguments);};r¥†r¦j˜j(†r§hj†r¨hLj®†r©hX
      rª†r«j˜j(†r¬j˜Xwith(obj){p.push(r­†r®j˜X\'r¯†r°j˜j(†r±hj†r²hLj®†r³hX
      r´†rµj;Xstrr¶†r·j©jí†r¸j;Xreplacer¹†rºj©j†r»jÚX/[\r\t\n]/gr¼†r½j©jã†r¾hj†r¿j˜X"rÀ†rÁj˜j†rÂj˜jÀ†rÃj©j"†rÄhX

         rņrÆj©jí†rÇj;XreplacerȆrÉj©j†rÊjóXnewrˆrÌhj†rÍjXRegExprΆrÏj©j†rÐj˜jÀ†rÑj˜j(†rÒj˜X(?=[^rÓ†rÔj˜jÀ†rÕhLj®†rÖj;Xcr׆rØj©jí†rÙj;XendrÚ†rÛj©j†rÜjxjІrÝj©j †rÞhLj®†rßj˜jÀ†ràj˜X]*rá†râj˜jÀ†rãhLj®†räj;j׆råj©jí†ræj;Xendrç†rèhLj®†réj˜jÀ†rêj˜j"†rëj˜jÀ†rìj©jã†ríj˜jÀ†rîj˜Xgrï†rðj˜jÀ†rñj©j"†ròj©jã†rój˜jÀ†rôj˜X\trõ†röj˜jÀ†r÷j©j"†røhX

         rù†rúj©jí†rûj;Xsplitrü†rýj©j†rþj˜jÀ†rÿj˜j(†rj˜jÀ†rj©j"†rj©jí†rj;Xjoinr†rj©j†rj˜jÀ†rj˜X\\r†r	j˜j(†r
j˜jÀ†rj©j"†rhX

         r
†rj©jí†rj;Xsplitr†rj©j†rj˜jÀ†rj˜X\tr†rj˜jÀ†rj©j"†rj©jí†rj;Xjoinr†rj©j†rj˜jÀ†rj˜j(†rj˜jÀ†rj©j"†rhX

         r †r!j©jí†r"j;Xreplacer#†r$j©j†r%j;j׆r&j©jí†r'j;Xinterpolater(†r)j©jã†r*hj†r+j˜jÀ†r,j˜j(†r-j˜X,$1,r.†r/j˜j(†r0j˜jÀ†r1j©j"†r2hX

         r3†r4j©jí†r5j;Xsplitr6†r7j©j†r8j;j׆r9j©jí†r:j;Xstartr;†r<j©j"†r=j©jí†r>j;Xjoinr?†r@j©j†rAj˜jÀ†rBj˜j(†rCj˜X);rD†rEj˜jÀ†rFj©j"†rGhX

         rH†rIj©jí†rJj;XsplitrK†rLj©j†rMj;j׆rNj©jí†rOj;XendrP†rQj©j"†rRj©jí†rSj;XjoinrT†rUj©j†rVj˜jÀ†rWj˜Xp.push(rX†rYj˜j(†rZj˜jÀ†r[j©j"†r\hj†r]hLj®†r^hX

         r_†r`j˜jÀ†raj˜j(†rbj˜X);}return p.join(rc†rdj˜j(†rej˜j(†rfj˜X);rg†rhj˜jÀ†rihX
    rj†rkjóXifrl†rmhj†rnj;Xdataro†rphj†rqjóXthenrr†rshj†rtj;Xfnru†rvj©j†rwj;Xdatarx†ryj©j"†rzhj†r{jóXelser|†r}hj†r~j;Xfnr†r€hX


  r†r‚jiXM# ------------------------------- Aliases ----------------------------------
rƒ†r„hX
  r…†r†h¨X_.forEach: r‡†rˆj;jï†r‰j©jí†rŠj;Xeachr‹†rŒhX
  r†rŽh¨X	_.foldl: r†rhX  r‘†r’h¨X
_.inject: r“†r”hX     r•†r–j;jï†r—j©jí†r˜j;Xreducer™†ršhX
  r›†rœh¨X	_.foldr: r†ržhX  rŸ†r j;jï†r¡j©jí†r¢j;XreduceRightr£†r¤hX
  r¥†r¦h¨X
_.filter: r§†r¨hj†r©j;jï†rªj©jí†r«j;Xselectr¬†r­hX
  r®†r¯h¨X	_.every: r°†r±hX  r²†r³j;jï†r´j©jí†rµj;Xallr¶†r·hX
  r¸†r¹h¨X_.some: rº†r»hX   r¼†r½j;jï†r¾j©jí†r¿j;XanyrÀ†rÁhX
  r†rÃh¨X_.head: rĆrÅhX   rƆrÇj;jï†rÈj©jí†rÉj;XfirstrʆrËhX
  r̆rÍh¨X_.tail: rΆrÏhX   rІrÑj;jï†rÒj©jí†rÓj;XrestrÔ†rÕhX
  rÖ†r×h¨X_.methods: r؆rÙj;jï†rÚj©jí†rÛj;X	functionsr܆rÝhX


  rÞ†rßjiXS#   /*------------------------ Setup the OOP Wrapper: --------------------------*/
rà†ráhX
  râ†rãjiX=# Helper function to continue chaining intermediate results.
rä†råhX  ræ†rçh¨Xresult: rè†réjKX(obj, chain) ->rê†rëhX
    rì†ríjóXifrî†rïhj†rðj;Xchainrñ†ròhj†rójóXthenrô†rõhj†röj;jï†r÷j©j†røj;Xobjrù†rúj©j"†rûj©jí†rüj;Xchainrý†rþj©j†rÿj©j"†rhj†rjóXelser†rhj†rj;Xobjr†rhX


  r†rjiX=# Add all of the Underscore functions to the wrapper object.
r	†r
hX  r†rj;jï†r
j©jí†rj;Xeachr†rhj†rj;jï†rj©jí†rj;X	functionsr†rj©j†rj;jï†rj©j"†rj©jã†rhj†rjKX	(name) ->r†rhX
    r†rh¨Xmethod: r†r j;jï†r!j©j†r"j;Xnamer#†r$j©j †r%hX
    r&†r'j;Xwrapperr(†r)j©jí†r*j;X	prototyper+†r,j©j†r-j;Xnamer.†r/j©j †r0hLj{†r1hj†r2jKX->r3†r4hX
      r5†r6j;Xunshiftr7†r8j©jí†r9j;Xcallr:†r;j©j†r<j;X	argumentsr=†r>j©jã†r?hj†r@jóXthisrA†rBj©jí†rCj;X_wrappedrD†rEj©j"†rFhX
      rG†rHj;XresultrI†rJj©j†rKj;XmethodrL†rMj©jí†rNj;XapplyrO†rPj©j†rQj;jï†rRj©jã†rShj†rTj;X	argumentsrU†rVj©j"†rWj©jã†rXhj†rYjóXthisrZ†r[j©jí†r\j;X_chainr]†r^j©j"†r_hX


  r`†rajiX2# Add all mutator Array functions to the wrapper.
rb†rchX  rd†rej;jï†rfj©jí†rgj;Xeachrh†rihj†rjj©j†rkj˜j(†rlj˜Xpoprm†rnj˜j(†roj©jã†rphj†rqj˜j(†rrj˜Xpushrs†rtj˜j(†ruj©jã†rvhj†rwj˜j(†rxj˜Xreversery†rzj˜j(†r{j©jã†r|hj†r}j˜j(†r~j˜Xshiftr†r€j˜j(†rj©jã†r‚hj†rƒj˜j(†r„j˜Xsortr…†r†j˜j(†r‡j©jã†rˆhj†r‰j˜j(†rŠj˜Xsplicer‹†rŒj˜j(†rj©jã†rŽhj†rj˜j(†rj˜Xunshiftr‘†r’j˜j(†r“j©j †r”j©jã†r•hj†r–jKX	(name) ->r—†r˜hX
    r™†ršh¨Xmethod: r›†rœjXArrayr†ržj©jí†rŸj;X	prototyper †r¡j©j†r¢j;Xnamer£†r¤j©j †r¥hX
    r¦†r§j;Xwrapperr¨†r©j©jí†rªj;X	prototyper«†r¬j©j†r­j;Xnamer®†r¯j©j †r°hLj{†r±hj†r²jKX->r³†r´hX
      rµ†r¶j;Xmethodr·†r¸j©jí†r¹j;Xapplyrº†r»j©j†r¼jóXthisr½†r¾j©jí†r¿j;X_wrappedrÀ†rÁj©jã†rÂhj†rÃj;X	argumentsrĆrÅj©j"†rÆhX
      rdžrÈj;XresultrɆrÊj©j†rËjóXthisr̆rÍj©jí†rÎj;X_wrappedrφrÐj©jã†rÑhj†rÒjóXthisrÓ†rÔj©jí†rÕj;X_chainrÖ†r×j©j"†rØhX


  rÙ†rÚjiX3# Add all accessor Array functions to the wrapper.
rÛ†rÜhX  r݆rÞj;jï†rßj©jí†ràj;Xeachrá†râhj†rãj©j†räj˜j(†råj˜Xconcatræ†rçj˜j(†rèj©jã†réhj†rêj˜j(†rëj˜Xjoinrì†ríj˜j(†rîj©jã†rïhj†rðj˜j(†rñj˜Xslicerò†rój˜j(†rôj©j †rõj©jã†röhj†r÷jKX	(name) ->rø†rùhX
    rú†rûh¨Xmethod: rü†rýjXArrayrþ†rÿj©jí†rj;X	prototyper†rj©j†rj;Xnamer†rj©j †rhX
    r†rj;Xwrapperr	†r
j©jí†rj;X	prototyper†r
j©j†rj;Xnamer†rj©j †rhLj{†rhj†rjKX->r†rhX
      r†rj;Xresultr†rj©j†rj;Xmethodr†rj©jí†rj;Xapplyr†rj©j†r jóXthisr!†r"j©jí†r#j;X_wrappedr$†r%j©jã†r&hj†r'j;X	argumentsr(†r)j©j"†r*j©jã†r+hj†r,jóXthisr-†r.j©jí†r/j;X_chainr0†r1j©j"†r2hX


  r3†r4jiX.# Start chaining a wrapped Underscore object.
r5†r6hX  r7†r8h¨Xwrapper::chain: r9†r:jKX->r;†r<hX
    r=†r>jóXthisr?†r@j©jí†rAh¨X_chain: rB†rCjXtruerD†rEhX
    rF†rGjóXthisrH†rIhX


  rJ†rKjiX9# Extracts the result from a wrapped and chained object.
rL†rMhX  rN†rOh¨Xwrapper::value: rP†rQjKX->rR†rShj†rTjóXthisrU†rVj©jí†rWj;X_wrappedrX†rYhX
rZ†r[e.