text: (function (f){return f(f)})(function (self){var fn=function (x){return new Function('$0','$1','$2','$3','$4','return '+x.replace(/@/g,'this.'))},qw=fn('$0.split(/\\s+/)'),gensym=(function (n,m){return function (){return 'gensym_'+n.toString(36)+'_'+(++m).toString(36)}})(+new Date(),Math.random()*(1<<30)>>>0),id=fn('$0'),bind=function (f,t){return f.binding===t?f:f.original?bind(f.original,t):merge(function (){return f.apply(t,arguments)},{original:f,binding:t})},map=function (f,xs){for (var i=0,ys=[],l=xs.length;i<l;++i)ys.push(f(xs[i],i));return ys},hash=function (s){for (var i=0,xs=qw(s),o={},l=xs.length;i<l;++i)o[xs[i]]=true;return annotate_keys(o)},merge=function (o){for (var i=1,l=arguments.length,_=null;_=arguments[i],i<l;++i)if (_)for (var k in _)has(_,k)&&(o[k]=_[k]);return o},extend=function (f){merge.apply(null,[f.prototype].concat(Array.prototype.slice.call(arguments,1)));return f},se=function (x,f){return f&&f.call(x,x)||x},annotate_keys=function (o){var max=0;for (var k in o)own.call(o,k)&&(max=k.length>max?k.length:max);o._max_length=max;return o},has=function (o,p){return p&&!(p.length>o._max_length)&&own.call(o,p)},own=Object.prototype.hasOwnProperty,_caterwaul=this.caterwaul,_global=this,syntax_node_inspect=fn('$0 ? $0.inspect() : "(<>)"'),syntax_node_tostring=fn('$0 ? $0.serialize ? $0.serialize() : $0.toString() : ""'),node_methods={_replace:fn('($0.l = @l) && (@l.r = $0), ($0.r = @r) && (@r.l = $0), this'),_append_to:fn('$0 && $0._append(this), this'),_reparent:fn('@p && @p[0] === this && (@p[0] = $0), this'),_fold_l:fn('@_append(@l && @l._unlink(this))'),_fold_lr:fn('@_fold_l()._fold_r()'),_append:fn('(this[@length++] = $0) && ($0.p = this), this'),_fold_r:fn('@_append(@r && @r._unlink(this))'),_fold_rr:fn('@_fold_r()._fold_r()'),_sibling:fn('$0.p = @p, (@r = $0).l = this'),_unlink:fn('@l && (@l.r = @r), @r && (@r.l = @l), @l = @r = null, @_reparent($0)'),_wrap:fn('$0.p = @_replace($0).p, @_reparent($0), @l = @r = null, @_append_to($0)'),pop:fn('--@length, this'),push:fn('(this[@length++] = $0), this'),id:function (){return this.id||(this.id=gensym())},each:function (f){for (var i=0,l=this.length;i<l;++i)f(this[i],i);return this},map:function (f){for (var n=new this.constructor(this),i=0,l=this.length;i<l;++i)n.push(f(this[i],i)||this[i]);return n},reach:function (f){f(this);this.each(function (n){n&&n.reach(f)});return this},rmap:function (f){var r=f(this);return !r||r===this?this.map(function (n){return n&&n.rmap(f)}):r.data===undefined?new this.constructor(r):r},collect:function (p){var ns=[];this.reach(function (n){p(n)&&ns.push(n)});return ns},replace:function (rs){return this.rmap(function (n){return own.call(rs,n.data)&&rs[n.data]})},repopulated_with:function (xs){return new this.constructor(this.data,xs)},change:function (i,x){return se(new this.constructor(this.data,Array.prototype.slice.call(this)),function (n){n[i]=x})},compose_single:function (i,f){return this.change(i,f(this[i]))},traverse:function (f){f({entering:this});f({exiting:this.each(function (n){n&&n.traverse(f)})});return this},scoped_traverse:function (f){var new_scope=function (parent){return {parent:parent||null,variables:{},children:{}}},scope=new_scope();this.traverse(function (t){var n=t.entering,formals=null;n?(n.data==='function'?(scope=scope.children[n.id()]=new_scope(scope),formals=n[0].data==='('?n[0][0]:n[1][0],formals.flatten(',').each(function (v){scope.variables[v.data]=scope})):n.data==='var'&&n[0].flatten(',').each(function (v){scope.variables[v.data==='='||v.data==='in'?v[0].data:v.data]=scope})):t.exiting.data==='function'&&(scope=scope.parent)});return this.traverse(function (node){if (node.entering&&node.entering.data==='function')scope=scope.children[node.entering.id()];f(node,scope);if (node.exiting&&node.exiting.data==='function')scope=scope.parent})},flatten:function (d){d=d||this.data;return d!==this.data?this.as(d):!(has(parse_lr,d)&&this.length)?this:has(parse_associates_right,d)?se(new this.constructor(d),bind(function (n){for (var i=this;i&&i.data===d;i=i[1])n.push(i[0]);n.push(i)},this)):se(new this.constructor(d),bind(function (n){for (var i=this,ns=[];i.data===d;i=i[0])i[1]&&ns.push(i[1]);ns.push(i);for (i=ns.length-1;i>=0;--i)n.push(ns[i])},this))},as:function (d){return this.data===d?this:new this.constructor(d).push(this)},is_string:function (){return /['"]/.test(this.data.charAt(0))},as_escaped_string:function (){return this.data.substr(1,this.data.length-2)},is_number:function (){return /\d/.test(this.data)&&!/^[\/\w'"]/.test(this.data)},as_number:function (){return Number(this.data)},is_boolean:function (){return this.data==='true'||this.data==='false'},as_boolean:function (){return this.data==='true'},is_regexp:function (){return /^\/./.test(this.data)},as_escaped_regexp:function (){return this.data.substring(1,this.data.lastIndexOf('/'))},has_grouped_block:function (){return has(parse_r_until_block,this.data)},is_block:function (){return has(parse_block,this.data)},is_blockless_keyword:function (){return has(parse_r_optional,this.data)},is_null_or_undefined:fn('@data === "null" || @data === "undefined"'),is_empty:fn('!@length'),is_constant:fn('@is_number() || @is_string() || @is_boolean() || @is_regexp() || @is_null_or_undefined()'),left_is_lvalue:fn('/=$/.test(@data) || /\\+\\+$/.test(@data) || /--$/.test(@data)'),has_parameter_list:fn('@data === "function" || @data === "catch"'),has_lvalue_list:fn('@data === "var" || @data === "const"'),is_dereference:fn('@data === "." || @data === "[]"'),is_invocation:fn('@data === "()"'),is_contextualized_invocation:fn('@is_invocation() && this[0] && this[0].is_dereference()'),is_invisible:function (){return has(parse_invisible,this.data)},is_binary_operator:function (){return has(parse_lr,this.data)},is_prefix_unary_operator:function (){return has(parse_r,this.data)},is_postfix_unary_operator:function (){return has(parse_l,this.data)},is_unary_operator:function (){return this.is_prefix_unary_operator()||this.is_postfix_unary_operator()},accepts:function (e){return parse_accepts[this.data]&&this.accepts[parse.data]===(e.data||e)},bindings:function (hash){var result=hash||{};this.reach(function (n){if (n.value)result[n.data]=n.value});return result},toString:fn('@inspect()'),inspect:function (){return (this.l?'(left) <- ':'')+'('+this.data+(this.length?' '+map(syntax_node_inspect,this).join(' '):'')+')'+(this.r?' -> '+this.r.inspect():'')},serialize:function (){var op=this.data,right=this.r?'/* -> '+this.r.serialize()+' */':'',space=/\w/.test(op.charAt(op.length-1))?' ':'',s=has(parse_invisible,op)?map(syntax_node_tostring,this).join(space):has(parse_invocation,op)?map(syntax_node_tostring,[this[0],op.charAt(0),this[1],op.charAt(1)]).join(space):has(parse_ternary,op)?map(syntax_node_tostring,[this[0],op,this[1],parse_group[op],this[2]]).join(space):has(parse_group,op)?op+map(syntax_node_tostring,this).join(space)+parse_group[op]:has(parse_lr,op)?this.length?map(syntax_node_tostring,this).join(space+op+space):op:has(parse_r,op)||has(parse_r_optional,op)?op.replace(/^u/,'')+space+(this[0]?this[0].serialize():''):has(parse_r_until_block,op)?has(parse_accepts,op)&&this[1]&&this[1].data!=='{'&&this[2]&&parse_accepts[op]===this[2].data?op+space+map(syntax_node_tostring,[this[0],this[1],';',this[2]]).join(''):op+space+map(syntax_node_tostring,this).join(''):has(parse_l,op)?(this[0]?this[0].serialize():'')+space+op:op;return right?s+right:s}},ref=extend(function (value){if (value instanceof this.constructor){this.value=value.value;this.data=value.data}else {this.value=value;this.data=gensym()}},{length:0},node_methods),syntax_node=extend(function (data){if (data instanceof this.constructor){this.data=data.data;this.length=0;this.l=this.r=this.p=null}else {this.data=data;this.length=0;this.l=this.r=this.p=null;for (var i=1,l=arguments.length,_;_=arguments[i],i<l;++i)for (var j=0,lj=_.length,it;_.constructor===Array?(it=_[j],j<lj):(it=_,!j);++j)this._append(it.constructor===String?new this.constructor(it):it)}},node_methods),lex_op=hash('. new ++ -- u++ u-- u+ u- typeof u~ u! ! * / % + - << >> >>> < > <= >= instanceof in == != === !== & ^ | && || ? = += -= *= /= %= &= |= ^= <<= >>= >>>= : , '+'return throw case var const break continue void else u; ;'),lex_table=function (s){for (var i=0,xs=[false];i<8;++i)xs=xs.concat(xs);for (var i=0,l=s.length;i<l;++i)xs[s.charCodeAt(i)]=true;return xs},lex_float=lex_table('.0123456789'),lex_decimal=lex_table('0123456789'),lex_integer=lex_table('0123456789abcdefABCDEFx'),lex_exp=lex_table('eE'),lex_space=lex_table(' \n\r\t'),lex_bracket=lex_table('()[]{}'),lex_opener=lex_table('([{'),lex_punct=lex_table('+-*/%&|^!~=<>?:;.,'),lex_eol=lex_table('\n\r'),lex_regexp_suffix=lex_table('gims'),lex_quote=lex_table('\'"/'),lex_slash='/'.charCodeAt(0),lex_star='*'.charCodeAt(0),lex_back='\\'.charCodeAt(0),lex_x='x'.charCodeAt(0),lex_dot='.'.charCodeAt(0),lex_zero='0'.charCodeAt(0),lex_postfix_unary=hash('++ --'),lex_ident=lex_table('$_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),parse_reduce_order=map(hash,['function','( [ . [] ()','new','u++ u-- ++ -- typeof u~ u! u+ u-','* / %','+ -','<< >> >>>','< > <= >= instanceof in','== != === !==','&','^','|','&&','||','case','?','= += -= *= /= %= &= |= ^= <<= >>= >>>=',':',',','return throw break continue delete void','var const','if else try catch finally for switch with while do',';']),parse_associates_right=hash('= += -= *= /= %= &= ^= |= <<= >>= >>>= ~ ! new typeof u+ u- -- ++ u-- u++ ? if else function try catch finally for switch case with while do'),parse_inverse_order=(function (xs){for (var o={},i=0,l=xs.length;i<l;++i)for (var k in xs[i])has(xs[i],k)&&(o[k]=i);return annotate_keys(o)})(parse_reduce_order),parse_index_forward=(function (rs){for (var xs=[],i=0,l=rs.length,_=null;_=rs[i],xs[i]=true,i<l;++i)for (var k in _)if (has(_,k)&&(xs[i]=xs[i]&&!has(parse_associates_right,k)))break ;return xs})(parse_reduce_order),parse_lr=hash('[] . () * / % + - << >> >>> < > <= >= instanceof in == != === !== & ^ | && || = += -= *= /= %= &= |= ^= <<= >>= >>>= , : ;'),parse_r_until_block=annotate_keys({'function':2,'if':1,'do':1,'catch':1,'try':1,'for':1,'while':1,'with':1}),parse_accepts=annotate_keys({'if':'else','do':'while','catch':'finally','try':'catch'}),parse_invocation=hash('[] ()'),parse_r_optional=hash('return throw break continue else'),parse_l=hash('++ --'),parse_r=hash('u+ u- u! u~ u++ u-- new typeof finally var const void delete'),parse_block=hash('; {'),parse_k_empty=fn('[]'),parse_group=annotate_keys({'(':')','[':']','{':'}','?':':'}),parse_invisible=hash('i;'),parse_ambiguous_group=hash('[ ('),parse_ternary=hash('?'),parse_not_a_value=hash('function if for while catch'),parse_also_expression=hash('function'),parse=function (s){var s=s.toString(),mark=0,c=0,re=true,esc=false,dot=false,exp=false,close=0,t='',i=0,l=s.length,cs=function (i){return s.charCodeAt(i)},grouping_stack=[],gs_top=null,head=null,parent=null,indexes=map(parse_k_empty,parse_reduce_order),invocation_nodes=[],all_nodes=[],new_node=function (n){return all_nodes.push(n),n},push=function (n){return head?head._sibling(head=n):(head=n._append_to(parent)),new_node(n)};while ((mark=i)<l){while (lex_space[c=cs(i)]&&i<l)mark=++i;esc=exp=dot=t=false;if (lex_bracket[c]){t=!!++i;re=lex_opener[c]}else if (c===lex_slash&&cs(i+1)===lex_star&&(i+=2)){while (++i<l&&cs(i)!==lex_slash||cs(i-1)!==lex_star);t=!++i}else if (c===lex_slash&&cs(i+1)===lex_slash){while (++i<l&&!lex_eol[cs(i)]);t=false}else if (lex_quote[c]&&(close=c)&&re&&!(re=!(t=s.charAt(i)))){while (++i<l&&(c=cs(i))!==close||esc)esc=!esc&&c===lex_back;while (++i<l&&lex_regexp_suffix[cs(i)]);t=true}else if (c===lex_zero&&lex_integer[cs(i+1)]){while (++i<l&&lex_integer[cs(i)]);re=!(t=true)}else if (lex_float[c]&&(c!==lex_dot||lex_decimal[cs(i+1)])){while (++i<l&&(lex_decimal[c=cs(i)]||(dot^(dot|=c===lex_dot))||(exp^(exp|=lex_exp[c]&&++i))));while (i<l&&lex_decimal[cs(i)])++i;re=!(t=true)}else if (lex_punct[c]&&(t=re?'u':'',re=true)){while (i<l&&lex_punct[cs(i)]&&has(lex_op,t+s.charAt(i)))t+=s.charAt(i++);re=!has(lex_postfix_unary,t)}else {while (++i<l&&lex_ident[cs(i)]);re=has(lex_op,t=s.substring(mark,i))}if (i===mark)throw new Error('Internal error: The lexer failed to consume input and is throwing this error instead of entering an infinite loop. This is probably a Caterwaul bug.');if (t===false)continue ;t=t===true?s.substring(mark,i):t==='u;'?';':t;t===gs_top?(grouping_stack.pop(),gs_top=grouping_stack[grouping_stack.length-1],head=head?head.p:parent,parent=null):(has(parse_group,t)?(grouping_stack.push(gs_top=parse_group[t]),parent=push(new_node(new syntax_node(t))),head=null):push(new_node(new syntax_node(t))),has(parse_inverse_order,t)&&indexes[parse_inverse_order[t]].push(head||parent));re|=t===')'&&head.l&&has(parse_r_until_block,head.l.data)}for (var i=0,l=indexes.length,forward,_;_=indexes[i],forward=parse_index_forward[i],i<l;++i)for (var j=forward?0:_.length-1,lj=_.length,inc=forward?1:-1,node,data;node=_[j],data=node&&node.data,forward?j<lj:j>=0;j+=inc)if (has(parse_lr,data))node._fold_lr();else if (has(parse_ambiguous_group,data)&&node.l&&(node.l.data==='.'||!(has(lex_op,node.l.data)||has(parse_not_a_value,node.l.data))))invocation_nodes.push(node.l._wrap(new_node(new syntax_node(data+parse_group[data]))).p._fold_r());else if (has(parse_l,data))node._fold_l();else if (has(parse_r,data))node._fold_r();else if (has(parse_ternary,data)){node._fold_lr();var temp=node[1];node[1]=node[0];node[0]=temp}else if (has(parse_r_until_block,data)&&node.r&&node.r.data!==':'){for (var count=0,limit=parse_r_until_block[data];count<limit&&node.r&&!has(parse_block,node.r.data);++count)node._fold_r();node.r&&node.r.data!==';'&&node._fold_r();if (has(parse_accepts,data)&&parse_accepts[data]===(node.r&&node.r.r&&node.r.r.data))node._fold_r().pop()._fold_r();else if (has(parse_accepts,data)&&parse_accepts[data]===(node.r&&node.r.data))node._fold_r()}else if (has(parse_r_optional,data))node.r&&node.r.data!==';'&&node._fold_r();for (var i=all_nodes.length-1,_;_=all_nodes[i],i>=0;--i)_.r&&_._wrap(new syntax_node('i;')).p._fold_r();for (var i=0,l=invocation_nodes.length,_,child;_=invocation_nodes[i],i<l;++i)(child=_[1]=_[1][0])&&(child.p=_);while (head.p)head=head.p;return head},macro_try_match=function (pattern,t){if (pattern.data==='_')return [t];if (pattern.data!==t.data||pattern.length!==t.length)return null;for (var i=0,l=pattern.length,wildcards=[],match=null;i<l;++i)if (match=macro_try_match(pattern[i],t[i]))wildcards=wildcards.concat(match);else return null;return wildcards},macro_expand=function (t,macros,expanders,context){return t.rmap(function (n){for (var i=0,l=macros.length,macro,match,replacement;i<l&&(macro=macros[i]);++i)if ((match=macro_try_match(macro,n))&&(replacement=expanders[i].apply(context,match)))return replacement})},compile=function (tree){var vars=[],values=[],bindings=tree.bindings(),s=gensym();for (var k in bindings)if (has(bindings,k))vars.push(k),values.push(bindings[k]);return (new Function(s,map(function (v){return 'var '+v+'='+s+'.'+v},vars).join(';')+';return('+tree.serialize()+')'))(bindings)},associator_for=function (f){return function (name,behavior,value){return f[name]=(f.behaviors[f.attributes[name]=behavior]||id).call(f,value),f}},shallow_copy=function (x){return x&&(x.constructor===Array?Array.prototype.slice.call(x):merge({},x))},copy_of=function (f){var g=merge(function (){return g.init.apply(g,arguments)},{behaviors:shallow_copy(f.behaviors),attributes:{}});return se(g,function (g){(g.associate=associator_for(g))('behavior','method',function (name,definition){this.behaviors[name]=definition;return this.associate(name,'method',function (attribute,value){return this.associate(attribute,name,value)})}).behavior('method',g.behaviors.method);for (var k in f.attributes)has(f.attributes,k)&&g.associate(k,f.attributes[k],f[k])})};return this.caterwaul=merge(copy_of({behaviors:{method:function (v){return bind(v,this)}}}),{deglobalize:function (){_global.caterwaul=_caterwaul;return this}}).behavior('field').behavior('shallow',shallow_copy).method('configuration',function (name,f){this.configurations[name]=f;return this}).method('tconfiguration',function (configs,name,f){this.configurations[name]=this.clone(configs)(f);return this}).shallow('macro_patterns',[]).shallow('macro_expanders',[]).shallow('configurations',{}).shallow('has',{}).field('syntax',syntax_node).field('ref',ref).field('parse',parse).field('compile',compile).field('gensym',gensym).field('map',map).field('self',self).method('decompile',fn('@parse($0.toString())')).method('macro',fn('@macro_patterns.push($0), @macro_expanders.push($1), this')).method('init',function (f){return this.compile(this.macroexpand(this.decompile(f)))}).method('rmacro',function (pattern,expander){if (!expander.apply)throw new Error('caterwaul.rmacro: Cannot define macro with non-function expander');else return this.macro(pattern,function (){var t=expander.apply(this,arguments);return t&&this.macroexpand(t)})}).method('macroexpand',function (t){return macro_expand(t,this.macro_patterns,this.macro_expanders,this)}).method('reinitialize',function (transform,erase_configurations){var c=transform(this.self),result=c(c).deglobalize();erase_configurations||(result.configurations=this.configurations);return result}).shallow('util',{extend:extend,merge:merge,se:se,macro_try_match:macro_try_match,id:id,bind:bind,map:map,qw:qw}).method('clone',function (){return arguments.length?this.clone().configure.apply(null,arguments):copy_of(this)}).method('configure',function (){for (var i=0,l=arguments.length,_;_=arguments[i],i<l;++i)if (_.constructor===String)for (var cs=qw(arguments[i]),j=0,lj=cs.length;_=cs[j],j<lj;++j)if (this.configurations[_])this.has[_]||(this.has[_]=this.configurations[_].call(this)||this);else throw new Error('caterwaul.configure error: configuration "'+_+'" does not exist');else _.constructor===Array?this.configure.apply(this,_):this(_).call(this);return this}).configuration('std.qs',function (){this.macro(this.parse('qs[_]'),function (tree){return new this.ref(tree)})}).tconfiguration('std.qs','std.qg',function (){this.rmacro(qs[qg[_]],function (expression){return expression.as('(')})}).tconfiguration('std.qs std.qg','std.fn',function (){this.configure('std.qg').rmacro(qs[fn[_][_]],function (vars,expression){return qs[qg[function (vars){return expression}]].replace({vars:vars,expression:expression})}).rmacro(qs[fn_[_]],function (expression){return qs[qg[function (){return expression}]].replace({expression:expression})}).rmacro(qs[fb[_][_]],function (vars,expression){return qs[fn[_t][fn_[fn[vars][e].apply(_t,arguments)]](this)].replace({_t:this.gensym(),vars:vars,e:expression})}).rmacro(qs[fb_[_]],function (expression){return qs[fn[_t][fn_[fn_[e].apply(_t,arguments)]](this)].replace({_t:this.gensym(),e:expression})})}).tconfiguration('std.qs std.qg std.fn','std.bind',function (){var let_star_expander=fb[vars,expression][qs[qg[function (){var vars;return expression}].call(this)].replace({vars:this.macroexpand(vars),expression:expression})],let_expander=fb[vars,expression][vars=this.macroexpand(vars).flatten(','),qs[qg[function (vars){return e}].call(this,values)].replace({vars:vars.map(fn[n][n[0]]),e:expression,values:vars.map(fn[n][n[1]])})];this.configure('std.qg').rmacro(qs[let[_] in _],let_expander).rmacro(qs[let[_][_]],let_expander).rmacro(qs[_,where[_]],fn[expression,vars][let_expander(vars,expression)]).rmacro(qs[let*[_] in _],let_star_expander).rmacro(qs[let*[_][_]],let_star_expander).rmacro(qs[_,where*[_]],fn[expression,vars][let_star_expander(vars,expression)])}).tconfiguration('std.qs std.qg std.fn','std.lvalue',function (){this.rmacro(qs[_(_)=_],fn[base,params,value][qs[base=qg[function (params){return value}]].replace({base:base,params:params,value:value})])}).tconfiguration('std.qs std.fn','std.cond',function (){this.configure('std.qg').rmacro(qs[_,when[_]],fn[expression,cond][qs[qg[l]&&qg[r]].replace({l:cond,r:expression})]).rmacro(qs[_,unless[_]],fn[expression,cond][qs[!qg[l]&&qg[r]].replace({l:cond,r:expression})])}).tconfiguration('std.qs std.fn std.bind std.lvalue','std.defmacro',function (){let[wildcard(n)=n.data.constructor===String&&n.data.charAt(0)==='_'&&'_'] in this.macro(qs[defmacro[_][_]],fn[pattern,expansion][this.rmacro(pattern,this.compile(this.macroexpand(expansion))),qs[null]]).macro(qs[defsubst[_][_]],fn[pattern,expansion][this.rmacro(pattern.rmap(wildcard),let[wildcards=pattern.collect(wildcard)] in fn_[let[hash={},as=arguments][this.util.map(fn[v,i][hash[v.data]=as[i]],wildcards),expansion.replace(hash)]]),qs[null]])}).tconfiguration('std.qs std.fn std.bind','std.with_gensyms',function (){this.rmacro(qs[with_gensyms[_][_]],fn[vars,expansion][let[bindings={}][vars.flatten(',').each(fb[v][bindings[v.data]=this.gensym()]),qs[qs[_]].replace({_:expansion.replace(bindings)})]])}).tconfiguration('std.qs std.fn','std.compile_eval',function (){this.macro(qs[compile_eval[_]],fn[e][this.compile(this.macroexpand(qs[fn_[_]].replace({_:e}))).call(this)])}).tconfiguration('std.qs std.fn','std.ref',function (){this.macro(qs[caterwaul],fn_[new this.ref(this)])}).tconfiguration('std.qs std.fn','std.local',function (){this.macro(qs[local[_][_]],fn[c,e][this.clone(c.as_escaped_string()).macroexpand(e)])}).tconfiguration('std.qs std.fn std.bind','std.string',function (){this.rmacro(qs[_],fn[string][string.is_string()&&/#\{[^\}]+\}/.test(string.data)&&let*[q=string.data.charAt(0),s=string.as_escaped_string(),eq=new RegExp('\\\\'+q,'g'),strings=s.split(/#\{[^\}]+\}/),xs=[],result=new this.syntax('+')][s.replace(/#\{([^\}]+)\}/g,fn[_,s][xs.push(s),'']),this.util.map(fb[x,i][result.push(new this.syntax(q+(i<strings.length?strings[i]:'')+q)).push(new this.syntax('(',this.parse(xs[i].replace(eq,q))))],xs),new this.syntax('(',result.push(new this.syntax(q+(xs.length<strings.length?strings[strings.length-1]:'')+q)))]])}).configuration('std',function (){this.configure('std.qs std.qg std.bind std.lvalue std.cond std.fn std.defmacro std.with_gensyms std.ref std.local std.compile_eval std.string')})});