text: goog.provide('cljs.tools.reader');
  goog.require('cljs.core');
  goog.require('cljs.tools.reader.reader_types');
  goog.require('cljs.tools.reader.impl.utils');
  goog.require('cljs.tools.reader.impl.commons');
  goog.require('cljs.tools.reader.impl.errors');
  goog.require('goog.array');
  goog.require('goog.string');
  goog.require('goog.string.StringBuffer');
  
  
  
  
  
  
  cljs.tools.reader.macro_terminating_QMARK_ = (function cljs$tools$reader$macro_terminating_QMARK_(ch){
  var G__45339 = ch;
  switch (G__45339) {
  case "\"":
  case ";":
  case "@":
  case "^":
  case "`":
  case "~":
  case "(":
  case ")":
  case "[":
  case "]":
  case "{":
  case "}":
  case "\\":
  return true;
  
  break;
  default:
  return false;
  
  }
  });
  cljs.tools.reader.sb = (new goog.string.StringBuffer());
  /**
   * Read in a single logical token from the reader
   */
  cljs.tools.reader.read_token = (function cljs$tools$reader$read_token(rdr,kind,initch){
  if((initch == null)){
  return cljs.tools.reader.impl.errors.throw_eof_at_start(rdr,kind);
  } else {
  cljs.tools.reader.sb.clear();
  
  var ch = initch;
  while(true){
  if(((cljs.tools.reader.impl.utils.whitespace_QMARK_(ch)) || (cljs.tools.reader.macro_terminating_QMARK_(ch)) || ((ch == null)))){
  if((ch == null)){
  } else {
  rdr.cljs$tools$reader$reader_types$IPushbackReader$unread$arity$2(null,ch);
  }
  
  return cljs.tools.reader.sb.toString();
  } else {
  cljs.tools.reader.sb.append(ch);
  
  var G__45467 = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  ch = G__45467;
  continue;
  }
  break;
  }
  }
  });
  cljs.tools.reader.read_dispatch = (function cljs$tools$reader$read_dispatch(rdr,_,opts,pending_forms){
  var temp__5733__auto__ = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if(cljs.core.truth_(temp__5733__auto__)){
  var ch = temp__5733__auto__;
  var temp__5733__auto____$1 = (cljs.tools.reader.dispatch_macros.cljs$core$IFn$_invoke$arity$1 ? cljs.tools.reader.dispatch_macros.cljs$core$IFn$_invoke$arity$1(ch) : cljs.tools.reader.dispatch_macros.call(null,ch));
  if(cljs.core.truth_(temp__5733__auto____$1)){
  var dm = temp__5733__auto____$1;
  return (dm.cljs$core$IFn$_invoke$arity$4 ? dm.cljs$core$IFn$_invoke$arity$4(rdr,ch,opts,pending_forms) : dm.call(null,rdr,ch,opts,pending_forms));
  } else {
  var G__45344 = (function (){var G__45348 = rdr;
  G__45348.cljs$tools$reader$reader_types$IPushbackReader$unread$arity$2(null,ch);
  
  return G__45348;
  })();
  var G__45345 = ch;
  var G__45346 = opts;
  var G__45347 = pending_forms;
  return (cljs.tools.reader.read_tagged.cljs$core$IFn$_invoke$arity$4 ? cljs.tools.reader.read_tagged.cljs$core$IFn$_invoke$arity$4(G__45344,G__45345,G__45346,G__45347) : cljs.tools.reader.read_tagged.call(null,G__45344,G__45345,G__45346,G__45347));
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_eof_at_dispatch(rdr);
  }
  });
  cljs.tools.reader.read_unmatched_delimiter = (function cljs$tools$reader$read_unmatched_delimiter(rdr,ch,opts,pending_forms){
  return cljs.tools.reader.impl.errors.throw_unmatch_delimiter(rdr,ch);
  });
  cljs.tools.reader.read_regex = (function cljs$tools$reader$read_regex(rdr,ch,opts,pending_forms){
  var sb = (new goog.string.StringBuffer());
  var ch__$1 = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  while(true){
  if(("\"" === ch__$1)){
  return cljs.core.re_pattern(cljs.core.str.cljs$core$IFn$_invoke$arity$1(sb));
  } else {
  if((ch__$1 == null)){
  return cljs.tools.reader.impl.errors.throw_eof_reading.cljs$core$IFn$_invoke$arity$variadic(rdr,new cljs.core.Keyword(null,"regex","regex",939488856),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([sb], 0));
  } else {
  sb.append(ch__$1);
  
  if(("\\" === ch__$1)){
  var ch_45468__$2 = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if((ch_45468__$2 == null)){
  cljs.tools.reader.impl.errors.throw_eof_reading.cljs$core$IFn$_invoke$arity$variadic(rdr,new cljs.core.Keyword(null,"regex","regex",939488856),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([sb], 0));
  } else {
  }
  
  sb.append(ch_45468__$2);
  } else {
  }
  
  var G__45469 = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  ch__$1 = G__45469;
  continue;
  }
  }
  break;
  }
  });
  cljs.tools.reader.read_unicode_char = (function cljs$tools$reader$read_unicode_char(var_args){
  var G__45350 = arguments.length;
  switch (G__45350) {
  case 4:
  return cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));
  
  break;
  case 5:
  return cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$5((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]));
  
  break;
  default:
  throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
  
  }
  });
  
  (cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$4 = (function (token,offset,length,base){
  var l = (offset + length);
  if((cljs.core.count(token) === l)){
  } else {
  cljs.tools.reader.impl.errors.throw_invalid_unicode_literal(null,token);
  }
  
  var i = offset;
  var uc = (0);
  while(true){
  if((i === l)){
  return String.fromCharCode(uc);
  } else {
  var d = cljs.tools.reader.impl.utils.char_code(cljs.core.nth.cljs$core$IFn$_invoke$arity$2(token,i),base);
  if((d === (-1))){
  return cljs.tools.reader.impl.errors.throw_invalid_unicode_digit_in_token(null,cljs.core.nth.cljs$core$IFn$_invoke$arity$2(token,i),token);
  } else {
  var G__45471 = (i + (1));
  var G__45472 = (d + (uc * base));
  i = G__45471;
  uc = G__45472;
  continue;
  }
  }
  break;
  }
  }));
  
  (cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$5 = (function (rdr,initch,base,length,exact_QMARK_){
  var i = (1);
  var uc = cljs.tools.reader.impl.utils.char_code(initch,base);
  while(true){
  if((uc === (-1))){
  return cljs.tools.reader.impl.errors.throw_invalid_unicode_digit(rdr,initch);
  } else {
  if((!((i === length)))){
  var ch = rdr.cljs$tools$reader$reader_types$Reader$peek_char$arity$1(null);
  if(cljs.core.truth_((function (){var or__4126__auto__ = cljs.tools.reader.impl.utils.whitespace_QMARK_(ch);
  if(or__4126__auto__){
  return or__4126__auto__;
  } else {
  var or__4126__auto____$1 = (cljs.tools.reader.macros.cljs$core$IFn$_invoke$arity$1 ? cljs.tools.reader.macros.cljs$core$IFn$_invoke$arity$1(ch) : cljs.tools.reader.macros.call(null,ch));
  if(cljs.core.truth_(or__4126__auto____$1)){
  return or__4126__auto____$1;
  } else {
  return (ch == null);
  }
  }
  })())){
  if(cljs.core.truth_(exact_QMARK_)){
  return cljs.tools.reader.impl.errors.throw_invalid_unicode_len(rdr,i,length);
  } else {
  return String.fromCharCode(uc);
  }
  } else {
  var d = cljs.tools.reader.impl.utils.char_code(ch,base);
  rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  
  if((d === (-1))){
  return cljs.tools.reader.impl.errors.throw_invalid_unicode_digit(rdr,ch);
  } else {
  var G__45475 = (i + (1));
  var G__45476 = (d + (uc * base));
  i = G__45475;
  uc = G__45476;
  continue;
  }
  }
  } else {
  return String.fromCharCode(uc);
  }
  }
  break;
  }
  }));
  
  (cljs.tools.reader.read_unicode_char.cljs$lang$maxFixedArity = 5);
  
  cljs.tools.reader.upper_limit = "\uD7FF".charCodeAt((0));
  cljs.tools.reader.lower_limit = "\uE000".charCodeAt((0));
  cljs.tools.reader.valid_octal_QMARK_ = (function cljs$tools$reader$valid_octal_QMARK_(token,base){
  return (parseInt(token,base) <= (255));
  });
  /**
   * Read in a character literal
   */
  cljs.tools.reader.read_char_STAR_ = (function cljs$tools$reader$read_char_STAR_(rdr,backslash,opts,pending_forms){
  var ch = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if((!((ch == null)))){
  var token = ((((cljs.tools.reader.macro_terminating_QMARK_(ch)) || (cljs.tools.reader.impl.utils.whitespace_QMARK_(ch))))?cljs.core.str.cljs$core$IFn$_invoke$arity$1(ch):cljs.tools.reader.read_token(rdr,new cljs.core.Keyword(null,"character","character",380652989),ch));
  var token_len = token.length;
  if(((1) === token_len)){
  return token.charAt((0));
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,"newline")){
  return "\n";
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,"space")){
  return " ";
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,"tab")){
  return "\t";
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,"backspace")){
  return "\b";
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,"formfeed")){
  return "\f";
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,"return")){
  return "\r";
  } else {
  if(cljs.core.truth_(goog.string.startsWith(token,"u"))){
  var c = cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$4(token,(1),(4),(16));
  var ic = c.charCodeAt((0));
  if((((ic > cljs.tools.reader.upper_limit)) && ((ic < cljs.tools.reader.lower_limit)))){
  return cljs.tools.reader.impl.errors.throw_invalid_character_literal(rdr,ic.toString((16)));
  } else {
  return c;
  }
  } else {
  if(cljs.core.truth_(goog.string.startsWith(token,"o"))){
  var len = (token_len - (1));
  if((len > (3))){
  return cljs.tools.reader.impl.errors.throw_invalid_octal_len(rdr,token);
  } else {
  var offset = (1);
  var base = (8);
  var uc = cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$4(token,offset,len,base);
  if((!(cljs.tools.reader.valid_octal_QMARK_(cljs.core.subs.cljs$core$IFn$_invoke$arity$2(token,offset),base)))){
  return cljs.tools.reader.impl.errors.throw_bad_octal_number(rdr);
  } else {
  return uc;
  }
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_unsupported_character(rdr,token);
  
  }
  }
  }
  }
  }
  }
  }
  }
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_eof_in_character(rdr);
  }
  });
  cljs.tools.reader.starting_line_col_info = (function cljs$tools$reader$starting_line_col_info(rdr){
  if(cljs.tools.reader.reader_types.indexing_reader_QMARK_(rdr)){
  return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [rdr.cljs$tools$reader$reader_types$IndexingReader$get_line_number$arity$1(null),((rdr.cljs$tools$reader$reader_types$IndexingReader$get_column_number$arity$1(null) - (1)) | (0))], null);
  } else {
  return null;
  }
  });
  cljs.tools.reader.ending_line_col_info = (function cljs$tools$reader$ending_line_col_info(rdr){
  if(cljs.tools.reader.reader_types.indexing_reader_QMARK_(rdr)){
  return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [rdr.cljs$tools$reader$reader_types$IndexingReader$get_line_number$arity$1(null),rdr.cljs$tools$reader$reader_types$IndexingReader$get_column_number$arity$1(null)], null);
  } else {
  return null;
  }
  });
  if((typeof cljs !== 'undefined') && (typeof cljs.tools !== 'undefined') && (typeof cljs.tools.reader !== 'undefined') && (typeof cljs.tools.reader.READ_EOF !== 'undefined')){
  } else {
  cljs.tools.reader.READ_EOF = (new Object());
  }
  if((typeof cljs !== 'undefined') && (typeof cljs.tools !== 'undefined') && (typeof cljs.tools.reader !== 'undefined') && (typeof cljs.tools.reader.READ_FINISHED !== 'undefined')){
  } else {
  cljs.tools.reader.READ_FINISHED = (new Object());
  }
  cljs.tools.reader._STAR_read_delim_STAR_ = false;
  cljs.tools.reader.read_delimited_internal = (function cljs$tools$reader$read_delimited_internal(kind,delim,rdr,opts,pending_forms){
  var vec__45351 = cljs.tools.reader.starting_line_col_info(rdr);
  var start_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45351,(0),null);
  var start_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45351,(1),null);
  var delim__$1 = cljs.tools.reader.impl.utils.char$(delim);
  var a = cljs.core.transient$(cljs.core.PersistentVector.EMPTY);
  while(true){
  var form = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(rdr,false,cljs.tools.reader.READ_EOF,delim__$1,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,false,cljs.tools.reader.READ_EOF,delim__$1,opts,pending_forms));
  if((form === cljs.tools.reader.READ_FINISHED)){
  return cljs.core.persistent_BANG_(a);
  } else {
  if((form === cljs.tools.reader.READ_EOF)){
  return cljs.tools.reader.impl.errors.throw_eof_delimited.cljs$core$IFn$_invoke$arity$5(rdr,kind,start_line,start_column,cljs.core.count(a));
  } else {
  var G__45482 = cljs.core.conj_BANG_.cljs$core$IFn$_invoke$arity$2(a,form);
  a = G__45482;
  continue;
  }
  }
  break;
  }
  });
  /**
   * Reads and returns a collection ended with delim
   */
  cljs.tools.reader.read_delimited = (function cljs$tools$reader$read_delimited(kind,delim,rdr,opts,pending_forms){
  var _STAR_read_delim_STAR__orig_val__45354 = cljs.tools.reader._STAR_read_delim_STAR_;
  var _STAR_read_delim_STAR__temp_val__45355 = true;
  (cljs.tools.reader._STAR_read_delim_STAR_ = _STAR_read_delim_STAR__temp_val__45355);
  
  try{return cljs.tools.reader.read_delimited_internal(kind,delim,rdr,opts,pending_forms);
  }finally {(cljs.tools.reader._STAR_read_delim_STAR_ = _STAR_read_delim_STAR__orig_val__45354);
  }});
  /**
   * Read in a list, including its location if the reader is an indexing reader
   */
  cljs.tools.reader.read_list = (function cljs$tools$reader$read_list(rdr,_,opts,pending_forms){
  var vec__45356 = cljs.tools.reader.starting_line_col_info(rdr);
  var start_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45356,(0),null);
  var start_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45356,(1),null);
  var the_list = cljs.tools.reader.read_delimited(new cljs.core.Keyword(null,"list","list",765357683),")",rdr,opts,pending_forms);
  var vec__45359 = cljs.tools.reader.ending_line_col_info(rdr);
  var end_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45359,(0),null);
  var end_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45359,(1),null);
  return cljs.core.with_meta(((cljs.core.empty_QMARK_(the_list))?cljs.core.List.EMPTY:cljs.core.apply.cljs$core$IFn$_invoke$arity$2(cljs.core.list,the_list)),(cljs.core.truth_(start_line)?cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([(function (){var temp__5735__auto__ = cljs.tools.reader.reader_types.get_file_name(rdr);
  if(cljs.core.truth_(temp__5735__auto__)){
  var file = temp__5735__auto__;
  return new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"file","file",-1269645878),file], null);
  } else {
  return null;
  }
  })(),new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"line","line",212345235),start_line,new cljs.core.Keyword(null,"column","column",2078222095),start_column,new cljs.core.Keyword(null,"end-line","end-line",1837326455),end_line,new cljs.core.Keyword(null,"end-column","end-column",1425389514),end_column], null)], 0)):null));
  });
  /**
   * Read in a vector, including its location if the reader is an indexing reader
   */
  cljs.tools.reader.read_vector = (function cljs$tools$reader$read_vector(rdr,_,opts,pending_forms){
  var vec__45362 = cljs.tools.reader.starting_line_col_info(rdr);
  var start_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45362,(0),null);
  var start_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45362,(1),null);
  var the_vector = cljs.tools.reader.read_delimited(new cljs.core.Keyword(null,"vector","vector",1902966158),"]",rdr,opts,pending_forms);
  var vec__45365 = cljs.tools.reader.ending_line_col_info(rdr);
  var end_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45365,(0),null);
  var end_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45365,(1),null);
  return cljs.core.with_meta(the_vector,(cljs.core.truth_(start_line)?cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([(function (){var temp__5735__auto__ = cljs.tools.reader.reader_types.get_file_name(rdr);
  if(cljs.core.truth_(temp__5735__auto__)){
  var file = temp__5735__auto__;
  return new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"file","file",-1269645878),file], null);
  } else {
  return null;
  }
  })(),new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"line","line",212345235),start_line,new cljs.core.Keyword(null,"column","column",2078222095),start_column,new cljs.core.Keyword(null,"end-line","end-line",1837326455),end_line,new cljs.core.Keyword(null,"end-column","end-column",1425389514),end_column], null)], 0)):null));
  });
  /**
   * Read in a map, including its location if the reader is an indexing reader
   */
  cljs.tools.reader.read_map = (function cljs$tools$reader$read_map(rdr,_,opts,pending_forms){
  var vec__45368 = cljs.tools.reader.starting_line_col_info(rdr);
  var start_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45368,(0),null);
  var start_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45368,(1),null);
  var the_map = cljs.tools.reader.read_delimited(new cljs.core.Keyword(null,"map","map",1371690461),"}",rdr,opts,pending_forms);
  var map_count = cljs.core.count(the_map);
  var ks = cljs.core.take_nth.cljs$core$IFn$_invoke$arity$2((2),the_map);
  var key_set = cljs.core.set(ks);
  var vec__45371 = cljs.tools.reader.ending_line_col_info(rdr);
  var end_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45371,(0),null);
  var end_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45371,(1),null);
  if(cljs.core.odd_QMARK_(map_count)){
  cljs.tools.reader.impl.errors.throw_odd_map(rdr,start_line,start_column,the_map);
  } else {
  }
  
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(cljs.core.count(key_set),cljs.core.count(ks))){
  } else {
  cljs.tools.reader.impl.errors.throw_dup_keys(rdr,new cljs.core.Keyword(null,"map","map",1371690461),ks);
  }
  
  return cljs.core.with_meta((((map_count <= ((2) * cljs.core.PersistentArrayMap.HASHMAP_THRESHOLD)))?cljs.core.PersistentArrayMap.fromArray(cljs.core.to_array(the_map),true,true):cljs.core.PersistentHashMap.fromArray(cljs.core.to_array(the_map),true)),(cljs.core.truth_(start_line)?cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([(function (){var temp__5735__auto__ = cljs.tools.reader.reader_types.get_file_name(rdr);
  if(cljs.core.truth_(temp__5735__auto__)){
  var file = temp__5735__auto__;
  return new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"file","file",-1269645878),file], null);
  } else {
  return null;
  }
  })(),new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"line","line",212345235),start_line,new cljs.core.Keyword(null,"column","column",2078222095),start_column,new cljs.core.Keyword(null,"end-line","end-line",1837326455),end_line,new cljs.core.Keyword(null,"end-column","end-column",1425389514),end_column], null)], 0)):null));
  });
  cljs.tools.reader.read_number = (function cljs$tools$reader$read_number(rdr,initch){
  var sb = (function (){var G__45374 = (new goog.string.StringBuffer());
  G__45374.append(initch);
  
  return G__45374;
  })();
  var ch = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  while(true){
  if(cljs.core.truth_((function (){var or__4126__auto__ = cljs.tools.reader.impl.utils.whitespace_QMARK_(ch);
  if(or__4126__auto__){
  return or__4126__auto__;
  } else {
  var or__4126__auto____$1 = (cljs.tools.reader.macros.cljs$core$IFn$_invoke$arity$1 ? cljs.tools.reader.macros.cljs$core$IFn$_invoke$arity$1(ch) : cljs.tools.reader.macros.call(null,ch));
  if(cljs.core.truth_(or__4126__auto____$1)){
  return or__4126__auto____$1;
  } else {
  return (ch == null);
  }
  }
  })())){
  var s = cljs.core.str.cljs$core$IFn$_invoke$arity$1(sb);
  rdr.cljs$tools$reader$reader_types$IPushbackReader$unread$arity$2(null,ch);
  
  var or__4126__auto__ = cljs.tools.reader.impl.commons.match_number(s);
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  return cljs.tools.reader.impl.errors.throw_invalid_number(rdr,s);
  }
  } else {
  var G__45485 = (function (){var G__45375 = sb;
  G__45375.append(ch);
  
  return G__45375;
  })();
  var G__45486 = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  sb = G__45485;
  ch = G__45486;
  continue;
  }
  break;
  }
  });
  cljs.tools.reader.escape_char = (function cljs$tools$reader$escape_char(sb,rdr){
  var ch = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  var G__45376 = ch;
  switch (G__45376) {
  case "t":
  return "\t";
  
  break;
  case "r":
  return "\r";
  
  break;
  case "n":
  return "\n";
  
  break;
  case "\\":
  return "\\";
  
  break;
  case "\"":
  return "\"";
  
  break;
  case "b":
  return "\b";
  
  break;
  case "f":
  return "\f";
  
  break;
  case "u":
  var ch__$1 = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if(((-1) === parseInt((ch__$1 | (0)),(16)))){
  return cljs.tools.reader.impl.errors.throw_invalid_unicode_escape(rdr,ch__$1);
  } else {
  return cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$5(rdr,ch__$1,(16),(4),true);
  }
  
  break;
  default:
  if(cljs.tools.reader.impl.utils.numeric_QMARK_(ch)){
  var ch__$1 = cljs.tools.reader.read_unicode_char.cljs$core$IFn$_invoke$arity$5(rdr,ch,(8),(3),false);
  if(((ch__$1 | (0)) > (255))){
  return cljs.tools.reader.impl.errors.throw_bad_octal_number(rdr);
  } else {
  return ch__$1;
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_bad_escape_char(rdr,ch);
  }
  
  }
  });
  cljs.tools.reader.read_string_STAR_ = (function cljs$tools$reader$read_string_STAR_(reader,_,opts,pending_forms){
  var sb = (new goog.string.StringBuffer());
  var ch = reader.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  while(true){
  if((ch == null)){
  return cljs.tools.reader.impl.errors.throw_eof_reading.cljs$core$IFn$_invoke$arity$variadic(reader,new cljs.core.Keyword(null,"string","string",-1989541586),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["\"",sb], 0));
  } else {
  var G__45377 = ch;
  switch (G__45377) {
  case "\\":
  var G__45489 = (function (){var G__45378 = sb;
  G__45378.append(cljs.tools.reader.escape_char(sb,reader));
  
  return G__45378;
  })();
  var G__45490 = reader.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  sb = G__45489;
  ch = G__45490;
  continue;
  
  break;
  case "\"":
  return cljs.core.str.cljs$core$IFn$_invoke$arity$1(sb);
  
  break;
  default:
  var G__45491 = (function (){var G__45379 = sb;
  G__45379.append(ch);
  
  return G__45379;
  })();
  var G__45492 = reader.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  sb = G__45491;
  ch = G__45492;
  continue;
  
  }
  }
  break;
  }
  });
  cljs.tools.reader.loc_info = (function cljs$tools$reader$loc_info(rdr,line,column){
  if((line == null)){
  return null;
  } else {
  var file = cljs.tools.reader.reader_types.get_file_name(rdr);
  var filem = (((file == null))?null:new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"file","file",-1269645878),file], null));
  var vec__45380 = cljs.tools.reader.ending_line_col_info(rdr);
  var end_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45380,(0),null);
  var end_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45380,(1),null);
  var lcm = new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"line","line",212345235),line,new cljs.core.Keyword(null,"column","column",2078222095),column,new cljs.core.Keyword(null,"end-line","end-line",1837326455),end_line,new cljs.core.Keyword(null,"end-column","end-column",1425389514),end_column], null);
  return cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([filem,lcm], 0));
  }
  });
  cljs.tools.reader.read_symbol = (function cljs$tools$reader$read_symbol(rdr,initch){
  var vec__45383 = cljs.tools.reader.starting_line_col_info(rdr);
  var line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45383,(0),null);
  var column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45383,(1),null);
  var token = cljs.tools.reader.read_token(rdr,new cljs.core.Keyword(null,"symbol","symbol",-1038572696),initch);
  if((token == null)){
  return null;
  } else {
  var G__45386 = token;
  switch (G__45386) {
  case "nil":
  return null;
  
  break;
  case "true":
  return true;
  
  break;
  case "false":
  return false;
  
  break;
  case "/":
  return new cljs.core.Symbol(null,"/","/",-1371932971,null);
  
  break;
  default:
  var p = cljs.tools.reader.impl.commons.parse_symbol(token);
  if((!((p == null)))){
  var sym = cljs.core.symbol.cljs$core$IFn$_invoke$arity$2(p.cljs$core$IIndexed$_nth$arity$2(null,(0)),p.cljs$core$IIndexed$_nth$arity$2(null,(1)));
  return sym.cljs$core$IWithMeta$_with_meta$arity$2(null,cljs.tools.reader.loc_info(rdr,line,column));
  } else {
  return cljs.tools.reader.impl.errors.throw_invalid(rdr,new cljs.core.Keyword(null,"symbol","symbol",-1038572696),token);
  }
  
  }
  }
  });
  /**
   * Map from ns alias to ns, if non-nil, it will be used to resolve read-time
   * ns aliases.
   * 
   * Defaults to nil
   */
  cljs.tools.reader._STAR_alias_map_STAR_ = null;
  cljs.tools.reader.resolve_alias = (function cljs$tools$reader$resolve_alias(sym){
  return cljs.core.get.cljs$core$IFn$_invoke$arity$2(cljs.tools.reader._STAR_alias_map_STAR_,sym);
  });
  cljs.tools.reader.resolve_ns = (function cljs$tools$reader$resolve_ns(sym){
  var or__4126__auto__ = cljs.tools.reader.resolve_alias(sym);
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  var temp__5735__auto__ = cljs.core.find_ns(sym);
  if(cljs.core.truth_(temp__5735__auto__)){
  var ns = temp__5735__auto__;
  return cljs.core.symbol.cljs$core$IFn$_invoke$arity$1(cljs.core.ns_name(ns));
  } else {
  return null;
  }
  }
  });
  cljs.tools.reader.read_keyword = (function cljs$tools$reader$read_keyword(reader,initch,opts,pending_forms){
  var ch = reader.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if((!(cljs.tools.reader.impl.utils.whitespace_QMARK_(ch)))){
  var token = cljs.tools.reader.read_token(reader,new cljs.core.Keyword(null,"keyword","keyword",811389747),ch);
  var s = cljs.tools.reader.impl.commons.parse_symbol(token);
  if((!((s == null)))){
  var ns = s.cljs$core$IIndexed$_nth$arity$2(null,(0));
  var name = s.cljs$core$IIndexed$_nth$arity$2(null,(1));
  if((":" === token.charAt((0)))){
  if((!((ns == null)))){
  var temp__5733__auto__ = cljs.tools.reader.resolve_alias(cljs.core.symbol.cljs$core$IFn$_invoke$arity$1(cljs.core.subs.cljs$core$IFn$_invoke$arity$2(ns,(1))));
  if(cljs.core.truth_(temp__5733__auto__)){
  var ns__$1 = temp__5733__auto__;
  return cljs.core.keyword.cljs$core$IFn$_invoke$arity$2(cljs.core.str.cljs$core$IFn$_invoke$arity$1(ns__$1),name);
  } else {
  return cljs.tools.reader.impl.errors.throw_invalid(reader,new cljs.core.Keyword(null,"keyword","keyword",811389747),[":",cljs.core.str.cljs$core$IFn$_invoke$arity$1(token)].join(''));
  }
  } else {
  var temp__5733__auto__ = cljs.core._STAR_ns_STAR_;
  if(cljs.core.truth_(temp__5733__auto__)){
  var ns__$1 = temp__5733__auto__;
  return cljs.core.keyword.cljs$core$IFn$_invoke$arity$2(cljs.core.str.cljs$core$IFn$_invoke$arity$1(ns__$1),cljs.core.subs.cljs$core$IFn$_invoke$arity$2(name,(1)));
  } else {
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(reader,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["Invalid token: :",token], 0));
  }
  }
  } else {
  return cljs.core.keyword.cljs$core$IFn$_invoke$arity$2(ns,name);
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_invalid(reader,new cljs.core.Keyword(null,"keyword","keyword",811389747),[":",cljs.core.str.cljs$core$IFn$_invoke$arity$1(token)].join(''));
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_single_colon(reader);
  }
  });
  /**
   * Returns a function which wraps a reader in a call to sym
   */
  cljs.tools.reader.wrapping_reader = (function cljs$tools$reader$wrapping_reader(sym){
  return (function (rdr,_,opts,pending_forms){
  return (new cljs.core.List(null,sym,(new cljs.core.List(null,(cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms)),null,(1),null)),(2),null));
  });
  });
  /**
   * Read metadata and return the following object with the metadata applied
   */
  cljs.tools.reader.read_meta = (function cljs$tools$reader$read_meta(rdr,_,opts,pending_forms){
  if(((cljs.tools.reader.reader_types.source_logging_reader_QMARK_(rdr)) && ((!(cljs.tools.reader.impl.utils.whitespace_QMARK_(cljs.tools.reader.reader_types.peek_char(rdr))))))){
  return cljs.tools.reader.reader_types.log_source_STAR_(rdr,(function (){
  var vec__45387 = cljs.tools.reader.starting_line_col_info(rdr);
  var line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45387,(0),null);
  var column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45387,(1),null);
  var m = cljs.tools.reader.impl.utils.desugar_meta((cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms)));
  if(cljs.core.map_QMARK_(m)){
  } else {
  cljs.tools.reader.impl.errors.throw_bad_metadata(rdr,m);
  }
  
  var o = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  if((((!((o == null))))?(((((o.cljs$lang$protocol_mask$partition0$ & (131072))) || ((cljs.core.PROTOCOL_SENTINEL === o.cljs$core$IMeta$))))?true:false):false)){
  var m__$1 = (cljs.core.truth_((function (){var and__4115__auto__ = line;
  if(cljs.core.truth_(and__4115__auto__)){
  return cljs.core.seq_QMARK_(o);
  } else {
  return and__4115__auto__;
  }
  })())?cljs.core.assoc.cljs$core$IFn$_invoke$arity$variadic(m,new cljs.core.Keyword(null,"line","line",212345235),line,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"column","column",2078222095),column], 0)):m);
  if((((!((o == null))))?(((((o.cljs$lang$protocol_mask$partition0$ & (262144))) || ((cljs.core.PROTOCOL_SENTINEL === o.cljs$core$IWithMeta$))))?true:false):false)){
  return cljs.core.with_meta(o,cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([cljs.core.meta(o),m__$1], 0)));
  } else {
  return cljs.core.reset_meta_BANG_(o,m__$1);
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_bad_metadata_target(rdr,o);
  }
  }));
  } else {
  var vec__45392 = cljs.tools.reader.starting_line_col_info(rdr);
  var line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45392,(0),null);
  var column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45392,(1),null);
  var m = cljs.tools.reader.impl.utils.desugar_meta((cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms)));
  if(cljs.core.map_QMARK_(m)){
  } else {
  cljs.tools.reader.impl.errors.throw_bad_metadata(rdr,m);
  }
  
  var o = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  if((((!((o == null))))?(((((o.cljs$lang$protocol_mask$partition0$ & (131072))) || ((cljs.core.PROTOCOL_SENTINEL === o.cljs$core$IMeta$))))?true:false):false)){
  var m__$1 = (cljs.core.truth_((function (){var and__4115__auto__ = line;
  if(cljs.core.truth_(and__4115__auto__)){
  return cljs.core.seq_QMARK_(o);
  } else {
  return and__4115__auto__;
  }
  })())?cljs.core.assoc.cljs$core$IFn$_invoke$arity$variadic(m,new cljs.core.Keyword(null,"line","line",212345235),line,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"column","column",2078222095),column], 0)):m);
  if((((!((o == null))))?(((((o.cljs$lang$protocol_mask$partition0$ & (262144))) || ((cljs.core.PROTOCOL_SENTINEL === o.cljs$core$IWithMeta$))))?true:false):false)){
  return cljs.core.with_meta(o,cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([cljs.core.meta(o),m__$1], 0)));
  } else {
  return cljs.core.reset_meta_BANG_(o,m__$1);
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_bad_metadata_target(rdr,o);
  }
  }
  });
  cljs.tools.reader.read_set = (function cljs$tools$reader$read_set(rdr,_,opts,pending_forms){
  var vec__45397 = cljs.tools.reader.starting_line_col_info(rdr);
  var start_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45397,(0),null);
  var start_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45397,(1),null);
  var start_column__$1 = (cljs.core.truth_(start_column)?((start_column - (1)) | (0)):null);
  var coll = cljs.tools.reader.read_delimited(new cljs.core.Keyword(null,"set","set",304602554),"}",rdr,opts,pending_forms);
  var the_set = cljs.core.set(coll);
  var vec__45400 = cljs.tools.reader.ending_line_col_info(rdr);
  var end_line = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45400,(0),null);
  var end_column = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__45400,(1),null);
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(cljs.core.count(coll),cljs.core.count(the_set))){
  } else {
  cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([cljs.tools.reader.impl.errors.throw_dup_keys(rdr,new cljs.core.Keyword(null,"set","set",304602554),coll)], 0));
  }
  
  return cljs.core.with_meta(the_set,(cljs.core.truth_(start_line)?cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([(function (){var temp__5735__auto__ = cljs.tools.reader.reader_types.get_file_name(rdr);
  if(cljs.core.truth_(temp__5735__auto__)){
  var file = temp__5735__auto__;
  return new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"file","file",-1269645878),file], null);
  } else {
  return null;
  }
  })(),new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"line","line",212345235),start_line,new cljs.core.Keyword(null,"column","column",2078222095),start_column__$1,new cljs.core.Keyword(null,"end-line","end-line",1837326455),end_line,new cljs.core.Keyword(null,"end-column","end-column",1425389514),end_column], null)], 0)):null));
  });
  /**
   * Read and discard the first object from rdr
   */
  cljs.tools.reader.read_discard = (function cljs$tools$reader$read_discard(rdr,_,opts,pending_forms){
  var G__45403 = rdr;
  (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(G__45403,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,G__45403,true,null,opts,pending_forms));
  
  return G__45403;
  });
  cljs.tools.reader.read_symbolic_value = (function cljs$tools$reader$read_symbolic_value(rdr,_,opts,pending_forms){
  var sym = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  var G__45404 = sym;
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Symbol(null,"NaN","NaN",666918153,null),G__45404)){
  return Number.NaN;
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Symbol(null,"-Inf","-Inf",-2123243689,null),G__45404)){
  return Number.NEGATIVE_INFINITY;
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Symbol(null,"Inf","Inf",647172781,null),G__45404)){
  return Number.POSITIVE_INFINITY;
  } else {
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([["Invalid token: ##",cljs.core.str.cljs$core$IFn$_invoke$arity$1(sym)].join('')], 0));
  
  }
  }
  }
  });
  cljs.tools.reader.RESERVED_FEATURES = new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"else","else",-1508377146),null,new cljs.core.Keyword(null,"none","none",1333468478),null], null), null);
  cljs.tools.reader.has_feature_QMARK_ = (function cljs$tools$reader$has_feature_QMARK_(rdr,feature,opts){
  if((feature instanceof cljs.core.Keyword)){
  return ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"default","default",-1987822328),feature)) || (cljs.core.contains_QMARK_(cljs.core.get.cljs$core$IFn$_invoke$arity$2(opts,new cljs.core.Keyword(null,"features","features",-1146962336)),feature)));
  } else {
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["Feature should be a keyword: ",feature], 0));
  }
  });
  cljs.tools.reader.check_eof_error = (function cljs$tools$reader$check_eof_error(form,rdr,first_line){
  if((form === cljs.tools.reader.READ_EOF)){
  return cljs.tools.reader.impl.errors.throw_eof_error(rdr,(((first_line < (0)))?first_line:false));
  } else {
  return null;
  }
  });
  cljs.tools.reader.check_reserved_features = (function cljs$tools$reader$check_reserved_features(rdr,form){
  if(cljs.core.truth_(cljs.core.get.cljs$core$IFn$_invoke$arity$2(cljs.tools.reader.RESERVED_FEATURES,form))){
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["Feature name ",form," is reserved"], 0));
  } else {
  return null;
  }
  });
  cljs.tools.reader.check_invalid_read_cond = (function cljs$tools$reader$check_invalid_read_cond(form,rdr,first_line){
  if((form === cljs.tools.reader.READ_FINISHED)){
  if((first_line < (0))){
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["read-cond requires an even number of forms"], 0));
  } else {
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["read-cond starting on line ",first_line," requires an even number of forms"], 0));
  }
  } else {
  return null;
  }
  });
  /**
   * Read next form and suppress. Return nil or READ_FINISHED.
   */
  cljs.tools.reader.read_suppress = (function cljs$tools$reader$read_suppress(first_line,rdr,opts,pending_forms){
  var _STAR_suppress_read_STAR__orig_val__45405 = cljs.tools.reader._STAR_suppress_read_STAR_;
  var _STAR_suppress_read_STAR__temp_val__45406 = true;
  (cljs.tools.reader._STAR_suppress_read_STAR_ = _STAR_suppress_read_STAR__temp_val__45406);
  
  try{var form = (function (){var G__45407 = rdr;
  var G__45408 = false;
  var G__45409 = cljs.tools.reader.READ_EOF;
  var G__45410 = ")";
  var G__45411 = opts;
  var G__45412 = pending_forms;
  return (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(G__45407,G__45408,G__45409,G__45410,G__45411,G__45412) : cljs.tools.reader.read_STAR_.call(null,G__45407,G__45408,G__45409,G__45410,G__45411,G__45412));
  })();
  cljs.tools.reader.check_eof_error(form,rdr,first_line);
  
  if((form === cljs.tools.reader.READ_FINISHED)){
  return cljs.tools.reader.READ_FINISHED;
  } else {
  return null;
  }
  }finally {(cljs.tools.reader._STAR_suppress_read_STAR_ = _STAR_suppress_read_STAR__orig_val__45405);
  }});
  if((typeof cljs !== 'undefined') && (typeof cljs.tools !== 'undefined') && (typeof cljs.tools.reader !== 'undefined') && (typeof cljs.tools.reader.NO_MATCH !== 'undefined')){
  } else {
  cljs.tools.reader.NO_MATCH = (new Object());
  }
  /**
   * Read next feature. If matched, read next form and return.
   * Otherwise, read and skip next form, returning READ_FINISHED or nil.
   */
  cljs.tools.reader.match_feature = (function cljs$tools$reader$match_feature(first_line,rdr,opts,pending_forms){
  var feature = (function (){var G__45413 = rdr;
  var G__45414 = false;
  var G__45415 = cljs.tools.reader.READ_EOF;
  var G__45416 = ")";
  var G__45417 = opts;
  var G__45418 = pending_forms;
  return (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(G__45413,G__45414,G__45415,G__45416,G__45417,G__45418) : cljs.tools.reader.read_STAR_.call(null,G__45413,G__45414,G__45415,G__45416,G__45417,G__45418));
  })();
  cljs.tools.reader.check_eof_error(feature,rdr,first_line);
  
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(feature,cljs.tools.reader.READ_FINISHED)){
  return cljs.tools.reader.READ_FINISHED;
  } else {
  cljs.tools.reader.check_reserved_features(rdr,feature);
  
  if(cljs.tools.reader.has_feature_QMARK_(rdr,feature,opts)){
  var G__45419 = (function (){var G__45420 = rdr;
  var G__45421 = false;
  var G__45422 = cljs.tools.reader.READ_EOF;
  var G__45423 = ")";
  var G__45424 = opts;
  var G__45425 = pending_forms;
  return (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(G__45420,G__45421,G__45422,G__45423,G__45424,G__45425) : cljs.tools.reader.read_STAR_.call(null,G__45420,G__45421,G__45422,G__45423,G__45424,G__45425));
  })();
  cljs.tools.reader.check_eof_error(G__45419,rdr,first_line);
  
  cljs.tools.reader.check_invalid_read_cond(G__45419,rdr,first_line);
  
  return G__45419;
  } else {
  var or__4126__auto__ = cljs.tools.reader.read_suppress(first_line,rdr,opts,pending_forms);
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  return cljs.tools.reader.NO_MATCH;
  }
  }
  }
  });
  cljs.tools.reader.read_cond_delimited = (function cljs$tools$reader$read_cond_delimited(rdr,splicing,opts,pending_forms){
  var first_line = ((cljs.tools.reader.reader_types.indexing_reader_QMARK_(rdr))?cljs.tools.reader.reader_types.get_line_number(rdr):(-1));
  var result = (function (){var matched = cljs.tools.reader.NO_MATCH;
  var finished = null;
  while(true){
  if((matched === cljs.tools.reader.NO_MATCH)){
  var match = cljs.tools.reader.match_feature(first_line,rdr,opts,pending_forms);
  if((match === cljs.tools.reader.READ_FINISHED)){
  return cljs.tools.reader.READ_FINISHED;
  } else {
  var G__45513 = match;
  var G__45514 = null;
  matched = G__45513;
  finished = G__45514;
  continue;
  }
  } else {
  if((!((finished === cljs.tools.reader.READ_FINISHED)))){
  var G__45515 = matched;
  var G__45516 = cljs.tools.reader.read_suppress(first_line,rdr,opts,pending_forms);
  matched = G__45515;
  finished = G__45516;
  continue;
  } else {
  return matched;
  
  }
  }
  break;
  }
  })();
  if((result === cljs.tools.reader.READ_FINISHED)){
  return rdr;
  } else {
  if(cljs.core.truth_(splicing)){
  if((((!((result == null))))?(((((result.cljs$lang$protocol_mask$partition0$ & (16777216))) || ((cljs.core.PROTOCOL_SENTINEL === result.cljs$core$ISequential$))))?true:false):false)){
  goog.array.insertArrayAt(pending_forms,cljs.core.to_array(result),(0));
  
  return rdr;
  } else {
  return cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["Spliced form list in read-cond-splicing must implement ISequential"], 0));
  }
  } else {
  return result;
  }
  }
  });
  cljs.tools.reader.read_cond = (function cljs$tools$reader$read_cond(rdr,_,opts,pending_forms){
  if(cljs.core.not((function (){var and__4115__auto__ = opts;
  if(cljs.core.truth_(and__4115__auto__)){
  var G__45428 = new cljs.core.Keyword(null,"read-cond","read-cond",1056899244).cljs$core$IFn$_invoke$arity$1(opts);
  var fexpr__45427 = new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"preserve","preserve",1276846509),null,new cljs.core.Keyword(null,"allow","allow",-1857325745),null], null), null);
  return (fexpr__45427.cljs$core$IFn$_invoke$arity$1 ? fexpr__45427.cljs$core$IFn$_invoke$arity$1(G__45428) : fexpr__45427.call(null,G__45428));
  } else {
  return and__4115__auto__;
  }
  })())){
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("Conditional read not allowed",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"runtime-exception","runtime-exception",-1495664514)], null));
  } else {
  }
  
  var temp__5733__auto__ = rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if(cljs.core.truth_(temp__5733__auto__)){
  var ch = temp__5733__auto__;
  var splicing = cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(ch,"@");
  var ch__$1 = ((splicing)?rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null):ch);
  if(splicing){
  if(cljs.core.truth_(cljs.tools.reader._STAR_read_delim_STAR_)){
  } else {
  cljs.tools.reader.impl.errors.reader_error.cljs$core$IFn$_invoke$arity$variadic(rdr,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["cond-splice not in list"], 0));
  }
  } else {
  }
  
  var temp__5733__auto____$1 = ((cljs.tools.reader.impl.utils.whitespace_QMARK_(ch__$1))?cljs.tools.reader.impl.commons.read_past(cljs.tools.reader.impl.utils.whitespace_QMARK_,rdr):ch__$1);
  if(cljs.core.truth_(temp__5733__auto____$1)){
  var ch__$2 = temp__5733__auto____$1;
  if(cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(ch__$2,"(")){
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("read-cond body must be a list",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"runtime-exception","runtime-exception",-1495664514)], null));
  } else {
  var _STAR_suppress_read_STAR__orig_val__45429 = cljs.tools.reader._STAR_suppress_read_STAR_;
  var _STAR_suppress_read_STAR__temp_val__45430 = (function (){var or__4126__auto__ = cljs.tools.reader._STAR_suppress_read_STAR_;
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  return cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"preserve","preserve",1276846509),new cljs.core.Keyword(null,"read-cond","read-cond",1056899244).cljs$core$IFn$_invoke$arity$1(opts));
  }
  })();
  (cljs.tools.reader._STAR_suppress_read_STAR_ = _STAR_suppress_read_STAR__temp_val__45430);
  
  try{if(cljs.core.truth_(cljs.tools.reader._STAR_suppress_read_STAR_)){
  return cljs.tools.reader.impl.utils.reader_conditional(cljs.tools.reader.read_list(rdr,ch__$2,opts,pending_forms),splicing);
  } else {
  return cljs.tools.reader.read_cond_delimited(rdr,splicing,opts,pending_forms);
  }
  }finally {(cljs.tools.reader._STAR_suppress_read_STAR_ = _STAR_suppress_read_STAR__orig_val__45429);
  }}
  } else {
  return cljs.tools.reader.impl.errors.throw_eof_in_character(rdr);
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_eof_in_character(rdr);
  }
  });
  cljs.tools.reader.arg_env = null;
  /**
   * Get a symbol for an anonymous ?argument?
   */
  cljs.tools.reader.garg = (function cljs$tools$reader$garg(n){
  return cljs.core.symbol.cljs$core$IFn$_invoke$arity$1([((((-1) === n))?"rest":["p",cljs.core.str.cljs$core$IFn$_invoke$arity$1(n)].join('')),"__",cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.tools.reader.impl.utils.next_id()),"#"].join(''));
  });
  cljs.tools.reader.read_fn = (function cljs$tools$reader$read_fn(rdr,_,opts,pending_forms){
  if(cljs.core.truth_(cljs.tools.reader.arg_env)){
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("Nested #()s are not allowed",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"illegal-state","illegal-state",-1519851182)], null));
  } else {
  }
  
  var arg_env_orig_val__45431 = cljs.tools.reader.arg_env;
  var arg_env_temp_val__45432 = cljs.core.sorted_map();
  (cljs.tools.reader.arg_env = arg_env_temp_val__45432);
  
  try{var form = (function (){var G__45433 = (function (){var G__45438 = rdr;
  cljs.tools.reader.reader_types.unread(G__45438,"(");
  
  return G__45438;
  })();
  var G__45434 = true;
  var G__45435 = null;
  var G__45436 = opts;
  var G__45437 = pending_forms;
  return (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(G__45433,G__45434,G__45435,G__45436,G__45437) : cljs.tools.reader.read_STAR_.call(null,G__45433,G__45434,G__45435,G__45436,G__45437));
  })();
  var rargs = cljs.core.rseq(cljs.tools.reader.arg_env);
  var args = ((rargs)?(function (){var higharg = cljs.core.key(cljs.core.first(rargs));
  var args = (function (){var i = (1);
  var args = cljs.core.transient$(cljs.core.PersistentVector.EMPTY);
  while(true){
  if((i > higharg)){
  return cljs.core.persistent_BANG_(args);
  } else {
  var G__45519 = (i + (1));
  var G__45520 = cljs.core.conj_BANG_.cljs$core$IFn$_invoke$arity$2(args,(function (){var or__4126__auto__ = cljs.core.get.cljs$core$IFn$_invoke$arity$2(cljs.tools.reader.arg_env,i);
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  return cljs.tools.reader.garg(i);
  }
  })());
  i = G__45519;
  args = G__45520;
  continue;
  }
  break;
  }
  })();
  var args__$1 = (cljs.core.truth_(cljs.tools.reader.arg_env.call(null,(-1)))?cljs.core.conj.cljs$core$IFn$_invoke$arity$variadic(args,new cljs.core.Symbol(null,"&","&",-2144855648,null),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([cljs.tools.reader.arg_env.call(null,(-1))], 0)):args);
  return args__$1;
  })():cljs.core.PersistentVector.EMPTY);
  return (new cljs.core.List(null,new cljs.core.Symbol(null,"fn*","fn*",-752876845,null),(new cljs.core.List(null,args,(new cljs.core.List(null,form,null,(1),null)),(2),null)),(3),null));
  }finally {(cljs.tools.reader.arg_env = arg_env_orig_val__45431);
  }});
  /**
   * Registers an argument to the arg-env
   */
  cljs.tools.reader.register_arg = (function cljs$tools$reader$register_arg(n){
  if(cljs.core.truth_(cljs.tools.reader.arg_env)){
  var temp__5733__auto__ = cljs.tools.reader.arg_env.call(null,n);
  if(cljs.core.truth_(temp__5733__auto__)){
  var ret = temp__5733__auto__;
  return ret;
  } else {
  var g = cljs.tools.reader.garg(n);
  (cljs.tools.reader.arg_env = cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(cljs.tools.reader.arg_env,n,g));
  
  return g;
  }
  } else {
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("Arg literal not in #()",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"illegal-state","illegal-state",-1519851182)], null));
  }
  });
  cljs.tools.reader.read_arg = (function cljs$tools$reader$read_arg(rdr,pct,opts,pending_forms){
  if((cljs.tools.reader.arg_env == null)){
  return cljs.tools.reader.read_symbol(rdr,pct);
  } else {
  var ch = rdr.cljs$tools$reader$reader_types$Reader$peek_char$arity$1(null);
  if(((cljs.tools.reader.impl.utils.whitespace_QMARK_(ch)) || (cljs.tools.reader.macro_terminating_QMARK_(ch)) || ((ch == null)))){
  return cljs.tools.reader.register_arg((1));
  } else {
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(ch,"&")){
  rdr.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  
  return cljs.tools.reader.register_arg((-1));
  } else {
  var n = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  if((!(cljs.core.integer_QMARK_(n)))){
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("Arg literal must be %, %& or %integer",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"illegal-state","illegal-state",-1519851182)], null));
  } else {
  return cljs.tools.reader.register_arg(n);
  }
  
  }
  }
  }
  });
  cljs.tools.reader.gensym_env = null;
  cljs.tools.reader.read_unquote = (function cljs$tools$reader$read_unquote(rdr,comma,opts,pending_forms){
  var temp__5733__auto__ = rdr.cljs$tools$reader$reader_types$Reader$peek_char$arity$1(null);
  if(cljs.core.truth_(temp__5733__auto__)){
  var ch = temp__5733__auto__;
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2("@",ch)){
  return cljs.tools.reader.wrapping_reader(new cljs.core.Symbol("clojure.core","unquote-splicing","clojure.core/unquote-splicing",-552003150,null))((function (){var G__45439 = rdr;
  G__45439.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  
  return G__45439;
  })(),"@",opts,pending_forms);
  } else {
  return cljs.tools.reader.wrapping_reader(new cljs.core.Symbol("clojure.core","unquote","clojure.core/unquote",843087510,null))(rdr,"~",opts,pending_forms);
  }
  } else {
  return null;
  }
  });
  cljs.tools.reader.unquote_splicing_QMARK_ = (function cljs$tools$reader$unquote_splicing_QMARK_(form){
  return ((cljs.core.seq_QMARK_(form)) && (cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(cljs.core.first(form),new cljs.core.Symbol("clojure.core","unquote-splicing","clojure.core/unquote-splicing",-552003150,null))));
  });
  cljs.tools.reader.unquote_QMARK_ = (function cljs$tools$reader$unquote_QMARK_(form){
  return ((cljs.core.seq_QMARK_(form)) && (cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(cljs.core.first(form),new cljs.core.Symbol("clojure.core","unquote","clojure.core/unquote",843087510,null))));
  });
  /**
   * Expand a list by resolving its syntax quotes and unquotes
   */
  cljs.tools.reader.expand_list = (function cljs$tools$reader$expand_list(s){
  var s__$1 = cljs.core.seq(s);
  var r = cljs.core.transient$(cljs.core.PersistentVector.EMPTY);
  while(true){
  if(s__$1){
  var item = cljs.core.first(s__$1);
  var ret = cljs.core.conj_BANG_.cljs$core$IFn$_invoke$arity$2(r,((cljs.tools.reader.unquote_QMARK_(item))?(new cljs.core.List(null,new cljs.core.Symbol("clojure.core","list","clojure.core/list",-1119203325,null),(new cljs.core.List(null,cljs.core.second(item),null,(1),null)),(2),null)):((cljs.tools.reader.unquote_splicing_QMARK_(item))?cljs.core.second(item):(new cljs.core.List(null,new cljs.core.Symbol("clojure.core","list","clojure.core/list",-1119203325,null),(new cljs.core.List(null,(cljs.tools.reader.syntax_quote_STAR_.cljs$core$IFn$_invoke$arity$1 ? cljs.tools.reader.syntax_quote_STAR_.cljs$core$IFn$_invoke$arity$1(item) : cljs.tools.reader.syntax_quote_STAR_.call(null,item)),null,(1),null)),(2),null))
  )));
  var G__45529 = cljs.core.next(s__$1);
  var G__45530 = ret;
  s__$1 = G__45529;
  r = G__45530;
  continue;
  } else {
  return cljs.core.seq(cljs.core.persistent_BANG_(r));
  }
  break;
  }
  });
  /**
   * Flatten a map into a seq of alternate keys and values
   */
  cljs.tools.reader.flatten_map = (function cljs$tools$reader$flatten_map(form){
  var s = cljs.core.seq(form);
  var key_vals = cljs.core.transient$(cljs.core.PersistentVector.EMPTY);
  while(true){
  if(s){
  var e = cljs.core.first(s);
  var G__45532 = cljs.core.next(s);
  var G__45533 = cljs.core.conj_BANG_.cljs$core$IFn$_invoke$arity$2(cljs.core.conj_BANG_.cljs$core$IFn$_invoke$arity$2(key_vals,cljs.core.key(e)),cljs.core.val(e));
  s = G__45532;
  key_vals = G__45533;
  continue;
  } else {
  return cljs.core.seq(cljs.core.persistent_BANG_(key_vals));
  }
  break;
  }
  });
  cljs.tools.reader.register_gensym = (function cljs$tools$reader$register_gensym(sym){
  if(cljs.core.not(cljs.tools.reader.gensym_env)){
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("Gensym literal not in syntax-quote",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"illegal-state","illegal-state",-1519851182)], null));
  } else {
  }
  
  var or__4126__auto__ = cljs.core.get.cljs$core$IFn$_invoke$arity$2(cljs.tools.reader.gensym_env,sym);
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  var gs = cljs.core.symbol.cljs$core$IFn$_invoke$arity$1([cljs.core.subs.cljs$core$IFn$_invoke$arity$3(cljs.core.name(sym),(0),(((cljs.core.name(sym)).length) - (1))),"__",cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.tools.reader.impl.utils.next_id()),"__auto__"].join(''));
  (cljs.tools.reader.gensym_env = cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(cljs.tools.reader.gensym_env,sym,gs));
  
  return gs;
  }
  });
  cljs.tools.reader.add_meta = (function cljs$tools$reader$add_meta(form,ret){
  if((((((!((form == null))))?(((((form.cljs$lang$protocol_mask$partition0$ & (262144))) || ((cljs.core.PROTOCOL_SENTINEL === form.cljs$core$IWithMeta$))))?true:false):false))?cljs.core.seq(cljs.core.dissoc.cljs$core$IFn$_invoke$arity$variadic(cljs.core.meta(form),new cljs.core.Keyword(null,"line","line",212345235),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"source","source",-433931539)], 0))):false)){
  return (new cljs.core.List(null,new cljs.core.Symbol("cljs.core","with-meta","cljs.core/with-meta",749126446,null),(new cljs.core.List(null,ret,(new cljs.core.List(null,(function (){var G__45443 = cljs.core.meta(form);
  return (cljs.tools.reader.syntax_quote_STAR_.cljs$core$IFn$_invoke$arity$1 ? cljs.tools.reader.syntax_quote_STAR_.cljs$core$IFn$_invoke$arity$1(G__45443) : cljs.tools.reader.syntax_quote_STAR_.call(null,G__45443));
  })(),null,(1),null)),(2),null)),(3),null));
  } else {
  return ret;
  }
  });
  cljs.tools.reader.syntax_quote_coll = (function cljs$tools$reader$syntax_quote_coll(type,coll){
  var res = (new cljs.core.List(null,new cljs.core.Symbol("cljs.core","sequence","cljs.core/sequence",1908459032,null),(new cljs.core.List(null,cljs.core.cons(new cljs.core.Symbol("cljs.core","concat","cljs.core/concat",-1133584918,null),cljs.tools.reader.expand_list(coll)),null,(1),null)),(2),null));
  if(cljs.core.truth_(type)){
  return (new cljs.core.List(null,new cljs.core.Symbol("cljs.core","apply","cljs.core/apply",1757277831,null),(new cljs.core.List(null,type,(new cljs.core.List(null,res,null,(1),null)),(2),null)),(3),null));
  } else {
  return res;
  }
  });
  /**
   * Decide which map type to use, array-map if less than 16 elements
   */
  cljs.tools.reader.map_func = (function cljs$tools$reader$map_func(coll){
  if((cljs.core.count(coll) >= (16))){
  return new cljs.core.Symbol("cljs.core","hash-map","cljs.core/hash-map",303385767,null);
  } else {
  return new cljs.core.Symbol("cljs.core","array-map","cljs.core/array-map",-1519210683,null);
  }
  });
  cljs.tools.reader.bool_QMARK_ = (function cljs$tools$reader$bool_QMARK_(x){
  return (((x instanceof Boolean)) || (x === true) || (x === false));
  });
  /**
   * Resolve a symbol s into its fully qualified namespace version
   */
  cljs.tools.reader.resolve_symbol = (function cljs$tools$reader$resolve_symbol(s){
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("resolve-symbol is not implemented",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"sym","sym",-1444860305),s], null));
  });
  cljs.tools.reader.syntax_quote_STAR_ = (function cljs$tools$reader$syntax_quote_STAR_(form){
  return cljs.tools.reader.add_meta(form,((cljs.core.special_symbol_QMARK_(form))?(new cljs.core.List(null,new cljs.core.Symbol(null,"quote","quote",1377916282,null),(new cljs.core.List(null,form,null,(1),null)),(2),null)):(((form instanceof cljs.core.Symbol))?(new cljs.core.List(null,new cljs.core.Symbol(null,"quote","quote",1377916282,null),(new cljs.core.List(null,(cljs.core.truth_(((cljs.core.not(cljs.core.namespace(form)))?goog.string.endsWith(cljs.core.name(form),"#"):false))?cljs.tools.reader.register_gensym(form):(function (){var sym = cljs.core.str.cljs$core$IFn$_invoke$arity$1(form);
  if(cljs.core.truth_(goog.string.endsWith(sym,"."))){
  var csym = cljs.core.symbol.cljs$core$IFn$_invoke$arity$1(cljs.core.subs.cljs$core$IFn$_invoke$arity$3(sym,(0),(((sym).length) - (1))));
  return cljs.core.symbol.cljs$core$IFn$_invoke$arity$1([cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.tools.reader.resolve_symbol.call(null,csym)),"."].join(''));
  } else {
  return cljs.tools.reader.resolve_symbol.call(null,form);
  }
  })()),null,(1),null)),(2),null)):((cljs.tools.reader.unquote_QMARK_(form))?cljs.core.second(form):((cljs.tools.reader.unquote_splicing_QMARK_(form))?(function(){throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("unquote-splice not in list",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"illegal-state","illegal-state",-1519851182)], null))})():((cljs.core.coll_QMARK_(form))?(((((!((form == null))))?(((((form.cljs$lang$protocol_mask$partition0$ & (67108864))) || ((cljs.core.PROTOCOL_SENTINEL === form.cljs$core$IRecord$))))?true:false):false))?form:((cljs.core.map_QMARK_(form))?cljs.tools.reader.syntax_quote_coll(cljs.tools.reader.map_func(form),cljs.tools.reader.flatten_map(form)):((cljs.core.vector_QMARK_(form))?(new cljs.core.List(null,new cljs.core.Symbol("cljs.core","vec","cljs.core/vec",307622519,null),(new cljs.core.List(null,cljs.tools.reader.syntax_quote_coll(null,form),null,(1),null)),(2),null)):((cljs.core.set_QMARK_(form))?cljs.tools.reader.syntax_quote_coll(new cljs.core.Symbol("cljs.core","hash-set","cljs.core/hash-set",1130426749,null),form):((((cljs.core.seq_QMARK_(form)) || (cljs.core.list_QMARK_(form))))?(function (){var seq = cljs.core.seq(form);
  if(seq){
  return cljs.tools.reader.syntax_quote_coll(null,seq);
  } else {
  return cljs.core.list(new cljs.core.Symbol("cljs.core","list","cljs.core/list",-1331406371,null));
  }
  })():(function(){throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2("Unknown Collection type",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"unsupported-operation","unsupported-operation",1890540953)], null))})()
  ))))):(((((form instanceof cljs.core.Keyword)) || (typeof form === 'number') || (typeof form === 'string') || ((form == null)) || (cljs.tools.reader.bool_QMARK_(form)) || ((form instanceof RegExp))))?form:(new cljs.core.List(null,new cljs.core.Symbol(null,"quote","quote",1377916282,null),(new cljs.core.List(null,form,null,(1),null)),(2),null))
  )))))));
  });
  cljs.tools.reader.read_syntax_quote = (function cljs$tools$reader$read_syntax_quote(rdr,backquote,opts,pending_forms){
  var gensym_env_orig_val__45445 = cljs.tools.reader.gensym_env;
  var gensym_env_temp_val__45446 = cljs.core.PersistentArrayMap.EMPTY;
  (cljs.tools.reader.gensym_env = gensym_env_temp_val__45446);
  
  try{return cljs.tools.reader.syntax_quote_STAR_((cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms)));
  }finally {(cljs.tools.reader.gensym_env = gensym_env_orig_val__45445);
  }});
  cljs.tools.reader.read_namespaced_map = (function cljs$tools$reader$read_namespaced_map(rdr,_,opts,pending_forms){
  var token = cljs.tools.reader.read_token(rdr,new cljs.core.Keyword(null,"namespaced-map","namespaced-map",1235665380),cljs.tools.reader.reader_types.read_char(rdr));
  var temp__5733__auto__ = ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(token,":"))?cljs.core.ns_name(cljs.core._STAR_ns_STAR_):((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(":",cljs.core.first(token)))?(function (){var G__45447 = token;
  var G__45447__$1 = (((G__45447 == null))?null:cljs.core.subs.cljs$core$IFn$_invoke$arity$2(G__45447,(1)));
  var G__45447__$2 = (((G__45447__$1 == null))?null:cljs.tools.reader.impl.commons.parse_symbol(G__45447__$1));
  var G__45447__$3 = (((G__45447__$2 == null))?null:cljs.tools.reader.impl.utils.second_SINGLEQUOTE_(G__45447__$2));
  var G__45447__$4 = (((G__45447__$3 == null))?null:cljs.core.symbol.cljs$core$IFn$_invoke$arity$1(G__45447__$3));
  if((G__45447__$4 == null)){
  return null;
  } else {
  return cljs.tools.reader.resolve_ns(G__45447__$4);
  }
  })():(function (){var G__45448 = token;
  var G__45448__$1 = (((G__45448 == null))?null:cljs.tools.reader.impl.commons.parse_symbol(G__45448));
  if((G__45448__$1 == null)){
  return null;
  } else {
  return cljs.tools.reader.impl.utils.second_SINGLEQUOTE_(G__45448__$1);
  }
  })()
  ));
  if(cljs.core.truth_(temp__5733__auto__)){
  var ns = temp__5733__auto__;
  var ch = cljs.tools.reader.impl.commons.read_past(cljs.tools.reader.impl.utils.whitespace_QMARK_,rdr);
  if((ch === "{")){
  var items = cljs.tools.reader.read_delimited(new cljs.core.Keyword(null,"namespaced-map","namespaced-map",1235665380),"}",rdr,opts,pending_forms);
  if(cljs.core.odd_QMARK_(cljs.core.count(items))){
  cljs.tools.reader.impl.errors.throw_odd_map(rdr,null,null,items);
  } else {
  }
  
  var keys = cljs.tools.reader.impl.utils.namespace_keys(cljs.core.str.cljs$core$IFn$_invoke$arity$1(ns),cljs.core.take_nth.cljs$core$IFn$_invoke$arity$2((2),items));
  var vals = cljs.core.take_nth.cljs$core$IFn$_invoke$arity$2((2),cljs.core.rest(items));
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(cljs.core.count(cljs.core.set(keys)),cljs.core.count(keys))){
  } else {
  cljs.tools.reader.impl.errors.throw_dup_keys(rdr,new cljs.core.Keyword(null,"namespaced-map","namespaced-map",1235665380),keys);
  }
  
  return cljs.core.zipmap(keys,vals);
  } else {
  return cljs.tools.reader.impl.errors.throw_ns_map_no_map(rdr,token);
  }
  } else {
  return cljs.tools.reader.impl.errors.throw_bad_ns(rdr,token);
  }
  });
  cljs.tools.reader.macros = (function cljs$tools$reader$macros(ch){
  var G__45449 = ch;
  switch (G__45449) {
  case "\"":
  return cljs.tools.reader.read_string_STAR_;
  
  break;
  case ":":
  return cljs.tools.reader.read_keyword;
  
  break;
  case ";":
  return cljs.tools.reader.impl.commons.read_comment;
  
  break;
  case "'":
  return cljs.tools.reader.wrapping_reader(new cljs.core.Symbol(null,"quote","quote",1377916282,null));
  
  break;
  case "@":
  return cljs.tools.reader.wrapping_reader(new cljs.core.Symbol("clojure.core","deref","clojure.core/deref",188719157,null));
  
  break;
  case "^":
  return cljs.tools.reader.read_meta;
  
  break;
  case "`":
  return cljs.tools.reader.read_syntax_quote;
  
  break;
  case "~":
  return cljs.tools.reader.read_unquote;
  
  break;
  case "(":
  return cljs.tools.reader.read_list;
  
  break;
  case ")":
  return cljs.tools.reader.read_unmatched_delimiter;
  
  break;
  case "[":
  return cljs.tools.reader.read_vector;
  
  break;
  case "]":
  return cljs.tools.reader.read_unmatched_delimiter;
  
  break;
  case "{":
  return cljs.tools.reader.read_map;
  
  break;
  case "}":
  return cljs.tools.reader.read_unmatched_delimiter;
  
  break;
  case "\\":
  return cljs.tools.reader.read_char_STAR_;
  
  break;
  case "%":
  return cljs.tools.reader.read_arg;
  
  break;
  case "#":
  return cljs.tools.reader.read_dispatch;
  
  break;
  default:
  return null;
  
  }
  });
  cljs.tools.reader.dispatch_macros = (function cljs$tools$reader$dispatch_macros(ch){
  var G__45450 = ch;
  switch (G__45450) {
  case "^":
  return cljs.tools.reader.read_meta;
  
  break;
  case "'":
  return cljs.tools.reader.wrapping_reader(new cljs.core.Symbol(null,"var","var",870848730,null));
  
  break;
  case "(":
  return cljs.tools.reader.read_fn;
  
  break;
  case "{":
  return cljs.tools.reader.read_set;
  
  break;
  case "<":
  return cljs.tools.reader.impl.commons.throwing_reader("Unreadable form");
  
  break;
  case "=":
  return cljs.tools.reader.impl.commons.throwing_reader("read-eval not supported");
  
  break;
  case "\"":
  return cljs.tools.reader.read_regex;
  
  break;
  case "!":
  return cljs.tools.reader.impl.commons.read_comment;
  
  break;
  case "_":
  return cljs.tools.reader.read_discard;
  
  break;
  case "?":
  return cljs.tools.reader.read_cond;
  
  break;
  case ":":
  return cljs.tools.reader.read_namespaced_map;
  
  break;
  case "#":
  return cljs.tools.reader.read_symbolic_value;
  
  break;
  default:
  return null;
  
  }
  });
  cljs.tools.reader.read_tagged = (function cljs$tools$reader$read_tagged(rdr,initch,opts,pending_forms){
  var tag = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  if((!((tag instanceof cljs.core.Symbol)))){
  cljs.tools.reader.impl.errors.throw_bad_reader_tag(rdr,tag);
  } else {
  }
  
  if(cljs.core.truth_(cljs.tools.reader._STAR_suppress_read_STAR_)){
  return cljs.core.tagged_literal(tag,(cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms)));
  } else {
  var temp__5733__auto__ = (function (){var or__4126__auto__ = cljs.tools.reader._STAR_data_readers_STAR_.call(null,tag);
  if(cljs.core.truth_(or__4126__auto__)){
  return or__4126__auto__;
  } else {
  return (cljs.tools.reader.default_data_readers.cljs$core$IFn$_invoke$arity$1 ? cljs.tools.reader.default_data_readers.cljs$core$IFn$_invoke$arity$1(tag) : cljs.tools.reader.default_data_readers.call(null,tag));
  }
  })();
  if(cljs.core.truth_(temp__5733__auto__)){
  var f = temp__5733__auto__;
  var G__45451 = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  return (f.cljs$core$IFn$_invoke$arity$1 ? f.cljs$core$IFn$_invoke$arity$1(G__45451) : f.call(null,G__45451));
  } else {
  var temp__5733__auto____$1 = cljs.tools.reader._STAR_default_data_reader_fn_STAR_;
  if(cljs.core.truth_(temp__5733__auto____$1)){
  var f = temp__5733__auto____$1;
  var G__45452 = tag;
  var G__45453 = (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 ? cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5(rdr,true,null,opts,pending_forms) : cljs.tools.reader.read_STAR_.call(null,rdr,true,null,opts,pending_forms));
  return (f.cljs$core$IFn$_invoke$arity$2 ? f.cljs$core$IFn$_invoke$arity$2(G__45452,G__45453) : f.call(null,G__45452,G__45453));
  } else {
  return cljs.tools.reader.impl.errors.throw_unknown_reader_tag(rdr,tag);
  }
  }
  }
  });
  /**
   * Map from reader tag symbols to data reader Vars.
   *   Reader tags without namespace qualifiers are reserved for Clojure.
   *   This light version of tools.reader has no implementation for default
   *   reader tags such as #inst and #uuid.
   */
  cljs.tools.reader._STAR_data_readers_STAR_ = cljs.core.PersistentArrayMap.EMPTY;
  /**
   * When no data reader is found for a tag and *default-data-reader-fn*
   *   is non-nil, it will be called with two arguments, the tag and the value.
   *   If *default-data-reader-fn* is nil (the default value), an exception
   *   will be thrown for the unknown tag.
   */
  cljs.tools.reader._STAR_default_data_reader_fn_STAR_ = null;
  cljs.tools.reader._STAR_suppress_read_STAR_ = false;
  /**
   * Default map of data reader functions provided by Clojure.
   *   May be overridden by binding *data-readers*
   */
  cljs.tools.reader.default_data_readers = cljs.core.PersistentArrayMap.EMPTY;
  cljs.tools.reader.read_STAR__internal = (function cljs$tools$reader$read_STAR__internal(reader,eof_error_QMARK_,sentinel,return_on,opts,pending_forms){
  while(true){
  if(((cljs.tools.reader.reader_types.source_logging_reader_QMARK_(reader)) && ((!(cljs.tools.reader.impl.utils.whitespace_QMARK_(reader.cljs$tools$reader$reader_types$Reader$peek_char$arity$1(null))))))){
  return cljs.tools.reader.reader_types.log_source_STAR_(reader,(function (){
  while(true){
  if((!(goog.array.isEmpty(pending_forms)))){
  var form = (pending_forms[(0)]);
  goog.array.removeAt(pending_forms,(0));
  
  return form;
  } else {
  var ch = reader.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if(cljs.tools.reader.impl.utils.whitespace_QMARK_(ch)){
  continue;
  } else {
  if((ch == null)){
  if(eof_error_QMARK_){
  return cljs.tools.reader.impl.errors.throw_eof_error(reader,null);
  } else {
  return sentinel;
  }
  } else {
  if((ch === return_on)){
  return cljs.tools.reader.READ_FINISHED;
  } else {
  if(cljs.tools.reader.impl.commons.number_literal_QMARK_(reader,ch)){
  return cljs.tools.reader.read_number(reader,ch);
  } else {
  var f = cljs.tools.reader.macros(ch);
  if((!((f == null)))){
  var res = (f.cljs$core$IFn$_invoke$arity$4 ? f.cljs$core$IFn$_invoke$arity$4(reader,ch,opts,pending_forms) : f.call(null,reader,ch,opts,pending_forms));
  if((res === reader)){
  continue;
  } else {
  return res;
  }
  } else {
  return cljs.tools.reader.read_symbol(reader,ch);
  }
  
  }
  }
  }
  }
  }
  break;
  }
  }));
  } else {
  if((!(goog.array.isEmpty(pending_forms)))){
  var form = (pending_forms[(0)]);
  goog.array.removeAt(pending_forms,(0));
  
  return form;
  } else {
  var ch = reader.cljs$tools$reader$reader_types$Reader$read_char$arity$1(null);
  if(cljs.tools.reader.impl.utils.whitespace_QMARK_(ch)){
  continue;
  } else {
  if((ch == null)){
  if(eof_error_QMARK_){
  return cljs.tools.reader.impl.errors.throw_eof_error(reader,null);
  } else {
  return sentinel;
  }
  } else {
  if((ch === return_on)){
  return cljs.tools.reader.READ_FINISHED;
  } else {
  if(cljs.tools.reader.impl.commons.number_literal_QMARK_(reader,ch)){
  return cljs.tools.reader.read_number(reader,ch);
  } else {
  var f = cljs.tools.reader.macros(ch);
  if((!((f == null)))){
  var res = (f.cljs$core$IFn$_invoke$arity$4 ? f.cljs$core$IFn$_invoke$arity$4(reader,ch,opts,pending_forms) : f.call(null,reader,ch,opts,pending_forms));
  if((res === reader)){
  continue;
  } else {
  return res;
  }
  } else {
  return cljs.tools.reader.read_symbol(reader,ch);
  }
  
  }
  }
  }
  }
  }
  }
  break;
  }
  });
  cljs.tools.reader.read_STAR_ = (function cljs$tools$reader$read_STAR_(var_args){
  var G__45455 = arguments.length;
  switch (G__45455) {
  case 5:
  return cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]));
  
  break;
  case 6:
  return cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]),(arguments[(5)]));
  
  break;
  default:
  throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
  
  }
  });
  
  (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$5 = (function (reader,eof_error_QMARK_,sentinel,opts,pending_forms){
  return cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(reader,eof_error_QMARK_,sentinel,null,opts,pending_forms);
  }));
  
  (cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6 = (function (reader,eof_error_QMARK_,sentinel,return_on,opts,pending_forms){
  try{return cljs.tools.reader.read_STAR__internal(reader,eof_error_QMARK_,sentinel,return_on,opts,pending_forms);
  }catch (e45456){if((e45456 instanceof Error)){
  var e = e45456;
  if(cljs.tools.reader.impl.utils.ex_info_QMARK_(e)){
  var d = cljs.core.ex_data(e);
  if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"reader-exception","reader-exception",-1938323098),new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(d))){
  throw e;
  } else {
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3(e.message,cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"reader-exception","reader-exception",-1938323098)], null),d,((cljs.tools.reader.reader_types.indexing_reader_QMARK_(reader))?new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"line","line",212345235),reader.cljs$tools$reader$reader_types$IndexingReader$get_line_number$arity$1(null),new cljs.core.Keyword(null,"column","column",2078222095),reader.cljs$tools$reader$reader_types$IndexingReader$get_column_number$arity$1(null),new cljs.core.Keyword(null,"file","file",-1269645878),reader.cljs$tools$reader$reader_types$IndexingReader$get_file_name$arity$1(null)], null):null)], 0)),e);
  }
  } else {
  throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3(e.message,cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"reader-exception","reader-exception",-1938323098)], null),((cljs.tools.reader.reader_types.indexing_reader_QMARK_(reader))?new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"line","line",212345235),reader.cljs$tools$reader$reader_types$IndexingReader$get_line_number$arity$1(null),new cljs.core.Keyword(null,"column","column",2078222095),reader.cljs$tools$reader$reader_types$IndexingReader$get_column_number$arity$1(null),new cljs.core.Keyword(null,"file","file",-1269645878),reader.cljs$tools$reader$reader_types$IndexingReader$get_file_name$arity$1(null)], null):null)], 0)),e);
  }
  } else {
  throw e45456;
  
  }
  }}));
  
  (cljs.tools.reader.read_STAR_.cljs$lang$maxFixedArity = 6);
  
  /**
   * Reads the first object from an IPushbackReader.
   * Returns the object read. If EOF, throws if eof-error? is true.
   * Otherwise returns sentinel. If no stream is provided, *in* will be used.
   * 
   * Opts is a persistent map with valid keys:
   *  :read-cond - :allow to process reader conditionals, or
   *               :preserve to keep all branches
   *  :features - persistent set of feature keywords for reader conditionals
   *  :eof - on eof, return value unless :eofthrow, then throw.
   *         if not specified, will throw
   * 
   * To read data structures only, use clojure.tools.reader.edn/read
   * 
   * Note that the function signature of clojure.tools.reader/read and
   * clojure.tools.reader.edn/read is not the same for eof-handling
   */
  cljs.tools.reader.read = (function cljs$tools$reader$read(var_args){
  var G__45458 = arguments.length;
  switch (G__45458) {
  case 1:
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
  
  break;
  case 2:
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));
  
  break;
  case 3:
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
  
  break;
  default:
  throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
  
  }
  });
  
  (cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$1 = (function (reader){
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$3(reader,true,null);
  }));
  
  (cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$2 = (function (p__45459,reader){
  var map__45460 = p__45459;
  var map__45460__$1 = (((((!((map__45460 == null))))?(((((map__45460.cljs$lang$protocol_mask$partition0$ & (64))) || ((cljs.core.PROTOCOL_SENTINEL === map__45460.cljs$core$ISeq$))))?true:false):false))?cljs.core.apply.cljs$core$IFn$_invoke$arity$2(cljs.core.hash_map,map__45460):map__45460);
  var opts = map__45460__$1;
  var eof = cljs.core.get.cljs$core$IFn$_invoke$arity$3(map__45460__$1,new cljs.core.Keyword(null,"eof","eof",-489063237),new cljs.core.Keyword(null,"eofthrow","eofthrow",-334166531));
  return cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(reader,cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(eof,new cljs.core.Keyword(null,"eofthrow","eofthrow",-334166531)),eof,null,opts,cljs.core.to_array(cljs.core.PersistentVector.EMPTY));
  }));
  
  (cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$3 = (function (reader,eof_error_QMARK_,sentinel){
  return cljs.tools.reader.read_STAR_.cljs$core$IFn$_invoke$arity$6(reader,eof_error_QMARK_,sentinel,null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.to_array(cljs.core.PersistentVector.EMPTY));
  }));
  
  (cljs.tools.reader.read.cljs$lang$maxFixedArity = 3);
  
  /**
   * Reads one object from the string s.
   * Returns nil when s is nil or empty.
   * 
   * To read data structures only, use clojure.tools.reader.edn/read-string
   * 
   * Note that the function signature of clojure.tools.reader/read-string and
   * clojure.tools.reader.edn/read-string is not the same for eof-handling
   */
  cljs.tools.reader.read_string = (function cljs$tools$reader$read_string(var_args){
  var G__45463 = arguments.length;
  switch (G__45463) {
  case 1:
  return cljs.tools.reader.read_string.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
  
  break;
  case 2:
  return cljs.tools.reader.read_string.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));
  
  break;
  default:
  throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
  
  }
  });
  
  (cljs.tools.reader.read_string.cljs$core$IFn$_invoke$arity$1 = (function (s){
  return cljs.tools.reader.read_string.cljs$core$IFn$_invoke$arity$2(cljs.core.PersistentArrayMap.EMPTY,s);
  }));
  
  (cljs.tools.reader.read_string.cljs$core$IFn$_invoke$arity$2 = (function (opts,s){
  if(cljs.core.truth_((function (){var and__4115__auto__ = s;
  if(cljs.core.truth_(and__4115__auto__)){
  return (!((s === "")));
  } else {
  return and__4115__auto__;
  }
  })())){
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$2(opts,cljs.tools.reader.reader_types.string_push_back_reader.cljs$core$IFn$_invoke$arity$1(s));
  } else {
  return null;
  }
  }));
  
  (cljs.tools.reader.read_string.cljs$lang$maxFixedArity = 2);
  
  /**
   * Like read, and taking the same args. reader must be a SourceLoggingPushbackReader.
   *   Returns a vector containing the object read and the (whitespace-trimmed) string read.
   */
  cljs.tools.reader.read_PLUS_string = (function cljs$tools$reader$read_PLUS_string(var_args){
  var G__45465 = arguments.length;
  switch (G__45465) {
  case 1:
  return cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
  
  break;
  case 3:
  return cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
  
  break;
  case 2:
  return cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));
  
  break;
  default:
  throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
  
  }
  });
  
  (cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$1 = (function (stream){
  return cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$3(stream,true,null);
  }));
  
  (cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$3 = (function (stream,eof_error_QMARK_,eof_value){
  var buf = (function (reader){
  return cljs.core.str.cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"buffer","buffer",617295198).cljs$core$IFn$_invoke$arity$1(cljs.core.deref(stream.frames)));
  });
  var offset = ((buf(stream)).length);
  var o = ((((cljs.tools.reader.reader_types.source_logging_reader_QMARK_(stream)) && ((!(cljs.tools.reader.impl.utils.whitespace_QMARK_(cljs.tools.reader.reader_types.peek_char(stream)))))))?cljs.tools.reader.reader_types.log_source_STAR_(stream,(function (){
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$3(stream,eof_error_QMARK_,eof_value);
  })):cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$3(stream,eof_error_QMARK_,eof_value));
  var s = cljs.core.subs.cljs$core$IFn$_invoke$arity$2(buf(stream),offset).trim();
  return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [o,s], null);
  }));
  
  (cljs.tools.reader.read_PLUS_string.cljs$core$IFn$_invoke$arity$2 = (function (opts,stream){
  var buf = (function (reader){
  return cljs.core.str.cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"buffer","buffer",617295198).cljs$core$IFn$_invoke$arity$1(cljs.core.deref(stream.frames)));
  });
  var offset = ((buf(stream)).length);
  var o = ((((cljs.tools.reader.reader_types.source_logging_reader_QMARK_(stream)) && ((!(cljs.tools.reader.impl.utils.whitespace_QMARK_(cljs.tools.reader.reader_types.peek_char(stream)))))))?cljs.tools.reader.reader_types.log_source_STAR_(stream,(function (){
  return cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$2(opts,stream);
  })):cljs.tools.reader.read.cljs$core$IFn$_invoke$arity$2(opts,stream));
  var s = cljs.core.subs.cljs$core$IFn$_invoke$arity$2(buf(stream),offset).trim();
  return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [o,s], null);
  }));
  
  (cljs.tools.reader.read_PLUS_string.cljs$lang$maxFixedArity = 3);
  
  
  //# sourceMappingURL=cljs.tools.reader.js.map
  