react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / dist / handlebars.js
80684 views/*!12handlebars v3.0.034Copyright (C) 2011-2014 by Yehuda Katz56Permission is hereby granted, free of charge, to any person obtaining a copy7of this software and associated documentation files (the "Software"), to deal8in the Software without restriction, including without limitation the rights9to use, copy, modify, merge, publish, distribute, sublicense, and/or sell10copies of the Software, and to permit persons to whom the Software is11furnished to do so, subject to the following conditions:1213The above copyright notice and this permission notice shall be included in14all copies or substantial portions of the Software.1516THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR17IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,18FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE19AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER20LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,21OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN22THE SOFTWARE.2324@license25*/26/* exported Handlebars */27(function (root, factory) {28if (typeof define === 'function' && define.amd) {29define([], factory);30} else if (typeof exports === 'object') {31module.exports = factory();32} else {33root.Handlebars = factory();34}35}(this, function () {36// handlebars/utils.js37var __module3__ = (function() {38"use strict";39var __exports__ = {};40/*jshint -W004 */41var escape = {42"&": "&",43"<": "<",44">": ">",45'"': """,46"'": "'",47"`": "`"48};4950var badChars = /[&<>"'`]/g;51var possible = /[&<>"'`]/;5253function escapeChar(chr) {54return escape[chr];55}5657function extend(obj /* , ...source */) {58for (var i = 1; i < arguments.length; i++) {59for (var key in arguments[i]) {60if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {61obj[key] = arguments[i][key];62}63}64}6566return obj;67}6869__exports__.extend = extend;var toString = Object.prototype.toString;70__exports__.toString = toString;71// Sourced from lodash72// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt73var isFunction = function(value) {74return typeof value === 'function';75};76// fallback for older versions of Chrome and Safari77/* istanbul ignore next */78if (isFunction(/x/)) {79isFunction = function(value) {80return typeof value === 'function' && toString.call(value) === '[object Function]';81};82}83var isFunction;84__exports__.isFunction = isFunction;85/* istanbul ignore next */86var isArray = Array.isArray || function(value) {87return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;88};89__exports__.isArray = isArray;90// Older IE versions do not directly support indexOf so we must implement our own, sadly.91function indexOf(array, value) {92for (var i = 0, len = array.length; i < len; i++) {93if (array[i] === value) {94return i;95}96}97return -1;98}99100__exports__.indexOf = indexOf;101function escapeExpression(string) {102// don't escape SafeStrings, since they're already safe103if (string && string.toHTML) {104return string.toHTML();105} else if (string == null) {106return "";107} else if (!string) {108return string + '';109}110111// Force a string conversion as this will be done by the append regardless and112// the regex test will do this transparently behind the scenes, causing issues if113// an object's to string has escaped characters in it.114string = "" + string;115116if(!possible.test(string)) { return string; }117return string.replace(badChars, escapeChar);118}119120__exports__.escapeExpression = escapeExpression;function isEmpty(value) {121if (!value && value !== 0) {122return true;123} else if (isArray(value) && value.length === 0) {124return true;125} else {126return false;127}128}129130__exports__.isEmpty = isEmpty;function blockParams(params, ids) {131params.path = ids;132return params;133}134135__exports__.blockParams = blockParams;function appendContextPath(contextPath, id) {136return (contextPath ? contextPath + '.' : '') + id;137}138139__exports__.appendContextPath = appendContextPath;140return __exports__;141})();142143// handlebars/exception.js144var __module4__ = (function() {145"use strict";146var __exports__;147148var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];149150function Exception(message, node) {151var loc = node && node.loc,152line,153column;154if (loc) {155line = loc.start.line;156column = loc.start.column;157158message += ' - ' + line + ':' + column;159}160161var tmp = Error.prototype.constructor.call(this, message);162163// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.164for (var idx = 0; idx < errorProps.length; idx++) {165this[errorProps[idx]] = tmp[errorProps[idx]];166}167168if (loc) {169this.lineNumber = line;170this.column = column;171}172}173174Exception.prototype = new Error();175176__exports__ = Exception;177return __exports__;178})();179180// handlebars/base.js181var __module2__ = (function(__dependency1__, __dependency2__) {182"use strict";183var __exports__ = {};184var Utils = __dependency1__;185var Exception = __dependency2__;186187var VERSION = "3.0.0";188__exports__.VERSION = VERSION;var COMPILER_REVISION = 6;189__exports__.COMPILER_REVISION = COMPILER_REVISION;190var REVISION_CHANGES = {1911: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it1922: '== 1.0.0-rc.3',1933: '== 1.0.0-rc.4',1944: '== 1.x.x',1955: '== 2.0.0-alpha.x',1966: '>= 2.0.0-beta.1'197};198__exports__.REVISION_CHANGES = REVISION_CHANGES;199var isArray = Utils.isArray,200isFunction = Utils.isFunction,201toString = Utils.toString,202objectType = '[object Object]';203204function HandlebarsEnvironment(helpers, partials) {205this.helpers = helpers || {};206this.partials = partials || {};207208registerDefaultHelpers(this);209}210211__exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {212constructor: HandlebarsEnvironment,213214logger: logger,215log: log,216217registerHelper: function(name, fn) {218if (toString.call(name) === objectType) {219if (fn) { throw new Exception('Arg not supported with multiple helpers'); }220Utils.extend(this.helpers, name);221} else {222this.helpers[name] = fn;223}224},225unregisterHelper: function(name) {226delete this.helpers[name];227},228229registerPartial: function(name, partial) {230if (toString.call(name) === objectType) {231Utils.extend(this.partials, name);232} else {233if (typeof partial === 'undefined') {234throw new Exception('Attempting to register a partial as undefined');235}236this.partials[name] = partial;237}238},239unregisterPartial: function(name) {240delete this.partials[name];241}242};243244function registerDefaultHelpers(instance) {245instance.registerHelper('helperMissing', function(/* [args, ]options */) {246if(arguments.length === 1) {247// A missing field in a {{foo}} constuct.248return undefined;249} else {250// Someone is actually trying to call something, blow up.251throw new Exception("Missing helper: '" + arguments[arguments.length-1].name + "'");252}253});254255instance.registerHelper('blockHelperMissing', function(context, options) {256var inverse = options.inverse,257fn = options.fn;258259if(context === true) {260return fn(this);261} else if(context === false || context == null) {262return inverse(this);263} else if (isArray(context)) {264if(context.length > 0) {265if (options.ids) {266options.ids = [options.name];267}268269return instance.helpers.each(context, options);270} else {271return inverse(this);272}273} else {274if (options.data && options.ids) {275var data = createFrame(options.data);276data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name);277options = {data: data};278}279280return fn(context, options);281}282});283284instance.registerHelper('each', function(context, options) {285if (!options) {286throw new Exception('Must pass iterator to #each');287}288289var fn = options.fn, inverse = options.inverse;290var i = 0, ret = "", data;291292var contextPath;293if (options.data && options.ids) {294contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';295}296297if (isFunction(context)) { context = context.call(this); }298299if (options.data) {300data = createFrame(options.data);301}302303function execIteration(key, i, last) {304if (data) {305data.key = key;306data.index = i;307data.first = i === 0;308data.last = !!last;309310if (contextPath) {311data.contextPath = contextPath + key;312}313}314315ret = ret + fn(context[key], {316data: data,317blockParams: Utils.blockParams([context[key], key], [contextPath + key, null])318});319}320321if(context && typeof context === 'object') {322if (isArray(context)) {323for(var j = context.length; i<j; i++) {324execIteration(i, i, i === context.length-1);325}326} else {327var priorKey;328329for(var key in context) {330if(context.hasOwnProperty(key)) {331// We're running the iterations one step out of sync so we can detect332// the last iteration without have to scan the object twice and create333// an itermediate keys array.334if (priorKey) {335execIteration(priorKey, i-1);336}337priorKey = key;338i++;339}340}341if (priorKey) {342execIteration(priorKey, i-1, true);343}344}345}346347if(i === 0){348ret = inverse(this);349}350351return ret;352});353354instance.registerHelper('if', function(conditional, options) {355if (isFunction(conditional)) { conditional = conditional.call(this); }356357// Default behavior is to render the positive path if the value is truthy and not empty.358// The `includeZero` option may be set to treat the condtional as purely not empty based on the359// behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.360if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {361return options.inverse(this);362} else {363return options.fn(this);364}365});366367instance.registerHelper('unless', function(conditional, options) {368return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});369});370371instance.registerHelper('with', function(context, options) {372if (isFunction(context)) { context = context.call(this); }373374var fn = options.fn;375376if (!Utils.isEmpty(context)) {377if (options.data && options.ids) {378var data = createFrame(options.data);379data.contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]);380options = {data:data};381}382383return fn(context, options);384} else {385return options.inverse(this);386}387});388389instance.registerHelper('log', function(message, options) {390var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;391instance.log(level, message);392});393394instance.registerHelper('lookup', function(obj, field) {395return obj && obj[field];396});397}398399var logger = {400methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },401402// State enum403DEBUG: 0,404INFO: 1,405WARN: 2,406ERROR: 3,407level: 1,408409// Can be overridden in the host environment410log: function(level, message) {411if (typeof console !== 'undefined' && logger.level <= level) {412var method = logger.methodMap[level];413(console[method] || console.log).call(console, message);414}415}416};417__exports__.logger = logger;418var log = logger.log;419__exports__.log = log;420var createFrame = function(object) {421var frame = Utils.extend({}, object);422frame._parent = object;423return frame;424};425__exports__.createFrame = createFrame;426return __exports__;427})(__module3__, __module4__);428429// handlebars/safe-string.js430var __module5__ = (function() {431"use strict";432var __exports__;433// Build out our basic SafeString type434function SafeString(string) {435this.string = string;436}437438SafeString.prototype.toString = SafeString.prototype.toHTML = function() {439return "" + this.string;440};441442__exports__ = SafeString;443return __exports__;444})();445446// handlebars/runtime.js447var __module6__ = (function(__dependency1__, __dependency2__, __dependency3__) {448"use strict";449var __exports__ = {};450var Utils = __dependency1__;451var Exception = __dependency2__;452var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;453var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;454var createFrame = __dependency3__.createFrame;455456function checkRevision(compilerInfo) {457var compilerRevision = compilerInfo && compilerInfo[0] || 1,458currentRevision = COMPILER_REVISION;459460if (compilerRevision !== currentRevision) {461if (compilerRevision < currentRevision) {462var runtimeVersions = REVISION_CHANGES[currentRevision],463compilerVersions = REVISION_CHANGES[compilerRevision];464throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+465"Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");466} else {467// Use the embedded version info since the runtime doesn't know about this revision yet468throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+469"Please update your runtime to a newer version ("+compilerInfo[1]+").");470}471}472}473474__exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial475476function template(templateSpec, env) {477/* istanbul ignore next */478if (!env) {479throw new Exception("No environment passed to template");480}481if (!templateSpec || !templateSpec.main) {482throw new Exception('Unknown template object: ' + typeof templateSpec);483}484485// Note: Using env.VM references rather than local var references throughout this section to allow486// for external users to override these as psuedo-supported APIs.487env.VM.checkRevision(templateSpec.compiler);488489var invokePartialWrapper = function(partial, context, options) {490if (options.hash) {491context = Utils.extend({}, context, options.hash);492}493494partial = env.VM.resolvePartial.call(this, partial, context, options);495var result = env.VM.invokePartial.call(this, partial, context, options);496497if (result == null && env.compile) {498options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);499result = options.partials[options.name](context, options);500}501if (result != null) {502if (options.indent) {503var lines = result.split('\n');504for (var i = 0, l = lines.length; i < l; i++) {505if (!lines[i] && i + 1 === l) {506break;507}508509lines[i] = options.indent + lines[i];510}511result = lines.join('\n');512}513return result;514} else {515throw new Exception("The partial " + options.name + " could not be compiled when running in runtime-only mode");516}517};518519// Just add water520var container = {521strict: function(obj, name) {522if (!(name in obj)) {523throw new Exception('"' + name + '" not defined in ' + obj);524}525return obj[name];526},527lookup: function(depths, name) {528var len = depths.length;529for (var i = 0; i < len; i++) {530if (depths[i] && depths[i][name] != null) {531return depths[i][name];532}533}534},535lambda: function(current, context) {536return typeof current === 'function' ? current.call(context) : current;537},538539escapeExpression: Utils.escapeExpression,540invokePartial: invokePartialWrapper,541542fn: function(i) {543return templateSpec[i];544},545546programs: [],547program: function(i, data, declaredBlockParams, blockParams, depths) {548var programWrapper = this.programs[i],549fn = this.fn(i);550if (data || depths || blockParams || declaredBlockParams) {551programWrapper = program(this, i, fn, data, declaredBlockParams, blockParams, depths);552} else if (!programWrapper) {553programWrapper = this.programs[i] = program(this, i, fn);554}555return programWrapper;556},557558data: function(data, depth) {559while (data && depth--) {560data = data._parent;561}562return data;563},564merge: function(param, common) {565var ret = param || common;566567if (param && common && (param !== common)) {568ret = Utils.extend({}, common, param);569}570571return ret;572},573574noop: env.VM.noop,575compilerInfo: templateSpec.compiler576};577578var ret = function(context, options) {579options = options || {};580var data = options.data;581582ret._setup(options);583if (!options.partial && templateSpec.useData) {584data = initData(context, data);585}586var depths,587blockParams = templateSpec.useBlockParams ? [] : undefined;588if (templateSpec.useDepths) {589depths = options.depths ? [context].concat(options.depths) : [context];590}591592return templateSpec.main.call(container, context, container.helpers, container.partials, data, blockParams, depths);593};594ret.isTop = true;595596ret._setup = function(options) {597if (!options.partial) {598container.helpers = container.merge(options.helpers, env.helpers);599600if (templateSpec.usePartial) {601container.partials = container.merge(options.partials, env.partials);602}603} else {604container.helpers = options.helpers;605container.partials = options.partials;606}607};608609ret._child = function(i, data, blockParams, depths) {610if (templateSpec.useBlockParams && !blockParams) {611throw new Exception('must pass block params');612}613if (templateSpec.useDepths && !depths) {614throw new Exception('must pass parent depths');615}616617return program(container, i, templateSpec[i], data, 0, blockParams, depths);618};619return ret;620}621622__exports__.template = template;function program(container, i, fn, data, declaredBlockParams, blockParams, depths) {623var prog = function(context, options) {624options = options || {};625626return fn.call(container,627context,628container.helpers, container.partials,629options.data || data,630blockParams && [options.blockParams].concat(blockParams),631depths && [context].concat(depths));632};633prog.program = i;634prog.depth = depths ? depths.length : 0;635prog.blockParams = declaredBlockParams || 0;636return prog;637}638639__exports__.program = program;function resolvePartial(partial, context, options) {640if (!partial) {641partial = options.partials[options.name];642} else if (!partial.call && !options.name) {643// This is a dynamic partial that returned a string644options.name = partial;645partial = options.partials[partial];646}647return partial;648}649650__exports__.resolvePartial = resolvePartial;function invokePartial(partial, context, options) {651options.partial = true;652653if(partial === undefined) {654throw new Exception("The partial " + options.name + " could not be found");655} else if(partial instanceof Function) {656return partial(context, options);657}658}659660__exports__.invokePartial = invokePartial;function noop() { return ""; }661662__exports__.noop = noop;function initData(context, data) {663if (!data || !('root' in data)) {664data = data ? createFrame(data) : {};665data.root = context;666}667return data;668}669return __exports__;670})(__module3__, __module4__, __module2__);671672// handlebars.runtime.js673var __module1__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {674"use strict";675var __exports__;676/*globals Handlebars: true */677var base = __dependency1__;678679// Each of these augment the Handlebars object. No need to setup here.680// (This is done to easily share code between commonjs and browse envs)681var SafeString = __dependency2__;682var Exception = __dependency3__;683var Utils = __dependency4__;684var runtime = __dependency5__;685686// For compatibility and usage outside of module systems, make the Handlebars object a namespace687var create = function() {688var hb = new base.HandlebarsEnvironment();689690Utils.extend(hb, base);691hb.SafeString = SafeString;692hb.Exception = Exception;693hb.Utils = Utils;694hb.escapeExpression = Utils.escapeExpression;695696hb.VM = runtime;697hb.template = function(spec) {698return runtime.template(spec, hb);699};700701return hb;702};703704var Handlebars = create();705Handlebars.create = create;706707/*jshint -W040 */708/* istanbul ignore next */709var root = typeof global !== 'undefined' ? global : window,710$Handlebars = root.Handlebars;711/* istanbul ignore next */712Handlebars.noConflict = function() {713if (root.Handlebars === Handlebars) {714root.Handlebars = $Handlebars;715}716};717718Handlebars['default'] = Handlebars;719720__exports__ = Handlebars;721return __exports__;722})(__module2__, __module5__, __module4__, __module3__, __module6__);723724// handlebars/compiler/ast.js725var __module7__ = (function() {726"use strict";727var __exports__;728var AST = {729Program: function(statements, blockParams, strip, locInfo) {730this.loc = locInfo;731this.type = 'Program';732this.body = statements;733734this.blockParams = blockParams;735this.strip = strip;736},737738MustacheStatement: function(path, params, hash, escaped, strip, locInfo) {739this.loc = locInfo;740this.type = 'MustacheStatement';741742this.path = path;743this.params = params || [];744this.hash = hash;745this.escaped = escaped;746747this.strip = strip;748},749750BlockStatement: function(path, params, hash, program, inverse, openStrip, inverseStrip, closeStrip, locInfo) {751this.loc = locInfo;752this.type = 'BlockStatement';753754this.path = path;755this.params = params || [];756this.hash = hash;757this.program = program;758this.inverse = inverse;759760this.openStrip = openStrip;761this.inverseStrip = inverseStrip;762this.closeStrip = closeStrip;763},764765PartialStatement: function(name, params, hash, strip, locInfo) {766this.loc = locInfo;767this.type = 'PartialStatement';768769this.name = name;770this.params = params || [];771this.hash = hash;772773this.indent = '';774this.strip = strip;775},776777ContentStatement: function(string, locInfo) {778this.loc = locInfo;779this.type = 'ContentStatement';780this.original = this.value = string;781},782783CommentStatement: function(comment, strip, locInfo) {784this.loc = locInfo;785this.type = 'CommentStatement';786this.value = comment;787788this.strip = strip;789},790791SubExpression: function(path, params, hash, locInfo) {792this.loc = locInfo;793794this.type = 'SubExpression';795this.path = path;796this.params = params || [];797this.hash = hash;798},799800PathExpression: function(data, depth, parts, original, locInfo) {801this.loc = locInfo;802this.type = 'PathExpression';803804this.data = data;805this.original = original;806this.parts = parts;807this.depth = depth;808},809810StringLiteral: function(string, locInfo) {811this.loc = locInfo;812this.type = 'StringLiteral';813this.original =814this.value = string;815},816817NumberLiteral: function(number, locInfo) {818this.loc = locInfo;819this.type = 'NumberLiteral';820this.original =821this.value = Number(number);822},823824BooleanLiteral: function(bool, locInfo) {825this.loc = locInfo;826this.type = 'BooleanLiteral';827this.original =828this.value = bool === 'true';829},830831Hash: function(pairs, locInfo) {832this.loc = locInfo;833this.type = 'Hash';834this.pairs = pairs;835},836HashPair: function(key, value, locInfo) {837this.loc = locInfo;838this.type = 'HashPair';839this.key = key;840this.value = value;841},842843// Public API used to evaluate derived attributes regarding AST nodes844helpers: {845// a mustache is definitely a helper if:846// * it is an eligible helper, and847// * it has at least one parameter or hash segment848// TODO: Make these public utility methods849helperExpression: function(node) {850return !!(node.type === 'SubExpression' || node.params.length || node.hash);851},852853scopedId: function(path) {854return (/^\.|this\b/).test(path.original);855},856857// an ID is simple if it only has one part, and that part is not858// `..` or `this`.859simpleId: function(path) {860return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;861}862}863};864865866// Must be exported as an object rather than the root of the module as the jison lexer867// must modify the object to operate properly.868__exports__ = AST;869return __exports__;870})();871872// handlebars/compiler/parser.js873var __module9__ = (function() {874"use strict";875var __exports__;876/* jshint ignore:start */877/* istanbul ignore next */878/* Jison generated parser */879var handlebars = (function(){880var parser = {trace: function trace() { },881yy: {},882symbols_: {"error":2,"root":3,"program":4,"EOF":5,"program_repetition0":6,"statement":7,"mustache":8,"block":9,"rawBlock":10,"partial":11,"content":12,"COMMENT":13,"CONTENT":14,"openRawBlock":15,"END_RAW_BLOCK":16,"OPEN_RAW_BLOCK":17,"helperName":18,"openRawBlock_repetition0":19,"openRawBlock_option0":20,"CLOSE_RAW_BLOCK":21,"openBlock":22,"block_option0":23,"closeBlock":24,"openInverse":25,"block_option1":26,"OPEN_BLOCK":27,"openBlock_repetition0":28,"openBlock_option0":29,"openBlock_option1":30,"CLOSE":31,"OPEN_INVERSE":32,"openInverse_repetition0":33,"openInverse_option0":34,"openInverse_option1":35,"openInverseChain":36,"OPEN_INVERSE_CHAIN":37,"openInverseChain_repetition0":38,"openInverseChain_option0":39,"openInverseChain_option1":40,"inverseAndProgram":41,"INVERSE":42,"inverseChain":43,"inverseChain_option0":44,"OPEN_ENDBLOCK":45,"OPEN":46,"mustache_repetition0":47,"mustache_option0":48,"OPEN_UNESCAPED":49,"mustache_repetition1":50,"mustache_option1":51,"CLOSE_UNESCAPED":52,"OPEN_PARTIAL":53,"partialName":54,"partial_repetition0":55,"partial_option0":56,"param":57,"sexpr":58,"OPEN_SEXPR":59,"sexpr_repetition0":60,"sexpr_option0":61,"CLOSE_SEXPR":62,"hash":63,"hash_repetition_plus0":64,"hashSegment":65,"ID":66,"EQUALS":67,"blockParams":68,"OPEN_BLOCK_PARAMS":69,"blockParams_repetition_plus0":70,"CLOSE_BLOCK_PARAMS":71,"path":72,"dataName":73,"STRING":74,"NUMBER":75,"BOOLEAN":76,"DATA":77,"pathSegments":78,"SEP":79,"$accept":0,"$end":1},883terminals_: {2:"error",5:"EOF",13:"COMMENT",14:"CONTENT",16:"END_RAW_BLOCK",17:"OPEN_RAW_BLOCK",21:"CLOSE_RAW_BLOCK",27:"OPEN_BLOCK",31:"CLOSE",32:"OPEN_INVERSE",37:"OPEN_INVERSE_CHAIN",42:"INVERSE",45:"OPEN_ENDBLOCK",46:"OPEN",49:"OPEN_UNESCAPED",52:"CLOSE_UNESCAPED",53:"OPEN_PARTIAL",59:"OPEN_SEXPR",62:"CLOSE_SEXPR",66:"ID",67:"EQUALS",69:"OPEN_BLOCK_PARAMS",71:"CLOSE_BLOCK_PARAMS",74:"STRING",75:"NUMBER",76:"BOOLEAN",77:"DATA",79:"SEP"},884productions_: [0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[12,1],[10,3],[15,5],[9,4],[9,4],[22,6],[25,6],[36,6],[41,2],[43,3],[43,1],[24,3],[8,5],[8,5],[11,5],[57,1],[57,1],[58,5],[63,1],[65,3],[68,3],[18,1],[18,1],[18,1],[18,1],[18,1],[54,1],[54,1],[73,2],[72,1],[78,3],[78,1],[6,0],[6,2],[19,0],[19,2],[20,0],[20,1],[23,0],[23,1],[26,0],[26,1],[28,0],[28,2],[29,0],[29,1],[30,0],[30,1],[33,0],[33,2],[34,0],[34,1],[35,0],[35,1],[38,0],[38,2],[39,0],[39,1],[40,0],[40,1],[44,0],[44,1],[47,0],[47,2],[48,0],[48,1],[50,0],[50,2],[51,0],[51,1],[55,0],[55,2],[56,0],[56,1],[60,0],[60,2],[61,0],[61,1],[64,1],[64,2],[70,1],[70,2]],885performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {886887var $0 = $$.length - 1;888switch (yystate) {889case 1: return $$[$0-1];890break;891case 2:this.$ = new yy.Program($$[$0], null, {}, yy.locInfo(this._$));892break;893case 3:this.$ = $$[$0];894break;895case 4:this.$ = $$[$0];896break;897case 5:this.$ = $$[$0];898break;899case 6:this.$ = $$[$0];900break;901case 7:this.$ = $$[$0];902break;903case 8:this.$ = new yy.CommentStatement(yy.stripComment($$[$0]), yy.stripFlags($$[$0], $$[$0]), yy.locInfo(this._$));904break;905case 9:this.$ = new yy.ContentStatement($$[$0], yy.locInfo(this._$));906break;907case 10:this.$ = yy.prepareRawBlock($$[$0-2], $$[$0-1], $$[$0], this._$);908break;909case 11:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1] };910break;911case 12:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], false, this._$);912break;913case 13:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], true, this._$);914break;915case 14:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };916break;917case 15:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };918break;919case 16:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };920break;921case 17:this.$ = { strip: yy.stripFlags($$[$0-1], $$[$0-1]), program: $$[$0] };922break;923case 18:924var inverse = yy.prepareBlock($$[$0-2], $$[$0-1], $$[$0], $$[$0], false, this._$),925program = new yy.Program([inverse], null, {}, yy.locInfo(this._$));926program.chained = true;927928this.$ = { strip: $$[$0-2].strip, program: program, chain: true };929930break;931case 19:this.$ = $$[$0];932break;933case 20:this.$ = {path: $$[$0-1], strip: yy.stripFlags($$[$0-2], $$[$0])};934break;935case 21:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);936break;937case 22:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);938break;939case 23:this.$ = new yy.PartialStatement($$[$0-3], $$[$0-2], $$[$0-1], yy.stripFlags($$[$0-4], $$[$0]), yy.locInfo(this._$));940break;941case 24:this.$ = $$[$0];942break;943case 25:this.$ = $$[$0];944break;945case 26:this.$ = new yy.SubExpression($$[$0-3], $$[$0-2], $$[$0-1], yy.locInfo(this._$));946break;947case 27:this.$ = new yy.Hash($$[$0], yy.locInfo(this._$));948break;949case 28:this.$ = new yy.HashPair($$[$0-2], $$[$0], yy.locInfo(this._$));950break;951case 29:this.$ = $$[$0-1];952break;953case 30:this.$ = $$[$0];954break;955case 31:this.$ = $$[$0];956break;957case 32:this.$ = new yy.StringLiteral($$[$0], yy.locInfo(this._$));958break;959case 33:this.$ = new yy.NumberLiteral($$[$0], yy.locInfo(this._$));960break;961case 34:this.$ = new yy.BooleanLiteral($$[$0], yy.locInfo(this._$));962break;963case 35:this.$ = $$[$0];964break;965case 36:this.$ = $$[$0];966break;967case 37:this.$ = yy.preparePath(true, $$[$0], this._$);968break;969case 38:this.$ = yy.preparePath(false, $$[$0], this._$);970break;971case 39: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2];972break;973case 40:this.$ = [{part: $$[$0]}];974break;975case 41:this.$ = [];976break;977case 42:$$[$0-1].push($$[$0]);978break;979case 43:this.$ = [];980break;981case 44:$$[$0-1].push($$[$0]);982break;983case 51:this.$ = [];984break;985case 52:$$[$0-1].push($$[$0]);986break;987case 57:this.$ = [];988break;989case 58:$$[$0-1].push($$[$0]);990break;991case 63:this.$ = [];992break;993case 64:$$[$0-1].push($$[$0]);994break;995case 71:this.$ = [];996break;997case 72:$$[$0-1].push($$[$0]);998break;999case 75:this.$ = [];1000break;1001case 76:$$[$0-1].push($$[$0]);1002break;1003case 79:this.$ = [];1004break;1005case 80:$$[$0-1].push($$[$0]);1006break;1007case 83:this.$ = [];1008break;1009case 84:$$[$0-1].push($$[$0]);1010break;1011case 87:this.$ = [$$[$0]];1012break;1013case 88:$$[$0-1].push($$[$0]);1014break;1015case 89:this.$ = [$$[$0]];1016break;1017case 90:$$[$0-1].push($$[$0]);1018break;1019}1020},1021table: [{3:1,4:2,5:[2,41],6:3,13:[2,41],14:[2,41],17:[2,41],27:[2,41],32:[2,41],46:[2,41],49:[2,41],53:[2,41]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:[1,11],14:[1,18],15:16,17:[1,21],22:14,25:15,27:[1,19],32:[1,20],37:[2,2],42:[2,2],45:[2,2],46:[1,12],49:[1,13],53:[1,17]},{1:[2,1]},{5:[2,42],13:[2,42],14:[2,42],17:[2,42],27:[2,42],32:[2,42],37:[2,42],42:[2,42],45:[2,42],46:[2,42],49:[2,42],53:[2,42]},{5:[2,3],13:[2,3],14:[2,3],17:[2,3],27:[2,3],32:[2,3],37:[2,3],42:[2,3],45:[2,3],46:[2,3],49:[2,3],53:[2,3]},{5:[2,4],13:[2,4],14:[2,4],17:[2,4],27:[2,4],32:[2,4],37:[2,4],42:[2,4],45:[2,4],46:[2,4],49:[2,4],53:[2,4]},{5:[2,5],13:[2,5],14:[2,5],17:[2,5],27:[2,5],32:[2,5],37:[2,5],42:[2,5],45:[2,5],46:[2,5],49:[2,5],53:[2,5]},{5:[2,6],13:[2,6],14:[2,6],17:[2,6],27:[2,6],32:[2,6],37:[2,6],42:[2,6],45:[2,6],46:[2,6],49:[2,6],53:[2,6]},{5:[2,7],13:[2,7],14:[2,7],17:[2,7],27:[2,7],32:[2,7],37:[2,7],42:[2,7],45:[2,7],46:[2,7],49:[2,7],53:[2,7]},{5:[2,8],13:[2,8],14:[2,8],17:[2,8],27:[2,8],32:[2,8],37:[2,8],42:[2,8],45:[2,8],46:[2,8],49:[2,8],53:[2,8]},{18:22,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{18:31,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{4:32,6:3,13:[2,41],14:[2,41],17:[2,41],27:[2,41],32:[2,41],37:[2,41],42:[2,41],45:[2,41],46:[2,41],49:[2,41],53:[2,41]},{4:33,6:3,13:[2,41],14:[2,41],17:[2,41],27:[2,41],32:[2,41],42:[2,41],45:[2,41],46:[2,41],49:[2,41],53:[2,41]},{12:34,14:[1,18]},{18:36,54:35,58:37,59:[1,38],66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{5:[2,9],13:[2,9],14:[2,9],16:[2,9],17:[2,9],27:[2,9],32:[2,9],37:[2,9],42:[2,9],45:[2,9],46:[2,9],49:[2,9],53:[2,9]},{18:39,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{18:40,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{18:41,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{31:[2,71],47:42,59:[2,71],66:[2,71],74:[2,71],75:[2,71],76:[2,71],77:[2,71]},{21:[2,30],31:[2,30],52:[2,30],59:[2,30],62:[2,30],66:[2,30],69:[2,30],74:[2,30],75:[2,30],76:[2,30],77:[2,30]},{21:[2,31],31:[2,31],52:[2,31],59:[2,31],62:[2,31],66:[2,31],69:[2,31],74:[2,31],75:[2,31],76:[2,31],77:[2,31]},{21:[2,32],31:[2,32],52:[2,32],59:[2,32],62:[2,32],66:[2,32],69:[2,32],74:[2,32],75:[2,32],76:[2,32],77:[2,32]},{21:[2,33],31:[2,33],52:[2,33],59:[2,33],62:[2,33],66:[2,33],69:[2,33],74:[2,33],75:[2,33],76:[2,33],77:[2,33]},{21:[2,34],31:[2,34],52:[2,34],59:[2,34],62:[2,34],66:[2,34],69:[2,34],74:[2,34],75:[2,34],76:[2,34],77:[2,34]},{21:[2,38],31:[2,38],52:[2,38],59:[2,38],62:[2,38],66:[2,38],69:[2,38],74:[2,38],75:[2,38],76:[2,38],77:[2,38],79:[1,43]},{66:[1,30],78:44},{21:[2,40],31:[2,40],52:[2,40],59:[2,40],62:[2,40],66:[2,40],69:[2,40],74:[2,40],75:[2,40],76:[2,40],77:[2,40],79:[2,40]},{50:45,52:[2,75],59:[2,75],66:[2,75],74:[2,75],75:[2,75],76:[2,75],77:[2,75]},{23:46,36:48,37:[1,50],41:49,42:[1,51],43:47,45:[2,47]},{26:52,41:53,42:[1,51],45:[2,49]},{16:[1,54]},{31:[2,79],55:55,59:[2,79],66:[2,79],74:[2,79],75:[2,79],76:[2,79],77:[2,79]},{31:[2,35],59:[2,35],66:[2,35],74:[2,35],75:[2,35],76:[2,35],77:[2,35]},{31:[2,36],59:[2,36],66:[2,36],74:[2,36],75:[2,36],76:[2,36],77:[2,36]},{18:56,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{28:57,31:[2,51],59:[2,51],66:[2,51],69:[2,51],74:[2,51],75:[2,51],76:[2,51],77:[2,51]},{31:[2,57],33:58,59:[2,57],66:[2,57],69:[2,57],74:[2,57],75:[2,57],76:[2,57],77:[2,57]},{19:59,21:[2,43],59:[2,43],66:[2,43],74:[2,43],75:[2,43],76:[2,43],77:[2,43]},{18:63,31:[2,73],48:60,57:61,58:64,59:[1,38],63:62,64:65,65:66,66:[1,67],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{66:[1,68]},{21:[2,37],31:[2,37],52:[2,37],59:[2,37],62:[2,37],66:[2,37],69:[2,37],74:[2,37],75:[2,37],76:[2,37],77:[2,37],79:[1,43]},{18:63,51:69,52:[2,77],57:70,58:64,59:[1,38],63:71,64:65,65:66,66:[1,67],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{24:72,45:[1,73]},{45:[2,48]},{4:74,6:3,13:[2,41],14:[2,41],17:[2,41],27:[2,41],32:[2,41],37:[2,41],42:[2,41],45:[2,41],46:[2,41],49:[2,41],53:[2,41]},{45:[2,19]},{18:75,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{4:76,6:3,13:[2,41],14:[2,41],17:[2,41],27:[2,41],32:[2,41],45:[2,41],46:[2,41],49:[2,41],53:[2,41]},{24:77,45:[1,73]},{45:[2,50]},{5:[2,10],13:[2,10],14:[2,10],17:[2,10],27:[2,10],32:[2,10],37:[2,10],42:[2,10],45:[2,10],46:[2,10],49:[2,10],53:[2,10]},{18:63,31:[2,81],56:78,57:79,58:64,59:[1,38],63:80,64:65,65:66,66:[1,67],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{59:[2,83],60:81,62:[2,83],66:[2,83],74:[2,83],75:[2,83],76:[2,83],77:[2,83]},{18:63,29:82,31:[2,53],57:83,58:64,59:[1,38],63:84,64:65,65:66,66:[1,67],69:[2,53],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{18:63,31:[2,59],34:85,57:86,58:64,59:[1,38],63:87,64:65,65:66,66:[1,67],69:[2,59],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{18:63,20:88,21:[2,45],57:89,58:64,59:[1,38],63:90,64:65,65:66,66:[1,67],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{31:[1,91]},{31:[2,72],59:[2,72],66:[2,72],74:[2,72],75:[2,72],76:[2,72],77:[2,72]},{31:[2,74]},{21:[2,24],31:[2,24],52:[2,24],59:[2,24],62:[2,24],66:[2,24],69:[2,24],74:[2,24],75:[2,24],76:[2,24],77:[2,24]},{21:[2,25],31:[2,25],52:[2,25],59:[2,25],62:[2,25],66:[2,25],69:[2,25],74:[2,25],75:[2,25],76:[2,25],77:[2,25]},{21:[2,27],31:[2,27],52:[2,27],62:[2,27],65:92,66:[1,93],69:[2,27]},{21:[2,87],31:[2,87],52:[2,87],62:[2,87],66:[2,87],69:[2,87]},{21:[2,40],31:[2,40],52:[2,40],59:[2,40],62:[2,40],66:[2,40],67:[1,94],69:[2,40],74:[2,40],75:[2,40],76:[2,40],77:[2,40],79:[2,40]},{21:[2,39],31:[2,39],52:[2,39],59:[2,39],62:[2,39],66:[2,39],69:[2,39],74:[2,39],75:[2,39],76:[2,39],77:[2,39],79:[2,39]},{52:[1,95]},{52:[2,76],59:[2,76],66:[2,76],74:[2,76],75:[2,76],76:[2,76],77:[2,76]},{52:[2,78]},{5:[2,12],13:[2,12],14:[2,12],17:[2,12],27:[2,12],32:[2,12],37:[2,12],42:[2,12],45:[2,12],46:[2,12],49:[2,12],53:[2,12]},{18:96,66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{36:48,37:[1,50],41:49,42:[1,51],43:98,44:97,45:[2,69]},{31:[2,63],38:99,59:[2,63],66:[2,63],69:[2,63],74:[2,63],75:[2,63],76:[2,63],77:[2,63]},{45:[2,17]},{5:[2,13],13:[2,13],14:[2,13],17:[2,13],27:[2,13],32:[2,13],37:[2,13],42:[2,13],45:[2,13],46:[2,13],49:[2,13],53:[2,13]},{31:[1,100]},{31:[2,80],59:[2,80],66:[2,80],74:[2,80],75:[2,80],76:[2,80],77:[2,80]},{31:[2,82]},{18:63,57:102,58:64,59:[1,38],61:101,62:[2,85],63:103,64:65,65:66,66:[1,67],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{30:104,31:[2,55],68:105,69:[1,106]},{31:[2,52],59:[2,52],66:[2,52],69:[2,52],74:[2,52],75:[2,52],76:[2,52],77:[2,52]},{31:[2,54],69:[2,54]},{31:[2,61],35:107,68:108,69:[1,106]},{31:[2,58],59:[2,58],66:[2,58],69:[2,58],74:[2,58],75:[2,58],76:[2,58],77:[2,58]},{31:[2,60],69:[2,60]},{21:[1,109]},{21:[2,44],59:[2,44],66:[2,44],74:[2,44],75:[2,44],76:[2,44],77:[2,44]},{21:[2,46]},{5:[2,21],13:[2,21],14:[2,21],17:[2,21],27:[2,21],32:[2,21],37:[2,21],42:[2,21],45:[2,21],46:[2,21],49:[2,21],53:[2,21]},{21:[2,88],31:[2,88],52:[2,88],62:[2,88],66:[2,88],69:[2,88]},{67:[1,94]},{18:63,57:110,58:64,59:[1,38],66:[1,30],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{5:[2,22],13:[2,22],14:[2,22],17:[2,22],27:[2,22],32:[2,22],37:[2,22],42:[2,22],45:[2,22],46:[2,22],49:[2,22],53:[2,22]},{31:[1,111]},{45:[2,18]},{45:[2,70]},{18:63,31:[2,65],39:112,57:113,58:64,59:[1,38],63:114,64:65,65:66,66:[1,67],69:[2,65],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,29],78:28},{5:[2,23],13:[2,23],14:[2,23],17:[2,23],27:[2,23],32:[2,23],37:[2,23],42:[2,23],45:[2,23],46:[2,23],49:[2,23],53:[2,23]},{62:[1,115]},{59:[2,84],62:[2,84],66:[2,84],74:[2,84],75:[2,84],76:[2,84],77:[2,84]},{62:[2,86]},{31:[1,116]},{31:[2,56]},{66:[1,118],70:117},{31:[1,119]},{31:[2,62]},{14:[2,11]},{21:[2,28],31:[2,28],52:[2,28],62:[2,28],66:[2,28],69:[2,28]},{5:[2,20],13:[2,20],14:[2,20],17:[2,20],27:[2,20],32:[2,20],37:[2,20],42:[2,20],45:[2,20],46:[2,20],49:[2,20],53:[2,20]},{31:[2,67],40:120,68:121,69:[1,106]},{31:[2,64],59:[2,64],66:[2,64],69:[2,64],74:[2,64],75:[2,64],76:[2,64],77:[2,64]},{31:[2,66],69:[2,66]},{21:[2,26],31:[2,26],52:[2,26],59:[2,26],62:[2,26],66:[2,26],69:[2,26],74:[2,26],75:[2,26],76:[2,26],77:[2,26]},{13:[2,14],14:[2,14],17:[2,14],27:[2,14],32:[2,14],37:[2,14],42:[2,14],45:[2,14],46:[2,14],49:[2,14],53:[2,14]},{66:[1,123],71:[1,122]},{66:[2,89],71:[2,89]},{13:[2,15],14:[2,15],17:[2,15],27:[2,15],32:[2,15],42:[2,15],45:[2,15],46:[2,15],49:[2,15],53:[2,15]},{31:[1,124]},{31:[2,68]},{31:[2,29]},{66:[2,90],71:[2,90]},{13:[2,16],14:[2,16],17:[2,16],27:[2,16],32:[2,16],37:[2,16],42:[2,16],45:[2,16],46:[2,16],49:[2,16],53:[2,16]}],1022defaultActions: {4:[2,1],47:[2,48],49:[2,19],53:[2,50],62:[2,74],71:[2,78],76:[2,17],80:[2,82],90:[2,46],97:[2,18],98:[2,70],103:[2,86],105:[2,56],108:[2,62],109:[2,11],121:[2,68],122:[2,29]},1023parseError: function parseError(str, hash) {1024throw new Error(str);1025},1026parse: function parse(input) {1027var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;1028this.lexer.setInput(input);1029this.lexer.yy = this.yy;1030this.yy.lexer = this.lexer;1031this.yy.parser = this;1032if (typeof this.lexer.yylloc == "undefined")1033this.lexer.yylloc = {};1034var yyloc = this.lexer.yylloc;1035lstack.push(yyloc);1036var ranges = this.lexer.options && this.lexer.options.ranges;1037if (typeof this.yy.parseError === "function")1038this.parseError = this.yy.parseError;1039function popStack(n) {1040stack.length = stack.length - 2 * n;1041vstack.length = vstack.length - n;1042lstack.length = lstack.length - n;1043}1044function lex() {1045var token;1046token = self.lexer.lex() || 1;1047if (typeof token !== "number") {1048token = self.symbols_[token] || token;1049}1050return token;1051}1052var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;1053while (true) {1054state = stack[stack.length - 1];1055if (this.defaultActions[state]) {1056action = this.defaultActions[state];1057} else {1058if (symbol === null || typeof symbol == "undefined") {1059symbol = lex();1060}1061action = table[state] && table[state][symbol];1062}1063if (typeof action === "undefined" || !action.length || !action[0]) {1064var errStr = "";1065if (!recovering) {1066expected = [];1067for (p in table[state])1068if (this.terminals_[p] && p > 2) {1069expected.push("'" + this.terminals_[p] + "'");1070}1071if (this.lexer.showPosition) {1072errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";1073} else {1074errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");1075}1076this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});1077}1078}1079if (action[0] instanceof Array && action.length > 1) {1080throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);1081}1082switch (action[0]) {1083case 1:1084stack.push(symbol);1085vstack.push(this.lexer.yytext);1086lstack.push(this.lexer.yylloc);1087stack.push(action[1]);1088symbol = null;1089if (!preErrorSymbol) {1090yyleng = this.lexer.yyleng;1091yytext = this.lexer.yytext;1092yylineno = this.lexer.yylineno;1093yyloc = this.lexer.yylloc;1094if (recovering > 0)1095recovering--;1096} else {1097symbol = preErrorSymbol;1098preErrorSymbol = null;1099}1100break;1101case 2:1102len = this.productions_[action[1]][1];1103yyval.$ = vstack[vstack.length - len];1104yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};1105if (ranges) {1106yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];1107}1108r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);1109if (typeof r !== "undefined") {1110return r;1111}1112if (len) {1113stack = stack.slice(0, -1 * len * 2);1114vstack = vstack.slice(0, -1 * len);1115lstack = lstack.slice(0, -1 * len);1116}1117stack.push(this.productions_[action[1]][0]);1118vstack.push(yyval.$);1119lstack.push(yyval._$);1120newState = table[stack[stack.length - 2]][stack[stack.length - 1]];1121stack.push(newState);1122break;1123case 3:1124return true;1125}1126}1127return true;1128}1129};1130/* Jison generated lexer */1131var lexer = (function(){1132var lexer = ({EOF:1,1133parseError:function parseError(str, hash) {1134if (this.yy.parser) {1135this.yy.parser.parseError(str, hash);1136} else {1137throw new Error(str);1138}1139},1140setInput:function (input) {1141this._input = input;1142this._more = this._less = this.done = false;1143this.yylineno = this.yyleng = 0;1144this.yytext = this.matched = this.match = '';1145this.conditionStack = ['INITIAL'];1146this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};1147if (this.options.ranges) this.yylloc.range = [0,0];1148this.offset = 0;1149return this;1150},1151input:function () {1152var ch = this._input[0];1153this.yytext += ch;1154this.yyleng++;1155this.offset++;1156this.match += ch;1157this.matched += ch;1158var lines = ch.match(/(?:\r\n?|\n).*/g);1159if (lines) {1160this.yylineno++;1161this.yylloc.last_line++;1162} else {1163this.yylloc.last_column++;1164}1165if (this.options.ranges) this.yylloc.range[1]++;11661167this._input = this._input.slice(1);1168return ch;1169},1170unput:function (ch) {1171var len = ch.length;1172var lines = ch.split(/(?:\r\n?|\n)/g);11731174this._input = ch + this._input;1175this.yytext = this.yytext.substr(0, this.yytext.length-len-1);1176//this.yyleng -= len;1177this.offset -= len;1178var oldLines = this.match.split(/(?:\r\n?|\n)/g);1179this.match = this.match.substr(0, this.match.length-1);1180this.matched = this.matched.substr(0, this.matched.length-1);11811182if (lines.length-1) this.yylineno -= lines.length-1;1183var r = this.yylloc.range;11841185this.yylloc = {first_line: this.yylloc.first_line,1186last_line: this.yylineno+1,1187first_column: this.yylloc.first_column,1188last_column: lines ?1189(lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:1190this.yylloc.first_column - len1191};11921193if (this.options.ranges) {1194this.yylloc.range = [r[0], r[0] + this.yyleng - len];1195}1196return this;1197},1198more:function () {1199this._more = true;1200return this;1201},1202less:function (n) {1203this.unput(this.match.slice(n));1204},1205pastInput:function () {1206var past = this.matched.substr(0, this.matched.length - this.match.length);1207return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");1208},1209upcomingInput:function () {1210var next = this.match;1211if (next.length < 20) {1212next += this._input.substr(0, 20-next.length);1213}1214return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");1215},1216showPosition:function () {1217var pre = this.pastInput();1218var c = new Array(pre.length + 1).join("-");1219return pre + this.upcomingInput() + "\n" + c+"^";1220},1221next:function () {1222if (this.done) {1223return this.EOF;1224}1225if (!this._input) this.done = true;12261227var token,1228match,1229tempMatch,1230index,1231col,1232lines;1233if (!this._more) {1234this.yytext = '';1235this.match = '';1236}1237var rules = this._currentRules();1238for (var i=0;i < rules.length; i++) {1239tempMatch = this._input.match(this.rules[rules[i]]);1240if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {1241match = tempMatch;1242index = i;1243if (!this.options.flex) break;1244}1245}1246if (match) {1247lines = match[0].match(/(?:\r\n?|\n).*/g);1248if (lines) this.yylineno += lines.length;1249this.yylloc = {first_line: this.yylloc.last_line,1250last_line: this.yylineno+1,1251first_column: this.yylloc.last_column,1252last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};1253this.yytext += match[0];1254this.match += match[0];1255this.matches = match;1256this.yyleng = this.yytext.length;1257if (this.options.ranges) {1258this.yylloc.range = [this.offset, this.offset += this.yyleng];1259}1260this._more = false;1261this._input = this._input.slice(match[0].length);1262this.matched += match[0];1263token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);1264if (this.done && this._input) this.done = false;1265if (token) return token;1266else return;1267}1268if (this._input === "") {1269return this.EOF;1270} else {1271return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),1272{text: "", token: null, line: this.yylineno});1273}1274},1275lex:function lex() {1276var r = this.next();1277if (typeof r !== 'undefined') {1278return r;1279} else {1280return this.lex();1281}1282},1283begin:function begin(condition) {1284this.conditionStack.push(condition);1285},1286popState:function popState() {1287return this.conditionStack.pop();1288},1289_currentRules:function _currentRules() {1290return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;1291},1292topState:function () {1293return this.conditionStack[this.conditionStack.length-2];1294},1295pushState:function begin(condition) {1296this.begin(condition);1297}});1298lexer.options = {};1299lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {130013011302function strip(start, end) {1303return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);1304}130513061307var YYSTATE=YY_START1308switch($avoiding_name_collisions) {1309case 0:1310if(yy_.yytext.slice(-2) === "\\\\") {1311strip(0,1);1312this.begin("mu");1313} else if(yy_.yytext.slice(-1) === "\\") {1314strip(0,1);1315this.begin("emu");1316} else {1317this.begin("mu");1318}1319if(yy_.yytext) return 14;13201321break;1322case 1:return 14;1323break;1324case 2:1325this.popState();1326return 14;13271328break;1329case 3:1330yy_.yytext = yy_.yytext.substr(5, yy_.yyleng-9);1331this.popState();1332return 16;13331334break;1335case 4: return 14;1336break;1337case 5:1338this.popState();1339return 13;13401341break;1342case 6:return 59;1343break;1344case 7:return 62;1345break;1346case 8: return 17;1347break;1348case 9:1349this.popState();1350this.begin('raw');1351return 21;13521353break;1354case 10:return 53;1355break;1356case 11:return 27;1357break;1358case 12:return 45;1359break;1360case 13:this.popState(); return 42;1361break;1362case 14:this.popState(); return 42;1363break;1364case 15:return 32;1365break;1366case 16:return 37;1367break;1368case 17:return 49;1369break;1370case 18:return 46;1371break;1372case 19:1373this.unput(yy_.yytext);1374this.popState();1375this.begin('com');13761377break;1378case 20:1379this.popState();1380return 13;13811382break;1383case 21:return 46;1384break;1385case 22:return 67;1386break;1387case 23:return 66;1388break;1389case 24:return 66;1390break;1391case 25:return 79;1392break;1393case 26:// ignore whitespace1394break;1395case 27:this.popState(); return 52;1396break;1397case 28:this.popState(); return 31;1398break;1399case 29:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 74;1400break;1401case 30:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 74;1402break;1403case 31:return 77;1404break;1405case 32:return 76;1406break;1407case 33:return 76;1408break;1409case 34:return 75;1410break;1411case 35:return 69;1412break;1413case 36:return 71;1414break;1415case 37:return 66;1416break;1417case 38:yy_.yytext = strip(1,2); return 66;1418break;1419case 39:return 'INVALID';1420break;1421case 40:return 5;1422break;1423}1424};1425lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{\/)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];1426lexer.conditions = {"mu":{"rules":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[5],"inclusive":false},"raw":{"rules":[3,4],"inclusive":false},"INITIAL":{"rules":[0,1,40],"inclusive":true}};1427return lexer;})()1428parser.lexer = lexer;1429function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;1430return new Parser;1431})();__exports__ = handlebars;1432/* jshint ignore:end */1433return __exports__;1434})();14351436// handlebars/compiler/visitor.js1437var __module11__ = (function(__dependency1__, __dependency2__) {1438"use strict";1439var __exports__;1440var Exception = __dependency1__;1441var AST = __dependency2__;14421443function Visitor() {1444this.parents = [];1445}14461447Visitor.prototype = {1448constructor: Visitor,1449mutating: false,14501451// Visits a given value. If mutating, will replace the value if necessary.1452acceptKey: function(node, name) {1453var value = this.accept(node[name]);1454if (this.mutating) {1455// Hacky sanity check:1456if (value && (!value.type || !AST[value.type])) {1457throw new Exception('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);1458}1459node[name] = value;1460}1461},14621463// Performs an accept operation with added sanity check to ensure1464// required keys are not removed.1465acceptRequired: function(node, name) {1466this.acceptKey(node, name);14671468if (!node[name]) {1469throw new Exception(node.type + ' requires ' + name);1470}1471},14721473// Traverses a given array. If mutating, empty respnses will be removed1474// for child elements.1475acceptArray: function(array) {1476for (var i = 0, l = array.length; i < l; i++) {1477this.acceptKey(array, i);14781479if (!array[i]) {1480array.splice(i, 1);1481i--;1482l--;1483}1484}1485},14861487accept: function(object) {1488if (!object) {1489return;1490}14911492if (this.current) {1493this.parents.unshift(this.current);1494}1495this.current = object;14961497var ret = this[object.type](object);14981499this.current = this.parents.shift();15001501if (!this.mutating || ret) {1502return ret;1503} else if (ret !== false) {1504return object;1505}1506},15071508Program: function(program) {1509this.acceptArray(program.body);1510},15111512MustacheStatement: function(mustache) {1513this.acceptRequired(mustache, 'path');1514this.acceptArray(mustache.params);1515this.acceptKey(mustache, 'hash');1516},15171518BlockStatement: function(block) {1519this.acceptRequired(block, 'path');1520this.acceptArray(block.params);1521this.acceptKey(block, 'hash');15221523this.acceptKey(block, 'program');1524this.acceptKey(block, 'inverse');1525},15261527PartialStatement: function(partial) {1528this.acceptRequired(partial, 'name');1529this.acceptArray(partial.params);1530this.acceptKey(partial, 'hash');1531},15321533ContentStatement: function(/* content */) {},1534CommentStatement: function(/* comment */) {},15351536SubExpression: function(sexpr) {1537this.acceptRequired(sexpr, 'path');1538this.acceptArray(sexpr.params);1539this.acceptKey(sexpr, 'hash');1540},1541PartialExpression: function(partial) {1542this.acceptRequired(partial, 'name');1543this.acceptArray(partial.params);1544this.acceptKey(partial, 'hash');1545},15461547PathExpression: function(/* path */) {},15481549StringLiteral: function(/* string */) {},1550NumberLiteral: function(/* number */) {},1551BooleanLiteral: function(/* bool */) {},15521553Hash: function(hash) {1554this.acceptArray(hash.pairs);1555},1556HashPair: function(pair) {1557this.acceptRequired(pair, 'value');1558}1559};15601561__exports__ = Visitor;1562return __exports__;1563})(__module4__, __module7__);15641565// handlebars/compiler/whitespace-control.js1566var __module10__ = (function(__dependency1__) {1567"use strict";1568var __exports__;1569var Visitor = __dependency1__;15701571function WhitespaceControl() {1572}1573WhitespaceControl.prototype = new Visitor();15741575WhitespaceControl.prototype.Program = function(program) {1576var isRoot = !this.isRootSeen;1577this.isRootSeen = true;15781579var body = program.body;1580for (var i = 0, l = body.length; i < l; i++) {1581var current = body[i],1582strip = this.accept(current);15831584if (!strip) {1585continue;1586}15871588var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),1589_isNextWhitespace = isNextWhitespace(body, i, isRoot),15901591openStandalone = strip.openStandalone && _isPrevWhitespace,1592closeStandalone = strip.closeStandalone && _isNextWhitespace,1593inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;15941595if (strip.close) {1596omitRight(body, i, true);1597}1598if (strip.open) {1599omitLeft(body, i, true);1600}16011602if (inlineStandalone) {1603omitRight(body, i);16041605if (omitLeft(body, i)) {1606// If we are on a standalone node, save the indent info for partials1607if (current.type === 'PartialStatement') {1608// Pull out the whitespace from the final line1609current.indent = (/([ \t]+$)/).exec(body[i-1].original)[1];1610}1611}1612}1613if (openStandalone) {1614omitRight((current.program || current.inverse).body);16151616// Strip out the previous content node if it's whitespace only1617omitLeft(body, i);1618}1619if (closeStandalone) {1620// Always strip the next node1621omitRight(body, i);16221623omitLeft((current.inverse || current.program).body);1624}1625}16261627return program;1628};1629WhitespaceControl.prototype.BlockStatement = function(block) {1630this.accept(block.program);1631this.accept(block.inverse);16321633// Find the inverse program that is involed with whitespace stripping.1634var program = block.program || block.inverse,1635inverse = block.program && block.inverse,1636firstInverse = inverse,1637lastInverse = inverse;16381639if (inverse && inverse.chained) {1640firstInverse = inverse.body[0].program;16411642// Walk the inverse chain to find the last inverse that is actually in the chain.1643while (lastInverse.chained) {1644lastInverse = lastInverse.body[lastInverse.body.length-1].program;1645}1646}16471648var strip = {1649open: block.openStrip.open,1650close: block.closeStrip.close,16511652// Determine the standalone candiacy. Basically flag our content as being possibly standalone1653// so our parent can determine if we actually are standalone1654openStandalone: isNextWhitespace(program.body),1655closeStandalone: isPrevWhitespace((firstInverse || program).body)1656};16571658if (block.openStrip.close) {1659omitRight(program.body, null, true);1660}16611662if (inverse) {1663var inverseStrip = block.inverseStrip;16641665if (inverseStrip.open) {1666omitLeft(program.body, null, true);1667}16681669if (inverseStrip.close) {1670omitRight(firstInverse.body, null, true);1671}1672if (block.closeStrip.open) {1673omitLeft(lastInverse.body, null, true);1674}16751676// Find standalone else statments1677if (isPrevWhitespace(program.body)1678&& isNextWhitespace(firstInverse.body)) {16791680omitLeft(program.body);1681omitRight(firstInverse.body);1682}1683} else {1684if (block.closeStrip.open) {1685omitLeft(program.body, null, true);1686}1687}16881689return strip;1690};16911692WhitespaceControl.prototype.MustacheStatement = function(mustache) {1693return mustache.strip;1694};16951696WhitespaceControl.prototype.PartialStatement =1697WhitespaceControl.prototype.CommentStatement = function(node) {1698/* istanbul ignore next */1699var strip = node.strip || {};1700return {1701inlineStandalone: true,1702open: strip.open,1703close: strip.close1704};1705};170617071708function isPrevWhitespace(body, i, isRoot) {1709if (i === undefined) {1710i = body.length;1711}17121713// Nodes that end with newlines are considered whitespace (but are special1714// cased for strip operations)1715var prev = body[i-1],1716sibling = body[i-2];1717if (!prev) {1718return isRoot;1719}17201721if (prev.type === 'ContentStatement') {1722return (sibling || !isRoot ? (/\r?\n\s*?$/) : (/(^|\r?\n)\s*?$/)).test(prev.original);1723}1724}1725function isNextWhitespace(body, i, isRoot) {1726if (i === undefined) {1727i = -1;1728}17291730var next = body[i+1],1731sibling = body[i+2];1732if (!next) {1733return isRoot;1734}17351736if (next.type === 'ContentStatement') {1737return (sibling || !isRoot ? (/^\s*?\r?\n/) : (/^\s*?(\r?\n|$)/)).test(next.original);1738}1739}17401741// Marks the node to the right of the position as omitted.1742// I.e. {{foo}}' ' will mark the ' ' node as omitted.1743//1744// If i is undefined, then the first child will be marked as such.1745//1746// If mulitple is truthy then all whitespace will be stripped out until non-whitespace1747// content is met.1748function omitRight(body, i, multiple) {1749var current = body[i == null ? 0 : i + 1];1750if (!current || current.type !== 'ContentStatement' || (!multiple && current.rightStripped)) {1751return;1752}17531754var original = current.value;1755current.value = current.value.replace(multiple ? (/^\s+/) : (/^[ \t]*\r?\n?/), '');1756current.rightStripped = current.value !== original;1757}17581759// Marks the node to the left of the position as omitted.1760// I.e. ' '{{foo}} will mark the ' ' node as omitted.1761//1762// If i is undefined then the last child will be marked as such.1763//1764// If mulitple is truthy then all whitespace will be stripped out until non-whitespace1765// content is met.1766function omitLeft(body, i, multiple) {1767var current = body[i == null ? body.length - 1 : i - 1];1768if (!current || current.type !== 'ContentStatement' || (!multiple && current.leftStripped)) {1769return;1770}17711772// We omit the last node if it's whitespace only and not preceeded by a non-content node.1773var original = current.value;1774current.value = current.value.replace(multiple ? (/\s+$/) : (/[ \t]+$/), '');1775current.leftStripped = current.value !== original;1776return current.leftStripped;1777}17781779__exports__ = WhitespaceControl;1780return __exports__;1781})(__module11__);17821783// handlebars/compiler/helpers.js1784var __module12__ = (function(__dependency1__) {1785"use strict";1786var __exports__ = {};1787var Exception = __dependency1__;17881789function SourceLocation(source, locInfo) {1790this.source = source;1791this.start = {1792line: locInfo.first_line,1793column: locInfo.first_column1794};1795this.end = {1796line: locInfo.last_line,1797column: locInfo.last_column1798};1799}18001801__exports__.SourceLocation = SourceLocation;function stripFlags(open, close) {1802return {1803open: open.charAt(2) === '~',1804close: close.charAt(close.length-3) === '~'1805};1806}18071808__exports__.stripFlags = stripFlags;function stripComment(comment) {1809return comment.replace(/^\{\{~?\!-?-?/, '')1810.replace(/-?-?~?\}\}$/, '');1811}18121813__exports__.stripComment = stripComment;function preparePath(data, parts, locInfo) {1814/*jshint -W040 */1815locInfo = this.locInfo(locInfo);18161817var original = data ? '@' : '',1818dig = [],1819depth = 0,1820depthString = '';18211822for(var i=0,l=parts.length; i<l; i++) {1823var part = parts[i].part;1824original += (parts[i].separator || '') + part;18251826if (part === '..' || part === '.' || part === 'this') {1827if (dig.length > 0) {1828throw new Exception('Invalid path: ' + original, {loc: locInfo});1829} else if (part === '..') {1830depth++;1831depthString += '../';1832}1833} else {1834dig.push(part);1835}1836}18371838return new this.PathExpression(data, depth, dig, original, locInfo);1839}18401841__exports__.preparePath = preparePath;function prepareMustache(path, params, hash, open, strip, locInfo) {1842/*jshint -W040 */1843// Must use charAt to support IE pre-101844var escapeFlag = open.charAt(3) || open.charAt(2),1845escaped = escapeFlag !== '{' && escapeFlag !== '&';18461847return new this.MustacheStatement(path, params, hash, escaped, strip, this.locInfo(locInfo));1848}18491850__exports__.prepareMustache = prepareMustache;function prepareRawBlock(openRawBlock, content, close, locInfo) {1851/*jshint -W040 */1852if (openRawBlock.path.original !== close) {1853var errorNode = {loc: openRawBlock.path.loc};18541855throw new Exception(openRawBlock.path.original + " doesn't match " + close, errorNode);1856}18571858locInfo = this.locInfo(locInfo);1859var program = new this.Program([content], null, {}, locInfo);18601861return new this.BlockStatement(1862openRawBlock.path, openRawBlock.params, openRawBlock.hash,1863program, undefined,1864{}, {}, {},1865locInfo);1866}18671868__exports__.prepareRawBlock = prepareRawBlock;function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {1869/*jshint -W040 */1870// When we are chaining inverse calls, we will not have a close path1871if (close && close.path && openBlock.path.original !== close.path.original) {1872var errorNode = {loc: openBlock.path.loc};18731874throw new Exception(openBlock.path.original + ' doesn\'t match ' + close.path.original, errorNode);1875}18761877program.blockParams = openBlock.blockParams;18781879var inverse,1880inverseStrip;18811882if (inverseAndProgram) {1883if (inverseAndProgram.chain) {1884inverseAndProgram.program.body[0].closeStrip = close.strip;1885}18861887inverseStrip = inverseAndProgram.strip;1888inverse = inverseAndProgram.program;1889}18901891if (inverted) {1892inverted = inverse;1893inverse = program;1894program = inverted;1895}18961897return new this.BlockStatement(1898openBlock.path, openBlock.params, openBlock.hash,1899program, inverse,1900openBlock.strip, inverseStrip, close && close.strip,1901this.locInfo(locInfo));1902}19031904__exports__.prepareBlock = prepareBlock;1905return __exports__;1906})(__module4__);19071908// handlebars/compiler/base.js1909var __module8__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {1910"use strict";1911var __exports__ = {};1912var parser = __dependency1__;1913var AST = __dependency2__;1914var WhitespaceControl = __dependency3__;1915var Helpers = __dependency4__;1916var extend = __dependency5__.extend;19171918__exports__.parser = parser;19191920var yy = {};1921extend(yy, Helpers, AST);19221923function parse(input, options) {1924// Just return if an already-compiled AST was passed in.1925if (input.type === 'Program') { return input; }19261927parser.yy = yy;19281929// Altering the shared object here, but this is ok as parser is a sync operation1930yy.locInfo = function(locInfo) {1931return new yy.SourceLocation(options && options.srcName, locInfo);1932};19331934var strip = new WhitespaceControl();1935return strip.accept(parser.parse(input));1936}19371938__exports__.parse = parse;1939return __exports__;1940})(__module9__, __module7__, __module10__, __module12__, __module3__);19411942// handlebars/compiler/compiler.js1943var __module13__ = (function(__dependency1__, __dependency2__, __dependency3__) {1944"use strict";1945var __exports__ = {};1946var Exception = __dependency1__;1947var isArray = __dependency2__.isArray;1948var indexOf = __dependency2__.indexOf;1949var AST = __dependency3__;19501951var slice = [].slice;195219531954function Compiler() {}19551956__exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a1957// function in a context. This is necessary for mustache compatibility, which1958// requires that context functions in blocks are evaluated by blockHelperMissing,1959// and then proceed as if the resulting value was provided to blockHelperMissing.19601961Compiler.prototype = {1962compiler: Compiler,19631964equals: function(other) {1965var len = this.opcodes.length;1966if (other.opcodes.length !== len) {1967return false;1968}19691970for (var i = 0; i < len; i++) {1971var opcode = this.opcodes[i],1972otherOpcode = other.opcodes[i];1973if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {1974return false;1975}1976}19771978// We know that length is the same between the two arrays because they are directly tied1979// to the opcode behavior above.1980len = this.children.length;1981for (i = 0; i < len; i++) {1982if (!this.children[i].equals(other.children[i])) {1983return false;1984}1985}19861987return true;1988},19891990guid: 0,19911992compile: function(program, options) {1993this.sourceNode = [];1994this.opcodes = [];1995this.children = [];1996this.options = options;1997this.stringParams = options.stringParams;1998this.trackIds = options.trackIds;19992000options.blockParams = options.blockParams || [];20012002// These changes will propagate to the other compiler components2003var knownHelpers = options.knownHelpers;2004options.knownHelpers = {2005'helperMissing': true,2006'blockHelperMissing': true,2007'each': true,2008'if': true,2009'unless': true,2010'with': true,2011'log': true,2012'lookup': true2013};2014if (knownHelpers) {2015for (var name in knownHelpers) {2016options.knownHelpers[name] = knownHelpers[name];2017}2018}20192020return this.accept(program);2021},20222023compileProgram: function(program) {2024var result = new this.compiler().compile(program, this.options);2025var guid = this.guid++;20262027this.usePartial = this.usePartial || result.usePartial;20282029this.children[guid] = result;2030this.useDepths = this.useDepths || result.useDepths;20312032return guid;2033},20342035accept: function(node) {2036this.sourceNode.unshift(node);2037var ret = this[node.type](node);2038this.sourceNode.shift();2039return ret;2040},20412042Program: function(program) {2043this.options.blockParams.unshift(program.blockParams);20442045var body = program.body;2046for(var i=0, l=body.length; i<l; i++) {2047this.accept(body[i]);2048}20492050this.options.blockParams.shift();20512052this.isSimple = l === 1;2053this.blockParams = program.blockParams ? program.blockParams.length : 0;20542055return this;2056},20572058BlockStatement: function(block) {2059transformLiteralToPath(block);20602061var program = block.program,2062inverse = block.inverse;20632064program = program && this.compileProgram(program);2065inverse = inverse && this.compileProgram(inverse);20662067var type = this.classifySexpr(block);20682069if (type === 'helper') {2070this.helperSexpr(block, program, inverse);2071} else if (type === 'simple') {2072this.simpleSexpr(block);20732074// now that the simple mustache is resolved, we need to2075// evaluate it by executing `blockHelperMissing`2076this.opcode('pushProgram', program);2077this.opcode('pushProgram', inverse);2078this.opcode('emptyHash');2079this.opcode('blockValue', block.path.original);2080} else {2081this.ambiguousSexpr(block, program, inverse);20822083// now that the simple mustache is resolved, we need to2084// evaluate it by executing `blockHelperMissing`2085this.opcode('pushProgram', program);2086this.opcode('pushProgram', inverse);2087this.opcode('emptyHash');2088this.opcode('ambiguousBlockValue');2089}20902091this.opcode('append');2092},20932094PartialStatement: function(partial) {2095this.usePartial = true;20962097var params = partial.params;2098if (params.length > 1) {2099throw new Exception('Unsupported number of partial arguments: ' + params.length, partial);2100} else if (!params.length) {2101params.push({type: 'PathExpression', parts: [], depth: 0});2102}21032104var partialName = partial.name.original,2105isDynamic = partial.name.type === 'SubExpression';2106if (isDynamic) {2107this.accept(partial.name);2108}21092110this.setupFullMustacheParams(partial, undefined, undefined, true);21112112var indent = partial.indent || '';2113if (this.options.preventIndent && indent) {2114this.opcode('appendContent', indent);2115indent = '';2116}21172118this.opcode('invokePartial', isDynamic, partialName, indent);2119this.opcode('append');2120},21212122MustacheStatement: function(mustache) {2123this.SubExpression(mustache);21242125if(mustache.escaped && !this.options.noEscape) {2126this.opcode('appendEscaped');2127} else {2128this.opcode('append');2129}2130},21312132ContentStatement: function(content) {2133if (content.value) {2134this.opcode('appendContent', content.value);2135}2136},21372138CommentStatement: function() {},21392140SubExpression: function(sexpr) {2141transformLiteralToPath(sexpr);2142var type = this.classifySexpr(sexpr);21432144if (type === 'simple') {2145this.simpleSexpr(sexpr);2146} else if (type === 'helper') {2147this.helperSexpr(sexpr);2148} else {2149this.ambiguousSexpr(sexpr);2150}2151},2152ambiguousSexpr: function(sexpr, program, inverse) {2153var path = sexpr.path,2154name = path.parts[0],2155isBlock = program != null || inverse != null;21562157this.opcode('getContext', path.depth);21582159this.opcode('pushProgram', program);2160this.opcode('pushProgram', inverse);21612162this.accept(path);21632164this.opcode('invokeAmbiguous', name, isBlock);2165},21662167simpleSexpr: function(sexpr) {2168this.accept(sexpr.path);2169this.opcode('resolvePossibleLambda');2170},21712172helperSexpr: function(sexpr, program, inverse) {2173var params = this.setupFullMustacheParams(sexpr, program, inverse),2174path = sexpr.path,2175name = path.parts[0];21762177if (this.options.knownHelpers[name]) {2178this.opcode('invokeKnownHelper', params.length, name);2179} else if (this.options.knownHelpersOnly) {2180throw new Exception("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);2181} else {2182path.falsy = true;21832184this.accept(path);2185this.opcode('invokeHelper', params.length, path.original, AST.helpers.simpleId(path));2186}2187},21882189PathExpression: function(path) {2190this.addDepth(path.depth);2191this.opcode('getContext', path.depth);21922193var name = path.parts[0],2194scoped = AST.helpers.scopedId(path),2195blockParamId = !path.depth && !scoped && this.blockParamIndex(name);21962197if (blockParamId) {2198this.opcode('lookupBlockParam', blockParamId, path.parts);2199} else if (!name) {2200// Context reference, i.e. `{{foo .}}` or `{{foo ..}}`2201this.opcode('pushContext');2202} else if (path.data) {2203this.options.data = true;2204this.opcode('lookupData', path.depth, path.parts);2205} else {2206this.opcode('lookupOnContext', path.parts, path.falsy, scoped);2207}2208},22092210StringLiteral: function(string) {2211this.opcode('pushString', string.value);2212},22132214NumberLiteral: function(number) {2215this.opcode('pushLiteral', number.value);2216},22172218BooleanLiteral: function(bool) {2219this.opcode('pushLiteral', bool.value);2220},22212222Hash: function(hash) {2223var pairs = hash.pairs, i, l;22242225this.opcode('pushHash');22262227for (i=0, l=pairs.length; i<l; i++) {2228this.pushParam(pairs[i].value);2229}2230while (i--) {2231this.opcode('assignToHash', pairs[i].key);2232}2233this.opcode('popHash');2234},22352236// HELPERS2237opcode: function(name) {2238this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });2239},22402241addDepth: function(depth) {2242if (!depth) {2243return;2244}22452246this.useDepths = true;2247},22482249classifySexpr: function(sexpr) {2250var isSimple = AST.helpers.simpleId(sexpr.path);22512252var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);22532254// a mustache is an eligible helper if:2255// * its id is simple (a single part, not `this` or `..`)2256var isHelper = !isBlockParam && AST.helpers.helperExpression(sexpr);22572258// if a mustache is an eligible helper but not a definite2259// helper, it is ambiguous, and will be resolved in a later2260// pass or at runtime.2261var isEligible = !isBlockParam && (isHelper || isSimple);22622263var options = this.options;22642265// if ambiguous, we can possibly resolve the ambiguity now2266// An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.2267if (isEligible && !isHelper) {2268var name = sexpr.path.parts[0];22692270if (options.knownHelpers[name]) {2271isHelper = true;2272} else if (options.knownHelpersOnly) {2273isEligible = false;2274}2275}22762277if (isHelper) { return 'helper'; }2278else if (isEligible) { return 'ambiguous'; }2279else { return 'simple'; }2280},22812282pushParams: function(params) {2283for(var i=0, l=params.length; i<l; i++) {2284this.pushParam(params[i]);2285}2286},22872288pushParam: function(val) {2289var value = val.value != null ? val.value : val.original || '';22902291if (this.stringParams) {2292if (value.replace) {2293value = value2294.replace(/^(\.?\.\/)*/g, '')2295.replace(/\//g, '.');2296}22972298if(val.depth) {2299this.addDepth(val.depth);2300}2301this.opcode('getContext', val.depth || 0);2302this.opcode('pushStringParam', value, val.type);23032304if (val.type === 'SubExpression') {2305// SubExpressions get evaluated and passed in2306// in string params mode.2307this.accept(val);2308}2309} else {2310if (this.trackIds) {2311var blockParamIndex;2312if (val.parts && !AST.helpers.scopedId(val) && !val.depth) {2313blockParamIndex = this.blockParamIndex(val.parts[0]);2314}2315if (blockParamIndex) {2316var blockParamChild = val.parts.slice(1).join('.');2317this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);2318} else {2319value = val.original || value;2320if (value.replace) {2321value = value2322.replace(/^\.\//g, '')2323.replace(/^\.$/g, '');2324}23252326this.opcode('pushId', val.type, value);2327}2328}2329this.accept(val);2330}2331},23322333setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {2334var params = sexpr.params;2335this.pushParams(params);23362337this.opcode('pushProgram', program);2338this.opcode('pushProgram', inverse);23392340if (sexpr.hash) {2341this.accept(sexpr.hash);2342} else {2343this.opcode('emptyHash', omitEmpty);2344}23452346return params;2347},23482349blockParamIndex: function(name) {2350for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {2351var blockParams = this.options.blockParams[depth],2352param = blockParams && indexOf(blockParams, name);2353if (blockParams && param >= 0) {2354return [depth, param];2355}2356}2357}2358};23592360function precompile(input, options, env) {2361if (input == null || (typeof input !== 'string' && input.type !== 'Program')) {2362throw new Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);2363}23642365options = options || {};2366if (!('data' in options)) {2367options.data = true;2368}2369if (options.compat) {2370options.useDepths = true;2371}23722373var ast = env.parse(input, options);2374var environment = new env.Compiler().compile(ast, options);2375return new env.JavaScriptCompiler().compile(environment, options);2376}23772378__exports__.precompile = precompile;function compile(input, options, env) {2379if (input == null || (typeof input !== 'string' && input.type !== 'Program')) {2380throw new Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);2381}23822383options = options || {};23842385if (!('data' in options)) {2386options.data = true;2387}2388if (options.compat) {2389options.useDepths = true;2390}23912392var compiled;23932394function compileInput() {2395var ast = env.parse(input, options);2396var environment = new env.Compiler().compile(ast, options);2397var templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);2398return env.template(templateSpec);2399}24002401// Template is only compiled on first use and cached after that point.2402var ret = function(context, options) {2403if (!compiled) {2404compiled = compileInput();2405}2406return compiled.call(this, context, options);2407};2408ret._setup = function(options) {2409if (!compiled) {2410compiled = compileInput();2411}2412return compiled._setup(options);2413};2414ret._child = function(i, data, blockParams, depths) {2415if (!compiled) {2416compiled = compileInput();2417}2418return compiled._child(i, data, blockParams, depths);2419};2420return ret;2421}24222423__exports__.compile = compile;function argEquals(a, b) {2424if (a === b) {2425return true;2426}24272428if (isArray(a) && isArray(b) && a.length === b.length) {2429for (var i = 0; i < a.length; i++) {2430if (!argEquals(a[i], b[i])) {2431return false;2432}2433}2434return true;2435}2436}24372438function transformLiteralToPath(sexpr) {2439if (!sexpr.path.parts) {2440var literal = sexpr.path;2441// Casting to string here to make false and 0 literal values play nicely with the rest2442// of the system.2443sexpr.path = new AST.PathExpression(false, 0, [literal.original+''], literal.original+'', literal.log);2444}2445}2446return __exports__;2447})(__module4__, __module3__, __module7__);24482449// handlebars/compiler/code-gen.js2450var __module15__ = (function(__dependency1__) {2451"use strict";2452var __exports__;2453var isArray = __dependency1__.isArray;24542455try {2456var SourceMap = require('source-map'),2457SourceNode = SourceMap.SourceNode;2458} catch (err) {2459/* istanbul ignore next: tested but not covered in istanbul due to dist build */2460SourceNode = function(line, column, srcFile, chunks) {2461this.src = '';2462if (chunks) {2463this.add(chunks);2464}2465};2466/* istanbul ignore next */2467SourceNode.prototype = {2468add: function(chunks) {2469if (isArray(chunks)) {2470chunks = chunks.join('');2471}2472this.src += chunks;2473},2474prepend: function(chunks) {2475if (isArray(chunks)) {2476chunks = chunks.join('');2477}2478this.src = chunks + this.src;2479},2480toStringWithSourceMap: function() {2481return {code: this.toString()};2482},2483toString: function() {2484return this.src;2485}2486};2487}248824892490function castChunk(chunk, codeGen, loc) {2491if (isArray(chunk)) {2492var ret = [];24932494for (var i = 0, len = chunk.length; i < len; i++) {2495ret.push(codeGen.wrap(chunk[i], loc));2496}2497return ret;2498} else if (typeof chunk === 'boolean' || typeof chunk === 'number') {2499// Handle primitives that the SourceNode will throw up on2500return chunk+'';2501}2502return chunk;2503}250425052506function CodeGen(srcFile) {2507this.srcFile = srcFile;2508this.source = [];2509}25102511CodeGen.prototype = {2512prepend: function(source, loc) {2513this.source.unshift(this.wrap(source, loc));2514},2515push: function(source, loc) {2516this.source.push(this.wrap(source, loc));2517},25182519merge: function() {2520var source = this.empty();2521this.each(function(line) {2522source.add([' ', line, '\n']);2523});2524return source;2525},25262527each: function(iter) {2528for (var i = 0, len = this.source.length; i < len; i++) {2529iter(this.source[i]);2530}2531},25322533empty: function(loc) {2534loc = loc || this.currentLocation || {start:{}};2535return new SourceNode(loc.start.line, loc.start.column, this.srcFile);2536},2537wrap: function(chunk, loc) {2538if (chunk instanceof SourceNode) {2539return chunk;2540}25412542loc = loc || this.currentLocation || {start:{}};2543chunk = castChunk(chunk, this, loc);25442545return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);2546},25472548functionCall: function(fn, type, params) {2549params = this.generateList(params);2550return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);2551},25522553quotedString: function(str) {2554return '"' + (str + '')2555.replace(/\\/g, '\\\\')2556.replace(/"/g, '\\"')2557.replace(/\n/g, '\\n')2558.replace(/\r/g, '\\r')2559.replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.42560.replace(/\u2029/g, '\\u2029') + '"';2561},25622563objectLiteral: function(obj) {2564var pairs = [];25652566for (var key in obj) {2567if (obj.hasOwnProperty(key)) {2568var value = castChunk(obj[key], this);2569if (value !== 'undefined') {2570pairs.push([this.quotedString(key), ':', value]);2571}2572}2573}25742575var ret = this.generateList(pairs);2576ret.prepend('{');2577ret.add('}');2578return ret;2579},258025812582generateList: function(entries, loc) {2583var ret = this.empty(loc);25842585for (var i = 0, len = entries.length; i < len; i++) {2586if (i) {2587ret.add(',');2588}25892590ret.add(castChunk(entries[i], this, loc));2591}25922593return ret;2594},25952596generateArray: function(entries, loc) {2597var ret = this.generateList(entries, loc);2598ret.prepend('[');2599ret.add(']');26002601return ret;2602}2603};26042605__exports__ = CodeGen;2606return __exports__;2607})(__module3__);26082609// handlebars/compiler/javascript-compiler.js2610var __module14__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {2611"use strict";2612var __exports__;2613var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;2614var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;2615var Exception = __dependency2__;2616var isArray = __dependency3__.isArray;2617var CodeGen = __dependency4__;26182619function Literal(value) {2620this.value = value;2621}26222623function JavaScriptCompiler() {}26242625JavaScriptCompiler.prototype = {2626// PUBLIC API: You can override these methods in a subclass to provide2627// alternative compiled forms for name lookup and buffering semantics2628nameLookup: function(parent, name /* , type*/) {2629if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {2630return [parent, ".", name];2631} else {2632return [parent, "['", name, "']"];2633}2634},2635depthedLookup: function(name) {2636return [this.aliasable('this.lookup'), '(depths, "', name, '")'];2637},26382639compilerInfo: function() {2640var revision = COMPILER_REVISION,2641versions = REVISION_CHANGES[revision];2642return [revision, versions];2643},26442645appendToBuffer: function(source, location, explicit) {2646// Force a source as this simplifies the merge logic.2647if (!isArray(source)) {2648source = [source];2649}2650source = this.source.wrap(source, location);26512652if (this.environment.isSimple) {2653return ['return ', source, ';'];2654} else if (explicit) {2655// This is a case where the buffer operation occurs as a child of another2656// construct, generally braces. We have to explicitly output these buffer2657// operations to ensure that the emitted code goes in the correct location.2658return ['buffer += ', source, ';'];2659} else {2660source.appendToBuffer = true;2661return source;2662}2663},26642665initializeBuffer: function() {2666return this.quotedString("");2667},2668// END PUBLIC API26692670compile: function(environment, options, context, asObject) {2671this.environment = environment;2672this.options = options;2673this.stringParams = this.options.stringParams;2674this.trackIds = this.options.trackIds;2675this.precompile = !asObject;26762677this.name = this.environment.name;2678this.isChild = !!context;2679this.context = context || {2680programs: [],2681environments: []2682};26832684this.preamble();26852686this.stackSlot = 0;2687this.stackVars = [];2688this.aliases = {};2689this.registers = { list: [] };2690this.hashes = [];2691this.compileStack = [];2692this.inlineStack = [];2693this.blockParams = [];26942695this.compileChildren(environment, options);26962697this.useDepths = this.useDepths || environment.useDepths || this.options.compat;2698this.useBlockParams = this.useBlockParams || environment.useBlockParams;26992700var opcodes = environment.opcodes,2701opcode,2702firstLoc,2703i,2704l;27052706for (i = 0, l = opcodes.length; i < l; i++) {2707opcode = opcodes[i];27082709this.source.currentLocation = opcode.loc;2710firstLoc = firstLoc || opcode.loc;2711this[opcode.opcode].apply(this, opcode.args);2712}27132714// Flush any trailing content that might be pending.2715this.source.currentLocation = firstLoc;2716this.pushSource('');27172718/* istanbul ignore next */2719if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {2720throw new Exception('Compile completed with content left on stack');2721}27222723var fn = this.createFunctionContext(asObject);2724if (!this.isChild) {2725var ret = {2726compiler: this.compilerInfo(),2727main: fn2728};2729var programs = this.context.programs;2730for (i = 0, l = programs.length; i < l; i++) {2731if (programs[i]) {2732ret[i] = programs[i];2733}2734}27352736if (this.environment.usePartial) {2737ret.usePartial = true;2738}2739if (this.options.data) {2740ret.useData = true;2741}2742if (this.useDepths) {2743ret.useDepths = true;2744}2745if (this.useBlockParams) {2746ret.useBlockParams = true;2747}2748if (this.options.compat) {2749ret.compat = true;2750}27512752if (!asObject) {2753ret.compiler = JSON.stringify(ret.compiler);27542755this.source.currentLocation = {start: {line: 1, column: 0}};2756ret = this.objectLiteral(ret);27572758if (options.srcName) {2759ret = ret.toStringWithSourceMap({file: options.destName});2760ret.map = ret.map && ret.map.toString();2761} else {2762ret = ret.toString();2763}2764} else {2765ret.compilerOptions = this.options;2766}27672768return ret;2769} else {2770return fn;2771}2772},27732774preamble: function() {2775// track the last context pushed into place to allow skipping the2776// getContext opcode when it would be a noop2777this.lastContext = 0;2778this.source = new CodeGen(this.options.srcName);2779},27802781createFunctionContext: function(asObject) {2782var varDeclarations = '';27832784var locals = this.stackVars.concat(this.registers.list);2785if(locals.length > 0) {2786varDeclarations += ", " + locals.join(", ");2787}27882789// Generate minimizer alias mappings2790//2791// When using true SourceNodes, this will update all references to the given alias2792// as the source nodes are reused in situ. For the non-source node compilation mode,2793// aliases will not be used, but this case is already being run on the client and2794// we aren't concern about minimizing the template size.2795var aliasCount = 0;2796for (var alias in this.aliases) {2797var node = this.aliases[alias];27982799if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) {2800varDeclarations += ', alias' + (++aliasCount) + '=' + alias;2801node.children[0] = 'alias' + aliasCount;2802}2803}28042805var params = ["depth0", "helpers", "partials", "data"];28062807if (this.useBlockParams || this.useDepths) {2808params.push('blockParams');2809}2810if (this.useDepths) {2811params.push('depths');2812}28132814// Perform a second pass over the output to merge content when possible2815var source = this.mergeSource(varDeclarations);28162817if (asObject) {2818params.push(source);28192820return Function.apply(this, params);2821} else {2822return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']);2823}2824},2825mergeSource: function(varDeclarations) {2826var isSimple = this.environment.isSimple,2827appendOnly = !this.forceBuffer,2828appendFirst,28292830sourceSeen,2831bufferStart,2832bufferEnd;2833this.source.each(function(line) {2834if (line.appendToBuffer) {2835if (bufferStart) {2836line.prepend(' + ');2837} else {2838bufferStart = line;2839}2840bufferEnd = line;2841} else {2842if (bufferStart) {2843if (!sourceSeen) {2844appendFirst = true;2845} else {2846bufferStart.prepend('buffer += ');2847}2848bufferEnd.add(';');2849bufferStart = bufferEnd = undefined;2850}28512852sourceSeen = true;2853if (!isSimple) {2854appendOnly = false;2855}2856}2857});285828592860if (appendOnly) {2861if (bufferStart) {2862bufferStart.prepend('return ');2863bufferEnd.add(';');2864} else if (!sourceSeen) {2865this.source.push('return "";');2866}2867} else {2868varDeclarations += ", buffer = " + (appendFirst ? '' : this.initializeBuffer());28692870if (bufferStart) {2871bufferStart.prepend('return buffer + ');2872bufferEnd.add(';');2873} else {2874this.source.push('return buffer;');2875}2876}28772878if (varDeclarations) {2879this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n'));2880}28812882return this.source.merge();2883},28842885// [blockValue]2886//2887// On stack, before: hash, inverse, program, value2888// On stack, after: return value of blockHelperMissing2889//2890// The purpose of this opcode is to take a block of the form2891// `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and2892// replace it on the stack with the result of properly2893// invoking blockHelperMissing.2894blockValue: function(name) {2895var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),2896params = [this.contextName(0)];2897this.setupHelperArgs(name, 0, params);28982899var blockName = this.popStack();2900params.splice(1, 0, blockName);29012902this.push(this.source.functionCall(blockHelperMissing, 'call', params));2903},29042905// [ambiguousBlockValue]2906//2907// On stack, before: hash, inverse, program, value2908// Compiler value, before: lastHelper=value of last found helper, if any2909// On stack, after, if no lastHelper: same as [blockValue]2910// On stack, after, if lastHelper: value2911ambiguousBlockValue: function() {2912// We're being a bit cheeky and reusing the options value from the prior exec2913var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),2914params = [this.contextName(0)];2915this.setupHelperArgs('', 0, params, true);29162917this.flushInline();29182919var current = this.topStack();2920params.splice(1, 0, current);29212922this.pushSource([2923'if (!', this.lastHelper, ') { ',2924current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params),2925'}']);2926},29272928// [appendContent]2929//2930// On stack, before: ...2931// On stack, after: ...2932//2933// Appends the string value of `content` to the current buffer2934appendContent: function(content) {2935if (this.pendingContent) {2936content = this.pendingContent + content;2937} else {2938this.pendingLocation = this.source.currentLocation;2939}29402941this.pendingContent = content;2942},29432944// [append]2945//2946// On stack, before: value, ...2947// On stack, after: ...2948//2949// Coerces `value` to a String and appends it to the current buffer.2950//2951// If `value` is truthy, or 0, it is coerced into a string and appended2952// Otherwise, the empty string is appended2953append: function() {2954if (this.isInline()) {2955this.replaceStack(function(current) {2956return [' != null ? ', current, ' : ""'];2957});29582959this.pushSource(this.appendToBuffer(this.popStack()));2960} else {2961var local = this.popStack();2962this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);2963if (this.environment.isSimple) {2964this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']);2965}2966}2967},29682969// [appendEscaped]2970//2971// On stack, before: value, ...2972// On stack, after: ...2973//2974// Escape `value` and append it to the buffer2975appendEscaped: function() {2976this.pushSource(this.appendToBuffer(2977[this.aliasable('this.escapeExpression'), '(', this.popStack(), ')']));2978},29792980// [getContext]2981//2982// On stack, before: ...2983// On stack, after: ...2984// Compiler value, after: lastContext=depth2985//2986// Set the value of the `lastContext` compiler value to the depth2987getContext: function(depth) {2988this.lastContext = depth;2989},29902991// [pushContext]2992//2993// On stack, before: ...2994// On stack, after: currentContext, ...2995//2996// Pushes the value of the current context onto the stack.2997pushContext: function() {2998this.pushStackLiteral(this.contextName(this.lastContext));2999},30003001// [lookupOnContext]3002//3003// On stack, before: ...3004// On stack, after: currentContext[name], ...3005//3006// Looks up the value of `name` on the current context and pushes3007// it onto the stack.3008lookupOnContext: function(parts, falsy, scoped) {3009var i = 0;30103011if (!scoped && this.options.compat && !this.lastContext) {3012// The depthed query is expected to handle the undefined logic for the root level that3013// is implemented below, so we evaluate that directly in compat mode3014this.push(this.depthedLookup(parts[i++]));3015} else {3016this.pushContext();3017}30183019this.resolvePath('context', parts, i, falsy);3020},30213022// [lookupBlockParam]3023//3024// On stack, before: ...3025// On stack, after: blockParam[name], ...3026//3027// Looks up the value of `parts` on the given block param and pushes3028// it onto the stack.3029lookupBlockParam: function(blockParamId, parts) {3030this.useBlockParams = true;30313032this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);3033this.resolvePath('context', parts, 1);3034},30353036// [lookupData]3037//3038// On stack, before: ...3039// On stack, after: data, ...3040//3041// Push the data lookup operator3042lookupData: function(depth, parts) {3043/*jshint -W083 */3044if (!depth) {3045this.pushStackLiteral('data');3046} else {3047this.pushStackLiteral('this.data(data, ' + depth + ')');3048}30493050this.resolvePath('data', parts, 0, true);3051},30523053resolvePath: function(type, parts, i, falsy) {3054/*jshint -W083 */3055if (this.options.strict || this.options.assumeObjects) {3056this.push(strictLookup(this.options.strict, this, parts, type));3057return;3058}30593060var len = parts.length;3061for (; i < len; i++) {3062this.replaceStack(function(current) {3063var lookup = this.nameLookup(current, parts[i], type);3064// We want to ensure that zero and false are handled properly if the context (falsy flag)3065// needs to have the special handling for these values.3066if (!falsy) {3067return [' != null ? ', lookup, ' : ', current];3068} else {3069// Otherwise we can use generic falsy handling3070return [' && ', lookup];3071}3072});3073}3074},30753076// [resolvePossibleLambda]3077//3078// On stack, before: value, ...3079// On stack, after: resolved value, ...3080//3081// If the `value` is a lambda, replace it on the stack by3082// the return value of the lambda3083resolvePossibleLambda: function() {3084this.push([this.aliasable('this.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);3085},30863087// [pushStringParam]3088//3089// On stack, before: ...3090// On stack, after: string, currentContext, ...3091//3092// This opcode is designed for use in string mode, which3093// provides the string value of a parameter along with its3094// depth rather than resolving it immediately.3095pushStringParam: function(string, type) {3096this.pushContext();3097this.pushString(type);30983099// If it's a subexpression, the string result3100// will be pushed after this opcode.3101if (type !== 'SubExpression') {3102if (typeof string === 'string') {3103this.pushString(string);3104} else {3105this.pushStackLiteral(string);3106}3107}3108},31093110emptyHash: function(omitEmpty) {3111if (this.trackIds) {3112this.push('{}'); // hashIds3113}3114if (this.stringParams) {3115this.push('{}'); // hashContexts3116this.push('{}'); // hashTypes3117}3118this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');3119},3120pushHash: function() {3121if (this.hash) {3122this.hashes.push(this.hash);3123}3124this.hash = {values: [], types: [], contexts: [], ids: []};3125},3126popHash: function() {3127var hash = this.hash;3128this.hash = this.hashes.pop();31293130if (this.trackIds) {3131this.push(this.objectLiteral(hash.ids));3132}3133if (this.stringParams) {3134this.push(this.objectLiteral(hash.contexts));3135this.push(this.objectLiteral(hash.types));3136}31373138this.push(this.objectLiteral(hash.values));3139},31403141// [pushString]3142//3143// On stack, before: ...3144// On stack, after: quotedString(string), ...3145//3146// Push a quoted version of `string` onto the stack3147pushString: function(string) {3148this.pushStackLiteral(this.quotedString(string));3149},31503151// [pushLiteral]3152//3153// On stack, before: ...3154// On stack, after: value, ...3155//3156// Pushes a value onto the stack. This operation prevents3157// the compiler from creating a temporary variable to hold3158// it.3159pushLiteral: function(value) {3160this.pushStackLiteral(value);3161},31623163// [pushProgram]3164//3165// On stack, before: ...3166// On stack, after: program(guid), ...3167//3168// Push a program expression onto the stack. This takes3169// a compile-time guid and converts it into a runtime-accessible3170// expression.3171pushProgram: function(guid) {3172if (guid != null) {3173this.pushStackLiteral(this.programExpression(guid));3174} else {3175this.pushStackLiteral(null);3176}3177},31783179// [invokeHelper]3180//3181// On stack, before: hash, inverse, program, params..., ...3182// On stack, after: result of helper invocation3183//3184// Pops off the helper's parameters, invokes the helper,3185// and pushes the helper's return value onto the stack.3186//3187// If the helper is not found, `helperMissing` is called.3188invokeHelper: function(paramSize, name, isSimple) {3189var nonHelper = this.popStack();3190var helper = this.setupHelper(paramSize, name);3191var simple = isSimple ? [helper.name, ' || '] : '';31923193var lookup = ['('].concat(simple, nonHelper);3194if (!this.options.strict) {3195lookup.push(' || ', this.aliasable('helpers.helperMissing'));3196}3197lookup.push(')');31983199this.push(this.source.functionCall(lookup, 'call', helper.callParams));3200},32013202// [invokeKnownHelper]3203//3204// On stack, before: hash, inverse, program, params..., ...3205// On stack, after: result of helper invocation3206//3207// This operation is used when the helper is known to exist,3208// so a `helperMissing` fallback is not required.3209invokeKnownHelper: function(paramSize, name) {3210var helper = this.setupHelper(paramSize, name);3211this.push(this.source.functionCall(helper.name, 'call', helper.callParams));3212},32133214// [invokeAmbiguous]3215//3216// On stack, before: hash, inverse, program, params..., ...3217// On stack, after: result of disambiguation3218//3219// This operation is used when an expression like `{{foo}}`3220// is provided, but we don't know at compile-time whether it3221// is a helper or a path.3222//3223// This operation emits more code than the other options,3224// and can be avoided by passing the `knownHelpers` and3225// `knownHelpersOnly` flags at compile-time.3226invokeAmbiguous: function(name, helperCall) {3227this.useRegister('helper');32283229var nonHelper = this.popStack();32303231this.emptyHash();3232var helper = this.setupHelper(0, name, helperCall);32333234var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');32353236var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];3237if (!this.options.strict) {3238lookup[0] = '(helper = ';3239lookup.push(3240' != null ? helper : ',3241this.aliasable('helpers.helperMissing')3242);3243}32443245this.push([3246'(', lookup,3247(helper.paramsInit ? ['),(', helper.paramsInit] : []), '),',3248'(typeof helper === ', this.aliasable('"function"'), ' ? ',3249this.source.functionCall('helper','call', helper.callParams), ' : helper))'3250]);3251},32523253// [invokePartial]3254//3255// On stack, before: context, ...3256// On stack after: result of partial invocation3257//3258// This operation pops off a context, invokes a partial with that context,3259// and pushes the result of the invocation back.3260invokePartial: function(isDynamic, name, indent) {3261var params = [],3262options = this.setupParams(name, 1, params, false);32633264if (isDynamic) {3265name = this.popStack();3266delete options.name;3267}32683269if (indent) {3270options.indent = JSON.stringify(indent);3271}3272options.helpers = 'helpers';3273options.partials = 'partials';32743275if (!isDynamic) {3276params.unshift(this.nameLookup('partials', name, 'partial'));3277} else {3278params.unshift(name);3279}32803281if (this.options.compat) {3282options.depths = 'depths';3283}3284options = this.objectLiteral(options);3285params.push(options);32863287this.push(this.source.functionCall('this.invokePartial', '', params));3288},32893290// [assignToHash]3291//3292// On stack, before: value, ..., hash, ...3293// On stack, after: ..., hash, ...3294//3295// Pops a value off the stack and assigns it to the current hash3296assignToHash: function(key) {3297var value = this.popStack(),3298context,3299type,3300id;33013302if (this.trackIds) {3303id = this.popStack();3304}3305if (this.stringParams) {3306type = this.popStack();3307context = this.popStack();3308}33093310var hash = this.hash;3311if (context) {3312hash.contexts[key] = context;3313}3314if (type) {3315hash.types[key] = type;3316}3317if (id) {3318hash.ids[key] = id;3319}3320hash.values[key] = value;3321},33223323pushId: function(type, name, child) {3324if (type === 'BlockParam') {3325this.pushStackLiteral(3326'blockParams[' + name[0] + '].path[' + name[1] + ']'3327+ (child ? ' + ' + JSON.stringify('.' + child) : ''));3328} else if (type === 'PathExpression') {3329this.pushString(name);3330} else if (type === 'SubExpression') {3331this.pushStackLiteral('true');3332} else {3333this.pushStackLiteral('null');3334}3335},33363337// HELPERS33383339compiler: JavaScriptCompiler,33403341compileChildren: function(environment, options) {3342var children = environment.children, child, compiler;33433344for(var i=0, l=children.length; i<l; i++) {3345child = children[i];3346compiler = new this.compiler();33473348var index = this.matchExistingProgram(child);33493350if (index == null) {3351this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children3352index = this.context.programs.length;3353child.index = index;3354child.name = 'program' + index;3355this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);3356this.context.environments[index] = child;33573358this.useDepths = this.useDepths || compiler.useDepths;3359this.useBlockParams = this.useBlockParams || compiler.useBlockParams;3360} else {3361child.index = index;3362child.name = 'program' + index;33633364this.useDepths = this.useDepths || child.useDepths;3365this.useBlockParams = this.useBlockParams || child.useBlockParams;3366}3367}3368},3369matchExistingProgram: function(child) {3370for (var i = 0, len = this.context.environments.length; i < len; i++) {3371var environment = this.context.environments[i];3372if (environment && environment.equals(child)) {3373return i;3374}3375}3376},33773378programExpression: function(guid) {3379var child = this.environment.children[guid],3380programParams = [child.index, 'data', child.blockParams];33813382if (this.useBlockParams || this.useDepths) {3383programParams.push('blockParams');3384}3385if (this.useDepths) {3386programParams.push('depths');3387}33883389return 'this.program(' + programParams.join(', ') + ')';3390},33913392useRegister: function(name) {3393if(!this.registers[name]) {3394this.registers[name] = true;3395this.registers.list.push(name);3396}3397},33983399push: function(expr) {3400if (!(expr instanceof Literal)) {3401expr = this.source.wrap(expr);3402}34033404this.inlineStack.push(expr);3405return expr;3406},34073408pushStackLiteral: function(item) {3409this.push(new Literal(item));3410},34113412pushSource: function(source) {3413if (this.pendingContent) {3414this.source.push(3415this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));3416this.pendingContent = undefined;3417}34183419if (source) {3420this.source.push(source);3421}3422},34233424replaceStack: function(callback) {3425var prefix = ['('],3426stack,3427createdStack,3428usedLiteral;34293430/* istanbul ignore next */3431if (!this.isInline()) {3432throw new Exception('replaceStack on non-inline');3433}34343435// We want to merge the inline statement into the replacement statement via ','3436var top = this.popStack(true);34373438if (top instanceof Literal) {3439// Literals do not need to be inlined3440stack = [top.value];3441prefix = ['(', stack];3442usedLiteral = true;3443} else {3444// Get or create the current stack name for use by the inline3445createdStack = true;3446var name = this.incrStack();34473448prefix = ['((', this.push(name), ' = ', top, ')'];3449stack = this.topStack();3450}34513452var item = callback.call(this, stack);34533454if (!usedLiteral) {3455this.popStack();3456}3457if (createdStack) {3458this.stackSlot--;3459}3460this.push(prefix.concat(item, ')'));3461},34623463incrStack: function() {3464this.stackSlot++;3465if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }3466return this.topStackName();3467},3468topStackName: function() {3469return "stack" + this.stackSlot;3470},3471flushInline: function() {3472var inlineStack = this.inlineStack;3473this.inlineStack = [];3474for (var i = 0, len = inlineStack.length; i < len; i++) {3475var entry = inlineStack[i];3476/* istanbul ignore if */3477if (entry instanceof Literal) {3478this.compileStack.push(entry);3479} else {3480var stack = this.incrStack();3481this.pushSource([stack, ' = ', entry, ';']);3482this.compileStack.push(stack);3483}3484}3485},3486isInline: function() {3487return this.inlineStack.length;3488},34893490popStack: function(wrapped) {3491var inline = this.isInline(),3492item = (inline ? this.inlineStack : this.compileStack).pop();34933494if (!wrapped && (item instanceof Literal)) {3495return item.value;3496} else {3497if (!inline) {3498/* istanbul ignore next */3499if (!this.stackSlot) {3500throw new Exception('Invalid stack pop');3501}3502this.stackSlot--;3503}3504return item;3505}3506},35073508topStack: function() {3509var stack = (this.isInline() ? this.inlineStack : this.compileStack),3510item = stack[stack.length - 1];35113512/* istanbul ignore if */3513if (item instanceof Literal) {3514return item.value;3515} else {3516return item;3517}3518},35193520contextName: function(context) {3521if (this.useDepths && context) {3522return 'depths[' + context + ']';3523} else {3524return 'depth' + context;3525}3526},35273528quotedString: function(str) {3529return this.source.quotedString(str);3530},35313532objectLiteral: function(obj) {3533return this.source.objectLiteral(obj);3534},35353536aliasable: function(name) {3537var ret = this.aliases[name];3538if (ret) {3539ret.referenceCount++;3540return ret;3541}35423543ret = this.aliases[name] = this.source.wrap(name);3544ret.aliasable = true;3545ret.referenceCount = 1;35463547return ret;3548},35493550setupHelper: function(paramSize, name, blockHelper) {3551var params = [],3552paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);3553var foundHelper = this.nameLookup('helpers', name, 'helper');35543555return {3556params: params,3557paramsInit: paramsInit,3558name: foundHelper,3559callParams: [this.contextName(0)].concat(params)3560};3561},35623563setupParams: function(helper, paramSize, params) {3564var options = {}, contexts = [], types = [], ids = [], param;35653566options.name = this.quotedString(helper);3567options.hash = this.popStack();35683569if (this.trackIds) {3570options.hashIds = this.popStack();3571}3572if (this.stringParams) {3573options.hashTypes = this.popStack();3574options.hashContexts = this.popStack();3575}35763577var inverse = this.popStack(),3578program = this.popStack();35793580// Avoid setting fn and inverse if neither are set. This allows3581// helpers to do a check for `if (options.fn)`3582if (program || inverse) {3583options.fn = program || 'this.noop';3584options.inverse = inverse || 'this.noop';3585}35863587// The parameters go on to the stack in order (making sure that they are evaluated in order)3588// so we need to pop them off the stack in reverse order3589var i = paramSize;3590while (i--) {3591param = this.popStack();3592params[i] = param;35933594if (this.trackIds) {3595ids[i] = this.popStack();3596}3597if (this.stringParams) {3598types[i] = this.popStack();3599contexts[i] = this.popStack();3600}3601}36023603if (this.trackIds) {3604options.ids = this.source.generateArray(ids);3605}3606if (this.stringParams) {3607options.types = this.source.generateArray(types);3608options.contexts = this.source.generateArray(contexts);3609}36103611if (this.options.data) {3612options.data = 'data';3613}3614if (this.useBlockParams) {3615options.blockParams = 'blockParams';3616}3617return options;3618},36193620setupHelperArgs: function(helper, paramSize, params, useRegister) {3621var options = this.setupParams(helper, paramSize, params, true);3622options = this.objectLiteral(options);3623if (useRegister) {3624this.useRegister('options');3625params.push('options');3626return ['options=', options];3627} else {3628params.push(options);3629return '';3630}3631}3632};363336343635var reservedWords = (3636"break else new var" +3637" case finally return void" +3638" catch for switch while" +3639" continue function this with" +3640" default if throw" +3641" delete in try" +3642" do instanceof typeof" +3643" abstract enum int short" +3644" boolean export interface static" +3645" byte extends long super" +3646" char final native synchronized" +3647" class float package throws" +3648" const goto private transient" +3649" debugger implements protected volatile" +3650" double import public let yield await" +3651" null true false"3652).split(" ");36533654var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};36553656for(var i=0, l=reservedWords.length; i<l; i++) {3657compilerWords[reservedWords[i]] = true;3658}36593660JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {3661return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);3662};36633664function strictLookup(requireTerminal, compiler, parts, type) {3665var stack = compiler.popStack();36663667var i = 0,3668len = parts.length;3669if (requireTerminal) {3670len--;3671}36723673for (; i < len; i++) {3674stack = compiler.nameLookup(stack, parts[i], type);3675}36763677if (requireTerminal) {3678return [compiler.aliasable('this.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')'];3679} else {3680return stack;3681}3682}36833684__exports__ = JavaScriptCompiler;3685return __exports__;3686})(__module2__, __module4__, __module3__, __module15__);36873688// handlebars.js3689var __module0__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {3690"use strict";3691var __exports__;3692/*globals Handlebars: true */3693var Handlebars = __dependency1__;36943695// Compiler imports3696var AST = __dependency2__;3697var Parser = __dependency3__.parser;3698var parse = __dependency3__.parse;3699var Compiler = __dependency4__.Compiler;3700var compile = __dependency4__.compile;3701var precompile = __dependency4__.precompile;3702var JavaScriptCompiler = __dependency5__;37033704var _create = Handlebars.create;3705var create = function() {3706var hb = _create();37073708hb.compile = function(input, options) {3709return compile(input, options, hb);3710};3711hb.precompile = function (input, options) {3712return precompile(input, options, hb);3713};37143715hb.AST = AST;3716hb.Compiler = Compiler;3717hb.JavaScriptCompiler = JavaScriptCompiler;3718hb.Parser = Parser;3719hb.parse = parse;37203721return hb;3722};37233724Handlebars = create();3725Handlebars.create = create;37263727/*jshint -W040 */3728/* istanbul ignore next */3729var root = typeof global !== 'undefined' ? global : window,3730$Handlebars = root.Handlebars;3731/* istanbul ignore next */3732Handlebars.noConflict = function() {3733if (root.Handlebars === Handlebars) {3734root.Handlebars = $Handlebars;3735}3736};37373738Handlebars['default'] = Handlebars;37393740__exports__ = Handlebars;3741return __exports__;3742})(__module1__, __module7__, __module8__, __module13__, __module14__);37433744return __module0__;3745}));374637473748