react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / dist / handlebars.amd.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*/26define(27'handlebars/utils',["exports"],28function(__exports__) {2930/*jshint -W004 */31var escape = {32"&": "&",33"<": "<",34">": ">",35'"': """,36"'": "'",37"`": "`"38};3940var badChars = /[&<>"'`]/g;41var possible = /[&<>"'`]/;4243function escapeChar(chr) {44return escape[chr];45}4647function extend(obj /* , ...source */) {48for (var i = 1; i < arguments.length; i++) {49for (var key in arguments[i]) {50if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {51obj[key] = arguments[i][key];52}53}54}5556return obj;57}5859__exports__.extend = extend;var toString = Object.prototype.toString;60__exports__.toString = toString;61// Sourced from lodash62// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt63var isFunction = function(value) {64return typeof value === 'function';65};66// fallback for older versions of Chrome and Safari67/* istanbul ignore next */68if (isFunction(/x/)) {69isFunction = function(value) {70return typeof value === 'function' && toString.call(value) === '[object Function]';71};72}73var isFunction;74__exports__.isFunction = isFunction;75/* istanbul ignore next */76var isArray = Array.isArray || function(value) {77return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;78};79__exports__.isArray = isArray;80// Older IE versions do not directly support indexOf so we must implement our own, sadly.81function indexOf(array, value) {82for (var i = 0, len = array.length; i < len; i++) {83if (array[i] === value) {84return i;85}86}87return -1;88}8990__exports__.indexOf = indexOf;91function escapeExpression(string) {92// don't escape SafeStrings, since they're already safe93if (string && string.toHTML) {94return string.toHTML();95} else if (string == null) {96return "";97} else if (!string) {98return string + '';99}100101// Force a string conversion as this will be done by the append regardless and102// the regex test will do this transparently behind the scenes, causing issues if103// an object's to string has escaped characters in it.104string = "" + string;105106if(!possible.test(string)) { return string; }107return string.replace(badChars, escapeChar);108}109110__exports__.escapeExpression = escapeExpression;function isEmpty(value) {111if (!value && value !== 0) {112return true;113} else if (isArray(value) && value.length === 0) {114return true;115} else {116return false;117}118}119120__exports__.isEmpty = isEmpty;function blockParams(params, ids) {121params.path = ids;122return params;123}124125__exports__.blockParams = blockParams;function appendContextPath(contextPath, id) {126return (contextPath ? contextPath + '.' : '') + id;127}128129__exports__.appendContextPath = appendContextPath;130});131define(132'handlebars/exception',["exports"],133function(__exports__) {134135136var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];137138function Exception(message, node) {139var loc = node && node.loc,140line,141column;142if (loc) {143line = loc.start.line;144column = loc.start.column;145146message += ' - ' + line + ':' + column;147}148149var tmp = Error.prototype.constructor.call(this, message);150151// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.152for (var idx = 0; idx < errorProps.length; idx++) {153this[errorProps[idx]] = tmp[errorProps[idx]];154}155156if (loc) {157this.lineNumber = line;158this.column = column;159}160}161162Exception.prototype = new Error();163164__exports__["default"] = Exception;165});166define(167'handlebars/base',["./utils","./exception","exports"],168function(__dependency1__, __dependency2__, __exports__) {169170var Utils = __dependency1__;171var Exception = __dependency2__["default"];172173var VERSION = "3.0.0";174__exports__.VERSION = VERSION;var COMPILER_REVISION = 6;175__exports__.COMPILER_REVISION = COMPILER_REVISION;176var REVISION_CHANGES = {1771: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it1782: '== 1.0.0-rc.3',1793: '== 1.0.0-rc.4',1804: '== 1.x.x',1815: '== 2.0.0-alpha.x',1826: '>= 2.0.0-beta.1'183};184__exports__.REVISION_CHANGES = REVISION_CHANGES;185var isArray = Utils.isArray,186isFunction = Utils.isFunction,187toString = Utils.toString,188objectType = '[object Object]';189190function HandlebarsEnvironment(helpers, partials) {191this.helpers = helpers || {};192this.partials = partials || {};193194registerDefaultHelpers(this);195}196197__exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {198constructor: HandlebarsEnvironment,199200logger: logger,201log: log,202203registerHelper: function(name, fn) {204if (toString.call(name) === objectType) {205if (fn) { throw new Exception('Arg not supported with multiple helpers'); }206Utils.extend(this.helpers, name);207} else {208this.helpers[name] = fn;209}210},211unregisterHelper: function(name) {212delete this.helpers[name];213},214215registerPartial: function(name, partial) {216if (toString.call(name) === objectType) {217Utils.extend(this.partials, name);218} else {219if (typeof partial === 'undefined') {220throw new Exception('Attempting to register a partial as undefined');221}222this.partials[name] = partial;223}224},225unregisterPartial: function(name) {226delete this.partials[name];227}228};229230function registerDefaultHelpers(instance) {231instance.registerHelper('helperMissing', function(/* [args, ]options */) {232if(arguments.length === 1) {233// A missing field in a {{foo}} constuct.234return undefined;235} else {236// Someone is actually trying to call something, blow up.237throw new Exception("Missing helper: '" + arguments[arguments.length-1].name + "'");238}239});240241instance.registerHelper('blockHelperMissing', function(context, options) {242var inverse = options.inverse,243fn = options.fn;244245if(context === true) {246return fn(this);247} else if(context === false || context == null) {248return inverse(this);249} else if (isArray(context)) {250if(context.length > 0) {251if (options.ids) {252options.ids = [options.name];253}254255return instance.helpers.each(context, options);256} else {257return inverse(this);258}259} else {260if (options.data && options.ids) {261var data = createFrame(options.data);262data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name);263options = {data: data};264}265266return fn(context, options);267}268});269270instance.registerHelper('each', function(context, options) {271if (!options) {272throw new Exception('Must pass iterator to #each');273}274275var fn = options.fn, inverse = options.inverse;276var i = 0, ret = "", data;277278var contextPath;279if (options.data && options.ids) {280contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';281}282283if (isFunction(context)) { context = context.call(this); }284285if (options.data) {286data = createFrame(options.data);287}288289function execIteration(key, i, last) {290if (data) {291data.key = key;292data.index = i;293data.first = i === 0;294data.last = !!last;295296if (contextPath) {297data.contextPath = contextPath + key;298}299}300301ret = ret + fn(context[key], {302data: data,303blockParams: Utils.blockParams([context[key], key], [contextPath + key, null])304});305}306307if(context && typeof context === 'object') {308if (isArray(context)) {309for(var j = context.length; i<j; i++) {310execIteration(i, i, i === context.length-1);311}312} else {313var priorKey;314315for(var key in context) {316if(context.hasOwnProperty(key)) {317// We're running the iterations one step out of sync so we can detect318// the last iteration without have to scan the object twice and create319// an itermediate keys array.320if (priorKey) {321execIteration(priorKey, i-1);322}323priorKey = key;324i++;325}326}327if (priorKey) {328execIteration(priorKey, i-1, true);329}330}331}332333if(i === 0){334ret = inverse(this);335}336337return ret;338});339340instance.registerHelper('if', function(conditional, options) {341if (isFunction(conditional)) { conditional = conditional.call(this); }342343// Default behavior is to render the positive path if the value is truthy and not empty.344// The `includeZero` option may be set to treat the condtional as purely not empty based on the345// behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.346if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {347return options.inverse(this);348} else {349return options.fn(this);350}351});352353instance.registerHelper('unless', function(conditional, options) {354return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});355});356357instance.registerHelper('with', function(context, options) {358if (isFunction(context)) { context = context.call(this); }359360var fn = options.fn;361362if (!Utils.isEmpty(context)) {363if (options.data && options.ids) {364var data = createFrame(options.data);365data.contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]);366options = {data:data};367}368369return fn(context, options);370} else {371return options.inverse(this);372}373});374375instance.registerHelper('log', function(message, options) {376var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;377instance.log(level, message);378});379380instance.registerHelper('lookup', function(obj, field) {381return obj && obj[field];382});383}384385var logger = {386methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },387388// State enum389DEBUG: 0,390INFO: 1,391WARN: 2,392ERROR: 3,393level: 1,394395// Can be overridden in the host environment396log: function(level, message) {397if (typeof console !== 'undefined' && logger.level <= level) {398var method = logger.methodMap[level];399(console[method] || console.log).call(console, message);400}401}402};403__exports__.logger = logger;404var log = logger.log;405__exports__.log = log;406var createFrame = function(object) {407var frame = Utils.extend({}, object);408frame._parent = object;409return frame;410};411__exports__.createFrame = createFrame;412});413define(414'handlebars/safe-string',["exports"],415function(__exports__) {416417// Build out our basic SafeString type418function SafeString(string) {419this.string = string;420}421422SafeString.prototype.toString = SafeString.prototype.toHTML = function() {423return "" + this.string;424};425426__exports__["default"] = SafeString;427});428define(429'handlebars/runtime',["./utils","./exception","./base","exports"],430function(__dependency1__, __dependency2__, __dependency3__, __exports__) {431432var Utils = __dependency1__;433var Exception = __dependency2__["default"];434var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;435var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;436var createFrame = __dependency3__.createFrame;437438function checkRevision(compilerInfo) {439var compilerRevision = compilerInfo && compilerInfo[0] || 1,440currentRevision = COMPILER_REVISION;441442if (compilerRevision !== currentRevision) {443if (compilerRevision < currentRevision) {444var runtimeVersions = REVISION_CHANGES[currentRevision],445compilerVersions = REVISION_CHANGES[compilerRevision];446throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+447"Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");448} else {449// Use the embedded version info since the runtime doesn't know about this revision yet450throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+451"Please update your runtime to a newer version ("+compilerInfo[1]+").");452}453}454}455456__exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial457458function template(templateSpec, env) {459/* istanbul ignore next */460if (!env) {461throw new Exception("No environment passed to template");462}463if (!templateSpec || !templateSpec.main) {464throw new Exception('Unknown template object: ' + typeof templateSpec);465}466467// Note: Using env.VM references rather than local var references throughout this section to allow468// for external users to override these as psuedo-supported APIs.469env.VM.checkRevision(templateSpec.compiler);470471var invokePartialWrapper = function(partial, context, options) {472if (options.hash) {473context = Utils.extend({}, context, options.hash);474}475476partial = env.VM.resolvePartial.call(this, partial, context, options);477var result = env.VM.invokePartial.call(this, partial, context, options);478479if (result == null && env.compile) {480options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);481result = options.partials[options.name](context, options);482}483if (result != null) {484if (options.indent) {485var lines = result.split('\n');486for (var i = 0, l = lines.length; i < l; i++) {487if (!lines[i] && i + 1 === l) {488break;489}490491lines[i] = options.indent + lines[i];492}493result = lines.join('\n');494}495return result;496} else {497throw new Exception("The partial " + options.name + " could not be compiled when running in runtime-only mode");498}499};500501// Just add water502var container = {503strict: function(obj, name) {504if (!(name in obj)) {505throw new Exception('"' + name + '" not defined in ' + obj);506}507return obj[name];508},509lookup: function(depths, name) {510var len = depths.length;511for (var i = 0; i < len; i++) {512if (depths[i] && depths[i][name] != null) {513return depths[i][name];514}515}516},517lambda: function(current, context) {518return typeof current === 'function' ? current.call(context) : current;519},520521escapeExpression: Utils.escapeExpression,522invokePartial: invokePartialWrapper,523524fn: function(i) {525return templateSpec[i];526},527528programs: [],529program: function(i, data, declaredBlockParams, blockParams, depths) {530var programWrapper = this.programs[i],531fn = this.fn(i);532if (data || depths || blockParams || declaredBlockParams) {533programWrapper = program(this, i, fn, data, declaredBlockParams, blockParams, depths);534} else if (!programWrapper) {535programWrapper = this.programs[i] = program(this, i, fn);536}537return programWrapper;538},539540data: function(data, depth) {541while (data && depth--) {542data = data._parent;543}544return data;545},546merge: function(param, common) {547var ret = param || common;548549if (param && common && (param !== common)) {550ret = Utils.extend({}, common, param);551}552553return ret;554},555556noop: env.VM.noop,557compilerInfo: templateSpec.compiler558};559560var ret = function(context, options) {561options = options || {};562var data = options.data;563564ret._setup(options);565if (!options.partial && templateSpec.useData) {566data = initData(context, data);567}568var depths,569blockParams = templateSpec.useBlockParams ? [] : undefined;570if (templateSpec.useDepths) {571depths = options.depths ? [context].concat(options.depths) : [context];572}573574return templateSpec.main.call(container, context, container.helpers, container.partials, data, blockParams, depths);575};576ret.isTop = true;577578ret._setup = function(options) {579if (!options.partial) {580container.helpers = container.merge(options.helpers, env.helpers);581582if (templateSpec.usePartial) {583container.partials = container.merge(options.partials, env.partials);584}585} else {586container.helpers = options.helpers;587container.partials = options.partials;588}589};590591ret._child = function(i, data, blockParams, depths) {592if (templateSpec.useBlockParams && !blockParams) {593throw new Exception('must pass block params');594}595if (templateSpec.useDepths && !depths) {596throw new Exception('must pass parent depths');597}598599return program(container, i, templateSpec[i], data, 0, blockParams, depths);600};601return ret;602}603604__exports__.template = template;function program(container, i, fn, data, declaredBlockParams, blockParams, depths) {605var prog = function(context, options) {606options = options || {};607608return fn.call(container,609context,610container.helpers, container.partials,611options.data || data,612blockParams && [options.blockParams].concat(blockParams),613depths && [context].concat(depths));614};615prog.program = i;616prog.depth = depths ? depths.length : 0;617prog.blockParams = declaredBlockParams || 0;618return prog;619}620621__exports__.program = program;function resolvePartial(partial, context, options) {622if (!partial) {623partial = options.partials[options.name];624} else if (!partial.call && !options.name) {625// This is a dynamic partial that returned a string626options.name = partial;627partial = options.partials[partial];628}629return partial;630}631632__exports__.resolvePartial = resolvePartial;function invokePartial(partial, context, options) {633options.partial = true;634635if(partial === undefined) {636throw new Exception("The partial " + options.name + " could not be found");637} else if(partial instanceof Function) {638return partial(context, options);639}640}641642__exports__.invokePartial = invokePartial;function noop() { return ""; }643644__exports__.noop = noop;function initData(context, data) {645if (!data || !('root' in data)) {646data = data ? createFrame(data) : {};647data.root = context;648}649return data;650}651});652define(653'handlebars.runtime',["./handlebars/base","./handlebars/safe-string","./handlebars/exception","./handlebars/utils","./handlebars/runtime","exports"],654function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {655656/*globals Handlebars: true */657var base = __dependency1__;658659// Each of these augment the Handlebars object. No need to setup here.660// (This is done to easily share code between commonjs and browse envs)661var SafeString = __dependency2__["default"];662var Exception = __dependency3__["default"];663var Utils = __dependency4__;664var runtime = __dependency5__;665666// For compatibility and usage outside of module systems, make the Handlebars object a namespace667var create = function() {668var hb = new base.HandlebarsEnvironment();669670Utils.extend(hb, base);671hb.SafeString = SafeString;672hb.Exception = Exception;673hb.Utils = Utils;674hb.escapeExpression = Utils.escapeExpression;675676hb.VM = runtime;677hb.template = function(spec) {678return runtime.template(spec, hb);679};680681return hb;682};683684var Handlebars = create();685Handlebars.create = create;686687/*jshint -W040 */688/* istanbul ignore next */689var root = typeof global !== 'undefined' ? global : window,690$Handlebars = root.Handlebars;691/* istanbul ignore next */692Handlebars.noConflict = function() {693if (root.Handlebars === Handlebars) {694root.Handlebars = $Handlebars;695}696};697698Handlebars['default'] = Handlebars;699700__exports__["default"] = Handlebars;701});702define(703'handlebars/compiler/ast',["exports"],704function(__exports__) {705706var AST = {707Program: function(statements, blockParams, strip, locInfo) {708this.loc = locInfo;709this.type = 'Program';710this.body = statements;711712this.blockParams = blockParams;713this.strip = strip;714},715716MustacheStatement: function(path, params, hash, escaped, strip, locInfo) {717this.loc = locInfo;718this.type = 'MustacheStatement';719720this.path = path;721this.params = params || [];722this.hash = hash;723this.escaped = escaped;724725this.strip = strip;726},727728BlockStatement: function(path, params, hash, program, inverse, openStrip, inverseStrip, closeStrip, locInfo) {729this.loc = locInfo;730this.type = 'BlockStatement';731732this.path = path;733this.params = params || [];734this.hash = hash;735this.program = program;736this.inverse = inverse;737738this.openStrip = openStrip;739this.inverseStrip = inverseStrip;740this.closeStrip = closeStrip;741},742743PartialStatement: function(name, params, hash, strip, locInfo) {744this.loc = locInfo;745this.type = 'PartialStatement';746747this.name = name;748this.params = params || [];749this.hash = hash;750751this.indent = '';752this.strip = strip;753},754755ContentStatement: function(string, locInfo) {756this.loc = locInfo;757this.type = 'ContentStatement';758this.original = this.value = string;759},760761CommentStatement: function(comment, strip, locInfo) {762this.loc = locInfo;763this.type = 'CommentStatement';764this.value = comment;765766this.strip = strip;767},768769SubExpression: function(path, params, hash, locInfo) {770this.loc = locInfo;771772this.type = 'SubExpression';773this.path = path;774this.params = params || [];775this.hash = hash;776},777778PathExpression: function(data, depth, parts, original, locInfo) {779this.loc = locInfo;780this.type = 'PathExpression';781782this.data = data;783this.original = original;784this.parts = parts;785this.depth = depth;786},787788StringLiteral: function(string, locInfo) {789this.loc = locInfo;790this.type = 'StringLiteral';791this.original =792this.value = string;793},794795NumberLiteral: function(number, locInfo) {796this.loc = locInfo;797this.type = 'NumberLiteral';798this.original =799this.value = Number(number);800},801802BooleanLiteral: function(bool, locInfo) {803this.loc = locInfo;804this.type = 'BooleanLiteral';805this.original =806this.value = bool === 'true';807},808809Hash: function(pairs, locInfo) {810this.loc = locInfo;811this.type = 'Hash';812this.pairs = pairs;813},814HashPair: function(key, value, locInfo) {815this.loc = locInfo;816this.type = 'HashPair';817this.key = key;818this.value = value;819},820821// Public API used to evaluate derived attributes regarding AST nodes822helpers: {823// a mustache is definitely a helper if:824// * it is an eligible helper, and825// * it has at least one parameter or hash segment826// TODO: Make these public utility methods827helperExpression: function(node) {828return !!(node.type === 'SubExpression' || node.params.length || node.hash);829},830831scopedId: function(path) {832return (/^\.|this\b/).test(path.original);833},834835// an ID is simple if it only has one part, and that part is not836// `..` or `this`.837simpleId: function(path) {838return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;839}840}841};842843844// Must be exported as an object rather than the root of the module as the jison lexer845// must modify the object to operate properly.846__exports__["default"] = AST;847});848define(849'handlebars/compiler/parser',["exports"],850function(__exports__) {851852/* jshint ignore:start */853/* istanbul ignore next */854/* Jison generated parser */855var handlebars = (function(){856var parser = {trace: function trace() { },857yy: {},858symbols_: {"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},859terminals_: {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"},860productions_: [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]],861performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {862863var $0 = $$.length - 1;864switch (yystate) {865case 1: return $$[$0-1];866break;867case 2:this.$ = new yy.Program($$[$0], null, {}, yy.locInfo(this._$));868break;869case 3:this.$ = $$[$0];870break;871case 4:this.$ = $$[$0];872break;873case 5:this.$ = $$[$0];874break;875case 6:this.$ = $$[$0];876break;877case 7:this.$ = $$[$0];878break;879case 8:this.$ = new yy.CommentStatement(yy.stripComment($$[$0]), yy.stripFlags($$[$0], $$[$0]), yy.locInfo(this._$));880break;881case 9:this.$ = new yy.ContentStatement($$[$0], yy.locInfo(this._$));882break;883case 10:this.$ = yy.prepareRawBlock($$[$0-2], $$[$0-1], $$[$0], this._$);884break;885case 11:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1] };886break;887case 12:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], false, this._$);888break;889case 13:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], true, this._$);890break;891case 14:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };892break;893case 15:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };894break;895case 16:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };896break;897case 17:this.$ = { strip: yy.stripFlags($$[$0-1], $$[$0-1]), program: $$[$0] };898break;899case 18:900var inverse = yy.prepareBlock($$[$0-2], $$[$0-1], $$[$0], $$[$0], false, this._$),901program = new yy.Program([inverse], null, {}, yy.locInfo(this._$));902program.chained = true;903904this.$ = { strip: $$[$0-2].strip, program: program, chain: true };905906break;907case 19:this.$ = $$[$0];908break;909case 20:this.$ = {path: $$[$0-1], strip: yy.stripFlags($$[$0-2], $$[$0])};910break;911case 21:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);912break;913case 22:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);914break;915case 23:this.$ = new yy.PartialStatement($$[$0-3], $$[$0-2], $$[$0-1], yy.stripFlags($$[$0-4], $$[$0]), yy.locInfo(this._$));916break;917case 24:this.$ = $$[$0];918break;919case 25:this.$ = $$[$0];920break;921case 26:this.$ = new yy.SubExpression($$[$0-3], $$[$0-2], $$[$0-1], yy.locInfo(this._$));922break;923case 27:this.$ = new yy.Hash($$[$0], yy.locInfo(this._$));924break;925case 28:this.$ = new yy.HashPair($$[$0-2], $$[$0], yy.locInfo(this._$));926break;927case 29:this.$ = $$[$0-1];928break;929case 30:this.$ = $$[$0];930break;931case 31:this.$ = $$[$0];932break;933case 32:this.$ = new yy.StringLiteral($$[$0], yy.locInfo(this._$));934break;935case 33:this.$ = new yy.NumberLiteral($$[$0], yy.locInfo(this._$));936break;937case 34:this.$ = new yy.BooleanLiteral($$[$0], yy.locInfo(this._$));938break;939case 35:this.$ = $$[$0];940break;941case 36:this.$ = $$[$0];942break;943case 37:this.$ = yy.preparePath(true, $$[$0], this._$);944break;945case 38:this.$ = yy.preparePath(false, $$[$0], this._$);946break;947case 39: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2];948break;949case 40:this.$ = [{part: $$[$0]}];950break;951case 41:this.$ = [];952break;953case 42:$$[$0-1].push($$[$0]);954break;955case 43:this.$ = [];956break;957case 44:$$[$0-1].push($$[$0]);958break;959case 51:this.$ = [];960break;961case 52:$$[$0-1].push($$[$0]);962break;963case 57:this.$ = [];964break;965case 58:$$[$0-1].push($$[$0]);966break;967case 63:this.$ = [];968break;969case 64:$$[$0-1].push($$[$0]);970break;971case 71:this.$ = [];972break;973case 72:$$[$0-1].push($$[$0]);974break;975case 75:this.$ = [];976break;977case 76:$$[$0-1].push($$[$0]);978break;979case 79:this.$ = [];980break;981case 80:$$[$0-1].push($$[$0]);982break;983case 83:this.$ = [];984break;985case 84:$$[$0-1].push($$[$0]);986break;987case 87:this.$ = [$$[$0]];988break;989case 88:$$[$0-1].push($$[$0]);990break;991case 89:this.$ = [$$[$0]];992break;993case 90:$$[$0-1].push($$[$0]);994break;995}996},997table: [{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]}],998defaultActions: {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]},999parseError: function parseError(str, hash) {1000throw new Error(str);1001},1002parse: function parse(input) {1003var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;1004this.lexer.setInput(input);1005this.lexer.yy = this.yy;1006this.yy.lexer = this.lexer;1007this.yy.parser = this;1008if (typeof this.lexer.yylloc == "undefined")1009this.lexer.yylloc = {};1010var yyloc = this.lexer.yylloc;1011lstack.push(yyloc);1012var ranges = this.lexer.options && this.lexer.options.ranges;1013if (typeof this.yy.parseError === "function")1014this.parseError = this.yy.parseError;1015function popStack(n) {1016stack.length = stack.length - 2 * n;1017vstack.length = vstack.length - n;1018lstack.length = lstack.length - n;1019}1020function lex() {1021var token;1022token = self.lexer.lex() || 1;1023if (typeof token !== "number") {1024token = self.symbols_[token] || token;1025}1026return token;1027}1028var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;1029while (true) {1030state = stack[stack.length - 1];1031if (this.defaultActions[state]) {1032action = this.defaultActions[state];1033} else {1034if (symbol === null || typeof symbol == "undefined") {1035symbol = lex();1036}1037action = table[state] && table[state][symbol];1038}1039if (typeof action === "undefined" || !action.length || !action[0]) {1040var errStr = "";1041if (!recovering) {1042expected = [];1043for (p in table[state])1044if (this.terminals_[p] && p > 2) {1045expected.push("'" + this.terminals_[p] + "'");1046}1047if (this.lexer.showPosition) {1048errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";1049} else {1050errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");1051}1052this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});1053}1054}1055if (action[0] instanceof Array && action.length > 1) {1056throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);1057}1058switch (action[0]) {1059case 1:1060stack.push(symbol);1061vstack.push(this.lexer.yytext);1062lstack.push(this.lexer.yylloc);1063stack.push(action[1]);1064symbol = null;1065if (!preErrorSymbol) {1066yyleng = this.lexer.yyleng;1067yytext = this.lexer.yytext;1068yylineno = this.lexer.yylineno;1069yyloc = this.lexer.yylloc;1070if (recovering > 0)1071recovering--;1072} else {1073symbol = preErrorSymbol;1074preErrorSymbol = null;1075}1076break;1077case 2:1078len = this.productions_[action[1]][1];1079yyval.$ = vstack[vstack.length - len];1080yyval._$ = {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};1081if (ranges) {1082yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];1083}1084r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);1085if (typeof r !== "undefined") {1086return r;1087}1088if (len) {1089stack = stack.slice(0, -1 * len * 2);1090vstack = vstack.slice(0, -1 * len);1091lstack = lstack.slice(0, -1 * len);1092}1093stack.push(this.productions_[action[1]][0]);1094vstack.push(yyval.$);1095lstack.push(yyval._$);1096newState = table[stack[stack.length - 2]][stack[stack.length - 1]];1097stack.push(newState);1098break;1099case 3:1100return true;1101}1102}1103return true;1104}1105};1106/* Jison generated lexer */1107var lexer = (function(){1108var lexer = ({EOF:1,1109parseError:function parseError(str, hash) {1110if (this.yy.parser) {1111this.yy.parser.parseError(str, hash);1112} else {1113throw new Error(str);1114}1115},1116setInput:function (input) {1117this._input = input;1118this._more = this._less = this.done = false;1119this.yylineno = this.yyleng = 0;1120this.yytext = this.matched = this.match = '';1121this.conditionStack = ['INITIAL'];1122this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};1123if (this.options.ranges) this.yylloc.range = [0,0];1124this.offset = 0;1125return this;1126},1127input:function () {1128var ch = this._input[0];1129this.yytext += ch;1130this.yyleng++;1131this.offset++;1132this.match += ch;1133this.matched += ch;1134var lines = ch.match(/(?:\r\n?|\n).*/g);1135if (lines) {1136this.yylineno++;1137this.yylloc.last_line++;1138} else {1139this.yylloc.last_column++;1140}1141if (this.options.ranges) this.yylloc.range[1]++;11421143this._input = this._input.slice(1);1144return ch;1145},1146unput:function (ch) {1147var len = ch.length;1148var lines = ch.split(/(?:\r\n?|\n)/g);11491150this._input = ch + this._input;1151this.yytext = this.yytext.substr(0, this.yytext.length-len-1);1152//this.yyleng -= len;1153this.offset -= len;1154var oldLines = this.match.split(/(?:\r\n?|\n)/g);1155this.match = this.match.substr(0, this.match.length-1);1156this.matched = this.matched.substr(0, this.matched.length-1);11571158if (lines.length-1) this.yylineno -= lines.length-1;1159var r = this.yylloc.range;11601161this.yylloc = {first_line: this.yylloc.first_line,1162last_line: this.yylineno+1,1163first_column: this.yylloc.first_column,1164last_column: lines ?1165(lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:1166this.yylloc.first_column - len1167};11681169if (this.options.ranges) {1170this.yylloc.range = [r[0], r[0] + this.yyleng - len];1171}1172return this;1173},1174more:function () {1175this._more = true;1176return this;1177},1178less:function (n) {1179this.unput(this.match.slice(n));1180},1181pastInput:function () {1182var past = this.matched.substr(0, this.matched.length - this.match.length);1183return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");1184},1185upcomingInput:function () {1186var next = this.match;1187if (next.length < 20) {1188next += this._input.substr(0, 20-next.length);1189}1190return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");1191},1192showPosition:function () {1193var pre = this.pastInput();1194var c = new Array(pre.length + 1).join("-");1195return pre + this.upcomingInput() + "\n" + c+"^";1196},1197next:function () {1198if (this.done) {1199return this.EOF;1200}1201if (!this._input) this.done = true;12021203var token,1204match,1205tempMatch,1206index,1207col,1208lines;1209if (!this._more) {1210this.yytext = '';1211this.match = '';1212}1213var rules = this._currentRules();1214for (var i=0;i < rules.length; i++) {1215tempMatch = this._input.match(this.rules[rules[i]]);1216if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {1217match = tempMatch;1218index = i;1219if (!this.options.flex) break;1220}1221}1222if (match) {1223lines = match[0].match(/(?:\r\n?|\n).*/g);1224if (lines) this.yylineno += lines.length;1225this.yylloc = {first_line: this.yylloc.last_line,1226last_line: this.yylineno+1,1227first_column: this.yylloc.last_column,1228last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};1229this.yytext += match[0];1230this.match += match[0];1231this.matches = match;1232this.yyleng = this.yytext.length;1233if (this.options.ranges) {1234this.yylloc.range = [this.offset, this.offset += this.yyleng];1235}1236this._more = false;1237this._input = this._input.slice(match[0].length);1238this.matched += match[0];1239token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);1240if (this.done && this._input) this.done = false;1241if (token) return token;1242else return;1243}1244if (this._input === "") {1245return this.EOF;1246} else {1247return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),1248{text: "", token: null, line: this.yylineno});1249}1250},1251lex:function lex() {1252var r = this.next();1253if (typeof r !== 'undefined') {1254return r;1255} else {1256return this.lex();1257}1258},1259begin:function begin(condition) {1260this.conditionStack.push(condition);1261},1262popState:function popState() {1263return this.conditionStack.pop();1264},1265_currentRules:function _currentRules() {1266return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;1267},1268topState:function () {1269return this.conditionStack[this.conditionStack.length-2];1270},1271pushState:function begin(condition) {1272this.begin(condition);1273}});1274lexer.options = {};1275lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {127612771278function strip(start, end) {1279return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);1280}128112821283var YYSTATE=YY_START1284switch($avoiding_name_collisions) {1285case 0:1286if(yy_.yytext.slice(-2) === "\\\\") {1287strip(0,1);1288this.begin("mu");1289} else if(yy_.yytext.slice(-1) === "\\") {1290strip(0,1);1291this.begin("emu");1292} else {1293this.begin("mu");1294}1295if(yy_.yytext) return 14;12961297break;1298case 1:return 14;1299break;1300case 2:1301this.popState();1302return 14;13031304break;1305case 3:1306yy_.yytext = yy_.yytext.substr(5, yy_.yyleng-9);1307this.popState();1308return 16;13091310break;1311case 4: return 14;1312break;1313case 5:1314this.popState();1315return 13;13161317break;1318case 6:return 59;1319break;1320case 7:return 62;1321break;1322case 8: return 17;1323break;1324case 9:1325this.popState();1326this.begin('raw');1327return 21;13281329break;1330case 10:return 53;1331break;1332case 11:return 27;1333break;1334case 12:return 45;1335break;1336case 13:this.popState(); return 42;1337break;1338case 14:this.popState(); return 42;1339break;1340case 15:return 32;1341break;1342case 16:return 37;1343break;1344case 17:return 49;1345break;1346case 18:return 46;1347break;1348case 19:1349this.unput(yy_.yytext);1350this.popState();1351this.begin('com');13521353break;1354case 20:1355this.popState();1356return 13;13571358break;1359case 21:return 46;1360break;1361case 22:return 67;1362break;1363case 23:return 66;1364break;1365case 24:return 66;1366break;1367case 25:return 79;1368break;1369case 26:// ignore whitespace1370break;1371case 27:this.popState(); return 52;1372break;1373case 28:this.popState(); return 31;1374break;1375case 29:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 74;1376break;1377case 30:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 74;1378break;1379case 31:return 77;1380break;1381case 32:return 76;1382break;1383case 33:return 76;1384break;1385case 34:return 75;1386break;1387case 35:return 69;1388break;1389case 36:return 71;1390break;1391case 37:return 66;1392break;1393case 38:yy_.yytext = strip(1,2); return 66;1394break;1395case 39:return 'INVALID';1396break;1397case 40:return 5;1398break;1399}1400};1401lexer.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\/.)|]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];1402lexer.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}};1403return lexer;})()1404parser.lexer = lexer;1405function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;1406return new Parser;1407})();__exports__["default"] = handlebars;1408/* jshint ignore:end */1409});1410define(1411'handlebars/compiler/visitor',["../exception","./ast","exports"],1412function(__dependency1__, __dependency2__, __exports__) {14131414var Exception = __dependency1__["default"];1415var AST = __dependency2__["default"];14161417function Visitor() {1418this.parents = [];1419}14201421Visitor.prototype = {1422constructor: Visitor,1423mutating: false,14241425// Visits a given value. If mutating, will replace the value if necessary.1426acceptKey: function(node, name) {1427var value = this.accept(node[name]);1428if (this.mutating) {1429// Hacky sanity check:1430if (value && (!value.type || !AST[value.type])) {1431throw new Exception('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);1432}1433node[name] = value;1434}1435},14361437// Performs an accept operation with added sanity check to ensure1438// required keys are not removed.1439acceptRequired: function(node, name) {1440this.acceptKey(node, name);14411442if (!node[name]) {1443throw new Exception(node.type + ' requires ' + name);1444}1445},14461447// Traverses a given array. If mutating, empty respnses will be removed1448// for child elements.1449acceptArray: function(array) {1450for (var i = 0, l = array.length; i < l; i++) {1451this.acceptKey(array, i);14521453if (!array[i]) {1454array.splice(i, 1);1455i--;1456l--;1457}1458}1459},14601461accept: function(object) {1462if (!object) {1463return;1464}14651466if (this.current) {1467this.parents.unshift(this.current);1468}1469this.current = object;14701471var ret = this[object.type](object);14721473this.current = this.parents.shift();14741475if (!this.mutating || ret) {1476return ret;1477} else if (ret !== false) {1478return object;1479}1480},14811482Program: function(program) {1483this.acceptArray(program.body);1484},14851486MustacheStatement: function(mustache) {1487this.acceptRequired(mustache, 'path');1488this.acceptArray(mustache.params);1489this.acceptKey(mustache, 'hash');1490},14911492BlockStatement: function(block) {1493this.acceptRequired(block, 'path');1494this.acceptArray(block.params);1495this.acceptKey(block, 'hash');14961497this.acceptKey(block, 'program');1498this.acceptKey(block, 'inverse');1499},15001501PartialStatement: function(partial) {1502this.acceptRequired(partial, 'name');1503this.acceptArray(partial.params);1504this.acceptKey(partial, 'hash');1505},15061507ContentStatement: function(/* content */) {},1508CommentStatement: function(/* comment */) {},15091510SubExpression: function(sexpr) {1511this.acceptRequired(sexpr, 'path');1512this.acceptArray(sexpr.params);1513this.acceptKey(sexpr, 'hash');1514},1515PartialExpression: function(partial) {1516this.acceptRequired(partial, 'name');1517this.acceptArray(partial.params);1518this.acceptKey(partial, 'hash');1519},15201521PathExpression: function(/* path */) {},15221523StringLiteral: function(/* string */) {},1524NumberLiteral: function(/* number */) {},1525BooleanLiteral: function(/* bool */) {},15261527Hash: function(hash) {1528this.acceptArray(hash.pairs);1529},1530HashPair: function(pair) {1531this.acceptRequired(pair, 'value');1532}1533};15341535__exports__["default"] = Visitor;1536});1537define(1538'handlebars/compiler/whitespace-control',["./visitor","exports"],1539function(__dependency1__, __exports__) {15401541var Visitor = __dependency1__["default"];15421543function WhitespaceControl() {1544}1545WhitespaceControl.prototype = new Visitor();15461547WhitespaceControl.prototype.Program = function(program) {1548var isRoot = !this.isRootSeen;1549this.isRootSeen = true;15501551var body = program.body;1552for (var i = 0, l = body.length; i < l; i++) {1553var current = body[i],1554strip = this.accept(current);15551556if (!strip) {1557continue;1558}15591560var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),1561_isNextWhitespace = isNextWhitespace(body, i, isRoot),15621563openStandalone = strip.openStandalone && _isPrevWhitespace,1564closeStandalone = strip.closeStandalone && _isNextWhitespace,1565inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;15661567if (strip.close) {1568omitRight(body, i, true);1569}1570if (strip.open) {1571omitLeft(body, i, true);1572}15731574if (inlineStandalone) {1575omitRight(body, i);15761577if (omitLeft(body, i)) {1578// If we are on a standalone node, save the indent info for partials1579if (current.type === 'PartialStatement') {1580// Pull out the whitespace from the final line1581current.indent = (/([ \t]+$)/).exec(body[i-1].original)[1];1582}1583}1584}1585if (openStandalone) {1586omitRight((current.program || current.inverse).body);15871588// Strip out the previous content node if it's whitespace only1589omitLeft(body, i);1590}1591if (closeStandalone) {1592// Always strip the next node1593omitRight(body, i);15941595omitLeft((current.inverse || current.program).body);1596}1597}15981599return program;1600};1601WhitespaceControl.prototype.BlockStatement = function(block) {1602this.accept(block.program);1603this.accept(block.inverse);16041605// Find the inverse program that is involed with whitespace stripping.1606var program = block.program || block.inverse,1607inverse = block.program && block.inverse,1608firstInverse = inverse,1609lastInverse = inverse;16101611if (inverse && inverse.chained) {1612firstInverse = inverse.body[0].program;16131614// Walk the inverse chain to find the last inverse that is actually in the chain.1615while (lastInverse.chained) {1616lastInverse = lastInverse.body[lastInverse.body.length-1].program;1617}1618}16191620var strip = {1621open: block.openStrip.open,1622close: block.closeStrip.close,16231624// Determine the standalone candiacy. Basically flag our content as being possibly standalone1625// so our parent can determine if we actually are standalone1626openStandalone: isNextWhitespace(program.body),1627closeStandalone: isPrevWhitespace((firstInverse || program).body)1628};16291630if (block.openStrip.close) {1631omitRight(program.body, null, true);1632}16331634if (inverse) {1635var inverseStrip = block.inverseStrip;16361637if (inverseStrip.open) {1638omitLeft(program.body, null, true);1639}16401641if (inverseStrip.close) {1642omitRight(firstInverse.body, null, true);1643}1644if (block.closeStrip.open) {1645omitLeft(lastInverse.body, null, true);1646}16471648// Find standalone else statments1649if (isPrevWhitespace(program.body)1650&& isNextWhitespace(firstInverse.body)) {16511652omitLeft(program.body);1653omitRight(firstInverse.body);1654}1655} else {1656if (block.closeStrip.open) {1657omitLeft(program.body, null, true);1658}1659}16601661return strip;1662};16631664WhitespaceControl.prototype.MustacheStatement = function(mustache) {1665return mustache.strip;1666};16671668WhitespaceControl.prototype.PartialStatement =1669WhitespaceControl.prototype.CommentStatement = function(node) {1670/* istanbul ignore next */1671var strip = node.strip || {};1672return {1673inlineStandalone: true,1674open: strip.open,1675close: strip.close1676};1677};167816791680function isPrevWhitespace(body, i, isRoot) {1681if (i === undefined) {1682i = body.length;1683}16841685// Nodes that end with newlines are considered whitespace (but are special1686// cased for strip operations)1687var prev = body[i-1],1688sibling = body[i-2];1689if (!prev) {1690return isRoot;1691}16921693if (prev.type === 'ContentStatement') {1694return (sibling || !isRoot ? (/\r?\n\s*?$/) : (/(^|\r?\n)\s*?$/)).test(prev.original);1695}1696}1697function isNextWhitespace(body, i, isRoot) {1698if (i === undefined) {1699i = -1;1700}17011702var next = body[i+1],1703sibling = body[i+2];1704if (!next) {1705return isRoot;1706}17071708if (next.type === 'ContentStatement') {1709return (sibling || !isRoot ? (/^\s*?\r?\n/) : (/^\s*?(\r?\n|$)/)).test(next.original);1710}1711}17121713// Marks the node to the right of the position as omitted.1714// I.e. {{foo}}' ' will mark the ' ' node as omitted.1715//1716// If i is undefined, then the first child will be marked as such.1717//1718// If mulitple is truthy then all whitespace will be stripped out until non-whitespace1719// content is met.1720function omitRight(body, i, multiple) {1721var current = body[i == null ? 0 : i + 1];1722if (!current || current.type !== 'ContentStatement' || (!multiple && current.rightStripped)) {1723return;1724}17251726var original = current.value;1727current.value = current.value.replace(multiple ? (/^\s+/) : (/^[ \t]*\r?\n?/), '');1728current.rightStripped = current.value !== original;1729}17301731// Marks the node to the left of the position as omitted.1732// I.e. ' '{{foo}} will mark the ' ' node as omitted.1733//1734// If i is undefined then the last child will be marked as such.1735//1736// If mulitple is truthy then all whitespace will be stripped out until non-whitespace1737// content is met.1738function omitLeft(body, i, multiple) {1739var current = body[i == null ? body.length - 1 : i - 1];1740if (!current || current.type !== 'ContentStatement' || (!multiple && current.leftStripped)) {1741return;1742}17431744// We omit the last node if it's whitespace only and not preceeded by a non-content node.1745var original = current.value;1746current.value = current.value.replace(multiple ? (/\s+$/) : (/[ \t]+$/), '');1747current.leftStripped = current.value !== original;1748return current.leftStripped;1749}17501751__exports__["default"] = WhitespaceControl;1752});1753define(1754'handlebars/compiler/helpers',["../exception","exports"],1755function(__dependency1__, __exports__) {17561757var Exception = __dependency1__["default"];17581759function SourceLocation(source, locInfo) {1760this.source = source;1761this.start = {1762line: locInfo.first_line,1763column: locInfo.first_column1764};1765this.end = {1766line: locInfo.last_line,1767column: locInfo.last_column1768};1769}17701771__exports__.SourceLocation = SourceLocation;function stripFlags(open, close) {1772return {1773open: open.charAt(2) === '~',1774close: close.charAt(close.length-3) === '~'1775};1776}17771778__exports__.stripFlags = stripFlags;function stripComment(comment) {1779return comment.replace(/^\{\{~?\!-?-?/, '')1780.replace(/-?-?~?\}\}$/, '');1781}17821783__exports__.stripComment = stripComment;function preparePath(data, parts, locInfo) {1784/*jshint -W040 */1785locInfo = this.locInfo(locInfo);17861787var original = data ? '@' : '',1788dig = [],1789depth = 0,1790depthString = '';17911792for(var i=0,l=parts.length; i<l; i++) {1793var part = parts[i].part;1794original += (parts[i].separator || '') + part;17951796if (part === '..' || part === '.' || part === 'this') {1797if (dig.length > 0) {1798throw new Exception('Invalid path: ' + original, {loc: locInfo});1799} else if (part === '..') {1800depth++;1801depthString += '../';1802}1803} else {1804dig.push(part);1805}1806}18071808return new this.PathExpression(data, depth, dig, original, locInfo);1809}18101811__exports__.preparePath = preparePath;function prepareMustache(path, params, hash, open, strip, locInfo) {1812/*jshint -W040 */1813// Must use charAt to support IE pre-101814var escapeFlag = open.charAt(3) || open.charAt(2),1815escaped = escapeFlag !== '{' && escapeFlag !== '&';18161817return new this.MustacheStatement(path, params, hash, escaped, strip, this.locInfo(locInfo));1818}18191820__exports__.prepareMustache = prepareMustache;function prepareRawBlock(openRawBlock, content, close, locInfo) {1821/*jshint -W040 */1822if (openRawBlock.path.original !== close) {1823var errorNode = {loc: openRawBlock.path.loc};18241825throw new Exception(openRawBlock.path.original + " doesn't match " + close, errorNode);1826}18271828locInfo = this.locInfo(locInfo);1829var program = new this.Program([content], null, {}, locInfo);18301831return new this.BlockStatement(1832openRawBlock.path, openRawBlock.params, openRawBlock.hash,1833program, undefined,1834{}, {}, {},1835locInfo);1836}18371838__exports__.prepareRawBlock = prepareRawBlock;function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {1839/*jshint -W040 */1840// When we are chaining inverse calls, we will not have a close path1841if (close && close.path && openBlock.path.original !== close.path.original) {1842var errorNode = {loc: openBlock.path.loc};18431844throw new Exception(openBlock.path.original + ' doesn\'t match ' + close.path.original, errorNode);1845}18461847program.blockParams = openBlock.blockParams;18481849var inverse,1850inverseStrip;18511852if (inverseAndProgram) {1853if (inverseAndProgram.chain) {1854inverseAndProgram.program.body[0].closeStrip = close.strip;1855}18561857inverseStrip = inverseAndProgram.strip;1858inverse = inverseAndProgram.program;1859}18601861if (inverted) {1862inverted = inverse;1863inverse = program;1864program = inverted;1865}18661867return new this.BlockStatement(1868openBlock.path, openBlock.params, openBlock.hash,1869program, inverse,1870openBlock.strip, inverseStrip, close && close.strip,1871this.locInfo(locInfo));1872}18731874__exports__.prepareBlock = prepareBlock;1875});1876define(1877'handlebars/compiler/base',["./parser","./ast","./whitespace-control","./helpers","../utils","exports"],1878function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {18791880var parser = __dependency1__["default"];1881var AST = __dependency2__["default"];1882var WhitespaceControl = __dependency3__["default"];1883var Helpers = __dependency4__;1884var extend = __dependency5__.extend;18851886__exports__.parser = parser;18871888var yy = {};1889extend(yy, Helpers, AST);18901891function parse(input, options) {1892// Just return if an already-compiled AST was passed in.1893if (input.type === 'Program') { return input; }18941895parser.yy = yy;18961897// Altering the shared object here, but this is ok as parser is a sync operation1898yy.locInfo = function(locInfo) {1899return new yy.SourceLocation(options && options.srcName, locInfo);1900};19011902var strip = new WhitespaceControl();1903return strip.accept(parser.parse(input));1904}19051906__exports__.parse = parse;1907});1908define(1909'handlebars/compiler/compiler',["../exception","../utils","./ast","exports"],1910function(__dependency1__, __dependency2__, __dependency3__, __exports__) {19111912var Exception = __dependency1__["default"];1913var isArray = __dependency2__.isArray;1914var indexOf = __dependency2__.indexOf;1915var AST = __dependency3__["default"];19161917var slice = [].slice;191819191920function Compiler() {}19211922__exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a1923// function in a context. This is necessary for mustache compatibility, which1924// requires that context functions in blocks are evaluated by blockHelperMissing,1925// and then proceed as if the resulting value was provided to blockHelperMissing.19261927Compiler.prototype = {1928compiler: Compiler,19291930equals: function(other) {1931var len = this.opcodes.length;1932if (other.opcodes.length !== len) {1933return false;1934}19351936for (var i = 0; i < len; i++) {1937var opcode = this.opcodes[i],1938otherOpcode = other.opcodes[i];1939if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {1940return false;1941}1942}19431944// We know that length is the same between the two arrays because they are directly tied1945// to the opcode behavior above.1946len = this.children.length;1947for (i = 0; i < len; i++) {1948if (!this.children[i].equals(other.children[i])) {1949return false;1950}1951}19521953return true;1954},19551956guid: 0,19571958compile: function(program, options) {1959this.sourceNode = [];1960this.opcodes = [];1961this.children = [];1962this.options = options;1963this.stringParams = options.stringParams;1964this.trackIds = options.trackIds;19651966options.blockParams = options.blockParams || [];19671968// These changes will propagate to the other compiler components1969var knownHelpers = options.knownHelpers;1970options.knownHelpers = {1971'helperMissing': true,1972'blockHelperMissing': true,1973'each': true,1974'if': true,1975'unless': true,1976'with': true,1977'log': true,1978'lookup': true1979};1980if (knownHelpers) {1981for (var name in knownHelpers) {1982options.knownHelpers[name] = knownHelpers[name];1983}1984}19851986return this.accept(program);1987},19881989compileProgram: function(program) {1990var result = new this.compiler().compile(program, this.options);1991var guid = this.guid++;19921993this.usePartial = this.usePartial || result.usePartial;19941995this.children[guid] = result;1996this.useDepths = this.useDepths || result.useDepths;19971998return guid;1999},20002001accept: function(node) {2002this.sourceNode.unshift(node);2003var ret = this[node.type](node);2004this.sourceNode.shift();2005return ret;2006},20072008Program: function(program) {2009this.options.blockParams.unshift(program.blockParams);20102011var body = program.body;2012for(var i=0, l=body.length; i<l; i++) {2013this.accept(body[i]);2014}20152016this.options.blockParams.shift();20172018this.isSimple = l === 1;2019this.blockParams = program.blockParams ? program.blockParams.length : 0;20202021return this;2022},20232024BlockStatement: function(block) {2025transformLiteralToPath(block);20262027var program = block.program,2028inverse = block.inverse;20292030program = program && this.compileProgram(program);2031inverse = inverse && this.compileProgram(inverse);20322033var type = this.classifySexpr(block);20342035if (type === 'helper') {2036this.helperSexpr(block, program, inverse);2037} else if (type === 'simple') {2038this.simpleSexpr(block);20392040// now that the simple mustache is resolved, we need to2041// evaluate it by executing `blockHelperMissing`2042this.opcode('pushProgram', program);2043this.opcode('pushProgram', inverse);2044this.opcode('emptyHash');2045this.opcode('blockValue', block.path.original);2046} else {2047this.ambiguousSexpr(block, program, inverse);20482049// now that the simple mustache is resolved, we need to2050// evaluate it by executing `blockHelperMissing`2051this.opcode('pushProgram', program);2052this.opcode('pushProgram', inverse);2053this.opcode('emptyHash');2054this.opcode('ambiguousBlockValue');2055}20562057this.opcode('append');2058},20592060PartialStatement: function(partial) {2061this.usePartial = true;20622063var params = partial.params;2064if (params.length > 1) {2065throw new Exception('Unsupported number of partial arguments: ' + params.length, partial);2066} else if (!params.length) {2067params.push({type: 'PathExpression', parts: [], depth: 0});2068}20692070var partialName = partial.name.original,2071isDynamic = partial.name.type === 'SubExpression';2072if (isDynamic) {2073this.accept(partial.name);2074}20752076this.setupFullMustacheParams(partial, undefined, undefined, true);20772078var indent = partial.indent || '';2079if (this.options.preventIndent && indent) {2080this.opcode('appendContent', indent);2081indent = '';2082}20832084this.opcode('invokePartial', isDynamic, partialName, indent);2085this.opcode('append');2086},20872088MustacheStatement: function(mustache) {2089this.SubExpression(mustache);20902091if(mustache.escaped && !this.options.noEscape) {2092this.opcode('appendEscaped');2093} else {2094this.opcode('append');2095}2096},20972098ContentStatement: function(content) {2099if (content.value) {2100this.opcode('appendContent', content.value);2101}2102},21032104CommentStatement: function() {},21052106SubExpression: function(sexpr) {2107transformLiteralToPath(sexpr);2108var type = this.classifySexpr(sexpr);21092110if (type === 'simple') {2111this.simpleSexpr(sexpr);2112} else if (type === 'helper') {2113this.helperSexpr(sexpr);2114} else {2115this.ambiguousSexpr(sexpr);2116}2117},2118ambiguousSexpr: function(sexpr, program, inverse) {2119var path = sexpr.path,2120name = path.parts[0],2121isBlock = program != null || inverse != null;21222123this.opcode('getContext', path.depth);21242125this.opcode('pushProgram', program);2126this.opcode('pushProgram', inverse);21272128this.accept(path);21292130this.opcode('invokeAmbiguous', name, isBlock);2131},21322133simpleSexpr: function(sexpr) {2134this.accept(sexpr.path);2135this.opcode('resolvePossibleLambda');2136},21372138helperSexpr: function(sexpr, program, inverse) {2139var params = this.setupFullMustacheParams(sexpr, program, inverse),2140path = sexpr.path,2141name = path.parts[0];21422143if (this.options.knownHelpers[name]) {2144this.opcode('invokeKnownHelper', params.length, name);2145} else if (this.options.knownHelpersOnly) {2146throw new Exception("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);2147} else {2148path.falsy = true;21492150this.accept(path);2151this.opcode('invokeHelper', params.length, path.original, AST.helpers.simpleId(path));2152}2153},21542155PathExpression: function(path) {2156this.addDepth(path.depth);2157this.opcode('getContext', path.depth);21582159var name = path.parts[0],2160scoped = AST.helpers.scopedId(path),2161blockParamId = !path.depth && !scoped && this.blockParamIndex(name);21622163if (blockParamId) {2164this.opcode('lookupBlockParam', blockParamId, path.parts);2165} else if (!name) {2166// Context reference, i.e. `{{foo .}}` or `{{foo ..}}`2167this.opcode('pushContext');2168} else if (path.data) {2169this.options.data = true;2170this.opcode('lookupData', path.depth, path.parts);2171} else {2172this.opcode('lookupOnContext', path.parts, path.falsy, scoped);2173}2174},21752176StringLiteral: function(string) {2177this.opcode('pushString', string.value);2178},21792180NumberLiteral: function(number) {2181this.opcode('pushLiteral', number.value);2182},21832184BooleanLiteral: function(bool) {2185this.opcode('pushLiteral', bool.value);2186},21872188Hash: function(hash) {2189var pairs = hash.pairs, i, l;21902191this.opcode('pushHash');21922193for (i=0, l=pairs.length; i<l; i++) {2194this.pushParam(pairs[i].value);2195}2196while (i--) {2197this.opcode('assignToHash', pairs[i].key);2198}2199this.opcode('popHash');2200},22012202// HELPERS2203opcode: function(name) {2204this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });2205},22062207addDepth: function(depth) {2208if (!depth) {2209return;2210}22112212this.useDepths = true;2213},22142215classifySexpr: function(sexpr) {2216var isSimple = AST.helpers.simpleId(sexpr.path);22172218var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);22192220// a mustache is an eligible helper if:2221// * its id is simple (a single part, not `this` or `..`)2222var isHelper = !isBlockParam && AST.helpers.helperExpression(sexpr);22232224// if a mustache is an eligible helper but not a definite2225// helper, it is ambiguous, and will be resolved in a later2226// pass or at runtime.2227var isEligible = !isBlockParam && (isHelper || isSimple);22282229var options = this.options;22302231// if ambiguous, we can possibly resolve the ambiguity now2232// An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.2233if (isEligible && !isHelper) {2234var name = sexpr.path.parts[0];22352236if (options.knownHelpers[name]) {2237isHelper = true;2238} else if (options.knownHelpersOnly) {2239isEligible = false;2240}2241}22422243if (isHelper) { return 'helper'; }2244else if (isEligible) { return 'ambiguous'; }2245else { return 'simple'; }2246},22472248pushParams: function(params) {2249for(var i=0, l=params.length; i<l; i++) {2250this.pushParam(params[i]);2251}2252},22532254pushParam: function(val) {2255var value = val.value != null ? val.value : val.original || '';22562257if (this.stringParams) {2258if (value.replace) {2259value = value2260.replace(/^(\.?\.\/)*/g, '')2261.replace(/\//g, '.');2262}22632264if(val.depth) {2265this.addDepth(val.depth);2266}2267this.opcode('getContext', val.depth || 0);2268this.opcode('pushStringParam', value, val.type);22692270if (val.type === 'SubExpression') {2271// SubExpressions get evaluated and passed in2272// in string params mode.2273this.accept(val);2274}2275} else {2276if (this.trackIds) {2277var blockParamIndex;2278if (val.parts && !AST.helpers.scopedId(val) && !val.depth) {2279blockParamIndex = this.blockParamIndex(val.parts[0]);2280}2281if (blockParamIndex) {2282var blockParamChild = val.parts.slice(1).join('.');2283this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);2284} else {2285value = val.original || value;2286if (value.replace) {2287value = value2288.replace(/^\.\//g, '')2289.replace(/^\.$/g, '');2290}22912292this.opcode('pushId', val.type, value);2293}2294}2295this.accept(val);2296}2297},22982299setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {2300var params = sexpr.params;2301this.pushParams(params);23022303this.opcode('pushProgram', program);2304this.opcode('pushProgram', inverse);23052306if (sexpr.hash) {2307this.accept(sexpr.hash);2308} else {2309this.opcode('emptyHash', omitEmpty);2310}23112312return params;2313},23142315blockParamIndex: function(name) {2316for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {2317var blockParams = this.options.blockParams[depth],2318param = blockParams && indexOf(blockParams, name);2319if (blockParams && param >= 0) {2320return [depth, param];2321}2322}2323}2324};23252326function precompile(input, options, env) {2327if (input == null || (typeof input !== 'string' && input.type !== 'Program')) {2328throw new Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);2329}23302331options = options || {};2332if (!('data' in options)) {2333options.data = true;2334}2335if (options.compat) {2336options.useDepths = true;2337}23382339var ast = env.parse(input, options);2340var environment = new env.Compiler().compile(ast, options);2341return new env.JavaScriptCompiler().compile(environment, options);2342}23432344__exports__.precompile = precompile;function compile(input, options, env) {2345if (input == null || (typeof input !== 'string' && input.type !== 'Program')) {2346throw new Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);2347}23482349options = options || {};23502351if (!('data' in options)) {2352options.data = true;2353}2354if (options.compat) {2355options.useDepths = true;2356}23572358var compiled;23592360function compileInput() {2361var ast = env.parse(input, options);2362var environment = new env.Compiler().compile(ast, options);2363var templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);2364return env.template(templateSpec);2365}23662367// Template is only compiled on first use and cached after that point.2368var ret = function(context, options) {2369if (!compiled) {2370compiled = compileInput();2371}2372return compiled.call(this, context, options);2373};2374ret._setup = function(options) {2375if (!compiled) {2376compiled = compileInput();2377}2378return compiled._setup(options);2379};2380ret._child = function(i, data, blockParams, depths) {2381if (!compiled) {2382compiled = compileInput();2383}2384return compiled._child(i, data, blockParams, depths);2385};2386return ret;2387}23882389__exports__.compile = compile;function argEquals(a, b) {2390if (a === b) {2391return true;2392}23932394if (isArray(a) && isArray(b) && a.length === b.length) {2395for (var i = 0; i < a.length; i++) {2396if (!argEquals(a[i], b[i])) {2397return false;2398}2399}2400return true;2401}2402}24032404function transformLiteralToPath(sexpr) {2405if (!sexpr.path.parts) {2406var literal = sexpr.path;2407// Casting to string here to make false and 0 literal values play nicely with the rest2408// of the system.2409sexpr.path = new AST.PathExpression(false, 0, [literal.original+''], literal.original+'', literal.log);2410}2411}2412});2413define(2414'handlebars/compiler/code-gen',["../utils","exports"],2415function(__dependency1__, __exports__) {24162417var isArray = __dependency1__.isArray;24182419try {2420var SourceMap = require('source-map'),2421SourceNode = SourceMap.SourceNode;2422} catch (err) {2423/* istanbul ignore next: tested but not covered in istanbul due to dist build */2424SourceNode = function(line, column, srcFile, chunks) {2425this.src = '';2426if (chunks) {2427this.add(chunks);2428}2429};2430/* istanbul ignore next */2431SourceNode.prototype = {2432add: function(chunks) {2433if (isArray(chunks)) {2434chunks = chunks.join('');2435}2436this.src += chunks;2437},2438prepend: function(chunks) {2439if (isArray(chunks)) {2440chunks = chunks.join('');2441}2442this.src = chunks + this.src;2443},2444toStringWithSourceMap: function() {2445return {code: this.toString()};2446},2447toString: function() {2448return this.src;2449}2450};2451}245224532454function castChunk(chunk, codeGen, loc) {2455if (isArray(chunk)) {2456var ret = [];24572458for (var i = 0, len = chunk.length; i < len; i++) {2459ret.push(codeGen.wrap(chunk[i], loc));2460}2461return ret;2462} else if (typeof chunk === 'boolean' || typeof chunk === 'number') {2463// Handle primitives that the SourceNode will throw up on2464return chunk+'';2465}2466return chunk;2467}246824692470function CodeGen(srcFile) {2471this.srcFile = srcFile;2472this.source = [];2473}24742475CodeGen.prototype = {2476prepend: function(source, loc) {2477this.source.unshift(this.wrap(source, loc));2478},2479push: function(source, loc) {2480this.source.push(this.wrap(source, loc));2481},24822483merge: function() {2484var source = this.empty();2485this.each(function(line) {2486source.add([' ', line, '\n']);2487});2488return source;2489},24902491each: function(iter) {2492for (var i = 0, len = this.source.length; i < len; i++) {2493iter(this.source[i]);2494}2495},24962497empty: function(loc) {2498loc = loc || this.currentLocation || {start:{}};2499return new SourceNode(loc.start.line, loc.start.column, this.srcFile);2500},2501wrap: function(chunk, loc) {2502if (chunk instanceof SourceNode) {2503return chunk;2504}25052506loc = loc || this.currentLocation || {start:{}};2507chunk = castChunk(chunk, this, loc);25082509return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);2510},25112512functionCall: function(fn, type, params) {2513params = this.generateList(params);2514return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);2515},25162517quotedString: function(str) {2518return '"' + (str + '')2519.replace(/\\/g, '\\\\')2520.replace(/"/g, '\\"')2521.replace(/\n/g, '\\n')2522.replace(/\r/g, '\\r')2523.replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.42524.replace(/\u2029/g, '\\u2029') + '"';2525},25262527objectLiteral: function(obj) {2528var pairs = [];25292530for (var key in obj) {2531if (obj.hasOwnProperty(key)) {2532var value = castChunk(obj[key], this);2533if (value !== 'undefined') {2534pairs.push([this.quotedString(key), ':', value]);2535}2536}2537}25382539var ret = this.generateList(pairs);2540ret.prepend('{');2541ret.add('}');2542return ret;2543},254425452546generateList: function(entries, loc) {2547var ret = this.empty(loc);25482549for (var i = 0, len = entries.length; i < len; i++) {2550if (i) {2551ret.add(',');2552}25532554ret.add(castChunk(entries[i], this, loc));2555}25562557return ret;2558},25592560generateArray: function(entries, loc) {2561var ret = this.generateList(entries, loc);2562ret.prepend('[');2563ret.add(']');25642565return ret;2566}2567};25682569__exports__["default"] = CodeGen;2570});2571define(2572'handlebars/compiler/javascript-compiler',["../base","../exception","../utils","./code-gen","exports"],2573function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {25742575var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;2576var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;2577var Exception = __dependency2__["default"];2578var isArray = __dependency3__.isArray;2579var CodeGen = __dependency4__["default"];25802581function Literal(value) {2582this.value = value;2583}25842585function JavaScriptCompiler() {}25862587JavaScriptCompiler.prototype = {2588// PUBLIC API: You can override these methods in a subclass to provide2589// alternative compiled forms for name lookup and buffering semantics2590nameLookup: function(parent, name /* , type*/) {2591if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {2592return [parent, ".", name];2593} else {2594return [parent, "['", name, "']"];2595}2596},2597depthedLookup: function(name) {2598return [this.aliasable('this.lookup'), '(depths, "', name, '")'];2599},26002601compilerInfo: function() {2602var revision = COMPILER_REVISION,2603versions = REVISION_CHANGES[revision];2604return [revision, versions];2605},26062607appendToBuffer: function(source, location, explicit) {2608// Force a source as this simplifies the merge logic.2609if (!isArray(source)) {2610source = [source];2611}2612source = this.source.wrap(source, location);26132614if (this.environment.isSimple) {2615return ['return ', source, ';'];2616} else if (explicit) {2617// This is a case where the buffer operation occurs as a child of another2618// construct, generally braces. We have to explicitly output these buffer2619// operations to ensure that the emitted code goes in the correct location.2620return ['buffer += ', source, ';'];2621} else {2622source.appendToBuffer = true;2623return source;2624}2625},26262627initializeBuffer: function() {2628return this.quotedString("");2629},2630// END PUBLIC API26312632compile: function(environment, options, context, asObject) {2633this.environment = environment;2634this.options = options;2635this.stringParams = this.options.stringParams;2636this.trackIds = this.options.trackIds;2637this.precompile = !asObject;26382639this.name = this.environment.name;2640this.isChild = !!context;2641this.context = context || {2642programs: [],2643environments: []2644};26452646this.preamble();26472648this.stackSlot = 0;2649this.stackVars = [];2650this.aliases = {};2651this.registers = { list: [] };2652this.hashes = [];2653this.compileStack = [];2654this.inlineStack = [];2655this.blockParams = [];26562657this.compileChildren(environment, options);26582659this.useDepths = this.useDepths || environment.useDepths || this.options.compat;2660this.useBlockParams = this.useBlockParams || environment.useBlockParams;26612662var opcodes = environment.opcodes,2663opcode,2664firstLoc,2665i,2666l;26672668for (i = 0, l = opcodes.length; i < l; i++) {2669opcode = opcodes[i];26702671this.source.currentLocation = opcode.loc;2672firstLoc = firstLoc || opcode.loc;2673this[opcode.opcode].apply(this, opcode.args);2674}26752676// Flush any trailing content that might be pending.2677this.source.currentLocation = firstLoc;2678this.pushSource('');26792680/* istanbul ignore next */2681if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {2682throw new Exception('Compile completed with content left on stack');2683}26842685var fn = this.createFunctionContext(asObject);2686if (!this.isChild) {2687var ret = {2688compiler: this.compilerInfo(),2689main: fn2690};2691var programs = this.context.programs;2692for (i = 0, l = programs.length; i < l; i++) {2693if (programs[i]) {2694ret[i] = programs[i];2695}2696}26972698if (this.environment.usePartial) {2699ret.usePartial = true;2700}2701if (this.options.data) {2702ret.useData = true;2703}2704if (this.useDepths) {2705ret.useDepths = true;2706}2707if (this.useBlockParams) {2708ret.useBlockParams = true;2709}2710if (this.options.compat) {2711ret.compat = true;2712}27132714if (!asObject) {2715ret.compiler = JSON.stringify(ret.compiler);27162717this.source.currentLocation = {start: {line: 1, column: 0}};2718ret = this.objectLiteral(ret);27192720if (options.srcName) {2721ret = ret.toStringWithSourceMap({file: options.destName});2722ret.map = ret.map && ret.map.toString();2723} else {2724ret = ret.toString();2725}2726} else {2727ret.compilerOptions = this.options;2728}27292730return ret;2731} else {2732return fn;2733}2734},27352736preamble: function() {2737// track the last context pushed into place to allow skipping the2738// getContext opcode when it would be a noop2739this.lastContext = 0;2740this.source = new CodeGen(this.options.srcName);2741},27422743createFunctionContext: function(asObject) {2744var varDeclarations = '';27452746var locals = this.stackVars.concat(this.registers.list);2747if(locals.length > 0) {2748varDeclarations += ", " + locals.join(", ");2749}27502751// Generate minimizer alias mappings2752//2753// When using true SourceNodes, this will update all references to the given alias2754// as the source nodes are reused in situ. For the non-source node compilation mode,2755// aliases will not be used, but this case is already being run on the client and2756// we aren't concern about minimizing the template size.2757var aliasCount = 0;2758for (var alias in this.aliases) {2759var node = this.aliases[alias];27602761if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) {2762varDeclarations += ', alias' + (++aliasCount) + '=' + alias;2763node.children[0] = 'alias' + aliasCount;2764}2765}27662767var params = ["depth0", "helpers", "partials", "data"];27682769if (this.useBlockParams || this.useDepths) {2770params.push('blockParams');2771}2772if (this.useDepths) {2773params.push('depths');2774}27752776// Perform a second pass over the output to merge content when possible2777var source = this.mergeSource(varDeclarations);27782779if (asObject) {2780params.push(source);27812782return Function.apply(this, params);2783} else {2784return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']);2785}2786},2787mergeSource: function(varDeclarations) {2788var isSimple = this.environment.isSimple,2789appendOnly = !this.forceBuffer,2790appendFirst,27912792sourceSeen,2793bufferStart,2794bufferEnd;2795this.source.each(function(line) {2796if (line.appendToBuffer) {2797if (bufferStart) {2798line.prepend(' + ');2799} else {2800bufferStart = line;2801}2802bufferEnd = line;2803} else {2804if (bufferStart) {2805if (!sourceSeen) {2806appendFirst = true;2807} else {2808bufferStart.prepend('buffer += ');2809}2810bufferEnd.add(';');2811bufferStart = bufferEnd = undefined;2812}28132814sourceSeen = true;2815if (!isSimple) {2816appendOnly = false;2817}2818}2819});282028212822if (appendOnly) {2823if (bufferStart) {2824bufferStart.prepend('return ');2825bufferEnd.add(';');2826} else if (!sourceSeen) {2827this.source.push('return "";');2828}2829} else {2830varDeclarations += ", buffer = " + (appendFirst ? '' : this.initializeBuffer());28312832if (bufferStart) {2833bufferStart.prepend('return buffer + ');2834bufferEnd.add(';');2835} else {2836this.source.push('return buffer;');2837}2838}28392840if (varDeclarations) {2841this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n'));2842}28432844return this.source.merge();2845},28462847// [blockValue]2848//2849// On stack, before: hash, inverse, program, value2850// On stack, after: return value of blockHelperMissing2851//2852// The purpose of this opcode is to take a block of the form2853// `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and2854// replace it on the stack with the result of properly2855// invoking blockHelperMissing.2856blockValue: function(name) {2857var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),2858params = [this.contextName(0)];2859this.setupHelperArgs(name, 0, params);28602861var blockName = this.popStack();2862params.splice(1, 0, blockName);28632864this.push(this.source.functionCall(blockHelperMissing, 'call', params));2865},28662867// [ambiguousBlockValue]2868//2869// On stack, before: hash, inverse, program, value2870// Compiler value, before: lastHelper=value of last found helper, if any2871// On stack, after, if no lastHelper: same as [blockValue]2872// On stack, after, if lastHelper: value2873ambiguousBlockValue: function() {2874// We're being a bit cheeky and reusing the options value from the prior exec2875var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),2876params = [this.contextName(0)];2877this.setupHelperArgs('', 0, params, true);28782879this.flushInline();28802881var current = this.topStack();2882params.splice(1, 0, current);28832884this.pushSource([2885'if (!', this.lastHelper, ') { ',2886current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params),2887'}']);2888},28892890// [appendContent]2891//2892// On stack, before: ...2893// On stack, after: ...2894//2895// Appends the string value of `content` to the current buffer2896appendContent: function(content) {2897if (this.pendingContent) {2898content = this.pendingContent + content;2899} else {2900this.pendingLocation = this.source.currentLocation;2901}29022903this.pendingContent = content;2904},29052906// [append]2907//2908// On stack, before: value, ...2909// On stack, after: ...2910//2911// Coerces `value` to a String and appends it to the current buffer.2912//2913// If `value` is truthy, or 0, it is coerced into a string and appended2914// Otherwise, the empty string is appended2915append: function() {2916if (this.isInline()) {2917this.replaceStack(function(current) {2918return [' != null ? ', current, ' : ""'];2919});29202921this.pushSource(this.appendToBuffer(this.popStack()));2922} else {2923var local = this.popStack();2924this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);2925if (this.environment.isSimple) {2926this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']);2927}2928}2929},29302931// [appendEscaped]2932//2933// On stack, before: value, ...2934// On stack, after: ...2935//2936// Escape `value` and append it to the buffer2937appendEscaped: function() {2938this.pushSource(this.appendToBuffer(2939[this.aliasable('this.escapeExpression'), '(', this.popStack(), ')']));2940},29412942// [getContext]2943//2944// On stack, before: ...2945// On stack, after: ...2946// Compiler value, after: lastContext=depth2947//2948// Set the value of the `lastContext` compiler value to the depth2949getContext: function(depth) {2950this.lastContext = depth;2951},29522953// [pushContext]2954//2955// On stack, before: ...2956// On stack, after: currentContext, ...2957//2958// Pushes the value of the current context onto the stack.2959pushContext: function() {2960this.pushStackLiteral(this.contextName(this.lastContext));2961},29622963// [lookupOnContext]2964//2965// On stack, before: ...2966// On stack, after: currentContext[name], ...2967//2968// Looks up the value of `name` on the current context and pushes2969// it onto the stack.2970lookupOnContext: function(parts, falsy, scoped) {2971var i = 0;29722973if (!scoped && this.options.compat && !this.lastContext) {2974// The depthed query is expected to handle the undefined logic for the root level that2975// is implemented below, so we evaluate that directly in compat mode2976this.push(this.depthedLookup(parts[i++]));2977} else {2978this.pushContext();2979}29802981this.resolvePath('context', parts, i, falsy);2982},29832984// [lookupBlockParam]2985//2986// On stack, before: ...2987// On stack, after: blockParam[name], ...2988//2989// Looks up the value of `parts` on the given block param and pushes2990// it onto the stack.2991lookupBlockParam: function(blockParamId, parts) {2992this.useBlockParams = true;29932994this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);2995this.resolvePath('context', parts, 1);2996},29972998// [lookupData]2999//3000// On stack, before: ...3001// On stack, after: data, ...3002//3003// Push the data lookup operator3004lookupData: function(depth, parts) {3005/*jshint -W083 */3006if (!depth) {3007this.pushStackLiteral('data');3008} else {3009this.pushStackLiteral('this.data(data, ' + depth + ')');3010}30113012this.resolvePath('data', parts, 0, true);3013},30143015resolvePath: function(type, parts, i, falsy) {3016/*jshint -W083 */3017if (this.options.strict || this.options.assumeObjects) {3018this.push(strictLookup(this.options.strict, this, parts, type));3019return;3020}30213022var len = parts.length;3023for (; i < len; i++) {3024this.replaceStack(function(current) {3025var lookup = this.nameLookup(current, parts[i], type);3026// We want to ensure that zero and false are handled properly if the context (falsy flag)3027// needs to have the special handling for these values.3028if (!falsy) {3029return [' != null ? ', lookup, ' : ', current];3030} else {3031// Otherwise we can use generic falsy handling3032return [' && ', lookup];3033}3034});3035}3036},30373038// [resolvePossibleLambda]3039//3040// On stack, before: value, ...3041// On stack, after: resolved value, ...3042//3043// If the `value` is a lambda, replace it on the stack by3044// the return value of the lambda3045resolvePossibleLambda: function() {3046this.push([this.aliasable('this.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);3047},30483049// [pushStringParam]3050//3051// On stack, before: ...3052// On stack, after: string, currentContext, ...3053//3054// This opcode is designed for use in string mode, which3055// provides the string value of a parameter along with its3056// depth rather than resolving it immediately.3057pushStringParam: function(string, type) {3058this.pushContext();3059this.pushString(type);30603061// If it's a subexpression, the string result3062// will be pushed after this opcode.3063if (type !== 'SubExpression') {3064if (typeof string === 'string') {3065this.pushString(string);3066} else {3067this.pushStackLiteral(string);3068}3069}3070},30713072emptyHash: function(omitEmpty) {3073if (this.trackIds) {3074this.push('{}'); // hashIds3075}3076if (this.stringParams) {3077this.push('{}'); // hashContexts3078this.push('{}'); // hashTypes3079}3080this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');3081},3082pushHash: function() {3083if (this.hash) {3084this.hashes.push(this.hash);3085}3086this.hash = {values: [], types: [], contexts: [], ids: []};3087},3088popHash: function() {3089var hash = this.hash;3090this.hash = this.hashes.pop();30913092if (this.trackIds) {3093this.push(this.objectLiteral(hash.ids));3094}3095if (this.stringParams) {3096this.push(this.objectLiteral(hash.contexts));3097this.push(this.objectLiteral(hash.types));3098}30993100this.push(this.objectLiteral(hash.values));3101},31023103// [pushString]3104//3105// On stack, before: ...3106// On stack, after: quotedString(string), ...3107//3108// Push a quoted version of `string` onto the stack3109pushString: function(string) {3110this.pushStackLiteral(this.quotedString(string));3111},31123113// [pushLiteral]3114//3115// On stack, before: ...3116// On stack, after: value, ...3117//3118// Pushes a value onto the stack. This operation prevents3119// the compiler from creating a temporary variable to hold3120// it.3121pushLiteral: function(value) {3122this.pushStackLiteral(value);3123},31243125// [pushProgram]3126//3127// On stack, before: ...3128// On stack, after: program(guid), ...3129//3130// Push a program expression onto the stack. This takes3131// a compile-time guid and converts it into a runtime-accessible3132// expression.3133pushProgram: function(guid) {3134if (guid != null) {3135this.pushStackLiteral(this.programExpression(guid));3136} else {3137this.pushStackLiteral(null);3138}3139},31403141// [invokeHelper]3142//3143// On stack, before: hash, inverse, program, params..., ...3144// On stack, after: result of helper invocation3145//3146// Pops off the helper's parameters, invokes the helper,3147// and pushes the helper's return value onto the stack.3148//3149// If the helper is not found, `helperMissing` is called.3150invokeHelper: function(paramSize, name, isSimple) {3151var nonHelper = this.popStack();3152var helper = this.setupHelper(paramSize, name);3153var simple = isSimple ? [helper.name, ' || '] : '';31543155var lookup = ['('].concat(simple, nonHelper);3156if (!this.options.strict) {3157lookup.push(' || ', this.aliasable('helpers.helperMissing'));3158}3159lookup.push(')');31603161this.push(this.source.functionCall(lookup, 'call', helper.callParams));3162},31633164// [invokeKnownHelper]3165//3166// On stack, before: hash, inverse, program, params..., ...3167// On stack, after: result of helper invocation3168//3169// This operation is used when the helper is known to exist,3170// so a `helperMissing` fallback is not required.3171invokeKnownHelper: function(paramSize, name) {3172var helper = this.setupHelper(paramSize, name);3173this.push(this.source.functionCall(helper.name, 'call', helper.callParams));3174},31753176// [invokeAmbiguous]3177//3178// On stack, before: hash, inverse, program, params..., ...3179// On stack, after: result of disambiguation3180//3181// This operation is used when an expression like `{{foo}}`3182// is provided, but we don't know at compile-time whether it3183// is a helper or a path.3184//3185// This operation emits more code than the other options,3186// and can be avoided by passing the `knownHelpers` and3187// `knownHelpersOnly` flags at compile-time.3188invokeAmbiguous: function(name, helperCall) {3189this.useRegister('helper');31903191var nonHelper = this.popStack();31923193this.emptyHash();3194var helper = this.setupHelper(0, name, helperCall);31953196var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');31973198var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];3199if (!this.options.strict) {3200lookup[0] = '(helper = ';3201lookup.push(3202' != null ? helper : ',3203this.aliasable('helpers.helperMissing')3204);3205}32063207this.push([3208'(', lookup,3209(helper.paramsInit ? ['),(', helper.paramsInit] : []), '),',3210'(typeof helper === ', this.aliasable('"function"'), ' ? ',3211this.source.functionCall('helper','call', helper.callParams), ' : helper))'3212]);3213},32143215// [invokePartial]3216//3217// On stack, before: context, ...3218// On stack after: result of partial invocation3219//3220// This operation pops off a context, invokes a partial with that context,3221// and pushes the result of the invocation back.3222invokePartial: function(isDynamic, name, indent) {3223var params = [],3224options = this.setupParams(name, 1, params, false);32253226if (isDynamic) {3227name = this.popStack();3228delete options.name;3229}32303231if (indent) {3232options.indent = JSON.stringify(indent);3233}3234options.helpers = 'helpers';3235options.partials = 'partials';32363237if (!isDynamic) {3238params.unshift(this.nameLookup('partials', name, 'partial'));3239} else {3240params.unshift(name);3241}32423243if (this.options.compat) {3244options.depths = 'depths';3245}3246options = this.objectLiteral(options);3247params.push(options);32483249this.push(this.source.functionCall('this.invokePartial', '', params));3250},32513252// [assignToHash]3253//3254// On stack, before: value, ..., hash, ...3255// On stack, after: ..., hash, ...3256//3257// Pops a value off the stack and assigns it to the current hash3258assignToHash: function(key) {3259var value = this.popStack(),3260context,3261type,3262id;32633264if (this.trackIds) {3265id = this.popStack();3266}3267if (this.stringParams) {3268type = this.popStack();3269context = this.popStack();3270}32713272var hash = this.hash;3273if (context) {3274hash.contexts[key] = context;3275}3276if (type) {3277hash.types[key] = type;3278}3279if (id) {3280hash.ids[key] = id;3281}3282hash.values[key] = value;3283},32843285pushId: function(type, name, child) {3286if (type === 'BlockParam') {3287this.pushStackLiteral(3288'blockParams[' + name[0] + '].path[' + name[1] + ']'3289+ (child ? ' + ' + JSON.stringify('.' + child) : ''));3290} else if (type === 'PathExpression') {3291this.pushString(name);3292} else if (type === 'SubExpression') {3293this.pushStackLiteral('true');3294} else {3295this.pushStackLiteral('null');3296}3297},32983299// HELPERS33003301compiler: JavaScriptCompiler,33023303compileChildren: function(environment, options) {3304var children = environment.children, child, compiler;33053306for(var i=0, l=children.length; i<l; i++) {3307child = children[i];3308compiler = new this.compiler();33093310var index = this.matchExistingProgram(child);33113312if (index == null) {3313this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children3314index = this.context.programs.length;3315child.index = index;3316child.name = 'program' + index;3317this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);3318this.context.environments[index] = child;33193320this.useDepths = this.useDepths || compiler.useDepths;3321this.useBlockParams = this.useBlockParams || compiler.useBlockParams;3322} else {3323child.index = index;3324child.name = 'program' + index;33253326this.useDepths = this.useDepths || child.useDepths;3327this.useBlockParams = this.useBlockParams || child.useBlockParams;3328}3329}3330},3331matchExistingProgram: function(child) {3332for (var i = 0, len = this.context.environments.length; i < len; i++) {3333var environment = this.context.environments[i];3334if (environment && environment.equals(child)) {3335return i;3336}3337}3338},33393340programExpression: function(guid) {3341var child = this.environment.children[guid],3342programParams = [child.index, 'data', child.blockParams];33433344if (this.useBlockParams || this.useDepths) {3345programParams.push('blockParams');3346}3347if (this.useDepths) {3348programParams.push('depths');3349}33503351return 'this.program(' + programParams.join(', ') + ')';3352},33533354useRegister: function(name) {3355if(!this.registers[name]) {3356this.registers[name] = true;3357this.registers.list.push(name);3358}3359},33603361push: function(expr) {3362if (!(expr instanceof Literal)) {3363expr = this.source.wrap(expr);3364}33653366this.inlineStack.push(expr);3367return expr;3368},33693370pushStackLiteral: function(item) {3371this.push(new Literal(item));3372},33733374pushSource: function(source) {3375if (this.pendingContent) {3376this.source.push(3377this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));3378this.pendingContent = undefined;3379}33803381if (source) {3382this.source.push(source);3383}3384},33853386replaceStack: function(callback) {3387var prefix = ['('],3388stack,3389createdStack,3390usedLiteral;33913392/* istanbul ignore next */3393if (!this.isInline()) {3394throw new Exception('replaceStack on non-inline');3395}33963397// We want to merge the inline statement into the replacement statement via ','3398var top = this.popStack(true);33993400if (top instanceof Literal) {3401// Literals do not need to be inlined3402stack = [top.value];3403prefix = ['(', stack];3404usedLiteral = true;3405} else {3406// Get or create the current stack name for use by the inline3407createdStack = true;3408var name = this.incrStack();34093410prefix = ['((', this.push(name), ' = ', top, ')'];3411stack = this.topStack();3412}34133414var item = callback.call(this, stack);34153416if (!usedLiteral) {3417this.popStack();3418}3419if (createdStack) {3420this.stackSlot--;3421}3422this.push(prefix.concat(item, ')'));3423},34243425incrStack: function() {3426this.stackSlot++;3427if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }3428return this.topStackName();3429},3430topStackName: function() {3431return "stack" + this.stackSlot;3432},3433flushInline: function() {3434var inlineStack = this.inlineStack;3435this.inlineStack = [];3436for (var i = 0, len = inlineStack.length; i < len; i++) {3437var entry = inlineStack[i];3438/* istanbul ignore if */3439if (entry instanceof Literal) {3440this.compileStack.push(entry);3441} else {3442var stack = this.incrStack();3443this.pushSource([stack, ' = ', entry, ';']);3444this.compileStack.push(stack);3445}3446}3447},3448isInline: function() {3449return this.inlineStack.length;3450},34513452popStack: function(wrapped) {3453var inline = this.isInline(),3454item = (inline ? this.inlineStack : this.compileStack).pop();34553456if (!wrapped && (item instanceof Literal)) {3457return item.value;3458} else {3459if (!inline) {3460/* istanbul ignore next */3461if (!this.stackSlot) {3462throw new Exception('Invalid stack pop');3463}3464this.stackSlot--;3465}3466return item;3467}3468},34693470topStack: function() {3471var stack = (this.isInline() ? this.inlineStack : this.compileStack),3472item = stack[stack.length - 1];34733474/* istanbul ignore if */3475if (item instanceof Literal) {3476return item.value;3477} else {3478return item;3479}3480},34813482contextName: function(context) {3483if (this.useDepths && context) {3484return 'depths[' + context + ']';3485} else {3486return 'depth' + context;3487}3488},34893490quotedString: function(str) {3491return this.source.quotedString(str);3492},34933494objectLiteral: function(obj) {3495return this.source.objectLiteral(obj);3496},34973498aliasable: function(name) {3499var ret = this.aliases[name];3500if (ret) {3501ret.referenceCount++;3502return ret;3503}35043505ret = this.aliases[name] = this.source.wrap(name);3506ret.aliasable = true;3507ret.referenceCount = 1;35083509return ret;3510},35113512setupHelper: function(paramSize, name, blockHelper) {3513var params = [],3514paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);3515var foundHelper = this.nameLookup('helpers', name, 'helper');35163517return {3518params: params,3519paramsInit: paramsInit,3520name: foundHelper,3521callParams: [this.contextName(0)].concat(params)3522};3523},35243525setupParams: function(helper, paramSize, params) {3526var options = {}, contexts = [], types = [], ids = [], param;35273528options.name = this.quotedString(helper);3529options.hash = this.popStack();35303531if (this.trackIds) {3532options.hashIds = this.popStack();3533}3534if (this.stringParams) {3535options.hashTypes = this.popStack();3536options.hashContexts = this.popStack();3537}35383539var inverse = this.popStack(),3540program = this.popStack();35413542// Avoid setting fn and inverse if neither are set. This allows3543// helpers to do a check for `if (options.fn)`3544if (program || inverse) {3545options.fn = program || 'this.noop';3546options.inverse = inverse || 'this.noop';3547}35483549// The parameters go on to the stack in order (making sure that they are evaluated in order)3550// so we need to pop them off the stack in reverse order3551var i = paramSize;3552while (i--) {3553param = this.popStack();3554params[i] = param;35553556if (this.trackIds) {3557ids[i] = this.popStack();3558}3559if (this.stringParams) {3560types[i] = this.popStack();3561contexts[i] = this.popStack();3562}3563}35643565if (this.trackIds) {3566options.ids = this.source.generateArray(ids);3567}3568if (this.stringParams) {3569options.types = this.source.generateArray(types);3570options.contexts = this.source.generateArray(contexts);3571}35723573if (this.options.data) {3574options.data = 'data';3575}3576if (this.useBlockParams) {3577options.blockParams = 'blockParams';3578}3579return options;3580},35813582setupHelperArgs: function(helper, paramSize, params, useRegister) {3583var options = this.setupParams(helper, paramSize, params, true);3584options = this.objectLiteral(options);3585if (useRegister) {3586this.useRegister('options');3587params.push('options');3588return ['options=', options];3589} else {3590params.push(options);3591return '';3592}3593}3594};359535963597var reservedWords = (3598"break else new var" +3599" case finally return void" +3600" catch for switch while" +3601" continue function this with" +3602" default if throw" +3603" delete in try" +3604" do instanceof typeof" +3605" abstract enum int short" +3606" boolean export interface static" +3607" byte extends long super" +3608" char final native synchronized" +3609" class float package throws" +3610" const goto private transient" +3611" debugger implements protected volatile" +3612" double import public let yield await" +3613" null true false"3614).split(" ");36153616var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};36173618for(var i=0, l=reservedWords.length; i<l; i++) {3619compilerWords[reservedWords[i]] = true;3620}36213622JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {3623return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);3624};36253626function strictLookup(requireTerminal, compiler, parts, type) {3627var stack = compiler.popStack();36283629var i = 0,3630len = parts.length;3631if (requireTerminal) {3632len--;3633}36343635for (; i < len; i++) {3636stack = compiler.nameLookup(stack, parts[i], type);3637}36383639if (requireTerminal) {3640return [compiler.aliasable('this.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')'];3641} else {3642return stack;3643}3644}36453646__exports__["default"] = JavaScriptCompiler;3647});3648define(3649'handlebars',["./handlebars.runtime","./handlebars/compiler/ast","./handlebars/compiler/base","./handlebars/compiler/compiler","./handlebars/compiler/javascript-compiler","exports"],3650function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {36513652/*globals Handlebars: true */3653var Handlebars = __dependency1__["default"];36543655// Compiler imports3656var AST = __dependency2__["default"];3657var Parser = __dependency3__.parser;3658var parse = __dependency3__.parse;3659var Compiler = __dependency4__.Compiler;3660var compile = __dependency4__.compile;3661var precompile = __dependency4__.precompile;3662var JavaScriptCompiler = __dependency5__["default"];36633664var _create = Handlebars.create;3665var create = function() {3666var hb = _create();36673668hb.compile = function(input, options) {3669return compile(input, options, hb);3670};3671hb.precompile = function (input, options) {3672return precompile(input, options, hb);3673};36743675hb.AST = AST;3676hb.Compiler = Compiler;3677hb.JavaScriptCompiler = JavaScriptCompiler;3678hb.Parser = Parser;3679hb.parse = parse;36803681return hb;3682};36833684Handlebars = create();3685Handlebars.create = create;36863687/*jshint -W040 */3688/* istanbul ignore next */3689var root = typeof global !== 'undefined' ? global : window,3690$Handlebars = root.Handlebars;3691/* istanbul ignore next */3692Handlebars.noConflict = function() {3693if (root.Handlebars === Handlebars) {3694root.Handlebars = $Handlebars;3695}3696};36973698Handlebars['default'] = Handlebars;36993700__exports__["default"] = Handlebars;3701});370237033704