Current File : //lib/node_modules/webpack/node_modules/terser/dist/bundle.js.map
{"version":3,"sources":["../tools/domprops.js","../lib/utils.js","../lib/ast.js","../lib/parse.js","../lib/transform.js","../lib/scope.js","../lib/output.js","../lib/compress.js","../lib/propmangle.js","../lib/mozilla-ast.js","../lib/minify.js","../tools/exports.js","../lib/sourcemap.js","0"],"names":["domprops","characters","str","split","member","name","array","indexOf","find_if","func","i","n","length","configure_error_stack","fn","Object","defineProperty","prototype","get","err","Error","this","message","e","stack","DefaultsError","msg","defs","defaults","args","croak","ret","HOP","merge","obj","ext","count","noop","return_false","return_true","return_this","return_null","create","constructor","MAP","a","f","backwards","top","doit","val","is_last","Last","v","AtTop","Splice","push","apply","slice","reverse","skip","Array","concat","at_top","splice","last","push_uniq","el","string_template","text","props","replace","p","remove","mergeSort","cmp","_ms","m","Math","floor","left","right","b","r","ai","bi","makePredicate","words","cats","out","j","quote","word","JSON","stringify","s","compareTo","arr","sort","cat","Function","all","predicate","Dictionary","_values","_size","prop","hasOwnProperty","call","first_in_statement","node","parent","AST_Statement","body","AST_Sequence","expressions","TYPE","expression","AST_Dot","AST_Sub","AST_Conditional","condition","AST_Binary","AST_UnaryPostfix","keep_name","keep_setting","RegExp","test","DEFNODE","type","methods","base","arguments","AST_Node","self_props","PROPS","code","proto","initialize","ctor","BASE","SUBCLASSES","CTOR","SELF_PROPS","substr","DEFMETHOD","method","exports","set","key","has","add","del","each","size","map","clone","toObject","fromObject","dict","AST_Token","_clone","deep","self","transform","TreeTransformer","$documentation","$propdoc","start","end","_walk","visitor","_visit","walk","warn_function","warn","txt","AST_Debugger","AST_Directive","value","AST_SimpleStatement","walk_body","len","clone_block_scope","block_scope","AST_Block","AST_BlockStatement","AST_EmptyStatement","AST_StatementWithBody","AST_LabeledStatement","label","def","TreeWalker","AST_LoopControl","thedef","references","AST_IterationStatement","AST_DWLoop","AST_Do","AST_While","AST_For","init","step","AST_ForIn","object","AST_ForOf","AST_With","AST_Scope","variables","functions","uses_with","uses_eval","parent_scope","enclosed","cname","get_defun_scope","is_block_scope","pinned","AST_Toplevel","globals","wrap_commonjs","wrapped_tl","parse","wrap_enclose","args_values","index","join","AST_Expansion","AST_Lambda","argnames","uses_arguments","is_generator","async","args_as_names","AST_Destructuring","all_symbols","AST_Accessor","AST_Function","AST_Arrow","AST_Defun","names","is_array","forEach","AST_Symbol","AST_PrefixedTemplateString","template_string","prefix","AST_TemplateString","segments","seg","AST_TemplateSegment","raw","AST_Jump","AST_Exit","AST_Return","AST_Throw","AST_Break","AST_Continue","AST_If","alternative","AST_Switch","AST_SwitchBranch","AST_Default","AST_Case","AST_Try","bcatch","bfinally","AST_Catch","argname","AST_Finally","AST_Definitions","definitions","AST_Var","AST_Let","AST_Const","AST_NameMapping","foreign_name","AST_Import","imported_name","imported_names","module_name","name_import","AST_Export","exported_definition","exported_value","exported_names","is_default","name_export","AST_VarDef","AST_Call","AST_New","AST_PropAccess","property","AST_Unary","operator","AST_UnaryPrefix","consequent","AST_Assign","AST_DefaultAssign","AST_Array","elements","AST_Object","properties","AST_ObjectProperty","AST_ObjectKeyVal","AST_ObjectSetter","static","AST_ObjectGetter","AST_ConciseMethod","AST_Class","extends","AST_DefClass","AST_ClassExpression","scope","AST_NewTarget","AST_SymbolDeclaration","AST_SymbolVar","AST_SymbolBlockDeclaration","AST_SymbolConst","AST_SymbolLet","AST_SymbolFunarg","AST_SymbolDefun","AST_SymbolMethod","AST_SymbolLambda","AST_SymbolDefClass","AST_SymbolClass","AST_SymbolCatch","AST_SymbolImport","AST_SymbolImportForeign","AST_Label","AST_SymbolRef","AST_SymbolExport","AST_SymbolExportForeign","AST_LabelRef","AST_This","AST_Super","AST_Constant","getValue","AST_String","AST_Number","literal","AST_RegExp","AST_Atom","AST_Null","AST_NaN","AST_Undefined","AST_Hole","AST_Infinity","AST_Boolean","AST_False","AST_True","AST_Await","AST_Yield","is_star","callback","visit","directives","descend","pop","getPrototypeOf","find_parent","x","has_directive","dir","st","loopcontrol_target","KEYWORDS","KEYWORDS_ATOM","RESERVED_WORDS","KEYWORDS_BEFORE_EXPRESSION","OPERATOR_CHARS","RE_NUM_LITERAL","RE_HEX_NUMBER","RE_OCT_NUMBER","RE_ES6_OCT_NUMBER","RE_BIN_NUMBER","RE_DEC_NUMBER","OPERATORS","WHITESPACE_CHARS","NEWLINE_CHARS","PUNC_AFTER_EXPRESSION","PUNC_BEFORE_EXPRESSION","PUNC_CHARS","UNICODE","ID_Start","ID_Continue","get_full_char","pos","char","charAt","is_surrogate_pair_head","next","is_surrogate_pair_tail","prev","charCodeAt","is_digit","is_identifier","is_identifier_start","ch","is_identifier_char","is_identifier_string","JS_Parse_Error","filename","line","col","js_error","is_token","token","EX_EOF","tokenizer","$TEXT","html5_comments","shebang","S","tokpos","tokline","tokcol","newline_before","regex_allowed","brace_counter","template_braces","comments_before","directive_stack","peek","signal_eof","in_string","forward","looking_at","find","what","start_token","prev_was_dot","previous_token","is_comment","UNARY_POSTFIX","endline","endcol","endpos","nlb","file","substring","comments_after","skip_whitespace","parse_error","read_num","has_e","after_e","has_x","has_dot","num","pred","read_while","next_token","valid","parseInt","parseFloat","parse_js_number","isNaN","read_escaped_char","strict_hex","String","fromCharCode","hex_bytes","result","strict_octal","read_octal_escape_sequence","digit","read_string","with_eof_error","quote_char","tok","read_template_characters","begin","content","tmp","skip_line_comment","find_eol","skip_multiline_comment","surrogates","get_full_char_length","read_name","escaped","read_escaped_identifier_char","read_regexp","source","prev_backslash","in_class","mods","regexp","raw_source","read_operator","grow","op","bigger","handle_slash","eof_error","cont","ex","force_regexp","context","nc","add_directive","directive","undefined","push_directives_stack","pop_directives_stack","UNARY_PREFIX","ASSIGNMENT","PRECEDENCE","ATOMIC_START_TOKEN","options","bare_returns","ecma","module","strict","toplevel","input","peeked","in_function","in_async","in_generator","in_directives","in_loop","labels","is","ctx","token_error","unexpected","expect_token","expect","punc","has_newline_before","comment","can_insert_semicolon","is_in_generator","is_in_async","semicolon","optional","parenthesised","exp","embed_tokens","parser","expr","handle_regexp","statement","is_export_default","is_for_body","is_if_body","stat","simple_statement","function_","as_symbol","map_names","mod_str","import_","l","ref","labeled_statement","block_","break_cont","for_await_error","await_tok","var_","let_","const_","is_in","is_of","is_assignable","to_destructuring","for_in","is_await","lhs","await","for_of","regular_for","for_","class_","cond","belse","if_","switch_body_","parameter","try_","export_","ldef","arrow_function","is_async","_function_body","is_generator_property","in_statement","track_used_binding_identifiers","is_parameter","parameters","duplicate","default_assignment","spread","strict_mode","tracker","add_parameter","check_strict","mark_default_assignment","mark_spread","mark_strict_mode","is_strict","used_parameters","symbol_type","param","expand","binding_element","expand_token","first","is_expand","first_token","property_token","as_property_name","block","generator","loop","current_generator","current_async","params","_verify_symbol","cur","branch","vardefs","no_in","kind","sym_type","as_atom_node","_make_symbol","to_fun_args","_","__","default_seen_above","insert_default","default_value","expr_atom","allow_calls","allow_arrows","subscripts","newexp","expr_list","mark_pure","new_","exprs","maybe_sequence","spread_token","invalid_sequence","trailing_comma","params_or_seq_","unshift","comments_before_length","array_","object_or_destructuring_","cls","tagged","closing","allow_trailing_comma","allow_empty","create_accessor","concise","concise_method_or_getset","KindOfClass","class_name","extends_","is_class","get_ast","is_static","map_name","is_import","make_symbol","foreign_type","map_nameAsterisk","sym","noerror","comments","pure","call_args","maybe_unary","make_unary","expr_op","min_prec","prec","maybe_conditional","expr_ops","yes","maybe_assign","star","has_expression","_yield_expression","commas","before","after","SymbolDef","orig","eliminated","replaced","global","export","mangled_name","undeclared","id","next_id","tw","in_list","y","do_list","list","MASK_EXPORT_DONT_MANGLE","MASK_EXPORT_WANT_MANGLE","next_mangled","base54","reserved","unmangleable","eval","keep_fnames","keep_classnames","mangle","cache","ie8","redefined","defun","safari10","in_destructuring","for_scopes","save_scope","init_scope_vars","save_defun","save_labels","def_function","mark_export","def_variable","destructuring","mark_enclosed","find_variable","reference","level","exported","def_global","definition","refs","g","d","symbol","mangled_names","tricky_def","tricky_name","isArray","_default_mangler_options","lname","to_mangle","collect","save_nesting","avoid","to_avoid","add_def","reset","find_colliding_names","rename","next_name","print","stream","force_parens","_print","consider","skip_string","tail_node","print_to_string","chars","frequency","leading","digits","compare","delta","EXPECT_DIRECTIVE","is_some_comments","OutputStream","readonly","ascii_only","beautify","braces","indent_level","indent_start","inline_script","keep_quoted_props","max_line_len","preamble","quote_keys","quote_style","semicolons","shorthand","source_map","webkit","width","wrap_iife","comment_filter","regex_pos","lastIndexOf","indentation","current_col","current_line","current_pos","OUTPUT","to_utf8","identifier","toString","encode_string","dq","sq","quote_single","quote_double","make_string","make_indent","back","repeat_string","mapping_token","mapping_name","has_parens","might_need_space","might_need_semicolon","might_add_newline","need_newline_indented","need_space","newline_insert","mappings","do_add_mapping","mapping","cline","ccol","ensure_line_len","requireSemicolonChars","indent","space","half","with_indent","next_indent","save_indentation","newline","force_semicolon","has_nlb","current_width","should_break","comma","colon","print_name","make_name","print_string","escape_directive","encoded","print_template_string_chars","with_block","with_parens","with_square","add_mapping","option","opt","prepend_comments","_dumped","shift","filter","last_nlb","c","append_comments","tail","insert","push_node","pop_node","Compressor","false_by_default","arrows","booleans","booleans_as_integers","collapse_vars","comparisons","computed_props","conditionals","dead_code","drop_console","drop_debugger","evaluate","global_defs","hoist_funs","hoist_props","hoist_vars","if_return","inline","join_vars","keep_fargs","keep_infinity","loops","negate_iife","passes","pure_getters","pure_funcs","reduce_funcs","reduce_vars","sequences","side_effects","switches","top_retain","typeofs","unsafe","unsafe_arrows","unsafe_comps","unsafe_Function","unsafe_math","unsafe_methods","unsafe_proto","unsafe_regexp","unsafe_undefined","unused","warnings","funcs","vars","sequences_limit","warnings_produced","reserve_quoted_keys","ast","addStrings","mangle_properties","builtins","debug","keep_quoted","only_cache","regex","objects","global_ref","new_global","Number","Boolean","Date","Symbol","ArrayBuffer","DataView","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","EvalError","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","isFinite","Map","Promise","Proxy","RangeError","ReferenceError","Reflect","Set","SyntaxError","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakSet","getOwnPropertyNames","find_builtins","debug_name_suffix","names_to_mangle","root","mangleStrings","can_mangle","should_mangle","mangled","debug_mangled","DEFPRINT","nodetype","in_directive","active_scope","use_asm","PARENS","display_body","is_toplevel","output","allow_directives","stmt","print_braced_empty","print_braced","parenthesize_for_noin","noin","parens","print_property_name","make_num","force_statement","make_block","need_constructor_parens","toLowerCase","exec","best","best_of","DEFMAP","_codegen","add_source_map","needs_parens","po","pp","so","sp","p1","_do_print_body","nokeyword","arg","_do_print","tag","parenthesize_tag","is_tagged","make_then","get_name","allowShortHand","_print_getter_setter","exposed","in_boolean_context","compress","resolve_defines","process_expression","min_count","stopping","pass","figure_out_scope","reset_opt_flags","info","clear_warnings","_squeezed","was_scope","hoist_properties","hoist_declarations","optimize","drop_unused","OPT","optimizer","compressor","_optimized","read_property","get_value","make_node_from_constant","fixed_value","is_modified","immutable","is_lhs","is_expr_pure","contains_this","is_func_expr","is_lhs_read_only","is_immutable","is_ref_of","make_node","make_sequence","reduce","merge_sequence","maintain_this_binding","as_statement_array","thing","is_empty","can_be_evicted_from_block","loop_body","is_iife_call","is_undeclared_ref","tt","drop_side_effect_free","reset_def","assignments","chained","direct_access","fixed","recursive_refs","should_replace","single_use","reset_variables","safe_ids","mark","loop_ids","reset_block_variables","safe","safe_to_read","safe_to_assign","mark_escaped","depth","is_constant","is_constant_expression","lazy_op","suppressor","mark_def_node","inlined","save_ids","mark_func_expr","iife","eq","saved_loop","has_break_or_continue","recursive_ref","ref_once","_top","global_names","unary_bool","binary_bool","identifier_atom","is_identifier_atom","tighten_body","statements","in_try","find_loop_scope_try","CHANGED","max_iter","eliminate_spurious_blocks","eliminate_dead_code","handle_if_return","sequencesize","sequencesize_2","join_consecutive_vars","collapse","candidates","stat_index","scanner","abort","hit","hit_stack","hit_index","handle_custom_scan_order","stop_after","find_stop","write_only","lvalues","equivalent_to","replace_all","is_declared","stop_if_hit","lhs_local","can_replace","value_def","candidate","funarg","may_modify","may_throw_on_access","may_throw","has_side_effects","side_effects_external","multi_replacer","extract_args","extract_candidates","get_lhs","get_lvalues","is_lhs_local","value_has_side_effects","replace_all_symbols","remove_candidate","has_overlapping_symbol","fn_strict","found","scan_this","referenced","var_def","mangleable_var","get_rvalue","min","seen_dirs","multiple_if_returns","has_multiple_if_returns","in_lambda","next_index","ab","can_merge_flow","aborts","negate","as_statement_array_with_return","extract_functions","prev_index","lct","declarations_only","has_quit","extract_declarations_from_unreachable_code","seq","push_seq","to_simple_statement","decls","cons_seq","alt","join_object_assignments","defn","trimmed","diff","extract_object_assignments","target","remove_initializers","is_undefined","_dot_throw","is_boolean","unary","binary","is_number","is_string","unary_side_effects","best_of_expression","ast1","ast2","convert_to_predicate","_find_defs","child","suffix","defines","to_node","object_fns","native_fns","static_fns","_eval","unaryPrefix","element","non_converting_unary","non_converting_binary","pow","global_objs","static_values","aa","first_arg","basic_negation","negated","global_pure_fns","fns","any","is_call_pure","all_refs_local","scope_def","block_aborts","opt_AST_Lambda","retain_top_func","drop_funcs","drop_vars","assign_as_unused","in_use","in_use_ids","fixed_ids","var_defs_by_id","initializations","destructuring_value","node_def","in_export","destructuring_cache","scan_ref_scoped","trim","__unused","unreferenced","template","drop_block","head","is_destructure","var_defs","assign","dirs","hoisted","vars_found","var_decl","to_assignments","var_names","_var_names","defs_by_id","make_sym","new_var","make_var_name","nodes","changed","values","if_break_in_loop","is_break","drop_it","rest","self_condition_length","negated_length","negated_is_best","default_branch","exact_match","decl","eliminate_branch","default_index","has_break","varDef","simple_args","is_func","EXIT","separator","consts","fun","comp","compute_char_frequency","mangle_names","is_regular_func","can_inline","return_value","can_flatten_body","block_scoped","variable","safe_to_inject","can_inject_vars","can_inject_args","is_reachable","can_inject_symbols","append_var","flatten_args","lines","flatten_vars","flatten_fn","ev","trim_right_for_undefined","lift_sequences","commutativeOperators","is_atomic","reachable","find_ref","scan_scope","reversible","is_strict_comparison","combined","ll","rr","truthy","falsy","lr","associative","reversed","within_array_or_object_literal","defun_def","lambda_def","value_length","has_symbol_ref","name_length","overhead","undef","ASSIGN_OPS","ASSIGN_OPS_COMMUTATIVE","safe_to_flatten","literals_in_boolean_context","lift_key","evaluateRight","arg_index","single_arg_diff","in_bool","is_true","is_false","booleanize","OPT_ARGUMENTS","sub","flatten_object","retValue","FLATTEN","flatten","k","has_special_symbol","segment","arrow","ancestors","is_destructuring_export_decl","keep","elem","should_retain","normalize_directives","MOZ_TO_ME","Program","M","my_start_token","my_end_token","from_moz","ArrayPattern","elm","ObjectPattern","AssignmentPattern","SpreadElement","argument","RestElement","TemplateElement","cooked","TemplateLiteral","quasis","TaggedTemplateExpression","quasi","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ExpressionStatement","TryStatement","handlers","handler","guardedHandlers","finalizer","Property","computed","MethodDefinition","ArrayExpression","ObjectExpression","SequenceExpression","MemberExpression","SwitchCase","VariableDeclaration","declarations","ImportDeclaration","specifiers","specifier","imported","local","ExportAllDeclaration","ExportNamedDeclaration","declaration","ExportDefaultDeclaration","Literal","rx","pattern","flags","MetaProperty","meta","Identifier","FROM_MOZ_STACK","raw_token","moznode","loc","range","column","moztype","mytype","propmap","moz_to_me","me_to_moz","moz","how","my","to_moz","to_moz_block","to_moz_scope","def_to_moz","UpdateExpression","UnaryExpression","ClassDeclaration","ClassExpression","superClass","to_moz_in_destructuring","guard","name_mapping","isComputed","string_or_num","match","to_mozilla_ast","mynode","from_mozilla_ast","save_stack","TO_MOZ_STACK","to_ascii","atob","b64","Buffer","from","Errror","to_base64","btoa","set_shorthand","keys","init_cache","to_json","files","quoted_props","timings","enclose","nameCache","sourceMap","wrap","now","includeSources","url","warning","orig_line_diff","dest_line_diff","require","SourceMapGenerator","sourceRoot","orig_map","SourceMapConsumer","sources","_sources","toArray","sourceContent","sourceContentFor","setSourceContent","gen_line","gen_col","orig_line","orig_col","originalPositionFor","addMapping","generated","original","toJSON","SourceMap","total","error"],"mappings":"aAAA,IAAIA,EAAW,CACX,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,aACA,YACA,SACA,oBACA,iBACA,kBACA,WACA,2BACA,2BACA,uBACA,UACA,QACA,aACA,WACA,SACA,WACA,0BACA,eACA,uBACA,mBACA,iBACA,YACA,oBACA,eACA,iBACA,qBACA,mBACA,6BACA,QACA,cACA,OACA,QACA,cACA,wBACA,eACA,uBACA,gBACA,YACA,aACA,uBACA,mBACA,yBACA,OACA,yBACA,WACA,QACA,cACA,kBACA,gBACA,iBACA,uBACA,qBACA,kBACA,gBACA,YACA,OACA,OACA,eACA,YACA,YACA,YACA,OACA,wBACA,iBACA,cACA,eACA,OACA,oBACA,UACA,WACA,iBACA,kBACA,oBACA,mBACA,OACA,YACA,UACA,kBACA,MACA,eACA,qBACA,SACA,eACA,WACA,gBACA,QACA,SACA,UACA,oBACA,mBACA,oBACA,kBACA,eACA,iBACA,gCACA,gCACA,gCACA,+BACA,6BACA,aACA,iBACA,iBACA,iBACA,qBACA,eACA,qBACA,MACA,iBACA,iBACA,mBACA,sBACA,kBACA,2BACA,kBACA,gBACA,kBACA,mBACA,eACA,qBACA,mBACA,cACA,oBACA,UACA,cACA,sBACA,eACA,gBACA,kBACA,iBACA,WACA,eACA,0BACA,mBACA,kBACA,WACA,SACA,cACA,aACA,UACA,gBACA,UACA,UACA,kBACA,wBACA,sBACA,oBACA,yBACA,uBACA,wBACA,oBACA,qBACA,uBACA,sBACA,mBACA,WACA,SACA,YACA,SACA,cACA,UACA,aACA,eACA,SACA,SACA,aACA,SACA,iBACA,kBACA,sBACA,SACA,SACA,UACA,WACA,eACA,aACA,eACA,cACA,cACA,cACA,QACA,YACA,cACA,aACA,aACA,aACA,WACA,YACA,YACA,aACA,gBACA,kBACA,iBACA,iBACA,iBACA,cACA,UACA,iBACA,SACA,WACA,WACA,SACA,YACA,iBACA,kBACA,wBACA,SACA,KACA,iBACA,gBACA,2BACA,gBACA,oBACA,sBACA,gBACA,aACA,iBACA,YACA,iBACA,aACA,WACA,eACA,UACA,mBACA,UACA,cACA,gBACA,UACA,SACA,YACA,cACA,eACA,iBACA,WACA,WACA,OACA,YACA,gBACA,mBACA,aACA,mBACA,oBACA,kBACA,oBACA,aACA,cACA,gBACA,2BACA,aACA,kBACA,iBACA,iBACA,kBACA,eACA,WACA,uBACA,SACA,yBACA,gBACA,iCACA,6BACA,iCACA,8BACA,4CACA,8BACA,qBACA,YACA,WACA,eACA,oBACA,sBACA,YACA,oBACA,YACA,WACA,mBACA,UACA,UACA,cACA,kBACA,aACA,qBACA,uBACA,gBACA,eACA,eACA,sBACA,iBACA,iBACA,kBACA,wBACA,+BACA,uBACA,4BACA,8BACA,0BACA,yBACA,0BACA,2BACA,yBACA,4BACA,wBACA,0BACA,0BACA,yBACA,4BACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,gBACA,aACA,aACA,eACA,mBACA,kBACA,YACA,cACA,WACA,mBACA,oBACA,oBACA,oBACA,WACA,gBACA,mBACA,oBACA,eACA,uBACA,6BACA,qBACA,eACA,eACA,sBACA,iBACA,iBACA,eACA,cACA,WACA,iBACA,gBACA,gBACA,gBACA,sBACA,cACA,WACA,cACA,aACA,eACA,gBACA,eACA,gBACA,qBACA,iBACA,eACA,WACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,eACA,eACA,WACA,sBACA,WACA,gBACA,eACA,cACA,cACA,mBACA,cACA,sBACA,WACA,gBACA,WACA,eACA,WACA,cACA,eACA,WACA,cACA,kBACA,mBACA,WACA,cACA,oBACA,kBACA,WACA,oBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,WACA,eACA,iBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,mBACA,mBACA,oBACA,kBACA,sBACA,4BACA,oBACA,WACA,aACA,kBACA,gBACA,mBACA,iBACA,eACA,iBACA,gBACA,cACA,cACA,cACA,eACA,qBACA,oBACA,oBACA,WACA,uBACA,eACA,WACA,cACA,gBACA,eACA,WACA,qBACA,gBACA,mBACA,mBACA,eACA,eACA,eACA,eACA,kBACA,WACA,aACA,eACA,WACA,oBACA,cACA,iBACA,YACA,WACA,qBACA,qBACA,mBACA,WACA,aACA,gBACA,oBACA,uBACA,sBACA,sBACA,sBACA,yBACA,uBACA,sBACA,uBACA,sBACA,wBACA,0BACA,yBACA,4BACA,yBACA,4BACA,sBACA,qBACA,qBACA,qBACA,uBACA,wBACA,WACA,6BACA,iCACA,kCACA,kCACA,8BACA,mCACA,4BACA,2BACA,2BACA,4BACA,2BACA,2BACA,mCACA,kCACA,6BACA,6BACA,6BACA,2BACA,qBACA,qBACA,6BACA,wBACA,qBACA,0BACA,qBACA,kCACA,2BACA,yBACA,mBACA,sBACA,0BACA,gCACA,qBACA,oBACA,4BACA,wBACA,0BACA,oBACA,sBACA,sBACA,yBACA,0BACA,wBACA,wBACA,2BACA,8BACA,qBACA,mBACA,sBACA,0BACA,wBACA,0BACA,0BACA,wBACA,oCACA,kCACA,iCACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,2BACA,wBACA,qBACA,6BACA,uBACA,wBACA,qBACA,wBACA,wBACA,0BACA,oCACA,kCACA,sBACA,4BACA,yBACA,oBACA,qBACA,4BACA,qBACA,yBACA,uBACA,sBACA,sBACA,yBACA,2BACA,0BACA,oBACA,wBACA,uBACA,sBACA,4BACA,6BACA,0BACA,+BACA,4BACA,4BACA,qBACA,6BACA,6BACA,4BACA,0BACA,uBACA,qBACA,qBACA,sBACA,6BACA,wBACA,sBACA,qBACA,yBACA,wBACA,wBACA,0BACA,yBACA,qBACA,sBACA,yBACA,2BACA,uBACA,wBACA,wBACA,wBACA,oBACA,4BACA,sBACA,qBACA,wBACA,wBACA,6BACA,qBACA,qBACA,oBACA,qBACA,uBACA,wBACA,yBACA,WACA,WACA,cACA,OACA,YACA,cACA,WACA,YACA,YACA,eACA,cACA,eACA,mBACA,uBACA,WACA,OACA,iBACA,YACA,sBACA,4BACA,mBACA,oBACA,yBACA,uBACA,gBACA,2BACA,WACA,mBACA,eACA,YACA,yBACA,IACA,uBACA,+BACA,eACA,QACA,eACA,QACA,aACA,eACA,cACA,wBACA,UACA,QACA,aACA,QACA,uBACA,UACA,eACA,SACA,kBACA,QACA,aACA,YACA,QACA,iBACA,cACA,cACA,WACA,UACA,UACA,gBACA,mBACA,gBACA,cACA,iBACA,0BACA,QACA,aACA,aACA,aACA,aACA,aACA,aACA,QACA,iBACA,2BACA,kBACA,sCACA,cACA,qCACA,qCACA,+CACA,uCACA,sBACA,uBACA,oCACA,oCACA,4CACA,0BACA,QACA,iBACA,aACA,WACA,wBACA,gBACA,OACA,YACA,OACA,YACA,WACA,aACA,aACA,eACA,eACA,aACA,WACA,WACA,WACA,uBACA,SACA,UACA,aACA,WACA,UACA,gBACA,eACA,eACA,oBACA,mBACA,mBACA,gBACA,eACA,mBACA,SACA,wBACA,WACA,YACA,aACA,WACA,aACA,kBACA,OACA,oBACA,oBACA,oBACA,kBACA,mBACA,gBACA,kBACA,sBACA,wBACA,kBACA,oBACA,oBACA,iBACA,qBACA,qBACA,mBACA,kBACA,sBACA,qBACA,oBACA,uBACA,iBACA,eACA,cACA,mBACA,sBACA,kBACA,6BACA,kBACA,mBACA,sBACA,gBACA,kBACA,qBACA,kBACA,oBACA,mBACA,mBACA,qBACA,oBACA,gBACA,mBACA,oBACA,kBACA,iBACA,qBACA,mBACA,kBACA,sBACA,kBACA,mBACA,iBACA,mBACA,oBACA,sBACA,oBACA,wBACA,oBACA,uBACA,mBACA,qBACA,iBACA,sBACA,2BACA,mBACA,oBACA,oBACA,oBACA,oBACA,kBACA,mBACA,0BACA,uBACA,sBACA,mBACA,sBACA,0BACA,sBACA,sBACA,kBACA,mBACA,mBACA,mBACA,qBACA,mBACA,kBACA,UACA,UACA,eACA,aACA,gBACA,gBACA,aACA,gBACA,cACA,YACA,qBACA,cACA,uBACA,aACA,gBACA,iBACA,WACA,cACA,iBACA,iBACA,mBACA,aACA,iBACA,wBACA,OACA,mCACA,iCACA,cACA,OACA,YACA,iBACA,MACA,WACA,WACA,WACA,sBACA,qBACA,wBACA,eACA,yBACA,gCACA,2BACA,wBACA,oBACA,oBACA,gBACA,mBACA,SACA,eACA,QACA,cACA,YACA,WACA,aACA,qBACA,iBACA,aACA,aACA,YACA,SACA,gBACA,OACA,4BACA,WACA,OACA,OACA,UACA,iBACA,gBACA,WACA,QACA,WACA,gBACA,uBACA,gCACA,uBACA,SACA,OACA,SACA,kBACA,uBACA,wBACA,QACA,YACA,aACA,aACA,cACA,OACA,OACA,MACA,SACA,UACA,SACA,QACA,UACA,WACA,YACA,UACA,cACA,iBACA,YACA,kBACA,mBACA,WACA,mCACA,4BACA,+BACA,wBACA,mBACA,0BACA,iCACA,mBACA,YACA,sBACA,qBACA,iCACA,6BACA,oBACA,oBACA,mBACA,sBACA,oBACA,8BACA,sBACA,sBACA,8BACA,sBACA,uBACA,uBACA,aACA,eACA,aACA,YACA,mBACA,YACA,kBACA,oBACA,mBACA,eACA,YACA,YACA,YACA,WACA,YACA,UACA,qBACA,oBACA,oBACA,oBACA,sBACA,mBACA,iBACA,mBACA,qBACA,uBACA,wBACA,qBACA,yBACA,sBACA,uBACA,qBACA,uBACA,2CACA,kCACA,qCACA,iCACA,gCACA,8BACA,2BACA,6BACA,+BACA,kCACA,kCACA,iCACA,gCACA,kCACA,kCACA,gCACA,yBACA,yBACA,yBACA,iCACA,yBACA,0BACA,0BACA,MACA,OACA,kBACA,eACA,8BACA,sBACA,aACA,gBACA,gBACA,uBACA,sBACA,kBACA,oBACA,uBACA,YACA,YACA,iBACA,sBACA,gBACA,cACA,cACA,kCACA,6BACA,mBACA,mBACA,wBACA,iBACA,eACA,cACA,UACA,WACA,gBACA,aACA,mBACA,eACA,oBACA,wBACA,uBACA,uBACA,6BACA,mBACA,wBACA,6BACA,gBACA,wBACA,aACA,wBACA,eACA,oBACA,oBACA,oBACA,iBACA,sBACA,uBACA,iBACA,sBACA,sBACA,sBACA,qBACA,cACA,kBACA,aACA,qBACA,eACA,aACA,eACA,qBACA,sBACA,iBACA,gBACA,eACA,gBACA,qBACA,qBACA,qBACA,iBACA,aACA,wBACA,eACA,yBACA,0BACA,0BACA,aACA,iBACA,eACA,iBACA,cACA,gBACA,yBACA,sBACA,YACA,mBACA,6BACA,8BACA,0BACA,2BACA,gBACA,kBACA,iBACA,uBACA,kBACA,mBACA,cACA,gBACA,iBACA,aACA,mBACA,yBACA,wBACA,yBACA,oBACA,eACA,qBACA,oBACA,gBACA,qBACA,wBACA,wBACA,8BACA,eACA,eACA,gBACA,gBACA,oBACA,kBACA,gBACA,mBACA,iBACA,gBACA,iBACA,UACA,wBACA,yBACA,oBACA,gBACA,cACA,eACA,iBACA,kBACA,oBACA,QACA,MACA,OACA,oBACA,SACA,aACA,cACA,wBACA,cACA,OACA,oBACA,gBACA,QACA,WACA,kBACA,gBACA,mBACA,oBACA,sBACA,SACA,WACA,8BACA,cACA,iCACA,MACA,eACA,YACA,cACA,qBACA,OACA,aACA,eACA,WACA,WACA,eACA,mBACA,SACA,eACA,WACA,MACA,2BACA,2BACA,sBACA,sBACA,sBACA,sBACA,OACA,SACA,UACA,6BACA,6BACA,gBACA,SACA,8BACA,sBACA,sBACA,SACA,iBACA,gBACA,iBACA,YACA,YACA,kBACA,kBACA,oBACA,4BACA,4BACA,mCACA,mCACA,gCACA,gCACA,uCACA,uCACA,qBACA,gCACA,gCACA,qBACA,8BACA,8BACA,qBACA,qBACA,kBACA,kBACA,UACA,oBACA,aACA,KACA,gBACA,SACA,wBACA,sBACA,uBACA,uBACA,oBACA,OACA,oBACA,8BACA,kBACA,sBACA,eACA,mBACA,aACA,SACA,cACA,mBACA,kBACA,qBACA,wBACA,4BACA,oBACA,eACA,SACA,cACA,gBACA,oBACA,wBACA,gBACA,UACA,mBACA,QACA,cACA,mBACA,IACA,YACA,qBACA,iBACA,YACA,gBACA,aACA,WACA,UACA,eACA,0BACA,uBACA,yBACA,0BACA,0BACA,sBACA,+BACA,wBACA,4BACA,qBACA,WACA,yCACA,wBACA,8BACA,yCACA,8BACA,2BACA,SACA,UACA,MACA,SACA,UACA,OACA,QACA,WACA,qBACA,4BACA,sBACA,kBACA,4BACA,iBACA,eACA,wBACA,iBACA,gBACA,QACA,aACA,iBACA,mBACA,OACA,iBACA,SACA,UACA,WACA,aACA,eACA,UACA,2BACA,iBACA,kBACA,yBACA,wBACA,WACA,kBACA,cACA,eACA,mBACA,iBACA,aACA,YACA,eACA,eACA,SACA,gBACA,iBACA,uBACA,mBACA,kBACA,cACA,2BACA,aACA,QACA,UACA,WACA,iBACA,qBACA,eACA,gBACA,yBACA,qBACA,eACA,cACA,wBACA,gBACA,8BACA,YACA,OACA,aACA,eACA,UACA,QACA,SACA,YACA,qBACA,YACA,eACA,iBACA,cACA,qBACA,oBACA,oBACA,+BACA,+BACA,mBACA,0BACA,yBACA,eACA,qBACA,sBACA,eACA,eACA,gBACA,iBACA,0BACA,0BACA,cACA,eACA,qBACA,oBACA,cACA,cACA,aACA,gBACA,gBACA,cACA,wBACA,qBACA,yBACA,WACA,yBACA,oBACA,0BACA,6BACA,mBACA,qBACA,yBACA,qBACA,oBACA,wBACA,oBACA,wBACA,iCACA,kBACA,oBACA,2BACA,sBACA,mBACA,qBACA,WACA,sCACA,mBACA,iBACA,iBACA,oBACA,cACA,aACA,qBACA,yBACA,oBACA,eACA,oBACA,0BACA,gCACA,wBACA,6BACA,8BACA,8BACA,2BACA,yBACA,oBACA,oBACA,oBACA,oBACA,oBACA,2BACA,oBACA,oBACA,wBACA,yBACA,qBACA,yBACA,+BACA,wBACA,mBACA,yBACA,mBACA,iBACA,qBACA,2BACA,yBACA,wBACA,wBACA,0BACA,cACA,qBACA,kBACA,qBACA,qBACA,qBACA,kBACA,kBACA,YACA,gBACA,iBACA,2BACA,kBACA,mBACA,iBACA,YACA,qBACA,yBACA,YACA,gBACA,WACA,iBACA,aACA,mBACA,mBACA,sBACA,4BACA,4BACA,kCACA,kCACA,gCACA,gCACA,sCACA,sCACA,sBACA,gCACA,gCACA,sBACA,8BACA,8BACA,iBACA,sBACA,sBACA,oBACA,WACA,eACA,oBACA,qBACA,yBACA,2BACA,UACA,iBACA,qBACA,gBACA,mBACA,gBACA,iBACA,gBACA,kBACA,mBACA,mBACA,iBACA,kBACA,wBACA,iBACA,qBACA,4BACA,kBACA,eACA,mBACA,eACA,gBACA,kBACA,iBACA,cACA,gBACA,eACA,oBACA,qBACA,oBACA,wBACA,4BACA,gBACA,gBACA,gBACA,gBACA,sBACA,6BACA,yBACA,kCACA,wBACA,yBACA,oBACA,uBACA,oBACA,yBACA,8BACA,+BACA,0BACA,8BACA,6BACA,8BACA,uBACA,2BACA,8BACA,4BACA,0BACA,2BACA,8BACA,0BACA,8BACA,2BACA,mCACA,0CACA,gCACA,kCACA,iCACA,wCACA,qCACA,wCACA,sCACA,qCACA,uCACA,sCACA,gCACA,8BACA,+BACA,gCACA,mCACA,+BACA,wBACA,oBACA,qBACA,qBACA,oBACA,oBACA,wBACA,oBACA,4BACA,oBACA,oBACA,yBACA,8BACA,0BACA,iCACA,0BACA,yBACA,4BACA,qBACA,yBACA,4BACA,uBACA,wBACA,0BACA,iCACA,gCACA,kCACA,6BACA,qBACA,yBACA,kCACA,wBACA,oBACA,iCACA,yBACA,6BACA,sCACA,+BACA,kCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,uBACA,2BACA,0BACA,2BACA,0BACA,wBACA,yBACA,uBACA,uBACA,sBACA,sBACA,sBACA,0BACA,wBACA,mCACA,iCACA,8BACA,kCACA,wBACA,+BACA,qBACA,yBACA,yBACA,yBACA,aACA,aACA,SACA,oBACA,SACA,sBACA,kBACA,+BACA,YACA,gBACA,yBACA,4BACA,qBACA,MACA,aACA,eACA,qBACA,uBACA,2BACA,gBACA,UACA,eACA,SACA,aACA,iBACA,eACA,SACA,cACA,YACA,4BACA,8BACA,8BACA,4BACA,6BACA,+BACA,UACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,aACA,qBACA,2BACA,mBACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,qBACA,6BACA,qBACA,iBACA,iBACA,YACA,UACA,cACA,gBACA,2BACA,WACA,YACA,eACA,iBACA,oBACA,WACA,oBACA,gBACA,cACA,gBACA,OACA,cACA,cACA,YACA,cACA,YACA,eACA,mBACA,gBACA,YACA,aACA,QACA,aACA,YACA,aACA,kBACA,aACA,YACA,UACA,WACA,cACA,eACA,0BACA,wBACA,+BACA,+BACA,mBACA,qCACA,sBACA,iCACA,oBACA,SACA,gBACA,eACA,iBACA,yBACA,yBACA,uBACA,6BACA,cACA,WACA,MACA,kBACA,eACA,mBACA,MACA,cACA,cACA,aACA,oBACA,qBACA,+BACA,qBACA,kBACA,iBACA,iBACA,SACA,UACA,iBACA,cACA,qCACA,oCACA,8BACA,iCACA,8BACA,2BACA,6BACA,2BACA,gBACA,WACA,gBACA,UACA,WACA,gBACA,SACA,YACA,gBACA,mBACA,qBACA,wBACA,uBACA,qBACA,qBACA,iBACA,UACA,UACA,kBACA,cACA,oBACA,mBACA,eACA,oBACA,wBACA,cACA,6BACA,eACA,uBACA,mBACA,uBACA,oBACA,sBACA,uBACA,wBACA,yBACA,kBACA,sBACA,0BACA,gBACA,gBACA,sBACA,6BACA,wBACA,kBACA,oBACA,yBACA,kBACA,wCACA,cACA,mBACA,qBACA,yBACA,wBACA,YACA,aACA,SACA,SACA,cACA,iBACA,4BACA,0BACA,8BACA,uBACA,gBACA,qCACA,iBACA,iBACA,kBACA,kBACA,cACA,gBACA,OACA,SACA,SACA,mBACA,mBACA,mBACA,mBACA,UACA,YACA,gBACA,IACA,QACA,OACA,QACA,MACA,WACA,eACA,+BACA,cACA,SACA,gBACA,aACA,YACA,iBACA,WACA,OACA,QACA,SACA,YACA,SACA,aACA,gBACA,sBACA,oBACA,gBACA,MACA,cACA,eACA,eACA,SACA,aACA,mBACA,YACA,gBACA,aACA,kBACA,YACA,cACA,WACA,cACA,UACA,aACA,WACA,YACA,UACA,kBACA,kBACA,YACA,eACA,WACA,sBACA,aACA,iBACA,kBACA,SACA,YACA,MACA,UACA,QACA,YACA,QACA,gBACA,cACA,aACA,eACA,aACA,YACA,oBACA,aACA,MACA,kBACA,oBACA,QACA,MACA,cACA,UACA,SACA,UACA,WACA,mBACA,YACA,kBACA,SACA,aACA,eACA,UACA,QACA,UACA,UACA,uBACA,gCACA,sBACA,iBACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,iBACA,qBACA,oBACA,oBACA,0BACA,gBACA,qBACA,qBACA,0BACA,mBACA,cACA,MACA,cACA,kBACA,UACA,mBACA,aACA,SACA,eACA,cACA,aACA,aACA,eACA,cACA,aACA,eACA,kBACA,oBACA,UACA,mBACA,QACA,eACA,MACA,QACA,UACA,QACA,YACA,cACA,OACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,OACA,cACA,eACA,cACA,SACA,aACA,WACA,gBACA,qBACA,aACA,cACA,gBACA,aACA,iBACA,eACA,cACA,YACA,WACA,cACA,YACA,WACA,aACA,eACA,YACA,WACA,OACA,OACA,UACA,IACA,OACA,sBACA,qBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,uBACA,sBACA,iBACA,kBACA,kBACA,mBACA,qBACA,sBACA,sBACA,mBACA,iBACA,WACA,UACA,iBACA,iBACA,WACA,aACA,UACA,UACA,gBACA,UACA,OACA,eACA,iBACA,YACA,WACA,iBACA,eACA,eACA,OACA,gBACA,UACA,eACA,OACA,MACA,aACA,OACA,qBACA,aACA,kBACA,mBACA,cACA,aACA,gBACA,wBACA,YACA,oBACA,QACA,OACA,iBACA,OACA,OACA,OACA,WACA,OACA,YACA,eACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,eACA,oBACA,yBACA,0BACA,oBACA,oBACA,iBACA,cACA,kBACA,mBACA,cACA,oBACA,oBACA,mBACA,oBACA,mBACA,aACA,kBACA,kBACA,kBACA,eACA,cACA,mBACA,mBACA,mBACA,gBACA,cACA,YACA,iBACA,sBACA,uBACA,iBACA,iBACA,cACA,SACA,eACA,QACA,gBACA,qBACA,iBACA,eACA,cACA,gBACA,SACA,uBACA,aACA,aACA,qBACA,YACA,YACA,aACA,cACA,cACA,kBACA,OACA,UACA,SACA,aACA,cACA,aACA,gBACA,WACA,iBACA,UACA,cACA,SACA,WACA,UACA,aACA,aACA,IACA,OACA,SACA,iBACA,eACA,cACA,kBACA,cACA,cACA,SACA,uBACA,eACA,wBACA,aACA,YACA,SACA,UACA,eACA,cACA,gBACA,oBACA,yBACA,sBACA,OACA,QACA,WACA,OACA,KACA,OACA,YACA,cACA,cACA,QACA,KACA,QACA,QACA,YACA,iBACA,UACA,eACA,mBACA,wBACA,OACA,SACA,WACA,aACA,YACA,eACA,WACA,eACA,UACA,iBACA,yBACA,oBACA,gBACA,UACA,oBACA,aACA,WACA,SACA,aACA,OACA,YACA,YACA,UACA,QACA,kBACA,aACA,YACA,aACA,iBACA,gBACA,aACA,gBACA,kBACA,YACA,uBACA,cACA,eACA,eACA,aACA,QACA,aACA,eACA,oBACA,aACA,aACA,cACA,YACA,cACA,UACA,UACA,OACA,YACA,YACA,aACA,WACA,WACA,gBACA,YACA,WACA,UACA,gBACA,QACA,gBACA,YACA,aACA,QACA,YACA,SACA,UACA,MACA,QACA,MACA,OACA,WACA,cACA,WACA,UACA,WACA,gBACA,kBACA,YACA,UACA,QACA,QACA,sBACA,8BACA,aACA,qBACA,4BACA,YACA,YACA,OACA,cACA,aACA,YACA,eACA,aACA,kBACA,kBACA,kBACA,aACA,cACA,UACA,UACA,oBACA,0BACA,UACA,wBACA,0BACA,mBACA,cACA,eACA,aACA,aACA,UACA,gBACA,WACA,qBACA,uBACA,yBACA,uBACA,0BACA,SACA,gBACA,iBACA,iBACA,gBACA,UACA,qBACA,uCACA,kCACA,UACA,aACA,eACA,YACA,aACA,kBACA,UACA,cACA,qBACA,cACA,YACA,WACA,eACA,UACA,kBACA,kBACA,kBACA,oBACA,mBACA,cACA,gBACA,UACA,cACA,cACA,WACA,aACA,UACA,aACA,WACA,0BACA,SACA,gBACA,SACA,kBACA,iBACA,oBACA,gBACA,aACA,uBACA,0BACA,MACA,OACA,QACA,oBACA,gBACA,mBACA,eACA,WACA,kBACA,SACA,iBACA,eACA,kBACA,oBACA,qBACA,eACA,qBACA,qBACA,sBACA,gBACA,sBACA,wBACA,gBACA,2BACA,qBACA,kBACA,mBACA,oBACA,cACA,kBACA,iBACA,yBACA,qBACA,2BACA,gBACA,kBACA,wBACA,cACA,oBACA,mBACA,oBACA,iBACA,aACA,iBACA,qBACA,oBACA,kBACA,cACA,uBACA,uBACA,2BACA,kBACA,+BACA,0BACA,oBACA,mBACA,qBACA,qBACA,oBACA,kBACA,cACA,mBACA,eACA,gBACA,qBACA,cACA,8BACA,gBACA,uBACA,cACA,wBACA,qBACA,iBACA,kBACA,kBACA,kBACA,yBACA,yBACA,4BACA,kCACA,kCACA,wCACA,wCACA,sCACA,sCACA,4CACA,4CACA,4BACA,sCACA,sCACA,4BACA,oCACA,oCACA,4BACA,4BACA,iBACA,gBACA,qBACA,+BACA,wBACA,gBACA,eACA,mBACA,qBACA,mBACA,cACA,cACA,cACA,iBACA,kBACA,gBACA,cACA,kBACA,mBACA,mBACA,eACA,cACA,SACA,MACA,WACA,WACA,UACA,eACA,UACA,WACA,OACA,WACA,cACA,cACA,eACA,gBACA,aACA,eACA,eACA,gBACA,cACA,mBACA,cACA,SACA,QACA,cACA,KACA,KACA,IACA,OACA,UACA,eACA,eACA,UACA,eACA,WACA,UACA,WACA,KACA,QACA,kBACA,UACA,SACA,kBACA,YACA,qBACA,UACA,UACA,iBACA,iBACA,eACA,sBACA,mBACA,kBACA,gBACA,aACA,eACA,cACA,gBACA,QACA,sBACA,sBACA,mBACA,iBACA,YACA,SACA,eACA,gBACA,aACA,iBACA,aACA,iBACA,oBACA,qBACA,cACA,eACA,oBACA,gBACA,qBACA,YACA,aACA,eACA,cACA,cACA,gBACA,uBACA,WACA,eACA,iBACA,oBACA,QACA,YACA,SACA,SACA,SACA,YACA,YACA,aACA,aACA,YACA,cACA,cACA,aACA,cACA,iBACA,SACA,cACA,eACA,SACA,SACA,mBACA,aACA,aACA,kBACA,SACA,aACA,MACA,UACA,YACA,SACA,UACA,2BACA,WACA,kBACA,aACA,gBACA,UACA,gBACA,UACA,SACA,WACA,WACA,aACA,WACA,UACA,WACA,kBACA,eACA,cACA,UACA,oBACA,cACA,cACA,cACA,2BACA,6BACA,iBACA,aACA,SACA,kBACA,oBACA,oBACA,mBACA,OACA,gBACA,WACA,WACA,YACA,aACA,2BACA,sBACA,eACA,6BACA,oBACA,YACA,oBACA,sBACA,sBACA,qBACA,aACA,qBACA,WACA,OACA,YACA,WACA,SACA,QACA,KACA,KACA,SACA,IACA,WACA,gBACA,cACA,mBACA,WACA,YACA,UACA,QACA,SACA,QACA,cACA,aACA,SACA,mBACA,0BACA,0BACA,UACA,gBACA,SACA,YACA,qBACA,WACA,UACA,UACA,MACA,eACA,aACA,eACA,cACA,YACA,UACA,QACA,WACA,WACA,UACA,YACA,YACA,oBACA,QACA,YACA,SACA,OACA,WACA,QACA,aACA,QACA,YACA,OACA,cACA,sBACA,aACA,iBACA,kBACA,MACA,SACA,yBACA,UACA,YACA,aACA,yBACA,QACA,WACA,+BACA,YACA,SACA,aACA,aACA,eACA,WACA,4BACA,kBACA,cACA,IACA,OACA,eACA,WACA,aACA,0BACA,WACA,QACA,QACA,aACA,UACA,UACA,kBACA,aACA,mBACA,WACA,WACA,kBACA,WACA,QACA,OACA,eACA,YACA,cACA,WACA,WACA,YACA,WACA,SACA,aACA,aACA,cACA,UACA,OACA,YACA,WACA,WACA,SACA,YACA,aACA,oBACA,YACA,QACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,YACA,gBACA,WACA,WACA,aACA,WACA,QACA,QACA,QACA,cACA,gBACA,aACA,eACA,QACA,QACA,QACA,YACA,cACA,OACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,eACA,aACA,iBACA,eACA,0BACA,oBACA,0BACA,yBACA,uBACA,wBACA,cACA,aACA,sBACA,cACA,uBACA,WACA,iBACA,uBACA,cACA,YACA,gBACA,cACA,wBACA,kBACA,uBACA,uBACA,qBACA,sBACA,aACA,YACA,QACA,WACA,MACA,UACA,cACA,OACA,aACA,cACA,aACA,iBACA,aACA,SACA,QACA,UACA,KACA,QACA,cACA,eACA,eACA,0BACA,uBACA,SACA,YACA,SACA,YACA,oBACA,OACA,eACA,gBACA,cACA,YACA,SACA,aACA,oBACA,oBACA,KACA,KACA,OACA,UACA,QACA,iBACA,cACA,iBACA,kBACA,cACA,gBACA,MACA,kBACA,mBACA,kBACA,SACA,wBACA,YACA,cACA,qBACA,oBACA,eACA,iBACA,mBACA,qBACA,iBACA,UACA,aACA,UACA,cACA,wBACA,qBACA,uBACA,wBACA,sBACA,SACA,+BACA,iBACA,uBACA,gBACA,iBACA,6BACA,mBACA,wBACA,mBACA,aACA,uBACA,kBACA,eACA,aACA,qBACA,iBACA,UACA,mBACA,UACA,SACA,0BACA,gCACA,sBACA,cACA,iBACA,yBACA,oBACA,uBACA,yBACA,mBACA,uBACA,aACA,mBACA,mBACA,WACA,eACA,kBACA,aACA,UACA,aACA,aACA,wBACA,yBACA,gBACA,oCACA,uBACA,cACA,cACA,WACA,eACA,WACA,WACA,UACA,sBACA,UACA,WACA,SACA,cACA,kBACA,WACA,qBACA,cACA,cACA,kBACA,aACA,mBACA,WACA,eACA,iBACA,cACA,mBACA,mCACA,mBACA,2BACA,sBACA,wBACA,eACA,qBACA,mBACA,gBACA,uBACA,2BACA,oBACA,oBACA,sBACA,sBACA,sBACA,uBACA,mBACA,iBACA,mBACA,kBACA,aACA,eACA,eACA,kBACA,mBACA,2BACA,oBACA,UACA,oBACA,iBACA,eACA,aACA,eACA,aACA,mBACA,qBACA,2BACA,kBACA,oBACA,eACA,aACA,2BACA,yBACA,eACA,WACA,oBACA,gBACA,iBACA,qBACA,kBACA,yBACA,kBACA,UACA,oBACA,iBACA,eACA,YACA,wBACA,aACA,YACA,iBACA,cACA,qBACA,gBACA,cACA,gBACA,YACA,YACA,WACA,aACA,qBACA,eACA,YACA,aACA,mBACA,kBACA,wBACA,0BACA,iBACA,mBACA,UACA,YACA,SACA,cACA,2BACA,6BACA,2BACA,WACA,KACA,oBACA,gBACA,WACA,QACA,QACA,iBACA,WACA,sBACA,MACA,eACA,iBACA,gBACA,gBACA,iBACA,eACA,aACA,WACA,YACA,iBACA,OACA,OACA,UACA,UACA,SACA,SACA,OACA,YACA,OACA,OACA,UACA,kBACA,kBACA,qBACA,OACA,WACA,OACA,WACA,SACA,wBACA,UACA,WACA,YACA,cACA,QACA,QACA,qBACA,oBACA,OACA,KACA,aACA,WACA,YACA,aACA,oBACA,kBACA,mBACA,iBACA,SACA,WACA,UACA,iBACA,YACA,aACA,mBACA,UACA,OACA,OACA,MACA,MACA,kCACA,UACA,WACA,cACA,gBACA,QACA,aACA,UACA,YACA,sBACA,sBACA,OACA,OACA,qBACA,sBACA,qBACA,iBACA,mBACA,uBACA,kBACA,WACA,wBACA,6BACA,gBACA,iBACA,YACA,iBACA,mBACA,sBACA,eACA,oBACA,0BACA,mBACA,iBACA,uBACA,sBACA,oBACA,mBACA,oBACA,gBACA,0BACA,mBACA,oBACA,oBACA,sBACA,yBACA,mBACA,gBACA,gBACA,iBACA,sBACA,cACA,2BACA,4BACA,uBACA,iBACA,cACA,aACA,gBACA,QACA,YACA,cACA,YACA,aACA,QACA,cACA,gBACA,cACA,wBACA,qBACA,qBACA,eACA,aACA,aACA,mBACA,aACA,YACA,aACA,eACA,YACA,iBACA,iBACA,iBACA,WACA,uBACA,UACA,aACA,KACA,OACA,cACA,UACA,6BACA,WACA,2BACA,SACA,cACA,cACA,oBACA,6BACA,gBACA,qBACA,aACA,YACA,UACA,cACA,eACA,WACA,gBACA,WACA,cACA,OACA,aACA,YACA,QACA,cACA,QACA,SACA,gBACA,gBACA,iBACA,kBACA,kBACA,YACA,YACA,qBACA,8BACA,gBACA,iBACA,gBACA,aACA,WACA,WACA,cACA,aACA,YACA,YACA,kBACA,SACA,YACA,UACA,OACA,SACA,WACA,UACA,YACA,WACA,YACA,cACA,WACA,cACA,WACA,OACA,OACA,kBACA,iBACA,KACA,KACA,KACA,KACA,eACA,oBACA,oBACA,UACA,MACA,UACA,SACA,gBACA,kBACA,cACA,UACA,YACA,UACA,WACA,OACA,UACA,OACA,OACA,QACA,SACA,OACA,WACA,YACA,eACA,YACA,mBACA,cACA,YACA,cACA,YACA,qBACA,kBACA,eACA,mBACA,WACA,YACA,YACA,oBACA,WACA,SACA,SACA,aACA,aACA,iBACA,iBACA,iBACA,iBACA,SACA,OACA,cACA,aACA,SACA,eACA,mBACA,iBACA,gBACA,QACA,iBACA,gBACA,oBACA,OACA,cACA,YACA,YACA,UACA,iBACA,aACA,WACA,aACA,SACA,YACA,0BACA,SACA,OACA,YACA,cACA,QACA,OACA,aACA,mBACA,sBACA,kBACA,YACA,iBACA,oBACA,gBACA,WACA,OACA,eACA,iBACA,YACA,SACA,mBACA,YACA,eACA,SACA,gBACA,WACA,cACA,OACA,aACA,MACA,QACA,QACA,OACA,cACA,cACA,WACA,YACA,qBACA,eACA,OACA,UACA,YACA,UACA,MACA,QACA,aACA,YACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,UACA,SACA,gBACA,cACA,eACA,aACA,eACA,eACA,aACA,cACA,YACA,cACA,OACA,SACA,aACA,aACA,gBACA,eACA,YACA,eACA,YACA,eACA,cACA,cACA,cACA,QACA,OACA,YACA,mBACA,WACA,YACA,QACA,aACA,cACA,UACA,SACA,kBACA,MACA,aACA,YACA,kBACA,kBACA,0BACA,cACA,cACA,YACA,YACA,iBACA,WACA,WACA,UACA,cACA,QACA,eACA,eACA,aACA,YACA,YACA,cACA,SACA,UACA,kBACA,UACA,eACA,kBACA,UACA,SACA,WACA,YACA,MACA,aACA,YACA,cACA,YACA,WACA,WACA,aACA,iBACA,eACA,OACA,SACA,QACA,OACA,SACA,UACA,YACA,gBACA,gBACA,iBACA,cACA,WACA,UACA,YACA,SACA,iBACA,oBACA,cACA,SACA,wBACA,UACA,UACA,mBACA,sBACA,qBACA,0BACA,sBACA,iCACA,mBACA,6BACA,iBACA,aACA,cACA,sBACA,sBACA,6BACA,YACA,UACA,gBACA,mBACA,qBACA,cACA,iBACA,gBACA,gBACA,uBACA,uBACA,YACA,gBACA,eACA,eACA,iBACA,kBACA,cACA,aACA,YACA,2BACA,eACA,kBACA,kBACA,iBACA,iBACA,UACA,eACA,WACA,YACA,qBACA,qBACA,eACA,eACA,YACA,iBACA,gBACA,mBACA,kBACA,SACA,wBACA,qBACA,oBACA,cACA,mBACA,qBACA,uBACA,2BACA,YACA,2BACA,uBACA,wBACA,eACA,qBACA,gBACA,eACA,YACA,eACA,eACA,aACA,uBACA,mBACA,qBACA,cACA,mBACA,uBACA,sBACA,sBACA,4BACA,kBACA,uBACA,uBACA,4BACA,uBACA,qBACA,6BACA,YACA,mBACA,gCACA,uBACA,mBACA,UACA,wBACA,sBACA,qBACA,wBACA,wBACA,oBACA,0BACA,wBACA,mBACA,eACA,WACA,eACA,sBACA,qBACA,mBACA,iBACA,aACA,eACA,SACA,cACA,kBACA,aACA,kBACA,iBACA,iBACA,cACA,aACA,iBACA,sBACA,aACA,aACA,aACA,wBACA,sBACA,sBACA,oBACA,qBACA,2BACA,wBACA,eACA,oBACA,mBACA,gBACA,YACA,iBACA,gBACA,aACA,WACA,uBACA,wBACA,wBACA,uBACA,YACA,0BACA,aACA,cACA,sBACA,iBACA,cACA,SACA,cACA,oBACA,6BACA,eACA,oBACA,mBACA,gBACA,kBACA,gBACA,sBACA,mBACA,6BACA,kBACA,mBACA,mBACA,0BACA,0BACA,sBACA,aACA,mBACA,mBACA,gBACA,oBACA,oBACA,oBACA,oBACA,gBACA,sBACA,sBACA,mBACA,gBACA,gBACA,sBACA,iBACA,iBACA,sBACA,0BACA,mBACA,WACA,gBACA,gBACA,gCACA,+BACA,iCACA,gCACA,cACA,oBACA,mBACA,eACA,oBACA,uBACA,uBACA,6BACA,sBACA,gCACA,eACA,oBACA,aACA,eACA,gBACA,sBACA,SACA,WACA,KACA,aACA,oBACA,YACA,WACA,WACA,eACA,cACA,QACA,IACA,OACA,WACA,YACA,iBACA,QACA,eACA,aACA,gBACA,eACA,WACA,aACA,iBACA,kBACA,YACA,OACA,yBACA,WACA,WACA,eACA,WACA,eACA,SACA,WACA,yBACA,aACA,UACA,OACA,qBACA,WACA,WACA,cACA,WACA,SACA,WACA,UACA,aACA,SACA,WACA,WACA,YACA,YACA,wBACA,eACA,YACA,OACA,cACA,UACA,SACA,MACA,aACA,SACA,mBACA,iBACA,gBACA,kBACA,cACA,mBACA,SACA,aACA,kBACA,YACA,iBACA,cACA,mBACA,UACA,KACA,qBACA,SACA,eACA,aACA,aACA,eACA,YACA,cACA,UACA,UACA,KACA,SACA,WACA,aACA,kBACA,SACA,UACA,aACA,WACA,cACA,aACA,eACA,uBACA,gBACA,aACA,iBACA,eACA,iBACA,sBACA,mBACA,eACA,cACA,qBACA,oBACA,gBACA,gBACA,wBACA,iBACA,iBACA,YACA,SACA,WACA,aACA,WACA,WACA,wBACA,wBACA,0BACA,YACA,mBACA,eACA,WACA,mBACA,uBACA,aACA,UACA,UACA,4BACA,aACA,gBACA,kBACA,SACA,cACA,QACA,kBACA,gBACA,mBACA,oBACA,aACA,eACA,gBACA,iBACA,sBACA,oBACA,0BACA,YACA,gBACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,cACA,QACA,UACA,UACA,UACA,gBACA,SACA,iBACA,WACA,UACA,YACA,aACA,qBACA,oBACA,kBACA,eACA,iBACA,sBACA,eACA,SACA,iBACA,6BACA,aACA,UACA,YACA,YACA,aACA,UACA,mBACA,mBACA,gBACA,SACA,eACA,mBACA,YACA,cACA,gBACA,uBACA,OACA,SACA,YACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,eACA,SACA,YACA,cACA,wBACA,uBACA,yBACA,yBACA,wBACA,kBACA,uBACA,sBACA,oBACA,uBACA,iBACA,kBACA,mBACA,iBACA,wBACA,mBACA,yBACA,+BACA,cACA,wBACA,oBACA,kBACA,mBACA,mBACA,mBACA,kBACA,iBACA,kBACA,gBACA,kCACA,qBACA,sBACA,YACA,aACA,aACA,YACA,WACA,SACA,sBACA,eACA,aACA,aACA,UACA,UACA,SACA,YACA,sBACA,kBACA,gBACA,iBACA,iBACA,sBACA,qBACA,gBACA,eACA,gBACA,cACA,aACA,aACA,mBACA,eACA,qBACA,iBACA,gBACA,UACA,WACA,cACA,gBACA,6BACA,WACA,WACA,aACA,YACA,eACA,iBACA,WACA,WACA,WACA,YACA,WACA,oBACA,gBACA,SACA,yBACA,aACA,eACA,cACA,gBACA,YACA,UACA,gBACA,SACA,YACA,kBACA,WACA,YACA,YACA,cACA,YACA,eACA,WACA,gBACA,aACA,cACA,eACA,kBACA,WACA,gBACA,kBACA,kBACA,kBACA,kBACA,iBACA,YACA,YACA,uBACA,6BACA,yBACA,iDACA,2BACA,0BACA,mBACA,mBACA,qBACA,kBACA,4BACA,4CACA,4BACA,2BACA,mCACA,wBACA,UACA,SACA,UACA,OACA,aACA,eACA,gBACA,SACA,QACA,gBACA,WACA,MACA,UACA,UACA,QACA,SACA,SACA,UACA,MACA,SACA,cACA,aACA,cACA,SACA,iBACA,UACA,QACA,YACA,cACA,YACA,aACA,UACA,gBACA,iBACA,gBACA,gBACA,eACA,gBACA,eACA,eACA,eACA,WACA,aACA,aACA,YACA,YACA,mBACA,aACA,gBACA,eACA,YACA,YACA,kBACA,gBACA,KACA,KACA,KACA,KACA,MACA,UACA,iBACA,eACA,gBACA,cACA,gBACA,cACA,eACA,aACA,OACA,mBACA,oBACA,oBACA,iBACA,kBACA,kBACA,YACA,QACA,cACA,QACA,cACA,QACA,cACA,aACA,gBACA,YACA,UACA,eACA,SACA,gBACA,aACA,aACA,mBACA,iBACA,eACA,QACA,aACA,kBACA,WACA,eACA,WACA,YACA,OACA,aACA,cACA,cACA,sBACA,WACA,UACA,sBACA,kBACA,mBACA,eACA,QACA,kBACA,cACA,SACA,UACA,cACA,aACA,YACA,cACA,cACA,qBACA,oBACA,qBACA,oBACA,QACA,OACA,QACA,cACA,aACA,cACA,YACA,aACA,cACA,WACA,yBACA,yBACA,aACA,cACA,WACA,OACA,eACA,gBACA,eACA,SACA,UACA,cACA,QACA,iBACA,6BACA,iBACA,gBACA,YACA,qBACA,cACA,SACA,YACA,YACA,YACA,gBACA,MACA,sBACA,kBACA,iBACA,OACA,QACA,QACA,QACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,gBACA,YACA,cACA,SACA,MACA,WACA,kBACA,YACA,yBACA,yBACA,SACA,UACA,gBACA,sBACA,4BACA,UACA,WACA,YACA,iBACA,oBACA,yBACA,eACA,eACA,gBACA,kBACA,oBACA,aACA,gBACA,iBACA,aACA,QACA,aACA,0BACA,UACA,oBACA,UACA,aACA,UACA,aACA,WACA,SACA,aACA,uBACA,eACA,WACA,eACA,YACA,cACA,gBACA,WACA,YACA,YACA,OACA,mBACA,YACA,MACA,eACA,mBACA,YACA,sBACA,uBACA,oBACA,wBACA,mBACA,oBACA,gBACA,mBACA,QACA,SACA,IACA,KACA,KACA,OACA,aACA,UACA,UACA,SACA,QACA,aACA,WACA,WACA,cACA,gBACA,cACA,iBACA,OACA,QACA,MACA,OACA,oBACA,qBACA,aACA,gBACA,aACA,WACA,aACA,sBACA,aACA,SACA,SACA,WACA,YACA,eACA,YACA,OACA,MACA,gBACA,cACA,gBACA,SACA,cACA,YACA,cACA,OACA,OACA,gBACA,WACA,UACA,SACA,gBACA,gBACA,WACA,UACA,WACA,yBACA,kBACA,0BACA,SACA,MACA,UACA,cACA,gBACA,UACA,iBACA,gBACA,wBACA,wBACA,WACA,SACA,iBACA,oBACA,SACA,kBACA,kBACA,oBACA,sBACA,iBACA,cACA,YACA,sBACA,eACA,eACA,aACA,iBACA,kBACA,oBACA,aACA,kBACA,iBACA,cACA,eACA,aACA,sCACA,qBACA,eACA,cACA,iBACA,yBACA,iCACA,eACA,sBACA,iBACA,gBACA,SACA,UACA,sBACA,eACA,cACA,YACA,cACA,cACA,eACA,eACA,mBACA,iBACA,wBACA,sBACA,cACA,oBACA,8BACA,oBACA,qBACA,eACA,mBACA,WACA,qBACA,mBACA,QACA,iBACA,SACA,WACA,WACA,UACA,WACA,eACA,cACA,gBACA,eACA,eACA,cACA,cACA,UACA,SACA,aACA,SACA,cACA,MACA,UACA,WACA,YACA,kBACA,WACA,QACA,eACA,cACA,gBACA,OACA,cACA,SACA,kBACA,sBACA,mBACA,uBACA,aACA,WACA,eACA,QACA,WACA,UACA,OACA,YACA,eACA,eACA,QACA,UACA,eACA,KACA,KACA,SACA,iBACA,aACA,UACA,OACA,QACA,UACA,cACA,kBACA,sBACA,YACA,SACA,UACA,QACA,YACA,SACA,SACA,mBACA,gBACA,aACA,2BACA,2BACA,YACA,UACA,UACA,UACA,SACA,kBACA,eACA,iBACA,WACA,gBACA,gBACA,cACA,eACA,iBACA,yBACA,aACA,gBACA,aACA,aACA,WACA,YACA,eACA,cACA,UACA,UACA,wBACA,sBACA,qBACA,2BACA,qBACA,0BACA,uBACA,sBACA,aACA,YACA,MACA,gBACA,SACA,OACA,SACA,YACA,uBACA,eACA,kBACA,wBACA,WACA,OACA,WACA,UACA,SACA,oBACA,aACA,qBACA,cACA,mBACA,kBACA,WACA,gBACA,kBACA,wBACA,wBACA,YACA,qBACA,eACA,iBACA,WACA,eACA,OACA,OACA,eACA,aACA,SACA,gBACA,YACA,oBACA,gBACA,YACA,iBACA,MACA,YACA,WACA,eACA,iBACA,mBACA,qBACA,mBACA,8BACA,aACA,WACA,wBACA,iBACA,oBACA,UACA,UACA,eACA,SACA,cACA,eACA,cACA,eACA,eACA,aACA,aACA,gBACA,cACA,WACA,eACA,WACA,WACA,UACA,cACA,UACA,aACA,cACA,cACA,eACA,sBACA,YACA,iBACA,eACA,kBACA,aACA,gBACA,WACA,eACA,iBACA,2BACA,mBACA,kBACA,iBACA,mCACA,WACA,eACA,kBACA,oBACA,cACA,gBACA,cACA,iBACA,cACA,sBACA,YACA,eACA,uBACA,mBACA,eACA,8BACA,YACA,WACA,aACA,oBACA,uBACA,YACA,WACA,WACA,WACA,gBACA,iBACA,kBACA,iBACA,iBACA,mBACA,kBACA,uBACA,UACA,aACA,eACA,eACA,aACA,iBACA,cACA,qBACA,gBACA,cACA,gBACA,YACA,YACA,WACA,SACA,iBACA,sBACA,cACA,cACA,aACA,UACA,cACA,eACA,MACA,eACA,aACA,cACA,gBACA,gBACA,aACA,QACA,kBACA,iBACA,QACA,QACA,WACA,YACA,OACA,WACA,YACA,kBACA,qBACA,mBACA,UACA,OACA,iBACA,MACA,kBACA,OACA,OACA,gBACA,QACA,QACA,YACA,QACA,YACA,QACA,QACA,QACA,OACA,wBACA,cACA,eACA,iBACA,OACA,OACA,SACA,eACA,gBACA,cACA,UACA,OACA,UACA,WACA,YACA,mBACA,mBACA,kBACA,QACA,eACA,aACA,SACA,QACA,YACA,eACA,OACA,MACA,aACA,YACA,SACA,SACA,UACA,SACA,QACA,kBACA,aACA,aACA,UACA,QACA,iBACA,WACA,cACA,iBACA,YACA,aACA,QACA,SACA,gBACA,aACA,YACA,gBACA,gBACA,cACA,sBACA,cACA,sBACA,YACA,oBACA,OACA,WACA,eACA,SACA,SACA,cACA,OACA,aACA,eACA,YACA,2BACA,cACA,kBACA,cACA,cACA,gBACA,qCACA,gCACA,aACA,SACA,SACA,cACA,YACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,kBACA,mBACA,gBACA,iBACA,mBACA,gBACA,aACA,cACA,aACA,cACA,QACA,aACA,aACA,aACA,iBACA,cACA,MACA,WACA,UACA,SACA,YACA,SACA,YACA,gBACA,SACA,SACA,WACA,UACA,MACA,WACA,eACA,mBACA,UACA,gBACA,YACA,WACA,YACA,UACA,SACA,aACA,WACA,iBACA,aACA,aACA,UACA,QACA,QACA,WACA,QACA,eACA,cACA,cACA,MACA,UACA,SACA,OACA,eACA,cACA,MACA,OACA,SACA,gBACA,gBACA,UACA,UACA,MACA,YACA,OACA,aACA,gBACA,gBACA,gBACA,OACA,aACA,cACA,kBACA,wBACA,uBACA,wBACA,cACA,gBACA,iBACA,cACA,iBACA,YACA,gBACA,aACA,gBACA,eACA,cACA,iBACA,sBACA,sBACA,qBACA,4BACA,qBACA,yBACA,sBACA,0BACA,aACA,cACA,kBACA,cACA,mBACA,aACA,eACA,gBACA,aACA,aACA,gBACA,wBACA,OACA,WACA,YACA,QACA,QACA,OACA,UACA,YACA,UACA,YACA,kBACA,SACA,QACA,UACA,SACA,YACA,eACA,YACA,gBACA,UACA,iBACA,iBACA,cACA,cACA,SACA,qBACA,iBACA,oBACA,iBACA,qBACA,oBACA,cACA,WACA,cACA,QACA,WACA,eACA,WACA,cACA,eACA,cACA,cACA,SACA,yBACA,UACA,UACA,MACA,YACA,QACA,kBACA,mBACA,cACA,UACA,QACA,QACA,cACA,eACA,YACA,mBACA,kBACA,kBACA,iBACA,kBACA,iBACA,sBACA,sBACA,aACA,mBACA,sBACA,sBACA,6BACA,kBACA,qBACA,qBACA,2BACA,YACA,gBACA,eACA,eACA,OACA,WACA,YACA,YACA,QACA,WACA,OACA,aACA,eACA,gBACA,QACA,SACA,YACA,WACA,SACA,eACA,cACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,mBACA,mBACA,mBACA,SACA,WACA,eACA,WACA,QACA,iBACA,mBACA,SACA,UACA,YACA,UACA,oBACA,cACA,aACA,2BACA,4BACA,cACA,eACA,UACA,cACA,kBACA,qBACA,UACA,YACA,SACA,iBACA,YACA,iBACA,iBACA,UACA,WACA,SACA,QACA,aACA,YACA,MACA,MACA,MACA,OACA,SACA,iBACA,SACA,aACA,YACA,YACA,eACA,WACA,kBACA,SACA,QACA,QACA,kBACA,oBACA,WACA,QACA,cACA,gBACA,gBACA,wBACA,eACA,UACA,YACA,YACA,SACA,gBACA,eACA,kBACA,oBACA,YACA,YACA,SACA,YACA,SACA,UACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,2BACA,sBACA,WACA,iBACA,gBACA,mBACA,UACA,cACA,cACA,aACA,OACA,UACA,gBACA,aACA,mBACA,WACA,kBACA,kBACA,kBACA,aACA,kBACA,UACA,aACA,QACA,SACA,OACA,SACA,IACA,OACA,OACA,WACA,QACA,gBACA,YACA,eACA,kBACA,uBACA,2BACA,0BACA,0BACA,gCACA,sBACA,2BACA,gCACA,mBACA,qBACA,8BACA,wBACA,2BACA,mBACA,6BACA,uBACA,wBACA,wBACA,yBACA,2BACA,4BACA,4BACA,yBACA,uBACA,+BACA,oBACA,0BACA,0BACA,yBACA,0BACA,yBACA,iBACA,qBACA,gBACA,wBACA,kBACA,gBACA,kBACA,6BACA,yBACA,yBACA,oCACA,6BACA,8BACA,mCACA,mCACA,yBACA,iCACA,wCACA,oCACA,6BACA,wBACA,wBACA,uBACA,uBACA,wBACA,uCACA,0BACA,0BACA,2BACA,mBACA,yBACA,mBACA,yBACA,yBACA,sBACA,oBACA,uBACA,sBACA,4BACA,qBACA,0BACA,eACA,kBACA,oBACA,yBACA,6BACA,mBACA,iBACA,oBACA,uBACA,mBACA,uBACA,8BACA,kBACA,yBACA,qBACA,aACA,uBACA,wBACA,wBACA,oBACA,sBACA,4BACA,oBACA,yBACA,0BACA,2BACA,oBACA,uBACA,uBACA,0BACA,sBACA,8BACA,0BACA,0BACA,0BACA,2BACA,kCACA,qBACA,oCACA,mBACA,iCACA,cACA,sBACA,0BACA,0BACA,+BACA,+BACA,oBACA,2BACA,yBACA,uBACA,kBACA,wBACA,mBACA,wBACA,2BACA,2BACA,iCACA,YACA,0BACA,mBACA,8BACA,wBACA,sCACA,iBACA,WACA,SACA,aACA,aACA,cACA,cACA,QACA,cACA,aACA,YACA,SACA,QACA,cACA,aACA,eACA,SACA,kBACA,aACA,eACA,YACA,YACA,cACA,WACA,OACA,UACA,QACA,UACA,cACA,IACA,KACA,KACA,mBACA,cACA,gBACA,aACA,UACA,UACA,WACA,IACA,KACA,KACA,mBACA,SACA,IACA,UACA,SACA,OACA,aACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACp7KJ,aAEA,SAASC,EAAWC,GAChB,OAAOA,EAAIC,MAAM,IAGrB,SAASC,EAAOC,EAAMC,GAClB,OAAOA,EAAMC,QAAQF,IAAS,EAGlC,SAASG,EAAQC,EAAMH,GACnB,IAAK,IAAII,EAAI,EAAGC,EAAIL,EAAMM,OAAQF,EAAIC,IAAKD,EACvC,GAAID,EAAKH,EAAMI,IACX,OAAOJ,EAAMI,GAazB,SAASG,EAAsBC,GAC3BC,OAAOC,eAAeF,EAAGG,UAAW,QAAS,CACzCC,IAAK,WACD,IAAIC,EAAM,IAAIC,MAAMC,KAAKC,SACzBH,EAAId,KAAOgB,KAAKhB,KAChB,IACI,MAAMc,EACR,MAAMI,G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","sourcesContent":["var domprops = [\n    \"$&\",\n    \"$'\",\n    \"$*\",\n    \"$+\",\n    \"$1\",\n    \"$2\",\n    \"$3\",\n    \"$4\",\n    \"$5\",\n    \"$6\",\n    \"$7\",\n    \"$8\",\n    \"$9\",\n    \"$_\",\n    \"$`\",\n    \"$input\",\n    \"@@iterator\",\n    \"ABORT_ERR\",\n    \"ACTIVE\",\n    \"ACTIVE_ATTRIBUTES\",\n    \"ACTIVE_TEXTURE\",\n    \"ACTIVE_UNIFORMS\",\n    \"ADDITION\",\n    \"ALIASED_LINE_WIDTH_RANGE\",\n    \"ALIASED_POINT_SIZE_RANGE\",\n    \"ALLOW_KEYBOARD_INPUT\",\n    \"ALLPASS\",\n    \"ALPHA\",\n    \"ALPHA_BITS\",\n    \"ALT_MASK\",\n    \"ALWAYS\",\n    \"ANY_TYPE\",\n    \"ANY_UNORDERED_NODE_TYPE\",\n    \"ARRAY_BUFFER\",\n    \"ARRAY_BUFFER_BINDING\",\n    \"ATTACHED_SHADERS\",\n    \"ATTRIBUTE_NODE\",\n    \"AT_TARGET\",\n    \"AddSearchProvider\",\n    \"AnalyserNode\",\n    \"AnimationEvent\",\n    \"AnonXMLHttpRequest\",\n    \"ApplicationCache\",\n    \"ApplicationCacheErrorEvent\",\n    \"Array\",\n    \"ArrayBuffer\",\n    \"Attr\",\n    \"Audio\",\n    \"AudioBuffer\",\n    \"AudioBufferSourceNode\",\n    \"AudioContext\",\n    \"AudioDestinationNode\",\n    \"AudioListener\",\n    \"AudioNode\",\n    \"AudioParam\",\n    \"AudioProcessingEvent\",\n    \"AudioStreamTrack\",\n    \"AutocompleteErrorEvent\",\n    \"BACK\",\n    \"BAD_BOUNDARYPOINTS_ERR\",\n    \"BANDPASS\",\n    \"BLEND\",\n    \"BLEND_COLOR\",\n    \"BLEND_DST_ALPHA\",\n    \"BLEND_DST_RGB\",\n    \"BLEND_EQUATION\",\n    \"BLEND_EQUATION_ALPHA\",\n    \"BLEND_EQUATION_RGB\",\n    \"BLEND_SRC_ALPHA\",\n    \"BLEND_SRC_RGB\",\n    \"BLUE_BITS\",\n    \"BLUR\",\n    \"BOOL\",\n    \"BOOLEAN_TYPE\",\n    \"BOOL_VEC2\",\n    \"BOOL_VEC3\",\n    \"BOOL_VEC4\",\n    \"BOTH\",\n    \"BROWSER_DEFAULT_WEBGL\",\n    \"BUBBLING_PHASE\",\n    \"BUFFER_SIZE\",\n    \"BUFFER_USAGE\",\n    \"BYTE\",\n    \"BYTES_PER_ELEMENT\",\n    \"BarProp\",\n    \"BaseHref\",\n    \"BatteryManager\",\n    \"BeforeLoadEvent\",\n    \"BeforeUnloadEvent\",\n    \"BiquadFilterNode\",\n    \"Blob\",\n    \"BlobEvent\",\n    \"Boolean\",\n    \"CAPTURING_PHASE\",\n    \"CCW\",\n    \"CDATASection\",\n    \"CDATA_SECTION_NODE\",\n    \"CHANGE\",\n    \"CHARSET_RULE\",\n    \"CHECKING\",\n    \"CLAMP_TO_EDGE\",\n    \"CLICK\",\n    \"CLOSED\",\n    \"CLOSING\",\n    \"COLOR_ATTACHMENT0\",\n    \"COLOR_BUFFER_BIT\",\n    \"COLOR_CLEAR_VALUE\",\n    \"COLOR_WRITEMASK\",\n    \"COMMENT_NODE\",\n    \"COMPILE_STATUS\",\n    \"COMPRESSED_RGBA_S3TC_DXT1_EXT\",\n    \"COMPRESSED_RGBA_S3TC_DXT3_EXT\",\n    \"COMPRESSED_RGBA_S3TC_DXT5_EXT\",\n    \"COMPRESSED_RGB_S3TC_DXT1_EXT\",\n    \"COMPRESSED_TEXTURE_FORMATS\",\n    \"CONNECTING\",\n    \"CONSTANT_ALPHA\",\n    \"CONSTANT_COLOR\",\n    \"CONSTRAINT_ERR\",\n    \"CONTEXT_LOST_WEBGL\",\n    \"CONTROL_MASK\",\n    \"COUNTER_STYLE_RULE\",\n    \"CSS\",\n    \"CSS2Properties\",\n    \"CSSCharsetRule\",\n    \"CSSConditionRule\",\n    \"CSSCounterStyleRule\",\n    \"CSSFontFaceRule\",\n    \"CSSFontFeatureValuesRule\",\n    \"CSSGroupingRule\",\n    \"CSSImportRule\",\n    \"CSSKeyframeRule\",\n    \"CSSKeyframesRule\",\n    \"CSSMediaRule\",\n    \"CSSMozDocumentRule\",\n    \"CSSNameSpaceRule\",\n    \"CSSPageRule\",\n    \"CSSPrimitiveValue\",\n    \"CSSRule\",\n    \"CSSRuleList\",\n    \"CSSStyleDeclaration\",\n    \"CSSStyleRule\",\n    \"CSSStyleSheet\",\n    \"CSSSupportsRule\",\n    \"CSSUnknownRule\",\n    \"CSSValue\",\n    \"CSSValueList\",\n    \"CSSVariablesDeclaration\",\n    \"CSSVariablesRule\",\n    \"CSSViewportRule\",\n    \"CSS_ATTR\",\n    \"CSS_CM\",\n    \"CSS_COUNTER\",\n    \"CSS_CUSTOM\",\n    \"CSS_DEG\",\n    \"CSS_DIMENSION\",\n    \"CSS_EMS\",\n    \"CSS_EXS\",\n    \"CSS_FILTER_BLUR\",\n    \"CSS_FILTER_BRIGHTNESS\",\n    \"CSS_FILTER_CONTRAST\",\n    \"CSS_FILTER_CUSTOM\",\n    \"CSS_FILTER_DROP_SHADOW\",\n    \"CSS_FILTER_GRAYSCALE\",\n    \"CSS_FILTER_HUE_ROTATE\",\n    \"CSS_FILTER_INVERT\",\n    \"CSS_FILTER_OPACITY\",\n    \"CSS_FILTER_REFERENCE\",\n    \"CSS_FILTER_SATURATE\",\n    \"CSS_FILTER_SEPIA\",\n    \"CSS_GRAD\",\n    \"CSS_HZ\",\n    \"CSS_IDENT\",\n    \"CSS_IN\",\n    \"CSS_INHERIT\",\n    \"CSS_KHZ\",\n    \"CSS_MATRIX\",\n    \"CSS_MATRIX3D\",\n    \"CSS_MM\",\n    \"CSS_MS\",\n    \"CSS_NUMBER\",\n    \"CSS_PC\",\n    \"CSS_PERCENTAGE\",\n    \"CSS_PERSPECTIVE\",\n    \"CSS_PRIMITIVE_VALUE\",\n    \"CSS_PT\",\n    \"CSS_PX\",\n    \"CSS_RAD\",\n    \"CSS_RECT\",\n    \"CSS_RGBCOLOR\",\n    \"CSS_ROTATE\",\n    \"CSS_ROTATE3D\",\n    \"CSS_ROTATEX\",\n    \"CSS_ROTATEY\",\n    \"CSS_ROTATEZ\",\n    \"CSS_S\",\n    \"CSS_SCALE\",\n    \"CSS_SCALE3D\",\n    \"CSS_SCALEX\",\n    \"CSS_SCALEY\",\n    \"CSS_SCALEZ\",\n    \"CSS_SKEW\",\n    \"CSS_SKEWX\",\n    \"CSS_SKEWY\",\n    \"CSS_STRING\",\n    \"CSS_TRANSLATE\",\n    \"CSS_TRANSLATE3D\",\n    \"CSS_TRANSLATEX\",\n    \"CSS_TRANSLATEY\",\n    \"CSS_TRANSLATEZ\",\n    \"CSS_UNKNOWN\",\n    \"CSS_URI\",\n    \"CSS_VALUE_LIST\",\n    \"CSS_VH\",\n    \"CSS_VMAX\",\n    \"CSS_VMIN\",\n    \"CSS_VW\",\n    \"CULL_FACE\",\n    \"CULL_FACE_MODE\",\n    \"CURRENT_PROGRAM\",\n    \"CURRENT_VERTEX_ATTRIB\",\n    \"CUSTOM\",\n    \"CW\",\n    \"CanvasGradient\",\n    \"CanvasPattern\",\n    \"CanvasRenderingContext2D\",\n    \"CaretPosition\",\n    \"ChannelMergerNode\",\n    \"ChannelSplitterNode\",\n    \"CharacterData\",\n    \"ClientRect\",\n    \"ClientRectList\",\n    \"Clipboard\",\n    \"ClipboardEvent\",\n    \"CloseEvent\",\n    \"Collator\",\n    \"CommandEvent\",\n    \"Comment\",\n    \"CompositionEvent\",\n    \"Console\",\n    \"Controllers\",\n    \"ConvolverNode\",\n    \"Counter\",\n    \"Crypto\",\n    \"CryptoKey\",\n    \"CustomEvent\",\n    \"DATABASE_ERR\",\n    \"DATA_CLONE_ERR\",\n    \"DATA_ERR\",\n    \"DBLCLICK\",\n    \"DECR\",\n    \"DECR_WRAP\",\n    \"DELETE_STATUS\",\n    \"DEPTH_ATTACHMENT\",\n    \"DEPTH_BITS\",\n    \"DEPTH_BUFFER_BIT\",\n    \"DEPTH_CLEAR_VALUE\",\n    \"DEPTH_COMPONENT\",\n    \"DEPTH_COMPONENT16\",\n    \"DEPTH_FUNC\",\n    \"DEPTH_RANGE\",\n    \"DEPTH_STENCIL\",\n    \"DEPTH_STENCIL_ATTACHMENT\",\n    \"DEPTH_TEST\",\n    \"DEPTH_WRITEMASK\",\n    \"DIRECTION_DOWN\",\n    \"DIRECTION_LEFT\",\n    \"DIRECTION_RIGHT\",\n    \"DIRECTION_UP\",\n    \"DISABLED\",\n    \"DISPATCH_REQUEST_ERR\",\n    \"DITHER\",\n    \"DOCUMENT_FRAGMENT_NODE\",\n    \"DOCUMENT_NODE\",\n    \"DOCUMENT_POSITION_CONTAINED_BY\",\n    \"DOCUMENT_POSITION_CONTAINS\",\n    \"DOCUMENT_POSITION_DISCONNECTED\",\n    \"DOCUMENT_POSITION_FOLLOWING\",\n    \"DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\",\n    \"DOCUMENT_POSITION_PRECEDING\",\n    \"DOCUMENT_TYPE_NODE\",\n    \"DOMCursor\",\n    \"DOMError\",\n    \"DOMException\",\n    \"DOMImplementation\",\n    \"DOMImplementationLS\",\n    \"DOMMatrix\",\n    \"DOMMatrixReadOnly\",\n    \"DOMParser\",\n    \"DOMPoint\",\n    \"DOMPointReadOnly\",\n    \"DOMQuad\",\n    \"DOMRect\",\n    \"DOMRectList\",\n    \"DOMRectReadOnly\",\n    \"DOMRequest\",\n    \"DOMSTRING_SIZE_ERR\",\n    \"DOMSettableTokenList\",\n    \"DOMStringList\",\n    \"DOMStringMap\",\n    \"DOMTokenList\",\n    \"DOMTransactionEvent\",\n    \"DOM_DELTA_LINE\",\n    \"DOM_DELTA_PAGE\",\n    \"DOM_DELTA_PIXEL\",\n    \"DOM_INPUT_METHOD_DROP\",\n    \"DOM_INPUT_METHOD_HANDWRITING\",\n    \"DOM_INPUT_METHOD_IME\",\n    \"DOM_INPUT_METHOD_KEYBOARD\",\n    \"DOM_INPUT_METHOD_MULTIMODAL\",\n    \"DOM_INPUT_METHOD_OPTION\",\n    \"DOM_INPUT_METHOD_PASTE\",\n    \"DOM_INPUT_METHOD_SCRIPT\",\n    \"DOM_INPUT_METHOD_UNKNOWN\",\n    \"DOM_INPUT_METHOD_VOICE\",\n    \"DOM_KEY_LOCATION_JOYSTICK\",\n    \"DOM_KEY_LOCATION_LEFT\",\n    \"DOM_KEY_LOCATION_MOBILE\",\n    \"DOM_KEY_LOCATION_NUMPAD\",\n    \"DOM_KEY_LOCATION_RIGHT\",\n    \"DOM_KEY_LOCATION_STANDARD\",\n    \"DOM_VK_0\",\n    \"DOM_VK_1\",\n    \"DOM_VK_2\",\n    \"DOM_VK_3\",\n    \"DOM_VK_4\",\n    \"DOM_VK_5\",\n    \"DOM_VK_6\",\n    \"DOM_VK_7\",\n    \"DOM_VK_8\",\n    \"DOM_VK_9\",\n    \"DOM_VK_A\",\n    \"DOM_VK_ACCEPT\",\n    \"DOM_VK_ADD\",\n    \"DOM_VK_ALT\",\n    \"DOM_VK_ALTGR\",\n    \"DOM_VK_AMPERSAND\",\n    \"DOM_VK_ASTERISK\",\n    \"DOM_VK_AT\",\n    \"DOM_VK_ATTN\",\n    \"DOM_VK_B\",\n    \"DOM_VK_BACKSPACE\",\n    \"DOM_VK_BACK_QUOTE\",\n    \"DOM_VK_BACK_SLASH\",\n    \"DOM_VK_BACK_SPACE\",\n    \"DOM_VK_C\",\n    \"DOM_VK_CANCEL\",\n    \"DOM_VK_CAPS_LOCK\",\n    \"DOM_VK_CIRCUMFLEX\",\n    \"DOM_VK_CLEAR\",\n    \"DOM_VK_CLOSE_BRACKET\",\n    \"DOM_VK_CLOSE_CURLY_BRACKET\",\n    \"DOM_VK_CLOSE_PAREN\",\n    \"DOM_VK_COLON\",\n    \"DOM_VK_COMMA\",\n    \"DOM_VK_CONTEXT_MENU\",\n    \"DOM_VK_CONTROL\",\n    \"DOM_VK_CONVERT\",\n    \"DOM_VK_CRSEL\",\n    \"DOM_VK_CTRL\",\n    \"DOM_VK_D\",\n    \"DOM_VK_DECIMAL\",\n    \"DOM_VK_DELETE\",\n    \"DOM_VK_DIVIDE\",\n    \"DOM_VK_DOLLAR\",\n    \"DOM_VK_DOUBLE_QUOTE\",\n    \"DOM_VK_DOWN\",\n    \"DOM_VK_E\",\n    \"DOM_VK_EISU\",\n    \"DOM_VK_END\",\n    \"DOM_VK_ENTER\",\n    \"DOM_VK_EQUALS\",\n    \"DOM_VK_EREOF\",\n    \"DOM_VK_ESCAPE\",\n    \"DOM_VK_EXCLAMATION\",\n    \"DOM_VK_EXECUTE\",\n    \"DOM_VK_EXSEL\",\n    \"DOM_VK_F\",\n    \"DOM_VK_F1\",\n    \"DOM_VK_F10\",\n    \"DOM_VK_F11\",\n    \"DOM_VK_F12\",\n    \"DOM_VK_F13\",\n    \"DOM_VK_F14\",\n    \"DOM_VK_F15\",\n    \"DOM_VK_F16\",\n    \"DOM_VK_F17\",\n    \"DOM_VK_F18\",\n    \"DOM_VK_F19\",\n    \"DOM_VK_F2\",\n    \"DOM_VK_F20\",\n    \"DOM_VK_F21\",\n    \"DOM_VK_F22\",\n    \"DOM_VK_F23\",\n    \"DOM_VK_F24\",\n    \"DOM_VK_F25\",\n    \"DOM_VK_F26\",\n    \"DOM_VK_F27\",\n    \"DOM_VK_F28\",\n    \"DOM_VK_F29\",\n    \"DOM_VK_F3\",\n    \"DOM_VK_F30\",\n    \"DOM_VK_F31\",\n    \"DOM_VK_F32\",\n    \"DOM_VK_F33\",\n    \"DOM_VK_F34\",\n    \"DOM_VK_F35\",\n    \"DOM_VK_F36\",\n    \"DOM_VK_F4\",\n    \"DOM_VK_F5\",\n    \"DOM_VK_F6\",\n    \"DOM_VK_F7\",\n    \"DOM_VK_F8\",\n    \"DOM_VK_F9\",\n    \"DOM_VK_FINAL\",\n    \"DOM_VK_FRONT\",\n    \"DOM_VK_G\",\n    \"DOM_VK_GREATER_THAN\",\n    \"DOM_VK_H\",\n    \"DOM_VK_HANGUL\",\n    \"DOM_VK_HANJA\",\n    \"DOM_VK_HASH\",\n    \"DOM_VK_HELP\",\n    \"DOM_VK_HK_TOGGLE\",\n    \"DOM_VK_HOME\",\n    \"DOM_VK_HYPHEN_MINUS\",\n    \"DOM_VK_I\",\n    \"DOM_VK_INSERT\",\n    \"DOM_VK_J\",\n    \"DOM_VK_JUNJA\",\n    \"DOM_VK_K\",\n    \"DOM_VK_KANA\",\n    \"DOM_VK_KANJI\",\n    \"DOM_VK_L\",\n    \"DOM_VK_LEFT\",\n    \"DOM_VK_LEFT_TAB\",\n    \"DOM_VK_LESS_THAN\",\n    \"DOM_VK_M\",\n    \"DOM_VK_META\",\n    \"DOM_VK_MODECHANGE\",\n    \"DOM_VK_MULTIPLY\",\n    \"DOM_VK_N\",\n    \"DOM_VK_NONCONVERT\",\n    \"DOM_VK_NUMPAD0\",\n    \"DOM_VK_NUMPAD1\",\n    \"DOM_VK_NUMPAD2\",\n    \"DOM_VK_NUMPAD3\",\n    \"DOM_VK_NUMPAD4\",\n    \"DOM_VK_NUMPAD5\",\n    \"DOM_VK_NUMPAD6\",\n    \"DOM_VK_NUMPAD7\",\n    \"DOM_VK_NUMPAD8\",\n    \"DOM_VK_NUMPAD9\",\n    \"DOM_VK_NUM_LOCK\",\n    \"DOM_VK_O\",\n    \"DOM_VK_OEM_1\",\n    \"DOM_VK_OEM_102\",\n    \"DOM_VK_OEM_2\",\n    \"DOM_VK_OEM_3\",\n    \"DOM_VK_OEM_4\",\n    \"DOM_VK_OEM_5\",\n    \"DOM_VK_OEM_6\",\n    \"DOM_VK_OEM_7\",\n    \"DOM_VK_OEM_8\",\n    \"DOM_VK_OEM_COMMA\",\n    \"DOM_VK_OEM_MINUS\",\n    \"DOM_VK_OEM_PERIOD\",\n    \"DOM_VK_OEM_PLUS\",\n    \"DOM_VK_OPEN_BRACKET\",\n    \"DOM_VK_OPEN_CURLY_BRACKET\",\n    \"DOM_VK_OPEN_PAREN\",\n    \"DOM_VK_P\",\n    \"DOM_VK_PA1\",\n    \"DOM_VK_PAGEDOWN\",\n    \"DOM_VK_PAGEUP\",\n    \"DOM_VK_PAGE_DOWN\",\n    \"DOM_VK_PAGE_UP\",\n    \"DOM_VK_PAUSE\",\n    \"DOM_VK_PERCENT\",\n    \"DOM_VK_PERIOD\",\n    \"DOM_VK_PIPE\",\n    \"DOM_VK_PLAY\",\n    \"DOM_VK_PLUS\",\n    \"DOM_VK_PRINT\",\n    \"DOM_VK_PRINTSCREEN\",\n    \"DOM_VK_PROCESSKEY\",\n    \"DOM_VK_PROPERITES\",\n    \"DOM_VK_Q\",\n    \"DOM_VK_QUESTION_MARK\",\n    \"DOM_VK_QUOTE\",\n    \"DOM_VK_R\",\n    \"DOM_VK_REDO\",\n    \"DOM_VK_RETURN\",\n    \"DOM_VK_RIGHT\",\n    \"DOM_VK_S\",\n    \"DOM_VK_SCROLL_LOCK\",\n    \"DOM_VK_SELECT\",\n    \"DOM_VK_SEMICOLON\",\n    \"DOM_VK_SEPARATOR\",\n    \"DOM_VK_SHIFT\",\n    \"DOM_VK_SLASH\",\n    \"DOM_VK_SLEEP\",\n    \"DOM_VK_SPACE\",\n    \"DOM_VK_SUBTRACT\",\n    \"DOM_VK_T\",\n    \"DOM_VK_TAB\",\n    \"DOM_VK_TILDE\",\n    \"DOM_VK_U\",\n    \"DOM_VK_UNDERSCORE\",\n    \"DOM_VK_UNDO\",\n    \"DOM_VK_UNICODE\",\n    \"DOM_VK_UP\",\n    \"DOM_VK_V\",\n    \"DOM_VK_VOLUME_DOWN\",\n    \"DOM_VK_VOLUME_MUTE\",\n    \"DOM_VK_VOLUME_UP\",\n    \"DOM_VK_W\",\n    \"DOM_VK_WIN\",\n    \"DOM_VK_WINDOW\",\n    \"DOM_VK_WIN_ICO_00\",\n    \"DOM_VK_WIN_ICO_CLEAR\",\n    \"DOM_VK_WIN_ICO_HELP\",\n    \"DOM_VK_WIN_OEM_ATTN\",\n    \"DOM_VK_WIN_OEM_AUTO\",\n    \"DOM_VK_WIN_OEM_BACKTAB\",\n    \"DOM_VK_WIN_OEM_CLEAR\",\n    \"DOM_VK_WIN_OEM_COPY\",\n    \"DOM_VK_WIN_OEM_CUSEL\",\n    \"DOM_VK_WIN_OEM_ENLW\",\n    \"DOM_VK_WIN_OEM_FINISH\",\n    \"DOM_VK_WIN_OEM_FJ_JISHO\",\n    \"DOM_VK_WIN_OEM_FJ_LOYA\",\n    \"DOM_VK_WIN_OEM_FJ_MASSHOU\",\n    \"DOM_VK_WIN_OEM_FJ_ROYA\",\n    \"DOM_VK_WIN_OEM_FJ_TOUROKU\",\n    \"DOM_VK_WIN_OEM_JUMP\",\n    \"DOM_VK_WIN_OEM_PA1\",\n    \"DOM_VK_WIN_OEM_PA2\",\n    \"DOM_VK_WIN_OEM_PA3\",\n    \"DOM_VK_WIN_OEM_RESET\",\n    \"DOM_VK_WIN_OEM_WSCTRL\",\n    \"DOM_VK_X\",\n    \"DOM_VK_XF86XK_ADD_FAVORITE\",\n    \"DOM_VK_XF86XK_APPLICATION_LEFT\",\n    \"DOM_VK_XF86XK_APPLICATION_RIGHT\",\n    \"DOM_VK_XF86XK_AUDIO_CYCLE_TRACK\",\n    \"DOM_VK_XF86XK_AUDIO_FORWARD\",\n    \"DOM_VK_XF86XK_AUDIO_LOWER_VOLUME\",\n    \"DOM_VK_XF86XK_AUDIO_MEDIA\",\n    \"DOM_VK_XF86XK_AUDIO_MUTE\",\n    \"DOM_VK_XF86XK_AUDIO_NEXT\",\n    \"DOM_VK_XF86XK_AUDIO_PAUSE\",\n    \"DOM_VK_XF86XK_AUDIO_PLAY\",\n    \"DOM_VK_XF86XK_AUDIO_PREV\",\n    \"DOM_VK_XF86XK_AUDIO_RAISE_VOLUME\",\n    \"DOM_VK_XF86XK_AUDIO_RANDOM_PLAY\",\n    \"DOM_VK_XF86XK_AUDIO_RECORD\",\n    \"DOM_VK_XF86XK_AUDIO_REPEAT\",\n    \"DOM_VK_XF86XK_AUDIO_REWIND\",\n    \"DOM_VK_XF86XK_AUDIO_STOP\",\n    \"DOM_VK_XF86XK_AWAY\",\n    \"DOM_VK_XF86XK_BACK\",\n    \"DOM_VK_XF86XK_BACK_FORWARD\",\n    \"DOM_VK_XF86XK_BATTERY\",\n    \"DOM_VK_XF86XK_BLUE\",\n    \"DOM_VK_XF86XK_BLUETOOTH\",\n    \"DOM_VK_XF86XK_BOOK\",\n    \"DOM_VK_XF86XK_BRIGHTNESS_ADJUST\",\n    \"DOM_VK_XF86XK_CALCULATOR\",\n    \"DOM_VK_XF86XK_CALENDAR\",\n    \"DOM_VK_XF86XK_CD\",\n    \"DOM_VK_XF86XK_CLOSE\",\n    \"DOM_VK_XF86XK_COMMUNITY\",\n    \"DOM_VK_XF86XK_CONTRAST_ADJUST\",\n    \"DOM_VK_XF86XK_COPY\",\n    \"DOM_VK_XF86XK_CUT\",\n    \"DOM_VK_XF86XK_CYCLE_ANGLE\",\n    \"DOM_VK_XF86XK_DISPLAY\",\n    \"DOM_VK_XF86XK_DOCUMENTS\",\n    \"DOM_VK_XF86XK_DOS\",\n    \"DOM_VK_XF86XK_EJECT\",\n    \"DOM_VK_XF86XK_EXCEL\",\n    \"DOM_VK_XF86XK_EXPLORER\",\n    \"DOM_VK_XF86XK_FAVORITES\",\n    \"DOM_VK_XF86XK_FINANCE\",\n    \"DOM_VK_XF86XK_FORWARD\",\n    \"DOM_VK_XF86XK_FRAME_BACK\",\n    \"DOM_VK_XF86XK_FRAME_FORWARD\",\n    \"DOM_VK_XF86XK_GAME\",\n    \"DOM_VK_XF86XK_GO\",\n    \"DOM_VK_XF86XK_GREEN\",\n    \"DOM_VK_XF86XK_HIBERNATE\",\n    \"DOM_VK_XF86XK_HISTORY\",\n    \"DOM_VK_XF86XK_HOME_PAGE\",\n    \"DOM_VK_XF86XK_HOT_LINKS\",\n    \"DOM_VK_XF86XK_I_TOUCH\",\n    \"DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN\",\n    \"DOM_VK_XF86XK_KBD_BRIGHTNESS_UP\",\n    \"DOM_VK_XF86XK_KBD_LIGHT_ON_OFF\",\n    \"DOM_VK_XF86XK_LAUNCH0\",\n    \"DOM_VK_XF86XK_LAUNCH1\",\n    \"DOM_VK_XF86XK_LAUNCH2\",\n    \"DOM_VK_XF86XK_LAUNCH3\",\n    \"DOM_VK_XF86XK_LAUNCH4\",\n    \"DOM_VK_XF86XK_LAUNCH5\",\n    \"DOM_VK_XF86XK_LAUNCH6\",\n    \"DOM_VK_XF86XK_LAUNCH7\",\n    \"DOM_VK_XF86XK_LAUNCH8\",\n    \"DOM_VK_XF86XK_LAUNCH9\",\n    \"DOM_VK_XF86XK_LAUNCH_A\",\n    \"DOM_VK_XF86XK_LAUNCH_B\",\n    \"DOM_VK_XF86XK_LAUNCH_C\",\n    \"DOM_VK_XF86XK_LAUNCH_D\",\n    \"DOM_VK_XF86XK_LAUNCH_E\",\n    \"DOM_VK_XF86XK_LAUNCH_F\",\n    \"DOM_VK_XF86XK_LIGHT_BULB\",\n    \"DOM_VK_XF86XK_LOG_OFF\",\n    \"DOM_VK_XF86XK_MAIL\",\n    \"DOM_VK_XF86XK_MAIL_FORWARD\",\n    \"DOM_VK_XF86XK_MARKET\",\n    \"DOM_VK_XF86XK_MEETING\",\n    \"DOM_VK_XF86XK_MEMO\",\n    \"DOM_VK_XF86XK_MENU_KB\",\n    \"DOM_VK_XF86XK_MENU_PB\",\n    \"DOM_VK_XF86XK_MESSENGER\",\n    \"DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN\",\n    \"DOM_VK_XF86XK_MON_BRIGHTNESS_UP\",\n    \"DOM_VK_XF86XK_MUSIC\",\n    \"DOM_VK_XF86XK_MY_COMPUTER\",\n    \"DOM_VK_XF86XK_MY_SITES\",\n    \"DOM_VK_XF86XK_NEW\",\n    \"DOM_VK_XF86XK_NEWS\",\n    \"DOM_VK_XF86XK_OFFICE_HOME\",\n    \"DOM_VK_XF86XK_OPEN\",\n    \"DOM_VK_XF86XK_OPEN_URL\",\n    \"DOM_VK_XF86XK_OPTION\",\n    \"DOM_VK_XF86XK_PASTE\",\n    \"DOM_VK_XF86XK_PHONE\",\n    \"DOM_VK_XF86XK_PICTURES\",\n    \"DOM_VK_XF86XK_POWER_DOWN\",\n    \"DOM_VK_XF86XK_POWER_OFF\",\n    \"DOM_VK_XF86XK_RED\",\n    \"DOM_VK_XF86XK_REFRESH\",\n    \"DOM_VK_XF86XK_RELOAD\",\n    \"DOM_VK_XF86XK_REPLY\",\n    \"DOM_VK_XF86XK_ROCKER_DOWN\",\n    \"DOM_VK_XF86XK_ROCKER_ENTER\",\n    \"DOM_VK_XF86XK_ROCKER_UP\",\n    \"DOM_VK_XF86XK_ROTATE_WINDOWS\",\n    \"DOM_VK_XF86XK_ROTATION_KB\",\n    \"DOM_VK_XF86XK_ROTATION_PB\",\n    \"DOM_VK_XF86XK_SAVE\",\n    \"DOM_VK_XF86XK_SCREEN_SAVER\",\n    \"DOM_VK_XF86XK_SCROLL_CLICK\",\n    \"DOM_VK_XF86XK_SCROLL_DOWN\",\n    \"DOM_VK_XF86XK_SCROLL_UP\",\n    \"DOM_VK_XF86XK_SEARCH\",\n    \"DOM_VK_XF86XK_SEND\",\n    \"DOM_VK_XF86XK_SHOP\",\n    \"DOM_VK_XF86XK_SPELL\",\n    \"DOM_VK_XF86XK_SPLIT_SCREEN\",\n    \"DOM_VK_XF86XK_STANDBY\",\n    \"DOM_VK_XF86XK_START\",\n    \"DOM_VK_XF86XK_STOP\",\n    \"DOM_VK_XF86XK_SUBTITLE\",\n    \"DOM_VK_XF86XK_SUPPORT\",\n    \"DOM_VK_XF86XK_SUSPEND\",\n    \"DOM_VK_XF86XK_TASK_PANE\",\n    \"DOM_VK_XF86XK_TERMINAL\",\n    \"DOM_VK_XF86XK_TIME\",\n    \"DOM_VK_XF86XK_TOOLS\",\n    \"DOM_VK_XF86XK_TOP_MENU\",\n    \"DOM_VK_XF86XK_TO_DO_LIST\",\n    \"DOM_VK_XF86XK_TRAVEL\",\n    \"DOM_VK_XF86XK_USER1KB\",\n    \"DOM_VK_XF86XK_USER2KB\",\n    \"DOM_VK_XF86XK_USER_PB\",\n    \"DOM_VK_XF86XK_UWB\",\n    \"DOM_VK_XF86XK_VENDOR_HOME\",\n    \"DOM_VK_XF86XK_VIDEO\",\n    \"DOM_VK_XF86XK_VIEW\",\n    \"DOM_VK_XF86XK_WAKE_UP\",\n    \"DOM_VK_XF86XK_WEB_CAM\",\n    \"DOM_VK_XF86XK_WHEEL_BUTTON\",\n    \"DOM_VK_XF86XK_WLAN\",\n    \"DOM_VK_XF86XK_WORD\",\n    \"DOM_VK_XF86XK_WWW\",\n    \"DOM_VK_XF86XK_XFER\",\n    \"DOM_VK_XF86XK_YELLOW\",\n    \"DOM_VK_XF86XK_ZOOM_IN\",\n    \"DOM_VK_XF86XK_ZOOM_OUT\",\n    \"DOM_VK_Y\",\n    \"DOM_VK_Z\",\n    \"DOM_VK_ZOOM\",\n    \"DONE\",\n    \"DONT_CARE\",\n    \"DOWNLOADING\",\n    \"DRAGDROP\",\n    \"DST_ALPHA\",\n    \"DST_COLOR\",\n    \"DYNAMIC_DRAW\",\n    \"DataChannel\",\n    \"DataTransfer\",\n    \"DataTransferItem\",\n    \"DataTransferItemList\",\n    \"DataView\",\n    \"Date\",\n    \"DateTimeFormat\",\n    \"DelayNode\",\n    \"DesktopNotification\",\n    \"DesktopNotificationCenter\",\n    \"DeviceLightEvent\",\n    \"DeviceMotionEvent\",\n    \"DeviceOrientationEvent\",\n    \"DeviceProximityEvent\",\n    \"DeviceStorage\",\n    \"DeviceStorageChangeEvent\",\n    \"Document\",\n    \"DocumentFragment\",\n    \"DocumentType\",\n    \"DragEvent\",\n    \"DynamicsCompressorNode\",\n    \"E\",\n    \"ELEMENT_ARRAY_BUFFER\",\n    \"ELEMENT_ARRAY_BUFFER_BINDING\",\n    \"ELEMENT_NODE\",\n    \"EMPTY\",\n    \"ENCODING_ERR\",\n    \"ENDED\",\n    \"END_TO_END\",\n    \"END_TO_START\",\n    \"ENTITY_NODE\",\n    \"ENTITY_REFERENCE_NODE\",\n    \"EPSILON\",\n    \"EQUAL\",\n    \"EQUALPOWER\",\n    \"ERROR\",\n    \"EXPONENTIAL_DISTANCE\",\n    \"Element\",\n    \"ElementQuery\",\n    \"Entity\",\n    \"EntityReference\",\n    \"Error\",\n    \"ErrorEvent\",\n    \"EvalError\",\n    \"Event\",\n    \"EventException\",\n    \"EventSource\",\n    \"EventTarget\",\n    \"External\",\n    \"FASTEST\",\n    \"FIDOSDK\",\n    \"FILTER_ACCEPT\",\n    \"FILTER_INTERRUPT\",\n    \"FILTER_REJECT\",\n    \"FILTER_SKIP\",\n    \"FINISHED_STATE\",\n    \"FIRST_ORDERED_NODE_TYPE\",\n    \"FLOAT\",\n    \"FLOAT_MAT2\",\n    \"FLOAT_MAT3\",\n    \"FLOAT_MAT4\",\n    \"FLOAT_VEC2\",\n    \"FLOAT_VEC3\",\n    \"FLOAT_VEC4\",\n    \"FOCUS\",\n    \"FONT_FACE_RULE\",\n    \"FONT_FEATURE_VALUES_RULE\",\n    \"FRAGMENT_SHADER\",\n    \"FRAGMENT_SHADER_DERIVATIVE_HINT_OES\",\n    \"FRAMEBUFFER\",\n    \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",\n    \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",\n    \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",\n    \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",\n    \"FRAMEBUFFER_BINDING\",\n    \"FRAMEBUFFER_COMPLETE\",\n    \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",\n    \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",\n    \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",\n    \"FRAMEBUFFER_UNSUPPORTED\",\n    \"FRONT\",\n    \"FRONT_AND_BACK\",\n    \"FRONT_FACE\",\n    \"FUNC_ADD\",\n    \"FUNC_REVERSE_SUBTRACT\",\n    \"FUNC_SUBTRACT\",\n    \"Feed\",\n    \"FeedEntry\",\n    \"File\",\n    \"FileError\",\n    \"FileList\",\n    \"FileReader\",\n    \"FindInPage\",\n    \"Float32Array\",\n    \"Float64Array\",\n    \"FocusEvent\",\n    \"FontFace\",\n    \"FormData\",\n    \"Function\",\n    \"GENERATE_MIPMAP_HINT\",\n    \"GEQUAL\",\n    \"GREATER\",\n    \"GREEN_BITS\",\n    \"GainNode\",\n    \"Gamepad\",\n    \"GamepadButton\",\n    \"GamepadEvent\",\n    \"GestureEvent\",\n    \"HAVE_CURRENT_DATA\",\n    \"HAVE_ENOUGH_DATA\",\n    \"HAVE_FUTURE_DATA\",\n    \"HAVE_METADATA\",\n    \"HAVE_NOTHING\",\n    \"HEADERS_RECEIVED\",\n    \"HIDDEN\",\n    \"HIERARCHY_REQUEST_ERR\",\n    \"HIGHPASS\",\n    \"HIGHSHELF\",\n    \"HIGH_FLOAT\",\n    \"HIGH_INT\",\n    \"HORIZONTAL\",\n    \"HORIZONTAL_AXIS\",\n    \"HRTF\",\n    \"HTMLAllCollection\",\n    \"HTMLAnchorElement\",\n    \"HTMLAppletElement\",\n    \"HTMLAreaElement\",\n    \"HTMLAudioElement\",\n    \"HTMLBRElement\",\n    \"HTMLBaseElement\",\n    \"HTMLBaseFontElement\",\n    \"HTMLBlockquoteElement\",\n    \"HTMLBodyElement\",\n    \"HTMLButtonElement\",\n    \"HTMLCanvasElement\",\n    \"HTMLCollection\",\n    \"HTMLCommandElement\",\n    \"HTMLContentElement\",\n    \"HTMLDListElement\",\n    \"HTMLDataElement\",\n    \"HTMLDataListElement\",\n    \"HTMLDetailsElement\",\n    \"HTMLDialogElement\",\n    \"HTMLDirectoryElement\",\n    \"HTMLDivElement\",\n    \"HTMLDocument\",\n    \"HTMLElement\",\n    \"HTMLEmbedElement\",\n    \"HTMLFieldSetElement\",\n    \"HTMLFontElement\",\n    \"HTMLFormControlsCollection\",\n    \"HTMLFormElement\",\n    \"HTMLFrameElement\",\n    \"HTMLFrameSetElement\",\n    \"HTMLHRElement\",\n    \"HTMLHeadElement\",\n    \"HTMLHeadingElement\",\n    \"HTMLHtmlElement\",\n    \"HTMLIFrameElement\",\n    \"HTMLImageElement\",\n    \"HTMLInputElement\",\n    \"HTMLIsIndexElement\",\n    \"HTMLKeygenElement\",\n    \"HTMLLIElement\",\n    \"HTMLLabelElement\",\n    \"HTMLLegendElement\",\n    \"HTMLLinkElement\",\n    \"HTMLMapElement\",\n    \"HTMLMarqueeElement\",\n    \"HTMLMediaElement\",\n    \"HTMLMenuElement\",\n    \"HTMLMenuItemElement\",\n    \"HTMLMetaElement\",\n    \"HTMLMeterElement\",\n    \"HTMLModElement\",\n    \"HTMLOListElement\",\n    \"HTMLObjectElement\",\n    \"HTMLOptGroupElement\",\n    \"HTMLOptionElement\",\n    \"HTMLOptionsCollection\",\n    \"HTMLOutputElement\",\n    \"HTMLParagraphElement\",\n    \"HTMLParamElement\",\n    \"HTMLPictureElement\",\n    \"HTMLPreElement\",\n    \"HTMLProgressElement\",\n    \"HTMLPropertiesCollection\",\n    \"HTMLQuoteElement\",\n    \"HTMLScriptElement\",\n    \"HTMLSelectElement\",\n    \"HTMLShadowElement\",\n    \"HTMLSourceElement\",\n    \"HTMLSpanElement\",\n    \"HTMLStyleElement\",\n    \"HTMLTableCaptionElement\",\n    \"HTMLTableCellElement\",\n    \"HTMLTableColElement\",\n    \"HTMLTableElement\",\n    \"HTMLTableRowElement\",\n    \"HTMLTableSectionElement\",\n    \"HTMLTemplateElement\",\n    \"HTMLTextAreaElement\",\n    \"HTMLTimeElement\",\n    \"HTMLTitleElement\",\n    \"HTMLTrackElement\",\n    \"HTMLUListElement\",\n    \"HTMLUnknownElement\",\n    \"HTMLVideoElement\",\n    \"HashChangeEvent\",\n    \"Headers\",\n    \"History\",\n    \"ICE_CHECKING\",\n    \"ICE_CLOSED\",\n    \"ICE_COMPLETED\",\n    \"ICE_CONNECTED\",\n    \"ICE_FAILED\",\n    \"ICE_GATHERING\",\n    \"ICE_WAITING\",\n    \"IDBCursor\",\n    \"IDBCursorWithValue\",\n    \"IDBDatabase\",\n    \"IDBDatabaseException\",\n    \"IDBFactory\",\n    \"IDBFileHandle\",\n    \"IDBFileRequest\",\n    \"IDBIndex\",\n    \"IDBKeyRange\",\n    \"IDBMutableFile\",\n    \"IDBObjectStore\",\n    \"IDBOpenDBRequest\",\n    \"IDBRequest\",\n    \"IDBTransaction\",\n    \"IDBVersionChangeEvent\",\n    \"IDLE\",\n    \"IMPLEMENTATION_COLOR_READ_FORMAT\",\n    \"IMPLEMENTATION_COLOR_READ_TYPE\",\n    \"IMPORT_RULE\",\n    \"INCR\",\n    \"INCR_WRAP\",\n    \"INDEX_SIZE_ERR\",\n    \"INT\",\n    \"INT_VEC2\",\n    \"INT_VEC3\",\n    \"INT_VEC4\",\n    \"INUSE_ATTRIBUTE_ERR\",\n    \"INVALID_ACCESS_ERR\",\n    \"INVALID_CHARACTER_ERR\",\n    \"INVALID_ENUM\",\n    \"INVALID_EXPRESSION_ERR\",\n    \"INVALID_FRAMEBUFFER_OPERATION\",\n    \"INVALID_MODIFICATION_ERR\",\n    \"INVALID_NODE_TYPE_ERR\",\n    \"INVALID_OPERATION\",\n    \"INVALID_STATE_ERR\",\n    \"INVALID_VALUE\",\n    \"INVERSE_DISTANCE\",\n    \"INVERT\",\n    \"IceCandidate\",\n    \"Image\",\n    \"ImageBitmap\",\n    \"ImageData\",\n    \"Infinity\",\n    \"InputEvent\",\n    \"InputMethodContext\",\n    \"InstallTrigger\",\n    \"Int16Array\",\n    \"Int32Array\",\n    \"Int8Array\",\n    \"Intent\",\n    \"InternalError\",\n    \"Intl\",\n    \"IsSearchProviderInstalled\",\n    \"Iterator\",\n    \"JSON\",\n    \"KEEP\",\n    \"KEYDOWN\",\n    \"KEYFRAMES_RULE\",\n    \"KEYFRAME_RULE\",\n    \"KEYPRESS\",\n    \"KEYUP\",\n    \"KeyEvent\",\n    \"KeyboardEvent\",\n    \"LENGTHADJUST_SPACING\",\n    \"LENGTHADJUST_SPACINGANDGLYPHS\",\n    \"LENGTHADJUST_UNKNOWN\",\n    \"LEQUAL\",\n    \"LESS\",\n    \"LINEAR\",\n    \"LINEAR_DISTANCE\",\n    \"LINEAR_MIPMAP_LINEAR\",\n    \"LINEAR_MIPMAP_NEAREST\",\n    \"LINES\",\n    \"LINE_LOOP\",\n    \"LINE_STRIP\",\n    \"LINE_WIDTH\",\n    \"LINK_STATUS\",\n    \"LIVE\",\n    \"LN10\",\n    \"LN2\",\n    \"LOADED\",\n    \"LOADING\",\n    \"LOG10E\",\n    \"LOG2E\",\n    \"LOWPASS\",\n    \"LOWSHELF\",\n    \"LOW_FLOAT\",\n    \"LOW_INT\",\n    \"LSException\",\n    \"LSParserFilter\",\n    \"LUMINANCE\",\n    \"LUMINANCE_ALPHA\",\n    \"LocalMediaStream\",\n    \"Location\",\n    \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",\n    \"MAX_CUBE_MAP_TEXTURE_SIZE\",\n    \"MAX_FRAGMENT_UNIFORM_VECTORS\",\n    \"MAX_RENDERBUFFER_SIZE\",\n    \"MAX_SAFE_INTEGER\",\n    \"MAX_TEXTURE_IMAGE_UNITS\",\n    \"MAX_TEXTURE_MAX_ANISOTROPY_EXT\",\n    \"MAX_TEXTURE_SIZE\",\n    \"MAX_VALUE\",\n    \"MAX_VARYING_VECTORS\",\n    \"MAX_VERTEX_ATTRIBS\",\n    \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",\n    \"MAX_VERTEX_UNIFORM_VECTORS\",\n    \"MAX_VIEWPORT_DIMS\",\n    \"MEDIA_ERR_ABORTED\",\n    \"MEDIA_ERR_DECODE\",\n    \"MEDIA_ERR_ENCRYPTED\",\n    \"MEDIA_ERR_NETWORK\",\n    \"MEDIA_ERR_SRC_NOT_SUPPORTED\",\n    \"MEDIA_KEYERR_CLIENT\",\n    \"MEDIA_KEYERR_DOMAIN\",\n    \"MEDIA_KEYERR_HARDWARECHANGE\",\n    \"MEDIA_KEYERR_OUTPUT\",\n    \"MEDIA_KEYERR_SERVICE\",\n    \"MEDIA_KEYERR_UNKNOWN\",\n    \"MEDIA_RULE\",\n    \"MEDIUM_FLOAT\",\n    \"MEDIUM_INT\",\n    \"META_MASK\",\n    \"MIN_SAFE_INTEGER\",\n    \"MIN_VALUE\",\n    \"MIRRORED_REPEAT\",\n    \"MODE_ASYNCHRONOUS\",\n    \"MODE_SYNCHRONOUS\",\n    \"MODIFICATION\",\n    \"MOUSEDOWN\",\n    \"MOUSEDRAG\",\n    \"MOUSEMOVE\",\n    \"MOUSEOUT\",\n    \"MOUSEOVER\",\n    \"MOUSEUP\",\n    \"MOZ_KEYFRAMES_RULE\",\n    \"MOZ_KEYFRAME_RULE\",\n    \"MOZ_SOURCE_CURSOR\",\n    \"MOZ_SOURCE_ERASER\",\n    \"MOZ_SOURCE_KEYBOARD\",\n    \"MOZ_SOURCE_MOUSE\",\n    \"MOZ_SOURCE_PEN\",\n    \"MOZ_SOURCE_TOUCH\",\n    \"MOZ_SOURCE_UNKNOWN\",\n    \"MSGESTURE_FLAG_BEGIN\",\n    \"MSGESTURE_FLAG_CANCEL\",\n    \"MSGESTURE_FLAG_END\",\n    \"MSGESTURE_FLAG_INERTIA\",\n    \"MSGESTURE_FLAG_NONE\",\n    \"MSPOINTER_TYPE_MOUSE\",\n    \"MSPOINTER_TYPE_PEN\",\n    \"MSPOINTER_TYPE_TOUCH\",\n    \"MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE\",\n    \"MS_ASYNC_CALLBACK_STATUS_CANCEL\",\n    \"MS_ASYNC_CALLBACK_STATUS_CHOOSEANY\",\n    \"MS_ASYNC_CALLBACK_STATUS_ERROR\",\n    \"MS_ASYNC_CALLBACK_STATUS_JOIN\",\n    \"MS_ASYNC_OP_STATUS_CANCELED\",\n    \"MS_ASYNC_OP_STATUS_ERROR\",\n    \"MS_ASYNC_OP_STATUS_SUCCESS\",\n    \"MS_MANIPULATION_STATE_ACTIVE\",\n    \"MS_MANIPULATION_STATE_CANCELLED\",\n    \"MS_MANIPULATION_STATE_COMMITTED\",\n    \"MS_MANIPULATION_STATE_DRAGGING\",\n    \"MS_MANIPULATION_STATE_INERTIA\",\n    \"MS_MANIPULATION_STATE_PRESELECT\",\n    \"MS_MANIPULATION_STATE_SELECTING\",\n    \"MS_MANIPULATION_STATE_STOPPED\",\n    \"MS_MEDIA_ERR_ENCRYPTED\",\n    \"MS_MEDIA_KEYERR_CLIENT\",\n    \"MS_MEDIA_KEYERR_DOMAIN\",\n    \"MS_MEDIA_KEYERR_HARDWARECHANGE\",\n    \"MS_MEDIA_KEYERR_OUTPUT\",\n    \"MS_MEDIA_KEYERR_SERVICE\",\n    \"MS_MEDIA_KEYERR_UNKNOWN\",\n    \"Map\",\n    \"Math\",\n    \"MediaController\",\n    \"MediaDevices\",\n    \"MediaElementAudioSourceNode\",\n    \"MediaEncryptedEvent\",\n    \"MediaError\",\n    \"MediaKeyError\",\n    \"MediaKeyEvent\",\n    \"MediaKeyMessageEvent\",\n    \"MediaKeyNeededEvent\",\n    \"MediaKeySession\",\n    \"MediaKeyStatusMap\",\n    \"MediaKeySystemAccess\",\n    \"MediaKeys\",\n    \"MediaList\",\n    \"MediaQueryList\",\n    \"MediaQueryListEvent\",\n    \"MediaRecorder\",\n    \"MediaSource\",\n    \"MediaStream\",\n    \"MediaStreamAudioDestinationNode\",\n    \"MediaStreamAudioSourceNode\",\n    \"MediaStreamEvent\",\n    \"MediaStreamTrack\",\n    \"MediaStreamTrackEvent\",\n    \"MessageChannel\",\n    \"MessageEvent\",\n    \"MessagePort\",\n    \"Methods\",\n    \"MimeType\",\n    \"MimeTypeArray\",\n    \"MouseEvent\",\n    \"MouseScrollEvent\",\n    \"MozAnimation\",\n    \"MozAnimationDelay\",\n    \"MozAnimationDirection\",\n    \"MozAnimationDuration\",\n    \"MozAnimationFillMode\",\n    \"MozAnimationIterationCount\",\n    \"MozAnimationName\",\n    \"MozAnimationPlayState\",\n    \"MozAnimationTimingFunction\",\n    \"MozAppearance\",\n    \"MozBackfaceVisibility\",\n    \"MozBinding\",\n    \"MozBorderBottomColors\",\n    \"MozBorderEnd\",\n    \"MozBorderEndColor\",\n    \"MozBorderEndStyle\",\n    \"MozBorderEndWidth\",\n    \"MozBorderImage\",\n    \"MozBorderLeftColors\",\n    \"MozBorderRightColors\",\n    \"MozBorderStart\",\n    \"MozBorderStartColor\",\n    \"MozBorderStartStyle\",\n    \"MozBorderStartWidth\",\n    \"MozBorderTopColors\",\n    \"MozBoxAlign\",\n    \"MozBoxDirection\",\n    \"MozBoxFlex\",\n    \"MozBoxOrdinalGroup\",\n    \"MozBoxOrient\",\n    \"MozBoxPack\",\n    \"MozBoxSizing\",\n    \"MozCSSKeyframeRule\",\n    \"MozCSSKeyframesRule\",\n    \"MozColumnCount\",\n    \"MozColumnFill\",\n    \"MozColumnGap\",\n    \"MozColumnRule\",\n    \"MozColumnRuleColor\",\n    \"MozColumnRuleStyle\",\n    \"MozColumnRuleWidth\",\n    \"MozColumnWidth\",\n    \"MozColumns\",\n    \"MozContactChangeEvent\",\n    \"MozFloatEdge\",\n    \"MozFontFeatureSettings\",\n    \"MozFontLanguageOverride\",\n    \"MozForceBrokenImageIcon\",\n    \"MozHyphens\",\n    \"MozImageRegion\",\n    \"MozMarginEnd\",\n    \"MozMarginStart\",\n    \"MozMmsEvent\",\n    \"MozMmsMessage\",\n    \"MozMobileMessageThread\",\n    \"MozOSXFontSmoothing\",\n    \"MozOrient\",\n    \"MozOutlineRadius\",\n    \"MozOutlineRadiusBottomleft\",\n    \"MozOutlineRadiusBottomright\",\n    \"MozOutlineRadiusTopleft\",\n    \"MozOutlineRadiusTopright\",\n    \"MozPaddingEnd\",\n    \"MozPaddingStart\",\n    \"MozPerspective\",\n    \"MozPerspectiveOrigin\",\n    \"MozPowerManager\",\n    \"MozSettingsEvent\",\n    \"MozSmsEvent\",\n    \"MozSmsMessage\",\n    \"MozStackSizing\",\n    \"MozTabSize\",\n    \"MozTextAlignLast\",\n    \"MozTextDecorationColor\",\n    \"MozTextDecorationLine\",\n    \"MozTextDecorationStyle\",\n    \"MozTextSizeAdjust\",\n    \"MozTransform\",\n    \"MozTransformOrigin\",\n    \"MozTransformStyle\",\n    \"MozTransition\",\n    \"MozTransitionDelay\",\n    \"MozTransitionDuration\",\n    \"MozTransitionProperty\",\n    \"MozTransitionTimingFunction\",\n    \"MozUserFocus\",\n    \"MozUserInput\",\n    \"MozUserModify\",\n    \"MozUserSelect\",\n    \"MozWindowDragging\",\n    \"MozWindowShadow\",\n    \"MutationEvent\",\n    \"MutationObserver\",\n    \"MutationRecord\",\n    \"NAMESPACE_ERR\",\n    \"NAMESPACE_RULE\",\n    \"NEAREST\",\n    \"NEAREST_MIPMAP_LINEAR\",\n    \"NEAREST_MIPMAP_NEAREST\",\n    \"NEGATIVE_INFINITY\",\n    \"NETWORK_EMPTY\",\n    \"NETWORK_ERR\",\n    \"NETWORK_IDLE\",\n    \"NETWORK_LOADED\",\n    \"NETWORK_LOADING\",\n    \"NETWORK_NO_SOURCE\",\n    \"NEVER\",\n    \"NEW\",\n    \"NEXT\",\n    \"NEXT_NO_DUPLICATE\",\n    \"NICEST\",\n    \"NODE_AFTER\",\n    \"NODE_BEFORE\",\n    \"NODE_BEFORE_AND_AFTER\",\n    \"NODE_INSIDE\",\n    \"NONE\",\n    \"NON_TRANSIENT_ERR\",\n    \"NOTATION_NODE\",\n    \"NOTCH\",\n    \"NOTEQUAL\",\n    \"NOT_ALLOWED_ERR\",\n    \"NOT_FOUND_ERR\",\n    \"NOT_READABLE_ERR\",\n    \"NOT_SUPPORTED_ERR\",\n    \"NO_DATA_ALLOWED_ERR\",\n    \"NO_ERR\",\n    \"NO_ERROR\",\n    \"NO_MODIFICATION_ALLOWED_ERR\",\n    \"NUMBER_TYPE\",\n    \"NUM_COMPRESSED_TEXTURE_FORMATS\",\n    \"NaN\",\n    \"NamedNodeMap\",\n    \"Navigator\",\n    \"NearbyLinks\",\n    \"NetworkInformation\",\n    \"Node\",\n    \"NodeFilter\",\n    \"NodeIterator\",\n    \"NodeList\",\n    \"Notation\",\n    \"Notification\",\n    \"NotifyPaintEvent\",\n    \"Number\",\n    \"NumberFormat\",\n    \"OBSOLETE\",\n    \"ONE\",\n    \"ONE_MINUS_CONSTANT_ALPHA\",\n    \"ONE_MINUS_CONSTANT_COLOR\",\n    \"ONE_MINUS_DST_ALPHA\",\n    \"ONE_MINUS_DST_COLOR\",\n    \"ONE_MINUS_SRC_ALPHA\",\n    \"ONE_MINUS_SRC_COLOR\",\n    \"OPEN\",\n    \"OPENED\",\n    \"OPENING\",\n    \"ORDERED_NODE_ITERATOR_TYPE\",\n    \"ORDERED_NODE_SNAPSHOT_TYPE\",\n    \"OUT_OF_MEMORY\",\n    \"Object\",\n    \"OfflineAudioCompletionEvent\",\n    \"OfflineAudioContext\",\n    \"OfflineResourceList\",\n    \"Option\",\n    \"OscillatorNode\",\n    \"OverflowEvent\",\n    \"PACK_ALIGNMENT\",\n    \"PAGE_RULE\",\n    \"PARSE_ERR\",\n    \"PATHSEG_ARC_ABS\",\n    \"PATHSEG_ARC_REL\",\n    \"PATHSEG_CLOSEPATH\",\n    \"PATHSEG_CURVETO_CUBIC_ABS\",\n    \"PATHSEG_CURVETO_CUBIC_REL\",\n    \"PATHSEG_CURVETO_CUBIC_SMOOTH_ABS\",\n    \"PATHSEG_CURVETO_CUBIC_SMOOTH_REL\",\n    \"PATHSEG_CURVETO_QUADRATIC_ABS\",\n    \"PATHSEG_CURVETO_QUADRATIC_REL\",\n    \"PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS\",\n    \"PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL\",\n    \"PATHSEG_LINETO_ABS\",\n    \"PATHSEG_LINETO_HORIZONTAL_ABS\",\n    \"PATHSEG_LINETO_HORIZONTAL_REL\",\n    \"PATHSEG_LINETO_REL\",\n    \"PATHSEG_LINETO_VERTICAL_ABS\",\n    \"PATHSEG_LINETO_VERTICAL_REL\",\n    \"PATHSEG_MOVETO_ABS\",\n    \"PATHSEG_MOVETO_REL\",\n    \"PATHSEG_UNKNOWN\",\n    \"PATH_EXISTS_ERR\",\n    \"PEAKING\",\n    \"PERMISSION_DENIED\",\n    \"PERSISTENT\",\n    \"PI\",\n    \"PLAYING_STATE\",\n    \"POINTS\",\n    \"POLYGON_OFFSET_FACTOR\",\n    \"POLYGON_OFFSET_FILL\",\n    \"POLYGON_OFFSET_UNITS\",\n    \"POSITION_UNAVAILABLE\",\n    \"POSITIVE_INFINITY\",\n    \"PREV\",\n    \"PREV_NO_DUPLICATE\",\n    \"PROCESSING_INSTRUCTION_NODE\",\n    \"PageChangeEvent\",\n    \"PageTransitionEvent\",\n    \"PaintRequest\",\n    \"PaintRequestList\",\n    \"PannerNode\",\n    \"Path2D\",\n    \"Performance\",\n    \"PerformanceEntry\",\n    \"PerformanceMark\",\n    \"PerformanceMeasure\",\n    \"PerformanceNavigation\",\n    \"PerformanceResourceTiming\",\n    \"PerformanceTiming\",\n    \"PeriodicWave\",\n    \"Plugin\",\n    \"PluginArray\",\n    \"PopStateEvent\",\n    \"PopupBlockedEvent\",\n    \"ProcessingInstruction\",\n    \"ProgressEvent\",\n    \"Promise\",\n    \"PropertyNodeList\",\n    \"Proxy\",\n    \"PushManager\",\n    \"PushSubscription\",\n    \"Q\",\n    \"QUOTA_ERR\",\n    \"QUOTA_EXCEEDED_ERR\",\n    \"QueryInterface\",\n    \"READ_ONLY\",\n    \"READ_ONLY_ERR\",\n    \"READ_WRITE\",\n    \"RED_BITS\",\n    \"REMOVAL\",\n    \"RENDERBUFFER\",\n    \"RENDERBUFFER_ALPHA_SIZE\",\n    \"RENDERBUFFER_BINDING\",\n    \"RENDERBUFFER_BLUE_SIZE\",\n    \"RENDERBUFFER_DEPTH_SIZE\",\n    \"RENDERBUFFER_GREEN_SIZE\",\n    \"RENDERBUFFER_HEIGHT\",\n    \"RENDERBUFFER_INTERNAL_FORMAT\",\n    \"RENDERBUFFER_RED_SIZE\",\n    \"RENDERBUFFER_STENCIL_SIZE\",\n    \"RENDERBUFFER_WIDTH\",\n    \"RENDERER\",\n    \"RENDERING_INTENT_ABSOLUTE_COLORIMETRIC\",\n    \"RENDERING_INTENT_AUTO\",\n    \"RENDERING_INTENT_PERCEPTUAL\",\n    \"RENDERING_INTENT_RELATIVE_COLORIMETRIC\",\n    \"RENDERING_INTENT_SATURATION\",\n    \"RENDERING_INTENT_UNKNOWN\",\n    \"REPEAT\",\n    \"REPLACE\",\n    \"RGB\",\n    \"RGB565\",\n    \"RGB5_A1\",\n    \"RGBA\",\n    \"RGBA4\",\n    \"RGBColor\",\n    \"ROTATION_CLOCKWISE\",\n    \"ROTATION_COUNTERCLOCKWISE\",\n    \"RTCDataChannelEvent\",\n    \"RTCIceCandidate\",\n    \"RTCPeerConnectionIceEvent\",\n    \"RTCRtpReceiver\",\n    \"RTCRtpSender\",\n    \"RTCSessionDescription\",\n    \"RTCStatsReport\",\n    \"RadioNodeList\",\n    \"Range\",\n    \"RangeError\",\n    \"RangeException\",\n    \"RecordErrorEvent\",\n    \"Rect\",\n    \"ReferenceError\",\n    \"RegExp\",\n    \"Request\",\n    \"Response\",\n    \"SAMPLER_2D\",\n    \"SAMPLER_CUBE\",\n    \"SAMPLES\",\n    \"SAMPLE_ALPHA_TO_COVERAGE\",\n    \"SAMPLE_BUFFERS\",\n    \"SAMPLE_COVERAGE\",\n    \"SAMPLE_COVERAGE_INVERT\",\n    \"SAMPLE_COVERAGE_VALUE\",\n    \"SAWTOOTH\",\n    \"SCHEDULED_STATE\",\n    \"SCISSOR_BOX\",\n    \"SCISSOR_TEST\",\n    \"SCROLL_PAGE_DOWN\",\n    \"SCROLL_PAGE_UP\",\n    \"SDP_ANSWER\",\n    \"SDP_OFFER\",\n    \"SDP_PRANSWER\",\n    \"SECURITY_ERR\",\n    \"SELECT\",\n    \"SERIALIZE_ERR\",\n    \"SEVERITY_ERROR\",\n    \"SEVERITY_FATAL_ERROR\",\n    \"SEVERITY_WARNING\",\n    \"SHADER_COMPILER\",\n    \"SHADER_TYPE\",\n    \"SHADING_LANGUAGE_VERSION\",\n    \"SHIFT_MASK\",\n    \"SHORT\",\n    \"SHOWING\",\n    \"SHOW_ALL\",\n    \"SHOW_ATTRIBUTE\",\n    \"SHOW_CDATA_SECTION\",\n    \"SHOW_COMMENT\",\n    \"SHOW_DOCUMENT\",\n    \"SHOW_DOCUMENT_FRAGMENT\",\n    \"SHOW_DOCUMENT_TYPE\",\n    \"SHOW_ELEMENT\",\n    \"SHOW_ENTITY\",\n    \"SHOW_ENTITY_REFERENCE\",\n    \"SHOW_NOTATION\",\n    \"SHOW_PROCESSING_INSTRUCTION\",\n    \"SHOW_TEXT\",\n    \"SINE\",\n    \"SOUNDFIELD\",\n    \"SQLException\",\n    \"SQRT1_2\",\n    \"SQRT2\",\n    \"SQUARE\",\n    \"SRC_ALPHA\",\n    \"SRC_ALPHA_SATURATE\",\n    \"SRC_COLOR\",\n    \"START_TO_END\",\n    \"START_TO_START\",\n    \"STATIC_DRAW\",\n    \"STENCIL_ATTACHMENT\",\n    \"STENCIL_BACK_FAIL\",\n    \"STENCIL_BACK_FUNC\",\n    \"STENCIL_BACK_PASS_DEPTH_FAIL\",\n    \"STENCIL_BACK_PASS_DEPTH_PASS\",\n    \"STENCIL_BACK_REF\",\n    \"STENCIL_BACK_VALUE_MASK\",\n    \"STENCIL_BACK_WRITEMASK\",\n    \"STENCIL_BITS\",\n    \"STENCIL_BUFFER_BIT\",\n    \"STENCIL_CLEAR_VALUE\",\n    \"STENCIL_FAIL\",\n    \"STENCIL_FUNC\",\n    \"STENCIL_INDEX\",\n    \"STENCIL_INDEX8\",\n    \"STENCIL_PASS_DEPTH_FAIL\",\n    \"STENCIL_PASS_DEPTH_PASS\",\n    \"STENCIL_REF\",\n    \"STENCIL_TEST\",\n    \"STENCIL_VALUE_MASK\",\n    \"STENCIL_WRITEMASK\",\n    \"STREAM_DRAW\",\n    \"STRING_TYPE\",\n    \"STYLE_RULE\",\n    \"SUBPIXEL_BITS\",\n    \"SUPPORTS_RULE\",\n    \"SVGAElement\",\n    \"SVGAltGlyphDefElement\",\n    \"SVGAltGlyphElement\",\n    \"SVGAltGlyphItemElement\",\n    \"SVGAngle\",\n    \"SVGAnimateColorElement\",\n    \"SVGAnimateElement\",\n    \"SVGAnimateMotionElement\",\n    \"SVGAnimateTransformElement\",\n    \"SVGAnimatedAngle\",\n    \"SVGAnimatedBoolean\",\n    \"SVGAnimatedEnumeration\",\n    \"SVGAnimatedInteger\",\n    \"SVGAnimatedLength\",\n    \"SVGAnimatedLengthList\",\n    \"SVGAnimatedNumber\",\n    \"SVGAnimatedNumberList\",\n    \"SVGAnimatedPreserveAspectRatio\",\n    \"SVGAnimatedRect\",\n    \"SVGAnimatedString\",\n    \"SVGAnimatedTransformList\",\n    \"SVGAnimationElement\",\n    \"SVGCircleElement\",\n    \"SVGClipPathElement\",\n    \"SVGColor\",\n    \"SVGComponentTransferFunctionElement\",\n    \"SVGCursorElement\",\n    \"SVGDefsElement\",\n    \"SVGDescElement\",\n    \"SVGDiscardElement\",\n    \"SVGDocument\",\n    \"SVGElement\",\n    \"SVGElementInstance\",\n    \"SVGElementInstanceList\",\n    \"SVGEllipseElement\",\n    \"SVGException\",\n    \"SVGFEBlendElement\",\n    \"SVGFEColorMatrixElement\",\n    \"SVGFEComponentTransferElement\",\n    \"SVGFECompositeElement\",\n    \"SVGFEConvolveMatrixElement\",\n    \"SVGFEDiffuseLightingElement\",\n    \"SVGFEDisplacementMapElement\",\n    \"SVGFEDistantLightElement\",\n    \"SVGFEDropShadowElement\",\n    \"SVGFEFloodElement\",\n    \"SVGFEFuncAElement\",\n    \"SVGFEFuncBElement\",\n    \"SVGFEFuncGElement\",\n    \"SVGFEFuncRElement\",\n    \"SVGFEGaussianBlurElement\",\n    \"SVGFEImageElement\",\n    \"SVGFEMergeElement\",\n    \"SVGFEMergeNodeElement\",\n    \"SVGFEMorphologyElement\",\n    \"SVGFEOffsetElement\",\n    \"SVGFEPointLightElement\",\n    \"SVGFESpecularLightingElement\",\n    \"SVGFESpotLightElement\",\n    \"SVGFETileElement\",\n    \"SVGFETurbulenceElement\",\n    \"SVGFilterElement\",\n    \"SVGFontElement\",\n    \"SVGFontFaceElement\",\n    \"SVGFontFaceFormatElement\",\n    \"SVGFontFaceNameElement\",\n    \"SVGFontFaceSrcElement\",\n    \"SVGFontFaceUriElement\",\n    \"SVGForeignObjectElement\",\n    \"SVGGElement\",\n    \"SVGGeometryElement\",\n    \"SVGGlyphElement\",\n    \"SVGGlyphRefElement\",\n    \"SVGGradientElement\",\n    \"SVGGraphicsElement\",\n    \"SVGHKernElement\",\n    \"SVGImageElement\",\n    \"SVGLength\",\n    \"SVGLengthList\",\n    \"SVGLineElement\",\n    \"SVGLinearGradientElement\",\n    \"SVGMPathElement\",\n    \"SVGMarkerElement\",\n    \"SVGMaskElement\",\n    \"SVGMatrix\",\n    \"SVGMetadataElement\",\n    \"SVGMissingGlyphElement\",\n    \"SVGNumber\",\n    \"SVGNumberList\",\n    \"SVGPaint\",\n    \"SVGPathElement\",\n    \"SVGPathSeg\",\n    \"SVGPathSegArcAbs\",\n    \"SVGPathSegArcRel\",\n    \"SVGPathSegClosePath\",\n    \"SVGPathSegCurvetoCubicAbs\",\n    \"SVGPathSegCurvetoCubicRel\",\n    \"SVGPathSegCurvetoCubicSmoothAbs\",\n    \"SVGPathSegCurvetoCubicSmoothRel\",\n    \"SVGPathSegCurvetoQuadraticAbs\",\n    \"SVGPathSegCurvetoQuadraticRel\",\n    \"SVGPathSegCurvetoQuadraticSmoothAbs\",\n    \"SVGPathSegCurvetoQuadraticSmoothRel\",\n    \"SVGPathSegLinetoAbs\",\n    \"SVGPathSegLinetoHorizontalAbs\",\n    \"SVGPathSegLinetoHorizontalRel\",\n    \"SVGPathSegLinetoRel\",\n    \"SVGPathSegLinetoVerticalAbs\",\n    \"SVGPathSegLinetoVerticalRel\",\n    \"SVGPathSegList\",\n    \"SVGPathSegMovetoAbs\",\n    \"SVGPathSegMovetoRel\",\n    \"SVGPatternElement\",\n    \"SVGPoint\",\n    \"SVGPointList\",\n    \"SVGPolygonElement\",\n    \"SVGPolylineElement\",\n    \"SVGPreserveAspectRatio\",\n    \"SVGRadialGradientElement\",\n    \"SVGRect\",\n    \"SVGRectElement\",\n    \"SVGRenderingIntent\",\n    \"SVGSVGElement\",\n    \"SVGScriptElement\",\n    \"SVGSetElement\",\n    \"SVGStopElement\",\n    \"SVGStringList\",\n    \"SVGStyleElement\",\n    \"SVGSwitchElement\",\n    \"SVGSymbolElement\",\n    \"SVGTRefElement\",\n    \"SVGTSpanElement\",\n    \"SVGTextContentElement\",\n    \"SVGTextElement\",\n    \"SVGTextPathElement\",\n    \"SVGTextPositioningElement\",\n    \"SVGTitleElement\",\n    \"SVGTransform\",\n    \"SVGTransformList\",\n    \"SVGUnitTypes\",\n    \"SVGUseElement\",\n    \"SVGVKernElement\",\n    \"SVGViewElement\",\n    \"SVGViewSpec\",\n    \"SVGZoomAndPan\",\n    \"SVGZoomEvent\",\n    \"SVG_ANGLETYPE_DEG\",\n    \"SVG_ANGLETYPE_GRAD\",\n    \"SVG_ANGLETYPE_RAD\",\n    \"SVG_ANGLETYPE_UNKNOWN\",\n    \"SVG_ANGLETYPE_UNSPECIFIED\",\n    \"SVG_CHANNEL_A\",\n    \"SVG_CHANNEL_B\",\n    \"SVG_CHANNEL_G\",\n    \"SVG_CHANNEL_R\",\n    \"SVG_CHANNEL_UNKNOWN\",\n    \"SVG_COLORTYPE_CURRENTCOLOR\",\n    \"SVG_COLORTYPE_RGBCOLOR\",\n    \"SVG_COLORTYPE_RGBCOLOR_ICCCOLOR\",\n    \"SVG_COLORTYPE_UNKNOWN\",\n    \"SVG_EDGEMODE_DUPLICATE\",\n    \"SVG_EDGEMODE_NONE\",\n    \"SVG_EDGEMODE_UNKNOWN\",\n    \"SVG_EDGEMODE_WRAP\",\n    \"SVG_FEBLEND_MODE_COLOR\",\n    \"SVG_FEBLEND_MODE_COLOR_BURN\",\n    \"SVG_FEBLEND_MODE_COLOR_DODGE\",\n    \"SVG_FEBLEND_MODE_DARKEN\",\n    \"SVG_FEBLEND_MODE_DIFFERENCE\",\n    \"SVG_FEBLEND_MODE_EXCLUSION\",\n    \"SVG_FEBLEND_MODE_HARD_LIGHT\",\n    \"SVG_FEBLEND_MODE_HUE\",\n    \"SVG_FEBLEND_MODE_LIGHTEN\",\n    \"SVG_FEBLEND_MODE_LUMINOSITY\",\n    \"SVG_FEBLEND_MODE_MULTIPLY\",\n    \"SVG_FEBLEND_MODE_NORMAL\",\n    \"SVG_FEBLEND_MODE_OVERLAY\",\n    \"SVG_FEBLEND_MODE_SATURATION\",\n    \"SVG_FEBLEND_MODE_SCREEN\",\n    \"SVG_FEBLEND_MODE_SOFT_LIGHT\",\n    \"SVG_FEBLEND_MODE_UNKNOWN\",\n    \"SVG_FECOLORMATRIX_TYPE_HUEROTATE\",\n    \"SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA\",\n    \"SVG_FECOLORMATRIX_TYPE_MATRIX\",\n    \"SVG_FECOLORMATRIX_TYPE_SATURATE\",\n    \"SVG_FECOLORMATRIX_TYPE_UNKNOWN\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_GAMMA\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_LINEAR\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_TABLE\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN\",\n    \"SVG_FECOMPOSITE_OPERATOR_ARITHMETIC\",\n    \"SVG_FECOMPOSITE_OPERATOR_ATOP\",\n    \"SVG_FECOMPOSITE_OPERATOR_IN\",\n    \"SVG_FECOMPOSITE_OPERATOR_OUT\",\n    \"SVG_FECOMPOSITE_OPERATOR_OVER\",\n    \"SVG_FECOMPOSITE_OPERATOR_UNKNOWN\",\n    \"SVG_FECOMPOSITE_OPERATOR_XOR\",\n    \"SVG_INVALID_VALUE_ERR\",\n    \"SVG_LENGTHTYPE_CM\",\n    \"SVG_LENGTHTYPE_EMS\",\n    \"SVG_LENGTHTYPE_EXS\",\n    \"SVG_LENGTHTYPE_IN\",\n    \"SVG_LENGTHTYPE_MM\",\n    \"SVG_LENGTHTYPE_NUMBER\",\n    \"SVG_LENGTHTYPE_PC\",\n    \"SVG_LENGTHTYPE_PERCENTAGE\",\n    \"SVG_LENGTHTYPE_PT\",\n    \"SVG_LENGTHTYPE_PX\",\n    \"SVG_LENGTHTYPE_UNKNOWN\",\n    \"SVG_MARKERUNITS_STROKEWIDTH\",\n    \"SVG_MARKERUNITS_UNKNOWN\",\n    \"SVG_MARKERUNITS_USERSPACEONUSE\",\n    \"SVG_MARKER_ORIENT_ANGLE\",\n    \"SVG_MARKER_ORIENT_AUTO\",\n    \"SVG_MARKER_ORIENT_UNKNOWN\",\n    \"SVG_MASKTYPE_ALPHA\",\n    \"SVG_MASKTYPE_LUMINANCE\",\n    \"SVG_MATRIX_NOT_INVERTABLE\",\n    \"SVG_MEETORSLICE_MEET\",\n    \"SVG_MEETORSLICE_SLICE\",\n    \"SVG_MEETORSLICE_UNKNOWN\",\n    \"SVG_MORPHOLOGY_OPERATOR_DILATE\",\n    \"SVG_MORPHOLOGY_OPERATOR_ERODE\",\n    \"SVG_MORPHOLOGY_OPERATOR_UNKNOWN\",\n    \"SVG_PAINTTYPE_CURRENTCOLOR\",\n    \"SVG_PAINTTYPE_NONE\",\n    \"SVG_PAINTTYPE_RGBCOLOR\",\n    \"SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR\",\n    \"SVG_PAINTTYPE_UNKNOWN\",\n    \"SVG_PAINTTYPE_URI\",\n    \"SVG_PAINTTYPE_URI_CURRENTCOLOR\",\n    \"SVG_PAINTTYPE_URI_NONE\",\n    \"SVG_PAINTTYPE_URI_RGBCOLOR\",\n    \"SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR\",\n    \"SVG_PRESERVEASPECTRATIO_NONE\",\n    \"SVG_PRESERVEASPECTRATIO_UNKNOWN\",\n    \"SVG_PRESERVEASPECTRATIO_XMAXYMAX\",\n    \"SVG_PRESERVEASPECTRATIO_XMAXYMID\",\n    \"SVG_PRESERVEASPECTRATIO_XMAXYMIN\",\n    \"SVG_PRESERVEASPECTRATIO_XMIDYMAX\",\n    \"SVG_PRESERVEASPECTRATIO_XMIDYMID\",\n    \"SVG_PRESERVEASPECTRATIO_XMIDYMIN\",\n    \"SVG_PRESERVEASPECTRATIO_XMINYMAX\",\n    \"SVG_PRESERVEASPECTRATIO_XMINYMID\",\n    \"SVG_PRESERVEASPECTRATIO_XMINYMIN\",\n    \"SVG_SPREADMETHOD_PAD\",\n    \"SVG_SPREADMETHOD_REFLECT\",\n    \"SVG_SPREADMETHOD_REPEAT\",\n    \"SVG_SPREADMETHOD_UNKNOWN\",\n    \"SVG_STITCHTYPE_NOSTITCH\",\n    \"SVG_STITCHTYPE_STITCH\",\n    \"SVG_STITCHTYPE_UNKNOWN\",\n    \"SVG_TRANSFORM_MATRIX\",\n    \"SVG_TRANSFORM_ROTATE\",\n    \"SVG_TRANSFORM_SCALE\",\n    \"SVG_TRANSFORM_SKEWX\",\n    \"SVG_TRANSFORM_SKEWY\",\n    \"SVG_TRANSFORM_TRANSLATE\",\n    \"SVG_TRANSFORM_UNKNOWN\",\n    \"SVG_TURBULENCE_TYPE_FRACTALNOISE\",\n    \"SVG_TURBULENCE_TYPE_TURBULENCE\",\n    \"SVG_TURBULENCE_TYPE_UNKNOWN\",\n    \"SVG_UNIT_TYPE_OBJECTBOUNDINGBOX\",\n    \"SVG_UNIT_TYPE_UNKNOWN\",\n    \"SVG_UNIT_TYPE_USERSPACEONUSE\",\n    \"SVG_WRONG_TYPE_ERR\",\n    \"SVG_ZOOMANDPAN_DISABLE\",\n    \"SVG_ZOOMANDPAN_MAGNIFY\",\n    \"SVG_ZOOMANDPAN_UNKNOWN\",\n    \"SYNTAX_ERR\",\n    \"SavedPages\",\n    \"Screen\",\n    \"ScreenOrientation\",\n    \"Script\",\n    \"ScriptProcessorNode\",\n    \"ScrollAreaEvent\",\n    \"SecurityPolicyViolationEvent\",\n    \"Selection\",\n    \"ServiceWorker\",\n    \"ServiceWorkerContainer\",\n    \"ServiceWorkerRegistration\",\n    \"SessionDescription\",\n    \"Set\",\n    \"ShadowRoot\",\n    \"SharedWorker\",\n    \"SimpleGestureEvent\",\n    \"SpeechSynthesisEvent\",\n    \"SpeechSynthesisUtterance\",\n    \"StopIteration\",\n    \"Storage\",\n    \"StorageEvent\",\n    \"String\",\n    \"StyleSheet\",\n    \"StyleSheetList\",\n    \"SubtleCrypto\",\n    \"Symbol\",\n    \"SyntaxError\",\n    \"TEMPORARY\",\n    \"TEXTPATH_METHODTYPE_ALIGN\",\n    \"TEXTPATH_METHODTYPE_STRETCH\",\n    \"TEXTPATH_METHODTYPE_UNKNOWN\",\n    \"TEXTPATH_SPACINGTYPE_AUTO\",\n    \"TEXTPATH_SPACINGTYPE_EXACT\",\n    \"TEXTPATH_SPACINGTYPE_UNKNOWN\",\n    \"TEXTURE\",\n    \"TEXTURE0\",\n    \"TEXTURE1\",\n    \"TEXTURE10\",\n    \"TEXTURE11\",\n    \"TEXTURE12\",\n    \"TEXTURE13\",\n    \"TEXTURE14\",\n    \"TEXTURE15\",\n    \"TEXTURE16\",\n    \"TEXTURE17\",\n    \"TEXTURE18\",\n    \"TEXTURE19\",\n    \"TEXTURE2\",\n    \"TEXTURE20\",\n    \"TEXTURE21\",\n    \"TEXTURE22\",\n    \"TEXTURE23\",\n    \"TEXTURE24\",\n    \"TEXTURE25\",\n    \"TEXTURE26\",\n    \"TEXTURE27\",\n    \"TEXTURE28\",\n    \"TEXTURE29\",\n    \"TEXTURE3\",\n    \"TEXTURE30\",\n    \"TEXTURE31\",\n    \"TEXTURE4\",\n    \"TEXTURE5\",\n    \"TEXTURE6\",\n    \"TEXTURE7\",\n    \"TEXTURE8\",\n    \"TEXTURE9\",\n    \"TEXTURE_2D\",\n    \"TEXTURE_BINDING_2D\",\n    \"TEXTURE_BINDING_CUBE_MAP\",\n    \"TEXTURE_CUBE_MAP\",\n    \"TEXTURE_CUBE_MAP_NEGATIVE_X\",\n    \"TEXTURE_CUBE_MAP_NEGATIVE_Y\",\n    \"TEXTURE_CUBE_MAP_NEGATIVE_Z\",\n    \"TEXTURE_CUBE_MAP_POSITIVE_X\",\n    \"TEXTURE_CUBE_MAP_POSITIVE_Y\",\n    \"TEXTURE_CUBE_MAP_POSITIVE_Z\",\n    \"TEXTURE_MAG_FILTER\",\n    \"TEXTURE_MAX_ANISOTROPY_EXT\",\n    \"TEXTURE_MIN_FILTER\",\n    \"TEXTURE_WRAP_S\",\n    \"TEXTURE_WRAP_T\",\n    \"TEXT_NODE\",\n    \"TIMEOUT\",\n    \"TIMEOUT_ERR\",\n    \"TOO_LARGE_ERR\",\n    \"TRANSACTION_INACTIVE_ERR\",\n    \"TRIANGLE\",\n    \"TRIANGLES\",\n    \"TRIANGLE_FAN\",\n    \"TRIANGLE_STRIP\",\n    \"TYPE_BACK_FORWARD\",\n    \"TYPE_ERR\",\n    \"TYPE_MISMATCH_ERR\",\n    \"TYPE_NAVIGATE\",\n    \"TYPE_RELOAD\",\n    \"TYPE_RESERVED\",\n    \"Text\",\n    \"TextDecoder\",\n    \"TextEncoder\",\n    \"TextEvent\",\n    \"TextMetrics\",\n    \"TextTrack\",\n    \"TextTrackCue\",\n    \"TextTrackCueList\",\n    \"TextTrackList\",\n    \"TimeEvent\",\n    \"TimeRanges\",\n    \"Touch\",\n    \"TouchEvent\",\n    \"TouchList\",\n    \"TrackEvent\",\n    \"TransitionEvent\",\n    \"TreeWalker\",\n    \"TypeError\",\n    \"UIEvent\",\n    \"UNCACHED\",\n    \"UNKNOWN_ERR\",\n    \"UNKNOWN_RULE\",\n    \"UNMASKED_RENDERER_WEBGL\",\n    \"UNMASKED_VENDOR_WEBGL\",\n    \"UNORDERED_NODE_ITERATOR_TYPE\",\n    \"UNORDERED_NODE_SNAPSHOT_TYPE\",\n    \"UNPACK_ALIGNMENT\",\n    \"UNPACK_COLORSPACE_CONVERSION_WEBGL\",\n    \"UNPACK_FLIP_Y_WEBGL\",\n    \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",\n    \"UNSCHEDULED_STATE\",\n    \"UNSENT\",\n    \"UNSIGNED_BYTE\",\n    \"UNSIGNED_INT\",\n    \"UNSIGNED_SHORT\",\n    \"UNSIGNED_SHORT_4_4_4_4\",\n    \"UNSIGNED_SHORT_5_5_5_1\",\n    \"UNSIGNED_SHORT_5_6_5\",\n    \"UNSPECIFIED_EVENT_TYPE_ERR\",\n    \"UPDATEREADY\",\n    \"URIError\",\n    \"URL\",\n    \"URLSearchParams\",\n    \"URLUnencoded\",\n    \"URL_MISMATCH_ERR\",\n    \"UTC\",\n    \"Uint16Array\",\n    \"Uint32Array\",\n    \"Uint8Array\",\n    \"Uint8ClampedArray\",\n    \"UserMessageHandler\",\n    \"UserMessageHandlersNamespace\",\n    \"UserProximityEvent\",\n    \"VALIDATE_STATUS\",\n    \"VALIDATION_ERR\",\n    \"VARIABLES_RULE\",\n    \"VENDOR\",\n    \"VERSION\",\n    \"VERSION_CHANGE\",\n    \"VERSION_ERR\",\n    \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",\n    \"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\",\n    \"VERTEX_ATTRIB_ARRAY_ENABLED\",\n    \"VERTEX_ATTRIB_ARRAY_NORMALIZED\",\n    \"VERTEX_ATTRIB_ARRAY_POINTER\",\n    \"VERTEX_ATTRIB_ARRAY_SIZE\",\n    \"VERTEX_ATTRIB_ARRAY_STRIDE\",\n    \"VERTEX_ATTRIB_ARRAY_TYPE\",\n    \"VERTEX_SHADER\",\n    \"VERTICAL\",\n    \"VERTICAL_AXIS\",\n    \"VER_ERR\",\n    \"VIEWPORT\",\n    \"VIEWPORT_RULE\",\n    \"VTTCue\",\n    \"VTTRegion\",\n    \"ValidityState\",\n    \"VideoStreamTrack\",\n    \"WEBKIT_FILTER_RULE\",\n    \"WEBKIT_KEYFRAMES_RULE\",\n    \"WEBKIT_KEYFRAME_RULE\",\n    \"WEBKIT_REGION_RULE\",\n    \"WRONG_DOCUMENT_ERR\",\n    \"WaveShaperNode\",\n    \"WeakMap\",\n    \"WeakSet\",\n    \"WebGLActiveInfo\",\n    \"WebGLBuffer\",\n    \"WebGLContextEvent\",\n    \"WebGLFramebuffer\",\n    \"WebGLProgram\",\n    \"WebGLRenderbuffer\",\n    \"WebGLRenderingContext\",\n    \"WebGLShader\",\n    \"WebGLShaderPrecisionFormat\",\n    \"WebGLTexture\",\n    \"WebGLUniformLocation\",\n    \"WebGLVertexArray\",\n    \"WebKitAnimationEvent\",\n    \"WebKitBlobBuilder\",\n    \"WebKitCSSFilterRule\",\n    \"WebKitCSSFilterValue\",\n    \"WebKitCSSKeyframeRule\",\n    \"WebKitCSSKeyframesRule\",\n    \"WebKitCSSMatrix\",\n    \"WebKitCSSRegionRule\",\n    \"WebKitCSSTransformValue\",\n    \"WebKitDataCue\",\n    \"WebKitGamepad\",\n    \"WebKitMediaKeyError\",\n    \"WebKitMediaKeyMessageEvent\",\n    \"WebKitMediaKeySession\",\n    \"WebKitMediaKeys\",\n    \"WebKitMediaSource\",\n    \"WebKitMutationObserver\",\n    \"WebKitNamespace\",\n    \"WebKitPlaybackTargetAvailabilityEvent\",\n    \"WebKitPoint\",\n    \"WebKitShadowRoot\",\n    \"WebKitSourceBuffer\",\n    \"WebKitSourceBufferList\",\n    \"WebKitTransitionEvent\",\n    \"WebSocket\",\n    \"WheelEvent\",\n    \"Window\",\n    \"Worker\",\n    \"XMLDocument\",\n    \"XMLHttpRequest\",\n    \"XMLHttpRequestEventTarget\",\n    \"XMLHttpRequestException\",\n    \"XMLHttpRequestProgressEvent\",\n    \"XMLHttpRequestUpload\",\n    \"XMLSerializer\",\n    \"XMLStylesheetProcessingInstruction\",\n    \"XPathEvaluator\",\n    \"XPathException\",\n    \"XPathExpression\",\n    \"XPathNSResolver\",\n    \"XPathResult\",\n    \"XSLTProcessor\",\n    \"ZERO\",\n    \"_XD0M_\",\n    \"_YD0M_\",\n    \"__defineGetter__\",\n    \"__defineSetter__\",\n    \"__lookupGetter__\",\n    \"__lookupSetter__\",\n    \"__opera\",\n    \"__proto__\",\n    \"_browserjsran\",\n    \"a\",\n    \"aLink\",\n    \"abbr\",\n    \"abort\",\n    \"abs\",\n    \"absolute\",\n    \"acceleration\",\n    \"accelerationIncludingGravity\",\n    \"accelerator\",\n    \"accept\",\n    \"acceptCharset\",\n    \"acceptNode\",\n    \"accessKey\",\n    \"accessKeyLabel\",\n    \"accuracy\",\n    \"acos\",\n    \"acosh\",\n    \"action\",\n    \"actionURL\",\n    \"active\",\n    \"activeCues\",\n    \"activeElement\",\n    \"activeSourceBuffers\",\n    \"activeSourceCount\",\n    \"activeTexture\",\n    \"add\",\n    \"addBehavior\",\n    \"addCandidate\",\n    \"addColorStop\",\n    \"addCue\",\n    \"addElement\",\n    \"addEventListener\",\n    \"addFilter\",\n    \"addFromString\",\n    \"addFromUri\",\n    \"addIceCandidate\",\n    \"addImport\",\n    \"addListener\",\n    \"addNamed\",\n    \"addPageRule\",\n    \"addPath\",\n    \"addPointer\",\n    \"addRange\",\n    \"addRegion\",\n    \"addRule\",\n    \"addSearchEngine\",\n    \"addSourceBuffer\",\n    \"addStream\",\n    \"addTextTrack\",\n    \"addTrack\",\n    \"addWakeLockListener\",\n    \"addedNodes\",\n    \"additionalName\",\n    \"additiveSymbols\",\n    \"addons\",\n    \"adoptNode\",\n    \"adr\",\n    \"advance\",\n    \"alert\",\n    \"algorithm\",\n    \"align\",\n    \"align-content\",\n    \"align-items\",\n    \"align-self\",\n    \"alignContent\",\n    \"alignItems\",\n    \"alignSelf\",\n    \"alignmentBaseline\",\n    \"alinkColor\",\n    \"all\",\n    \"allowFullscreen\",\n    \"allowedDirections\",\n    \"alpha\",\n    \"alt\",\n    \"altGraphKey\",\n    \"altHtml\",\n    \"altKey\",\n    \"altLeft\",\n    \"altitude\",\n    \"altitudeAccuracy\",\n    \"amplitude\",\n    \"ancestorOrigins\",\n    \"anchor\",\n    \"anchorNode\",\n    \"anchorOffset\",\n    \"anchors\",\n    \"angle\",\n    \"animVal\",\n    \"animate\",\n    \"animatedInstanceRoot\",\n    \"animatedNormalizedPathSegList\",\n    \"animatedPathSegList\",\n    \"animatedPoints\",\n    \"animation\",\n    \"animation-delay\",\n    \"animation-direction\",\n    \"animation-duration\",\n    \"animation-fill-mode\",\n    \"animation-iteration-count\",\n    \"animation-name\",\n    \"animation-play-state\",\n    \"animation-timing-function\",\n    \"animationDelay\",\n    \"animationDirection\",\n    \"animationDuration\",\n    \"animationFillMode\",\n    \"animationIterationCount\",\n    \"animationName\",\n    \"animationPlayState\",\n    \"animationStartTime\",\n    \"animationTimingFunction\",\n    \"animationsPaused\",\n    \"anniversary\",\n    \"app\",\n    \"appCodeName\",\n    \"appMinorVersion\",\n    \"appName\",\n    \"appNotifications\",\n    \"appVersion\",\n    \"append\",\n    \"appendBuffer\",\n    \"appendChild\",\n    \"appendData\",\n    \"appendItem\",\n    \"appendMedium\",\n    \"appendNamed\",\n    \"appendRule\",\n    \"appendStream\",\n    \"appendWindowEnd\",\n    \"appendWindowStart\",\n    \"applets\",\n    \"applicationCache\",\n    \"apply\",\n    \"applyElement\",\n    \"arc\",\n    \"arcTo\",\n    \"archive\",\n    \"areas\",\n    \"arguments\",\n    \"arrayBuffer\",\n    \"asin\",\n    \"asinh\",\n    \"assert\",\n    \"assign\",\n    \"async\",\n    \"atEnd\",\n    \"atan\",\n    \"atan2\",\n    \"atanh\",\n    \"atob\",\n    \"attachEvent\",\n    \"attachShader\",\n    \"attachments\",\n    \"attack\",\n    \"attrChange\",\n    \"attrName\",\n    \"attributeName\",\n    \"attributeNamespace\",\n    \"attributes\",\n    \"audioTracks\",\n    \"autoIncrement\",\n    \"autobuffer\",\n    \"autocapitalize\",\n    \"autocomplete\",\n    \"autocorrect\",\n    \"autofocus\",\n    \"autoplay\",\n    \"availHeight\",\n    \"availLeft\",\n    \"availTop\",\n    \"availWidth\",\n    \"availability\",\n    \"available\",\n    \"aversion\",\n    \"axes\",\n    \"axis\",\n    \"azimuth\",\n    \"b\",\n    \"back\",\n    \"backface-visibility\",\n    \"backfaceVisibility\",\n    \"background\",\n    \"background-attachment\",\n    \"background-blend-mode\",\n    \"background-clip\",\n    \"background-color\",\n    \"background-image\",\n    \"background-origin\",\n    \"background-position\",\n    \"background-repeat\",\n    \"background-size\",\n    \"backgroundAttachment\",\n    \"backgroundBlendMode\",\n    \"backgroundClip\",\n    \"backgroundColor\",\n    \"backgroundImage\",\n    \"backgroundOrigin\",\n    \"backgroundPosition\",\n    \"backgroundPositionX\",\n    \"backgroundPositionY\",\n    \"backgroundRepeat\",\n    \"backgroundSize\",\n    \"badInput\",\n    \"balance\",\n    \"baseFrequencyX\",\n    \"baseFrequencyY\",\n    \"baseNode\",\n    \"baseOffset\",\n    \"baseURI\",\n    \"baseVal\",\n    \"baselineShift\",\n    \"battery\",\n    \"bday\",\n    \"beginElement\",\n    \"beginElementAt\",\n    \"beginPath\",\n    \"behavior\",\n    \"behaviorCookie\",\n    \"behaviorPart\",\n    \"behaviorUrns\",\n    \"beta\",\n    \"bezierCurveTo\",\n    \"bgColor\",\n    \"bgProperties\",\n    \"bias\",\n    \"big\",\n    \"binaryType\",\n    \"bind\",\n    \"bindAttribLocation\",\n    \"bindBuffer\",\n    \"bindFramebuffer\",\n    \"bindRenderbuffer\",\n    \"bindTexture\",\n    \"blendColor\",\n    \"blendEquation\",\n    \"blendEquationSeparate\",\n    \"blendFunc\",\n    \"blendFuncSeparate\",\n    \"blink\",\n    \"blob\",\n    \"blockDirection\",\n    \"blue\",\n    \"blur\",\n    \"body\",\n    \"bodyUsed\",\n    \"bold\",\n    \"bookmarks\",\n    \"booleanValue\",\n    \"border\",\n    \"border-bottom\",\n    \"border-bottom-color\",\n    \"border-bottom-left-radius\",\n    \"border-bottom-right-radius\",\n    \"border-bottom-style\",\n    \"border-bottom-width\",\n    \"border-collapse\",\n    \"border-color\",\n    \"border-image\",\n    \"border-image-outset\",\n    \"border-image-repeat\",\n    \"border-image-slice\",\n    \"border-image-source\",\n    \"border-image-width\",\n    \"border-left\",\n    \"border-left-color\",\n    \"border-left-style\",\n    \"border-left-width\",\n    \"border-radius\",\n    \"border-right\",\n    \"border-right-color\",\n    \"border-right-style\",\n    \"border-right-width\",\n    \"border-spacing\",\n    \"border-style\",\n    \"border-top\",\n    \"border-top-color\",\n    \"border-top-left-radius\",\n    \"border-top-right-radius\",\n    \"border-top-style\",\n    \"border-top-width\",\n    \"border-width\",\n    \"borderBottom\",\n    \"borderBottomColor\",\n    \"borderBottomLeftRadius\",\n    \"borderBottomRightRadius\",\n    \"borderBottomStyle\",\n    \"borderBottomWidth\",\n    \"borderCollapse\",\n    \"borderColor\",\n    \"borderColorDark\",\n    \"borderColorLight\",\n    \"borderImage\",\n    \"borderImageOutset\",\n    \"borderImageRepeat\",\n    \"borderImageSlice\",\n    \"borderImageSource\",\n    \"borderImageWidth\",\n    \"borderLeft\",\n    \"borderLeftColor\",\n    \"borderLeftStyle\",\n    \"borderLeftWidth\",\n    \"borderRadius\",\n    \"borderRight\",\n    \"borderRightColor\",\n    \"borderRightStyle\",\n    \"borderRightWidth\",\n    \"borderSpacing\",\n    \"borderStyle\",\n    \"borderTop\",\n    \"borderTopColor\",\n    \"borderTopLeftRadius\",\n    \"borderTopRightRadius\",\n    \"borderTopStyle\",\n    \"borderTopWidth\",\n    \"borderWidth\",\n    \"bottom\",\n    \"bottomMargin\",\n    \"bound\",\n    \"boundElements\",\n    \"boundingClientRect\",\n    \"boundingHeight\",\n    \"boundingLeft\",\n    \"boundingTop\",\n    \"boundingWidth\",\n    \"bounds\",\n    \"box-decoration-break\",\n    \"box-shadow\",\n    \"box-sizing\",\n    \"boxDecorationBreak\",\n    \"boxShadow\",\n    \"boxSizing\",\n    \"breakAfter\",\n    \"breakBefore\",\n    \"breakInside\",\n    \"browserLanguage\",\n    \"btoa\",\n    \"bubbles\",\n    \"buffer\",\n    \"bufferData\",\n    \"bufferDepth\",\n    \"bufferSize\",\n    \"bufferSubData\",\n    \"buffered\",\n    \"bufferedAmount\",\n    \"buildID\",\n    \"buildNumber\",\n    \"button\",\n    \"buttonID\",\n    \"buttons\",\n    \"byteLength\",\n    \"byteOffset\",\n    \"c\",\n    \"call\",\n    \"caller\",\n    \"canBeFormatted\",\n    \"canBeMounted\",\n    \"canBeShared\",\n    \"canHaveChildren\",\n    \"canHaveHTML\",\n    \"canPlayType\",\n    \"cancel\",\n    \"cancelAnimationFrame\",\n    \"cancelBubble\",\n    \"cancelScheduledValues\",\n    \"cancelable\",\n    \"candidate\",\n    \"canvas\",\n    \"caption\",\n    \"caption-side\",\n    \"captionSide\",\n    \"captureEvents\",\n    \"captureStackTrace\",\n    \"caretPositionFromPoint\",\n    \"caretRangeFromPoint\",\n    \"cast\",\n    \"catch\",\n    \"category\",\n    \"cbrt\",\n    \"cd\",\n    \"ceil\",\n    \"cellIndex\",\n    \"cellPadding\",\n    \"cellSpacing\",\n    \"cells\",\n    \"ch\",\n    \"chOff\",\n    \"chain\",\n    \"challenge\",\n    \"changedTouches\",\n    \"channel\",\n    \"channelCount\",\n    \"channelCountMode\",\n    \"channelInterpretation\",\n    \"char\",\n    \"charAt\",\n    \"charCode\",\n    \"charCodeAt\",\n    \"charIndex\",\n    \"characterSet\",\n    \"charging\",\n    \"chargingTime\",\n    \"charset\",\n    \"checkEnclosure\",\n    \"checkFramebufferStatus\",\n    \"checkIntersection\",\n    \"checkValidity\",\n    \"checked\",\n    \"childElementCount\",\n    \"childNodes\",\n    \"children\",\n    \"chrome\",\n    \"ciphertext\",\n    \"cite\",\n    \"classList\",\n    \"className\",\n    \"classid\",\n    \"clear\",\n    \"clearAttributes\",\n    \"clearColor\",\n    \"clearData\",\n    \"clearDepth\",\n    \"clearImmediate\",\n    \"clearInterval\",\n    \"clearMarks\",\n    \"clearMeasures\",\n    \"clearParameters\",\n    \"clearRect\",\n    \"clearResourceTimings\",\n    \"clearShadow\",\n    \"clearStencil\",\n    \"clearTimeout\",\n    \"clearWatch\",\n    \"click\",\n    \"clickCount\",\n    \"clientHeight\",\n    \"clientInformation\",\n    \"clientLeft\",\n    \"clientRect\",\n    \"clientRects\",\n    \"clientTop\",\n    \"clientWidth\",\n    \"clientX\",\n    \"clientY\",\n    \"clip\",\n    \"clip-path\",\n    \"clip-rule\",\n    \"clipBottom\",\n    \"clipLeft\",\n    \"clipPath\",\n    \"clipPathUnits\",\n    \"clipRight\",\n    \"clipRule\",\n    \"clipTop\",\n    \"clipboardData\",\n    \"clone\",\n    \"cloneContents\",\n    \"cloneNode\",\n    \"cloneRange\",\n    \"close\",\n    \"closePath\",\n    \"closed\",\n    \"closest\",\n    \"clz\",\n    \"clz32\",\n    \"cmp\",\n    \"code\",\n    \"codeBase\",\n    \"codePointAt\",\n    \"codeType\",\n    \"colSpan\",\n    \"collapse\",\n    \"collapseToEnd\",\n    \"collapseToStart\",\n    \"collapsed\",\n    \"collect\",\n    \"colno\",\n    \"color\",\n    \"color-interpolation\",\n    \"color-interpolation-filters\",\n    \"colorDepth\",\n    \"colorInterpolation\",\n    \"colorInterpolationFilters\",\n    \"colorMask\",\n    \"colorType\",\n    \"cols\",\n    \"columnCount\",\n    \"columnFill\",\n    \"columnGap\",\n    \"columnNumber\",\n    \"columnRule\",\n    \"columnRuleColor\",\n    \"columnRuleStyle\",\n    \"columnRuleWidth\",\n    \"columnSpan\",\n    \"columnWidth\",\n    \"columns\",\n    \"command\",\n    \"commitPreferences\",\n    \"commonAncestorContainer\",\n    \"compact\",\n    \"compareBoundaryPoints\",\n    \"compareDocumentPosition\",\n    \"compareEndPoints\",\n    \"compareNode\",\n    \"comparePoint\",\n    \"compatMode\",\n    \"compatible\",\n    \"compile\",\n    \"compileShader\",\n    \"complete\",\n    \"componentFromPoint\",\n    \"compositionEndOffset\",\n    \"compositionStartOffset\",\n    \"compressedTexImage2D\",\n    \"compressedTexSubImage2D\",\n    \"concat\",\n    \"conditionText\",\n    \"coneInnerAngle\",\n    \"coneOuterAngle\",\n    \"coneOuterGain\",\n    \"confirm\",\n    \"confirmComposition\",\n    \"confirmSiteSpecificTrackingException\",\n    \"confirmWebWideTrackingException\",\n    \"connect\",\n    \"connectEnd\",\n    \"connectStart\",\n    \"connected\",\n    \"connection\",\n    \"connectionSpeed\",\n    \"console\",\n    \"consolidate\",\n    \"constrictionActive\",\n    \"constructor\",\n    \"contactID\",\n    \"contains\",\n    \"containsNode\",\n    \"content\",\n    \"contentDocument\",\n    \"contentEditable\",\n    \"contentOverflow\",\n    \"contentScriptType\",\n    \"contentStyleType\",\n    \"contentType\",\n    \"contentWindow\",\n    \"context\",\n    \"contextMenu\",\n    \"contextmenu\",\n    \"continue\",\n    \"continuous\",\n    \"control\",\n    \"controller\",\n    \"controls\",\n    \"convertToSpecifiedUnits\",\n    \"cookie\",\n    \"cookieEnabled\",\n    \"coords\",\n    \"copyFromChannel\",\n    \"copyTexImage2D\",\n    \"copyTexSubImage2D\",\n    \"copyToChannel\",\n    \"copyWithin\",\n    \"correspondingElement\",\n    \"correspondingUseElement\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"counter-increment\",\n    \"counter-reset\",\n    \"counterIncrement\",\n    \"counterReset\",\n    \"cpuClass\",\n    \"cpuSleepAllowed\",\n    \"create\",\n    \"createAnalyser\",\n    \"createAnswer\",\n    \"createAttribute\",\n    \"createAttributeNS\",\n    \"createBiquadFilter\",\n    \"createBuffer\",\n    \"createBufferSource\",\n    \"createCDATASection\",\n    \"createCSSStyleSheet\",\n    \"createCaption\",\n    \"createChannelMerger\",\n    \"createChannelSplitter\",\n    \"createComment\",\n    \"createContextualFragment\",\n    \"createControlRange\",\n    \"createConvolver\",\n    \"createDTMFSender\",\n    \"createDataChannel\",\n    \"createDelay\",\n    \"createDelayNode\",\n    \"createDocument\",\n    \"createDocumentFragment\",\n    \"createDocumentType\",\n    \"createDynamicsCompressor\",\n    \"createElement\",\n    \"createElementNS\",\n    \"createEntityReference\",\n    \"createEvent\",\n    \"createEventObject\",\n    \"createExpression\",\n    \"createFramebuffer\",\n    \"createFunction\",\n    \"createGain\",\n    \"createGainNode\",\n    \"createHTMLDocument\",\n    \"createImageBitmap\",\n    \"createImageData\",\n    \"createIndex\",\n    \"createJavaScriptNode\",\n    \"createLinearGradient\",\n    \"createMediaElementSource\",\n    \"createMediaKeys\",\n    \"createMediaStreamDestination\",\n    \"createMediaStreamSource\",\n    \"createMutableFile\",\n    \"createNSResolver\",\n    \"createNodeIterator\",\n    \"createNotification\",\n    \"createObjectStore\",\n    \"createObjectURL\",\n    \"createOffer\",\n    \"createOscillator\",\n    \"createPanner\",\n    \"createPattern\",\n    \"createPeriodicWave\",\n    \"createPopup\",\n    \"createProcessingInstruction\",\n    \"createProgram\",\n    \"createRadialGradient\",\n    \"createRange\",\n    \"createRangeCollection\",\n    \"createRenderbuffer\",\n    \"createSVGAngle\",\n    \"createSVGLength\",\n    \"createSVGMatrix\",\n    \"createSVGNumber\",\n    \"createSVGPathSegArcAbs\",\n    \"createSVGPathSegArcRel\",\n    \"createSVGPathSegClosePath\",\n    \"createSVGPathSegCurvetoCubicAbs\",\n    \"createSVGPathSegCurvetoCubicRel\",\n    \"createSVGPathSegCurvetoCubicSmoothAbs\",\n    \"createSVGPathSegCurvetoCubicSmoothRel\",\n    \"createSVGPathSegCurvetoQuadraticAbs\",\n    \"createSVGPathSegCurvetoQuadraticRel\",\n    \"createSVGPathSegCurvetoQuadraticSmoothAbs\",\n    \"createSVGPathSegCurvetoQuadraticSmoothRel\",\n    \"createSVGPathSegLinetoAbs\",\n    \"createSVGPathSegLinetoHorizontalAbs\",\n    \"createSVGPathSegLinetoHorizontalRel\",\n    \"createSVGPathSegLinetoRel\",\n    \"createSVGPathSegLinetoVerticalAbs\",\n    \"createSVGPathSegLinetoVerticalRel\",\n    \"createSVGPathSegMovetoAbs\",\n    \"createSVGPathSegMovetoRel\",\n    \"createSVGPoint\",\n    \"createSVGRect\",\n    \"createSVGTransform\",\n    \"createSVGTransformFromMatrix\",\n    \"createScriptProcessor\",\n    \"createSession\",\n    \"createShader\",\n    \"createShadowRoot\",\n    \"createStereoPanner\",\n    \"createStyleSheet\",\n    \"createTBody\",\n    \"createTFoot\",\n    \"createTHead\",\n    \"createTextNode\",\n    \"createTextRange\",\n    \"createTexture\",\n    \"createTouch\",\n    \"createTouchList\",\n    \"createTreeWalker\",\n    \"createWaveShaper\",\n    \"creationTime\",\n    \"crossOrigin\",\n    \"crypto\",\n    \"csi\",\n    \"cssFloat\",\n    \"cssRules\",\n    \"cssText\",\n    \"cssValueType\",\n    \"ctrlKey\",\n    \"ctrlLeft\",\n    \"cues\",\n    \"cullFace\",\n    \"currentNode\",\n    \"currentPage\",\n    \"currentScale\",\n    \"currentScript\",\n    \"currentSrc\",\n    \"currentState\",\n    \"currentStyle\",\n    \"currentTarget\",\n    \"currentTime\",\n    \"currentTranslate\",\n    \"currentView\",\n    \"cursor\",\n    \"curve\",\n    \"customError\",\n    \"cx\",\n    \"cy\",\n    \"d\",\n    \"data\",\n    \"dataFld\",\n    \"dataFormatAs\",\n    \"dataPageSize\",\n    \"dataSrc\",\n    \"dataTransfer\",\n    \"database\",\n    \"dataset\",\n    \"dateTime\",\n    \"db\",\n    \"debug\",\n    \"debuggerEnabled\",\n    \"declare\",\n    \"decode\",\n    \"decodeAudioData\",\n    \"decodeURI\",\n    \"decodeURIComponent\",\n    \"decrypt\",\n    \"default\",\n    \"defaultCharset\",\n    \"defaultChecked\",\n    \"defaultMuted\",\n    \"defaultPlaybackRate\",\n    \"defaultPrevented\",\n    \"defaultSelected\",\n    \"defaultStatus\",\n    \"defaultURL\",\n    \"defaultValue\",\n    \"defaultView\",\n    \"defaultstatus\",\n    \"defer\",\n    \"defineMagicFunction\",\n    \"defineMagicVariable\",\n    \"defineProperties\",\n    \"defineProperty\",\n    \"delayTime\",\n    \"delete\",\n    \"deleteBuffer\",\n    \"deleteCaption\",\n    \"deleteCell\",\n    \"deleteContents\",\n    \"deleteData\",\n    \"deleteDatabase\",\n    \"deleteFramebuffer\",\n    \"deleteFromDocument\",\n    \"deleteIndex\",\n    \"deleteMedium\",\n    \"deleteObjectStore\",\n    \"deleteProgram\",\n    \"deleteRenderbuffer\",\n    \"deleteRow\",\n    \"deleteRule\",\n    \"deleteShader\",\n    \"deleteTFoot\",\n    \"deleteTHead\",\n    \"deleteTexture\",\n    \"deliverChangeRecords\",\n    \"delivery\",\n    \"deliveryInfo\",\n    \"deliveryStatus\",\n    \"deliveryTimestamp\",\n    \"delta\",\n    \"deltaMode\",\n    \"deltaX\",\n    \"deltaY\",\n    \"deltaZ\",\n    \"depthFunc\",\n    \"depthMask\",\n    \"depthRange\",\n    \"deriveBits\",\n    \"deriveKey\",\n    \"description\",\n    \"deselectAll\",\n    \"designMode\",\n    \"destination\",\n    \"destinationURL\",\n    \"detach\",\n    \"detachEvent\",\n    \"detachShader\",\n    \"detail\",\n    \"detune\",\n    \"devicePixelRatio\",\n    \"deviceXDPI\",\n    \"deviceYDPI\",\n    \"diffuseConstant\",\n    \"digest\",\n    \"dimensions\",\n    \"dir\",\n    \"dirName\",\n    \"direction\",\n    \"dirxml\",\n    \"disable\",\n    \"disableVertexAttribArray\",\n    \"disabled\",\n    \"dischargingTime\",\n    \"disconnect\",\n    \"dispatchEvent\",\n    \"display\",\n    \"distanceModel\",\n    \"divisor\",\n    \"djsapi\",\n    \"djsproxy\",\n    \"doImport\",\n    \"doNotTrack\",\n    \"doScroll\",\n    \"doctype\",\n    \"document\",\n    \"documentElement\",\n    \"documentMode\",\n    \"documentURI\",\n    \"dolphin\",\n    \"dolphinGameCenter\",\n    \"dolphininfo\",\n    \"dolphinmeta\",\n    \"domComplete\",\n    \"domContentLoadedEventEnd\",\n    \"domContentLoadedEventStart\",\n    \"domInteractive\",\n    \"domLoading\",\n    \"domain\",\n    \"domainLookupEnd\",\n    \"domainLookupStart\",\n    \"dominant-baseline\",\n    \"dominantBaseline\",\n    \"done\",\n    \"dopplerFactor\",\n    \"download\",\n    \"dragDrop\",\n    \"draggable\",\n    \"drawArrays\",\n    \"drawArraysInstancedANGLE\",\n    \"drawCustomFocusRing\",\n    \"drawElements\",\n    \"drawElementsInstancedANGLE\",\n    \"drawFocusIfNeeded\",\n    \"drawImage\",\n    \"drawImageFromRect\",\n    \"drawSystemFocusRing\",\n    \"drawingBufferHeight\",\n    \"drawingBufferWidth\",\n    \"dropEffect\",\n    \"droppedVideoFrames\",\n    \"dropzone\",\n    \"dump\",\n    \"duplicate\",\n    \"duration\",\n    \"dvname\",\n    \"dvnum\",\n    \"dx\",\n    \"dy\",\n    \"dynsrc\",\n    \"e\",\n    \"edgeMode\",\n    \"effectAllowed\",\n    \"elapsedTime\",\n    \"elementFromPoint\",\n    \"elements\",\n    \"elevation\",\n    \"ellipse\",\n    \"email\",\n    \"embeds\",\n    \"empty\",\n    \"empty-cells\",\n    \"emptyCells\",\n    \"enable\",\n    \"enableBackground\",\n    \"enableStyleSheetsForSet\",\n    \"enableVertexAttribArray\",\n    \"enabled\",\n    \"enabledPlugin\",\n    \"encode\",\n    \"encodeURI\",\n    \"encodeURIComponent\",\n    \"encoding\",\n    \"encrypt\",\n    \"enctype\",\n    \"end\",\n    \"endContainer\",\n    \"endElement\",\n    \"endElementAt\",\n    \"endOfStream\",\n    \"endOffset\",\n    \"endTime\",\n    \"ended\",\n    \"endsWith\",\n    \"entities\",\n    \"entries\",\n    \"entryType\",\n    \"enumerate\",\n    \"enumerateEditable\",\n    \"error\",\n    \"errorCode\",\n    \"escape\",\n    \"eval\",\n    \"evaluate\",\n    \"event\",\n    \"eventPhase\",\n    \"every\",\n    \"exception\",\n    \"exec\",\n    \"execCommand\",\n    \"execCommandShowHelp\",\n    \"execScript\",\n    \"exitFullscreen\",\n    \"exitPointerLock\",\n    \"exp\",\n    \"expand\",\n    \"expandEntityReferences\",\n    \"expando\",\n    \"expansion\",\n    \"expiryDate\",\n    \"explicitOriginalTarget\",\n    \"expm1\",\n    \"exponent\",\n    \"exponentialRampToValueAtTime\",\n    \"exportKey\",\n    \"extend\",\n    \"extensions\",\n    \"extentNode\",\n    \"extentOffset\",\n    \"external\",\n    \"externalResourcesRequired\",\n    \"extractContents\",\n    \"extractable\",\n    \"f\",\n    \"face\",\n    \"factoryReset\",\n    \"fallback\",\n    \"familyName\",\n    \"farthestViewportElement\",\n    \"fastSeek\",\n    \"fatal\",\n    \"fetch\",\n    \"fetchStart\",\n    \"fftSize\",\n    \"fgColor\",\n    \"fileCreatedDate\",\n    \"fileHandle\",\n    \"fileModifiedDate\",\n    \"fileName\",\n    \"fileSize\",\n    \"fileUpdatedDate\",\n    \"filename\",\n    \"files\",\n    \"fill\",\n    \"fill-opacity\",\n    \"fill-rule\",\n    \"fillOpacity\",\n    \"fillRect\",\n    \"fillRule\",\n    \"fillStyle\",\n    \"fillText\",\n    \"filter\",\n    \"filterResX\",\n    \"filterResY\",\n    \"filterUnits\",\n    \"filters\",\n    \"find\",\n    \"findIndex\",\n    \"findRule\",\n    \"findText\",\n    \"finish\",\n    \"fireEvent\",\n    \"firstChild\",\n    \"firstElementChild\",\n    \"firstPage\",\n    \"fixed\",\n    \"flex\",\n    \"flex-basis\",\n    \"flex-direction\",\n    \"flex-flow\",\n    \"flex-grow\",\n    \"flex-shrink\",\n    \"flex-wrap\",\n    \"flexBasis\",\n    \"flexDirection\",\n    \"flexFlow\",\n    \"flexGrow\",\n    \"flexShrink\",\n    \"flexWrap\",\n    \"flipX\",\n    \"flipY\",\n    \"float\",\n    \"flood-color\",\n    \"flood-opacity\",\n    \"floodColor\",\n    \"floodOpacity\",\n    \"floor\",\n    \"flush\",\n    \"focus\",\n    \"focusNode\",\n    \"focusOffset\",\n    \"font\",\n    \"font-family\",\n    \"font-feature-settings\",\n    \"font-kerning\",\n    \"font-language-override\",\n    \"font-size\",\n    \"font-size-adjust\",\n    \"font-stretch\",\n    \"font-style\",\n    \"font-synthesis\",\n    \"font-variant\",\n    \"font-variant-alternates\",\n    \"font-variant-caps\",\n    \"font-variant-east-asian\",\n    \"font-variant-ligatures\",\n    \"font-variant-numeric\",\n    \"font-variant-position\",\n    \"font-weight\",\n    \"fontFamily\",\n    \"fontFeatureSettings\",\n    \"fontKerning\",\n    \"fontLanguageOverride\",\n    \"fontSize\",\n    \"fontSizeAdjust\",\n    \"fontSmoothingEnabled\",\n    \"fontStretch\",\n    \"fontStyle\",\n    \"fontSynthesis\",\n    \"fontVariant\",\n    \"fontVariantAlternates\",\n    \"fontVariantCaps\",\n    \"fontVariantEastAsian\",\n    \"fontVariantLigatures\",\n    \"fontVariantNumeric\",\n    \"fontVariantPosition\",\n    \"fontWeight\",\n    \"fontcolor\",\n    \"fonts\",\n    \"fontsize\",\n    \"for\",\n    \"forEach\",\n    \"forceRedraw\",\n    \"form\",\n    \"formAction\",\n    \"formEnctype\",\n    \"formMethod\",\n    \"formNoValidate\",\n    \"formTarget\",\n    \"format\",\n    \"forms\",\n    \"forward\",\n    \"fr\",\n    \"frame\",\n    \"frameBorder\",\n    \"frameElement\",\n    \"frameSpacing\",\n    \"framebufferRenderbuffer\",\n    \"framebufferTexture2D\",\n    \"frames\",\n    \"freeSpace\",\n    \"freeze\",\n    \"frequency\",\n    \"frequencyBinCount\",\n    \"from\",\n    \"fromCharCode\",\n    \"fromCodePoint\",\n    \"fromElement\",\n    \"frontFace\",\n    \"fround\",\n    \"fullScreen\",\n    \"fullscreenElement\",\n    \"fullscreenEnabled\",\n    \"fx\",\n    \"fy\",\n    \"gain\",\n    \"gamepad\",\n    \"gamma\",\n    \"genderIdentity\",\n    \"generateKey\",\n    \"generateMipmap\",\n    \"generateRequest\",\n    \"geolocation\",\n    \"gestureObject\",\n    \"get\",\n    \"getActiveAttrib\",\n    \"getActiveUniform\",\n    \"getAdjacentText\",\n    \"getAll\",\n    \"getAllResponseHeaders\",\n    \"getAsFile\",\n    \"getAsString\",\n    \"getAttachedShaders\",\n    \"getAttribLocation\",\n    \"getAttribute\",\n    \"getAttributeNS\",\n    \"getAttributeNode\",\n    \"getAttributeNodeNS\",\n    \"getAudioTracks\",\n    \"getBBox\",\n    \"getBattery\",\n    \"getBlob\",\n    \"getBookmark\",\n    \"getBoundingClientRect\",\n    \"getBufferParameter\",\n    \"getByteFrequencyData\",\n    \"getByteTimeDomainData\",\n    \"getCSSCanvasContext\",\n    \"getCTM\",\n    \"getCandidateWindowClientRect\",\n    \"getChannelData\",\n    \"getCharNumAtPosition\",\n    \"getClientRect\",\n    \"getClientRects\",\n    \"getCompositionAlternatives\",\n    \"getComputedStyle\",\n    \"getComputedTextLength\",\n    \"getConfiguration\",\n    \"getContext\",\n    \"getContextAttributes\",\n    \"getCounterValue\",\n    \"getCueAsHTML\",\n    \"getCueById\",\n    \"getCurrentPosition\",\n    \"getCurrentTime\",\n    \"getData\",\n    \"getDatabaseNames\",\n    \"getDate\",\n    \"getDay\",\n    \"getDefaultComputedStyle\",\n    \"getDestinationInsertionPoints\",\n    \"getDistributedNodes\",\n    \"getEditable\",\n    \"getElementById\",\n    \"getElementsByClassName\",\n    \"getElementsByName\",\n    \"getElementsByTagName\",\n    \"getElementsByTagNameNS\",\n    \"getEnclosureList\",\n    \"getEndPositionOfChar\",\n    \"getEntries\",\n    \"getEntriesByName\",\n    \"getEntriesByType\",\n    \"getError\",\n    \"getExtension\",\n    \"getExtentOfChar\",\n    \"getFeature\",\n    \"getFile\",\n    \"getFloat32\",\n    \"getFloat64\",\n    \"getFloatFrequencyData\",\n    \"getFloatTimeDomainData\",\n    \"getFloatValue\",\n    \"getFramebufferAttachmentParameter\",\n    \"getFrequencyResponse\",\n    \"getFullYear\",\n    \"getGamepads\",\n    \"getHours\",\n    \"getImageData\",\n    \"getInt16\",\n    \"getInt32\",\n    \"getInt8\",\n    \"getIntersectionList\",\n    \"getItem\",\n    \"getItems\",\n    \"getKey\",\n    \"getLineDash\",\n    \"getLocalStreams\",\n    \"getMarks\",\n    \"getMatchedCSSRules\",\n    \"getMeasures\",\n    \"getMetadata\",\n    \"getMilliseconds\",\n    \"getMinutes\",\n    \"getModifierState\",\n    \"getMonth\",\n    \"getNamedItem\",\n    \"getNamedItemNS\",\n    \"getNotifier\",\n    \"getNumberOfChars\",\n    \"getOverrideHistoryNavigationMode\",\n    \"getOverrideStyle\",\n    \"getOwnPropertyDescriptor\",\n    \"getOwnPropertyNames\",\n    \"getOwnPropertySymbols\",\n    \"getParameter\",\n    \"getPathSegAtLength\",\n    \"getPointAtLength\",\n    \"getPreference\",\n    \"getPreferenceDefault\",\n    \"getPresentationAttribute\",\n    \"getPreventDefault\",\n    \"getProgramInfoLog\",\n    \"getProgramParameter\",\n    \"getPropertyCSSValue\",\n    \"getPropertyPriority\",\n    \"getPropertyShorthand\",\n    \"getPropertyValue\",\n    \"getPrototypeOf\",\n    \"getRGBColorValue\",\n    \"getRandomValues\",\n    \"getRangeAt\",\n    \"getReceivers\",\n    \"getRectValue\",\n    \"getRegistration\",\n    \"getRemoteStreams\",\n    \"getRenderbufferParameter\",\n    \"getResponseHeader\",\n    \"getRoot\",\n    \"getRotationOfChar\",\n    \"getSVGDocument\",\n    \"getScreenCTM\",\n    \"getSeconds\",\n    \"getSelection\",\n    \"getSenders\",\n    \"getShaderInfoLog\",\n    \"getShaderParameter\",\n    \"getShaderPrecisionFormat\",\n    \"getShaderSource\",\n    \"getSimpleDuration\",\n    \"getSiteIcons\",\n    \"getSources\",\n    \"getSpeculativeParserUrls\",\n    \"getStartPositionOfChar\",\n    \"getStartTime\",\n    \"getStats\",\n    \"getStorageUpdates\",\n    \"getStreamById\",\n    \"getStringValue\",\n    \"getSubStringLength\",\n    \"getSubscription\",\n    \"getSupportedExtensions\",\n    \"getTexParameter\",\n    \"getTime\",\n    \"getTimezoneOffset\",\n    \"getTotalLength\",\n    \"getTrackById\",\n    \"getTracks\",\n    \"getTransformToElement\",\n    \"getUTCDate\",\n    \"getUTCDay\",\n    \"getUTCFullYear\",\n    \"getUTCHours\",\n    \"getUTCMilliseconds\",\n    \"getUTCMinutes\",\n    \"getUTCMonth\",\n    \"getUTCSeconds\",\n    \"getUint16\",\n    \"getUint32\",\n    \"getUint8\",\n    \"getUniform\",\n    \"getUniformLocation\",\n    \"getUserMedia\",\n    \"getValues\",\n    \"getVarDate\",\n    \"getVariableValue\",\n    \"getVertexAttrib\",\n    \"getVertexAttribOffset\",\n    \"getVideoPlaybackQuality\",\n    \"getVideoTracks\",\n    \"getWakeLockState\",\n    \"getYear\",\n    \"givenName\",\n    \"global\",\n    \"globalAlpha\",\n    \"globalCompositeOperation\",\n    \"glyphOrientationHorizontal\",\n    \"glyphOrientationVertical\",\n    \"glyphRef\",\n    \"go\",\n    \"gradientTransform\",\n    \"gradientUnits\",\n    \"grammars\",\n    \"green\",\n    \"group\",\n    \"groupCollapsed\",\n    \"groupEnd\",\n    \"hardwareConcurrency\",\n    \"has\",\n    \"hasAttribute\",\n    \"hasAttributeNS\",\n    \"hasAttributes\",\n    \"hasChildNodes\",\n    \"hasComposition\",\n    \"hasExtension\",\n    \"hasFeature\",\n    \"hasFocus\",\n    \"hasLayout\",\n    \"hasOwnProperty\",\n    \"hash\",\n    \"head\",\n    \"headers\",\n    \"heading\",\n    \"height\",\n    \"hidden\",\n    \"hide\",\n    \"hideFocus\",\n    \"high\",\n    \"hint\",\n    \"history\",\n    \"honorificPrefix\",\n    \"honorificSuffix\",\n    \"horizontalOverflow\",\n    \"host\",\n    \"hostname\",\n    \"href\",\n    \"hreflang\",\n    \"hspace\",\n    \"html5TagCheckInerface\",\n    \"htmlFor\",\n    \"htmlText\",\n    \"httpEquiv\",\n    \"hwTimestamp\",\n    \"hypot\",\n    \"iccId\",\n    \"iceConnectionState\",\n    \"iceGatheringState\",\n    \"icon\",\n    \"id\",\n    \"identifier\",\n    \"identity\",\n    \"ignoreBOM\",\n    \"ignoreCase\",\n    \"image-orientation\",\n    \"image-rendering\",\n    \"imageOrientation\",\n    \"imageRendering\",\n    \"images\",\n    \"ime-mode\",\n    \"imeMode\",\n    \"implementation\",\n    \"importKey\",\n    \"importNode\",\n    \"importStylesheet\",\n    \"imports\",\n    \"impp\",\n    \"imul\",\n    \"in1\",\n    \"in2\",\n    \"inBandMetadataTrackDispatchType\",\n    \"inRange\",\n    \"includes\",\n    \"incremental\",\n    \"indeterminate\",\n    \"index\",\n    \"indexNames\",\n    \"indexOf\",\n    \"indexedDB\",\n    \"inertiaDestinationX\",\n    \"inertiaDestinationY\",\n    \"info\",\n    \"init\",\n    \"initAnimationEvent\",\n    \"initBeforeLoadEvent\",\n    \"initClipboardEvent\",\n    \"initCloseEvent\",\n    \"initCommandEvent\",\n    \"initCompositionEvent\",\n    \"initCustomEvent\",\n    \"initData\",\n    \"initDeviceMotionEvent\",\n    \"initDeviceOrientationEvent\",\n    \"initDragEvent\",\n    \"initErrorEvent\",\n    \"initEvent\",\n    \"initFocusEvent\",\n    \"initGestureEvent\",\n    \"initHashChangeEvent\",\n    \"initKeyEvent\",\n    \"initKeyboardEvent\",\n    \"initMSManipulationEvent\",\n    \"initMessageEvent\",\n    \"initMouseEvent\",\n    \"initMouseScrollEvent\",\n    \"initMouseWheelEvent\",\n    \"initMutationEvent\",\n    \"initNSMouseEvent\",\n    \"initOverflowEvent\",\n    \"initPageEvent\",\n    \"initPageTransitionEvent\",\n    \"initPointerEvent\",\n    \"initPopStateEvent\",\n    \"initProgressEvent\",\n    \"initScrollAreaEvent\",\n    \"initSimpleGestureEvent\",\n    \"initStorageEvent\",\n    \"initTextEvent\",\n    \"initTimeEvent\",\n    \"initTouchEvent\",\n    \"initTransitionEvent\",\n    \"initUIEvent\",\n    \"initWebKitAnimationEvent\",\n    \"initWebKitTransitionEvent\",\n    \"initWebKitWheelEvent\",\n    \"initWheelEvent\",\n    \"initialTime\",\n    \"initialize\",\n    \"initiatorType\",\n    \"inner\",\n    \"innerHTML\",\n    \"innerHeight\",\n    \"innerText\",\n    \"innerWidth\",\n    \"input\",\n    \"inputBuffer\",\n    \"inputEncoding\",\n    \"inputMethod\",\n    \"insertAdjacentElement\",\n    \"insertAdjacentHTML\",\n    \"insertAdjacentText\",\n    \"insertBefore\",\n    \"insertCell\",\n    \"insertData\",\n    \"insertItemBefore\",\n    \"insertNode\",\n    \"insertRow\",\n    \"insertRule\",\n    \"instanceRoot\",\n    \"intercept\",\n    \"interimResults\",\n    \"internalSubset\",\n    \"intersectsNode\",\n    \"interval\",\n    \"invalidIteratorState\",\n    \"inverse\",\n    \"invertSelf\",\n    \"is\",\n    \"is2D\",\n    \"isAlternate\",\n    \"isArray\",\n    \"isBingCurrentSearchDefault\",\n    \"isBuffer\",\n    \"isCandidateWindowVisible\",\n    \"isChar\",\n    \"isCollapsed\",\n    \"isComposing\",\n    \"isContentEditable\",\n    \"isContentHandlerRegistered\",\n    \"isContextLost\",\n    \"isDefaultNamespace\",\n    \"isDisabled\",\n    \"isEnabled\",\n    \"isEqual\",\n    \"isEqualNode\",\n    \"isExtensible\",\n    \"isFinite\",\n    \"isFramebuffer\",\n    \"isFrozen\",\n    \"isGenerator\",\n    \"isId\",\n    \"isInjected\",\n    \"isInteger\",\n    \"isMap\",\n    \"isMultiLine\",\n    \"isNaN\",\n    \"isOpen\",\n    \"isPointInFill\",\n    \"isPointInPath\",\n    \"isPointInRange\",\n    \"isPointInStroke\",\n    \"isPrefAlternate\",\n    \"isPrimary\",\n    \"isProgram\",\n    \"isPropertyImplicit\",\n    \"isProtocolHandlerRegistered\",\n    \"isPrototypeOf\",\n    \"isRenderbuffer\",\n    \"isSafeInteger\",\n    \"isSameNode\",\n    \"isSealed\",\n    \"isShader\",\n    \"isSupported\",\n    \"isTextEdit\",\n    \"isTexture\",\n    \"isTrusted\",\n    \"isTypeSupported\",\n    \"isView\",\n    \"isolation\",\n    \"italics\",\n    \"item\",\n    \"itemId\",\n    \"itemProp\",\n    \"itemRef\",\n    \"itemScope\",\n    \"itemType\",\n    \"itemValue\",\n    \"iterateNext\",\n    \"iterator\",\n    \"javaEnabled\",\n    \"jobTitle\",\n    \"join\",\n    \"json\",\n    \"justify-content\",\n    \"justifyContent\",\n    \"k1\",\n    \"k2\",\n    \"k3\",\n    \"k4\",\n    \"kernelMatrix\",\n    \"kernelUnitLengthX\",\n    \"kernelUnitLengthY\",\n    \"kerning\",\n    \"key\",\n    \"keyCode\",\n    \"keyFor\",\n    \"keyIdentifier\",\n    \"keyLightEnabled\",\n    \"keyLocation\",\n    \"keyPath\",\n    \"keySystem\",\n    \"keyText\",\n    \"keyUsage\",\n    \"keys\",\n    \"keytype\",\n    \"kind\",\n    \"knee\",\n    \"label\",\n    \"labels\",\n    \"lang\",\n    \"language\",\n    \"languages\",\n    \"largeArcFlag\",\n    \"lastChild\",\n    \"lastElementChild\",\n    \"lastEventId\",\n    \"lastIndex\",\n    \"lastIndexOf\",\n    \"lastMatch\",\n    \"lastMessageSubject\",\n    \"lastMessageType\",\n    \"lastModified\",\n    \"lastModifiedDate\",\n    \"lastPage\",\n    \"lastParen\",\n    \"lastState\",\n    \"lastStyleSheetSet\",\n    \"latitude\",\n    \"layerX\",\n    \"layerY\",\n    \"layoutFlow\",\n    \"layoutGrid\",\n    \"layoutGridChar\",\n    \"layoutGridLine\",\n    \"layoutGridMode\",\n    \"layoutGridType\",\n    \"lbound\",\n    \"left\",\n    \"leftContext\",\n    \"leftMargin\",\n    \"length\",\n    \"lengthAdjust\",\n    \"lengthComputable\",\n    \"letter-spacing\",\n    \"letterSpacing\",\n    \"level\",\n    \"lighting-color\",\n    \"lightingColor\",\n    \"limitingConeAngle\",\n    \"line\",\n    \"line-height\",\n    \"lineAlign\",\n    \"lineBreak\",\n    \"lineCap\",\n    \"lineDashOffset\",\n    \"lineHeight\",\n    \"lineJoin\",\n    \"lineNumber\",\n    \"lineTo\",\n    \"lineWidth\",\n    \"linearRampToValueAtTime\",\n    \"lineno\",\n    \"link\",\n    \"linkColor\",\n    \"linkProgram\",\n    \"links\",\n    \"list\",\n    \"list-style\",\n    \"list-style-image\",\n    \"list-style-position\",\n    \"list-style-type\",\n    \"listStyle\",\n    \"listStyleImage\",\n    \"listStylePosition\",\n    \"listStyleType\",\n    \"listener\",\n    \"load\",\n    \"loadEventEnd\",\n    \"loadEventStart\",\n    \"loadTimes\",\n    \"loaded\",\n    \"localDescription\",\n    \"localName\",\n    \"localStorage\",\n    \"locale\",\n    \"localeCompare\",\n    \"location\",\n    \"locationbar\",\n    \"lock\",\n    \"lockedFile\",\n    \"log\",\n    \"log10\",\n    \"log1p\",\n    \"log2\",\n    \"logicalXDPI\",\n    \"logicalYDPI\",\n    \"longDesc\",\n    \"longitude\",\n    \"lookupNamespaceURI\",\n    \"lookupPrefix\",\n    \"loop\",\n    \"loopEnd\",\n    \"loopStart\",\n    \"looping\",\n    \"low\",\n    \"lower\",\n    \"lowerBound\",\n    \"lowerOpen\",\n    \"lowsrc\",\n    \"m11\",\n    \"m12\",\n    \"m13\",\n    \"m14\",\n    \"m21\",\n    \"m22\",\n    \"m23\",\n    \"m24\",\n    \"m31\",\n    \"m32\",\n    \"m33\",\n    \"m34\",\n    \"m41\",\n    \"m42\",\n    \"m43\",\n    \"m44\",\n    \"manifest\",\n    \"map\",\n    \"mapping\",\n    \"margin\",\n    \"margin-bottom\",\n    \"margin-left\",\n    \"margin-right\",\n    \"margin-top\",\n    \"marginBottom\",\n    \"marginHeight\",\n    \"marginLeft\",\n    \"marginRight\",\n    \"marginTop\",\n    \"marginWidth\",\n    \"mark\",\n    \"marker\",\n    \"marker-end\",\n    \"marker-mid\",\n    \"marker-offset\",\n    \"marker-start\",\n    \"markerEnd\",\n    \"markerHeight\",\n    \"markerMid\",\n    \"markerOffset\",\n    \"markerStart\",\n    \"markerUnits\",\n    \"markerWidth\",\n    \"marks\",\n    \"mask\",\n    \"mask-type\",\n    \"maskContentUnits\",\n    \"maskType\",\n    \"maskUnits\",\n    \"match\",\n    \"matchMedia\",\n    \"matchMedium\",\n    \"matches\",\n    \"matrix\",\n    \"matrixTransform\",\n    \"max\",\n    \"max-height\",\n    \"max-width\",\n    \"maxAlternatives\",\n    \"maxChannelCount\",\n    \"maxConnectionsPerServer\",\n    \"maxDecibels\",\n    \"maxDistance\",\n    \"maxHeight\",\n    \"maxLength\",\n    \"maxTouchPoints\",\n    \"maxValue\",\n    \"maxWidth\",\n    \"measure\",\n    \"measureText\",\n    \"media\",\n    \"mediaDevices\",\n    \"mediaElement\",\n    \"mediaGroup\",\n    \"mediaKeys\",\n    \"mediaText\",\n    \"meetOrSlice\",\n    \"memory\",\n    \"menubar\",\n    \"mergeAttributes\",\n    \"message\",\n    \"messageClass\",\n    \"messageHandlers\",\n    \"metaKey\",\n    \"method\",\n    \"mimeType\",\n    \"mimeTypes\",\n    \"min\",\n    \"min-height\",\n    \"min-width\",\n    \"minDecibels\",\n    \"minHeight\",\n    \"minValue\",\n    \"minWidth\",\n    \"miterLimit\",\n    \"mix-blend-mode\",\n    \"mixBlendMode\",\n    \"mode\",\n    \"modify\",\n    \"mount\",\n    \"move\",\n    \"moveBy\",\n    \"moveEnd\",\n    \"moveFirst\",\n    \"moveFocusDown\",\n    \"moveFocusLeft\",\n    \"moveFocusRight\",\n    \"moveFocusUp\",\n    \"moveNext\",\n    \"moveRow\",\n    \"moveStart\",\n    \"moveTo\",\n    \"moveToBookmark\",\n    \"moveToElementText\",\n    \"moveToPoint\",\n    \"mozAdd\",\n    \"mozAnimationStartTime\",\n    \"mozAnon\",\n    \"mozApps\",\n    \"mozAudioCaptured\",\n    \"mozAudioChannelType\",\n    \"mozAutoplayEnabled\",\n    \"mozCancelAnimationFrame\",\n    \"mozCancelFullScreen\",\n    \"mozCancelRequestAnimationFrame\",\n    \"mozCaptureStream\",\n    \"mozCaptureStreamUntilEnded\",\n    \"mozClearDataAt\",\n    \"mozContact\",\n    \"mozContacts\",\n    \"mozCreateFileHandle\",\n    \"mozCurrentTransform\",\n    \"mozCurrentTransformInverse\",\n    \"mozCursor\",\n    \"mozDash\",\n    \"mozDashOffset\",\n    \"mozDecodedFrames\",\n    \"mozExitPointerLock\",\n    \"mozFillRule\",\n    \"mozFragmentEnd\",\n    \"mozFrameDelay\",\n    \"mozFullScreen\",\n    \"mozFullScreenElement\",\n    \"mozFullScreenEnabled\",\n    \"mozGetAll\",\n    \"mozGetAllKeys\",\n    \"mozGetAsFile\",\n    \"mozGetDataAt\",\n    \"mozGetMetadata\",\n    \"mozGetUserMedia\",\n    \"mozHasAudio\",\n    \"mozHasItem\",\n    \"mozHidden\",\n    \"mozImageSmoothingEnabled\",\n    \"mozIndexedDB\",\n    \"mozInnerScreenX\",\n    \"mozInnerScreenY\",\n    \"mozInputSource\",\n    \"mozIsTextField\",\n    \"mozItem\",\n    \"mozItemCount\",\n    \"mozItems\",\n    \"mozLength\",\n    \"mozLockOrientation\",\n    \"mozMatchesSelector\",\n    \"mozMovementX\",\n    \"mozMovementY\",\n    \"mozOpaque\",\n    \"mozOrientation\",\n    \"mozPaintCount\",\n    \"mozPaintedFrames\",\n    \"mozParsedFrames\",\n    \"mozPay\",\n    \"mozPointerLockElement\",\n    \"mozPresentedFrames\",\n    \"mozPreservesPitch\",\n    \"mozPressure\",\n    \"mozPrintCallback\",\n    \"mozRTCIceCandidate\",\n    \"mozRTCPeerConnection\",\n    \"mozRTCSessionDescription\",\n    \"mozRemove\",\n    \"mozRequestAnimationFrame\",\n    \"mozRequestFullScreen\",\n    \"mozRequestPointerLock\",\n    \"mozSetDataAt\",\n    \"mozSetImageElement\",\n    \"mozSourceNode\",\n    \"mozSrcObject\",\n    \"mozSystem\",\n    \"mozTCPSocket\",\n    \"mozTextStyle\",\n    \"mozTypesAt\",\n    \"mozUnlockOrientation\",\n    \"mozUserCancelled\",\n    \"mozVisibilityState\",\n    \"msAnimation\",\n    \"msAnimationDelay\",\n    \"msAnimationDirection\",\n    \"msAnimationDuration\",\n    \"msAnimationFillMode\",\n    \"msAnimationIterationCount\",\n    \"msAnimationName\",\n    \"msAnimationPlayState\",\n    \"msAnimationStartTime\",\n    \"msAnimationTimingFunction\",\n    \"msBackfaceVisibility\",\n    \"msBlockProgression\",\n    \"msCSSOMElementFloatMetrics\",\n    \"msCaching\",\n    \"msCachingEnabled\",\n    \"msCancelRequestAnimationFrame\",\n    \"msCapsLockWarningOff\",\n    \"msClearImmediate\",\n    \"msClose\",\n    \"msContentZoomChaining\",\n    \"msContentZoomFactor\",\n    \"msContentZoomLimit\",\n    \"msContentZoomLimitMax\",\n    \"msContentZoomLimitMin\",\n    \"msContentZoomSnap\",\n    \"msContentZoomSnapPoints\",\n    \"msContentZoomSnapType\",\n    \"msContentZooming\",\n    \"msConvertURL\",\n    \"msCrypto\",\n    \"msDoNotTrack\",\n    \"msElementsFromPoint\",\n    \"msElementsFromRect\",\n    \"msExitFullscreen\",\n    \"msExtendedCode\",\n    \"msFillRule\",\n    \"msFirstPaint\",\n    \"msFlex\",\n    \"msFlexAlign\",\n    \"msFlexDirection\",\n    \"msFlexFlow\",\n    \"msFlexItemAlign\",\n    \"msFlexLinePack\",\n    \"msFlexNegative\",\n    \"msFlexOrder\",\n    \"msFlexPack\",\n    \"msFlexPositive\",\n    \"msFlexPreferredSize\",\n    \"msFlexWrap\",\n    \"msFlowFrom\",\n    \"msFlowInto\",\n    \"msFontFeatureSettings\",\n    \"msFullscreenElement\",\n    \"msFullscreenEnabled\",\n    \"msGetInputContext\",\n    \"msGetRegionContent\",\n    \"msGetUntransformedBounds\",\n    \"msGraphicsTrustStatus\",\n    \"msGridColumn\",\n    \"msGridColumnAlign\",\n    \"msGridColumnSpan\",\n    \"msGridColumns\",\n    \"msGridRow\",\n    \"msGridRowAlign\",\n    \"msGridRowSpan\",\n    \"msGridRows\",\n    \"msHidden\",\n    \"msHighContrastAdjust\",\n    \"msHyphenateLimitChars\",\n    \"msHyphenateLimitLines\",\n    \"msHyphenateLimitZone\",\n    \"msHyphens\",\n    \"msImageSmoothingEnabled\",\n    \"msImeAlign\",\n    \"msIndexedDB\",\n    \"msInterpolationMode\",\n    \"msIsStaticHTML\",\n    \"msKeySystem\",\n    \"msKeys\",\n    \"msLaunchUri\",\n    \"msLockOrientation\",\n    \"msManipulationViewsEnabled\",\n    \"msMatchMedia\",\n    \"msMatchesSelector\",\n    \"msMaxTouchPoints\",\n    \"msOrientation\",\n    \"msOverflowStyle\",\n    \"msPerspective\",\n    \"msPerspectiveOrigin\",\n    \"msPlayToDisabled\",\n    \"msPlayToPreferredSourceUri\",\n    \"msPlayToPrimary\",\n    \"msPointerEnabled\",\n    \"msRegionOverflow\",\n    \"msReleasePointerCapture\",\n    \"msRequestAnimationFrame\",\n    \"msRequestFullscreen\",\n    \"msSaveBlob\",\n    \"msSaveOrOpenBlob\",\n    \"msScrollChaining\",\n    \"msScrollLimit\",\n    \"msScrollLimitXMax\",\n    \"msScrollLimitXMin\",\n    \"msScrollLimitYMax\",\n    \"msScrollLimitYMin\",\n    \"msScrollRails\",\n    \"msScrollSnapPointsX\",\n    \"msScrollSnapPointsY\",\n    \"msScrollSnapType\",\n    \"msScrollSnapX\",\n    \"msScrollSnapY\",\n    \"msScrollTranslation\",\n    \"msSetImmediate\",\n    \"msSetMediaKeys\",\n    \"msSetPointerCapture\",\n    \"msTextCombineHorizontal\",\n    \"msTextSizeAdjust\",\n    \"msToBlob\",\n    \"msTouchAction\",\n    \"msTouchSelect\",\n    \"msTraceAsyncCallbackCompleted\",\n    \"msTraceAsyncCallbackStarting\",\n    \"msTraceAsyncOperationCompleted\",\n    \"msTraceAsyncOperationStarting\",\n    \"msTransform\",\n    \"msTransformOrigin\",\n    \"msTransformStyle\",\n    \"msTransition\",\n    \"msTransitionDelay\",\n    \"msTransitionDuration\",\n    \"msTransitionProperty\",\n    \"msTransitionTimingFunction\",\n    \"msUnlockOrientation\",\n    \"msUpdateAsyncCallbackRelation\",\n    \"msUserSelect\",\n    \"msVisibilityState\",\n    \"msWrapFlow\",\n    \"msWrapMargin\",\n    \"msWrapThrough\",\n    \"msWriteProfilerMark\",\n    \"msZoom\",\n    \"msZoomTo\",\n    \"mt\",\n    \"multiEntry\",\n    \"multiSelectionObj\",\n    \"multiline\",\n    \"multiple\",\n    \"multiply\",\n    \"multiplySelf\",\n    \"mutableFile\",\n    \"muted\",\n    \"n\",\n    \"name\",\n    \"nameProp\",\n    \"namedItem\",\n    \"namedRecordset\",\n    \"names\",\n    \"namespaceURI\",\n    \"namespaces\",\n    \"naturalHeight\",\n    \"naturalWidth\",\n    \"navigate\",\n    \"navigation\",\n    \"navigationMode\",\n    \"navigationStart\",\n    \"navigator\",\n    \"near\",\n    \"nearestViewportElement\",\n    \"negative\",\n    \"netscape\",\n    \"networkState\",\n    \"newScale\",\n    \"newTranslate\",\n    \"newURL\",\n    \"newValue\",\n    \"newValueSpecifiedUnits\",\n    \"newVersion\",\n    \"newhome\",\n    \"next\",\n    \"nextElementSibling\",\n    \"nextNode\",\n    \"nextPage\",\n    \"nextSibling\",\n    \"nickname\",\n    \"noHref\",\n    \"noResize\",\n    \"noShade\",\n    \"noValidate\",\n    \"noWrap\",\n    \"nodeName\",\n    \"nodeType\",\n    \"nodeValue\",\n    \"normalize\",\n    \"normalizedPathSegList\",\n    \"notationName\",\n    \"notations\",\n    \"note\",\n    \"noteGrainOn\",\n    \"noteOff\",\n    \"noteOn\",\n    \"now\",\n    \"numOctaves\",\n    \"number\",\n    \"numberOfChannels\",\n    \"numberOfInputs\",\n    \"numberOfItems\",\n    \"numberOfOutputs\",\n    \"numberValue\",\n    \"oMatchesSelector\",\n    \"object\",\n    \"object-fit\",\n    \"object-position\",\n    \"objectFit\",\n    \"objectPosition\",\n    \"objectStore\",\n    \"objectStoreNames\",\n    \"observe\",\n    \"of\",\n    \"offscreenBuffering\",\n    \"offset\",\n    \"offsetHeight\",\n    \"offsetLeft\",\n    \"offsetNode\",\n    \"offsetParent\",\n    \"offsetTop\",\n    \"offsetWidth\",\n    \"offsetX\",\n    \"offsetY\",\n    \"ok\",\n    \"oldURL\",\n    \"oldValue\",\n    \"oldVersion\",\n    \"olderShadowRoot\",\n    \"onLine\",\n    \"onabort\",\n    \"onactivate\",\n    \"onactive\",\n    \"onaddstream\",\n    \"onaddtrack\",\n    \"onafterprint\",\n    \"onafterscriptexecute\",\n    \"onafterupdate\",\n    \"onaudioend\",\n    \"onaudioprocess\",\n    \"onaudiostart\",\n    \"onautocomplete\",\n    \"onautocompleteerror\",\n    \"onbeforeactivate\",\n    \"onbeforecopy\",\n    \"onbeforecut\",\n    \"onbeforedeactivate\",\n    \"onbeforeeditfocus\",\n    \"onbeforepaste\",\n    \"onbeforeprint\",\n    \"onbeforescriptexecute\",\n    \"onbeforeunload\",\n    \"onbeforeupdate\",\n    \"onblocked\",\n    \"onblur\",\n    \"onbounce\",\n    \"onboundary\",\n    \"oncached\",\n    \"oncancel\",\n    \"oncandidatewindowhide\",\n    \"oncandidatewindowshow\",\n    \"oncandidatewindowupdate\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"oncellchange\",\n    \"onchange\",\n    \"onchargingchange\",\n    \"onchargingtimechange\",\n    \"onchecking\",\n    \"onclick\",\n    \"onclose\",\n    \"oncompassneedscalibration\",\n    \"oncomplete\",\n    \"oncontextmenu\",\n    \"oncontrolselect\",\n    \"oncopy\",\n    \"oncuechange\",\n    \"oncut\",\n    \"ondataavailable\",\n    \"ondatachannel\",\n    \"ondatasetchanged\",\n    \"ondatasetcomplete\",\n    \"ondblclick\",\n    \"ondeactivate\",\n    \"ondevicelight\",\n    \"ondevicemotion\",\n    \"ondeviceorientation\",\n    \"ondeviceproximity\",\n    \"ondischargingtimechange\",\n    \"ondisplay\",\n    \"ondownloading\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onencrypted\",\n    \"onend\",\n    \"onended\",\n    \"onenter\",\n    \"onerror\",\n    \"onerrorupdate\",\n    \"onexit\",\n    \"onfilterchange\",\n    \"onfinish\",\n    \"onfocus\",\n    \"onfocusin\",\n    \"onfocusout\",\n    \"onfullscreenchange\",\n    \"onfullscreenerror\",\n    \"ongesturechange\",\n    \"ongestureend\",\n    \"ongesturestart\",\n    \"ongotpointercapture\",\n    \"onhashchange\",\n    \"onhelp\",\n    \"onicecandidate\",\n    \"oniceconnectionstatechange\",\n    \"oninactive\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onlanguagechange\",\n    \"onlayoutcomplete\",\n    \"onlevelchange\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadend\",\n    \"onloadstart\",\n    \"onlosecapture\",\n    \"onlostpointercapture\",\n    \"only\",\n    \"onmark\",\n    \"onmessage\",\n    \"onmousedown\",\n    \"onmouseenter\",\n    \"onmouseleave\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onmove\",\n    \"onmoveend\",\n    \"onmovestart\",\n    \"onmozfullscreenchange\",\n    \"onmozfullscreenerror\",\n    \"onmozorientationchange\",\n    \"onmozpointerlockchange\",\n    \"onmozpointerlockerror\",\n    \"onmscontentzoom\",\n    \"onmsfullscreenchange\",\n    \"onmsfullscreenerror\",\n    \"onmsgesturechange\",\n    \"onmsgesturedoubletap\",\n    \"onmsgestureend\",\n    \"onmsgesturehold\",\n    \"onmsgesturestart\",\n    \"onmsgesturetap\",\n    \"onmsgotpointercapture\",\n    \"onmsinertiastart\",\n    \"onmslostpointercapture\",\n    \"onmsmanipulationstatechanged\",\n    \"onmsneedkey\",\n    \"onmsorientationchange\",\n    \"onmspointercancel\",\n    \"onmspointerdown\",\n    \"onmspointerenter\",\n    \"onmspointerhover\",\n    \"onmspointerleave\",\n    \"onmspointermove\",\n    \"onmspointerout\",\n    \"onmspointerover\",\n    \"onmspointerup\",\n    \"onmssitemodejumplistitemremoved\",\n    \"onmsthumbnailclick\",\n    \"onnegotiationneeded\",\n    \"onnomatch\",\n    \"onnoupdate\",\n    \"onobsolete\",\n    \"onoffline\",\n    \"ononline\",\n    \"onopen\",\n    \"onorientationchange\",\n    \"onpagechange\",\n    \"onpagehide\",\n    \"onpageshow\",\n    \"onpaste\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onpluginstreamstart\",\n    \"onpointercancel\",\n    \"onpointerdown\",\n    \"onpointerenter\",\n    \"onpointerleave\",\n    \"onpointerlockchange\",\n    \"onpointerlockerror\",\n    \"onpointermove\",\n    \"onpointerout\",\n    \"onpointerover\",\n    \"onpointerup\",\n    \"onpopstate\",\n    \"onprogress\",\n    \"onpropertychange\",\n    \"onratechange\",\n    \"onreadystatechange\",\n    \"onremovestream\",\n    \"onremovetrack\",\n    \"onreset\",\n    \"onresize\",\n    \"onresizeend\",\n    \"onresizestart\",\n    \"onresourcetimingbufferfull\",\n    \"onresult\",\n    \"onresume\",\n    \"onrowenter\",\n    \"onrowexit\",\n    \"onrowsdelete\",\n    \"onrowsinserted\",\n    \"onscroll\",\n    \"onsearch\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onselectionchange\",\n    \"onselectstart\",\n    \"onshow\",\n    \"onsignalingstatechange\",\n    \"onsoundend\",\n    \"onsoundstart\",\n    \"onspeechend\",\n    \"onspeechstart\",\n    \"onstalled\",\n    \"onstart\",\n    \"onstatechange\",\n    \"onstop\",\n    \"onstorage\",\n    \"onstoragecommit\",\n    \"onsubmit\",\n    \"onsuccess\",\n    \"onsuspend\",\n    \"ontextinput\",\n    \"ontimeout\",\n    \"ontimeupdate\",\n    \"ontoggle\",\n    \"ontouchcancel\",\n    \"ontouchend\",\n    \"ontouchmove\",\n    \"ontouchstart\",\n    \"ontransitionend\",\n    \"onunload\",\n    \"onupdateready\",\n    \"onupgradeneeded\",\n    \"onuserproximity\",\n    \"onversionchange\",\n    \"onvoiceschanged\",\n    \"onvolumechange\",\n    \"onwaiting\",\n    \"onwarning\",\n    \"onwebkitanimationend\",\n    \"onwebkitanimationiteration\",\n    \"onwebkitanimationstart\",\n    \"onwebkitcurrentplaybacktargetiswirelesschanged\",\n    \"onwebkitfullscreenchange\",\n    \"onwebkitfullscreenerror\",\n    \"onwebkitkeyadded\",\n    \"onwebkitkeyerror\",\n    \"onwebkitkeymessage\",\n    \"onwebkitneedkey\",\n    \"onwebkitorientationchange\",\n    \"onwebkitplaybacktargetavailabilitychanged\",\n    \"onwebkitpointerlockchange\",\n    \"onwebkitpointerlockerror\",\n    \"onwebkitresourcetimingbufferfull\",\n    \"onwebkittransitionend\",\n    \"onwheel\",\n    \"onzoom\",\n    \"opacity\",\n    \"open\",\n    \"openCursor\",\n    \"openDatabase\",\n    \"openKeyCursor\",\n    \"opener\",\n    \"opera\",\n    \"operationType\",\n    \"operator\",\n    \"opr\",\n    \"optimum\",\n    \"options\",\n    \"order\",\n    \"orderX\",\n    \"orderY\",\n    \"ordered\",\n    \"org\",\n    \"orient\",\n    \"orientAngle\",\n    \"orientType\",\n    \"orientation\",\n    \"origin\",\n    \"originalTarget\",\n    \"orphans\",\n    \"oscpu\",\n    \"outerHTML\",\n    \"outerHeight\",\n    \"outerText\",\n    \"outerWidth\",\n    \"outline\",\n    \"outline-color\",\n    \"outline-offset\",\n    \"outline-style\",\n    \"outline-width\",\n    \"outlineColor\",\n    \"outlineOffset\",\n    \"outlineStyle\",\n    \"outlineWidth\",\n    \"outputBuffer\",\n    \"overflow\",\n    \"overflow-x\",\n    \"overflow-y\",\n    \"overflowX\",\n    \"overflowY\",\n    \"overrideMimeType\",\n    \"oversample\",\n    \"ownerDocument\",\n    \"ownerElement\",\n    \"ownerNode\",\n    \"ownerRule\",\n    \"ownerSVGElement\",\n    \"owningElement\",\n    \"p1\",\n    \"p2\",\n    \"p3\",\n    \"p4\",\n    \"pad\",\n    \"padding\",\n    \"padding-bottom\",\n    \"padding-left\",\n    \"padding-right\",\n    \"padding-top\",\n    \"paddingBottom\",\n    \"paddingLeft\",\n    \"paddingRight\",\n    \"paddingTop\",\n    \"page\",\n    \"page-break-after\",\n    \"page-break-before\",\n    \"page-break-inside\",\n    \"pageBreakAfter\",\n    \"pageBreakBefore\",\n    \"pageBreakInside\",\n    \"pageCount\",\n    \"pageX\",\n    \"pageXOffset\",\n    \"pageY\",\n    \"pageYOffset\",\n    \"pages\",\n    \"paint-order\",\n    \"paintOrder\",\n    \"paintRequests\",\n    \"paintType\",\n    \"palette\",\n    \"panningModel\",\n    \"parent\",\n    \"parentElement\",\n    \"parentNode\",\n    \"parentRule\",\n    \"parentStyleSheet\",\n    \"parentTextEdit\",\n    \"parentWindow\",\n    \"parse\",\n    \"parseFloat\",\n    \"parseFromString\",\n    \"parseInt\",\n    \"participants\",\n    \"password\",\n    \"pasteHTML\",\n    \"path\",\n    \"pathLength\",\n    \"pathSegList\",\n    \"pathSegType\",\n    \"pathSegTypeAsLetter\",\n    \"pathname\",\n    \"pattern\",\n    \"patternContentUnits\",\n    \"patternMismatch\",\n    \"patternTransform\",\n    \"patternUnits\",\n    \"pause\",\n    \"pauseAnimations\",\n    \"pauseOnExit\",\n    \"paused\",\n    \"pending\",\n    \"performance\",\n    \"permission\",\n    \"persisted\",\n    \"personalbar\",\n    \"perspective\",\n    \"perspective-origin\",\n    \"perspectiveOrigin\",\n    \"phoneticFamilyName\",\n    \"phoneticGivenName\",\n    \"photo\",\n    \"ping\",\n    \"pitch\",\n    \"pixelBottom\",\n    \"pixelDepth\",\n    \"pixelHeight\",\n    \"pixelLeft\",\n    \"pixelRight\",\n    \"pixelStorei\",\n    \"pixelTop\",\n    \"pixelUnitToMillimeterX\",\n    \"pixelUnitToMillimeterY\",\n    \"pixelWidth\",\n    \"placeholder\",\n    \"platform\",\n    \"play\",\n    \"playbackRate\",\n    \"playbackState\",\n    \"playbackTime\",\n    \"played\",\n    \"plugins\",\n    \"pluginspage\",\n    \"pname\",\n    \"pointer-events\",\n    \"pointerBeforeReferenceNode\",\n    \"pointerEnabled\",\n    \"pointerEvents\",\n    \"pointerId\",\n    \"pointerLockElement\",\n    \"pointerType\",\n    \"points\",\n    \"pointsAtX\",\n    \"pointsAtY\",\n    \"pointsAtZ\",\n    \"polygonOffset\",\n    \"pop\",\n    \"popupWindowFeatures\",\n    \"popupWindowName\",\n    \"popupWindowURI\",\n    \"port\",\n    \"port1\",\n    \"port2\",\n    \"ports\",\n    \"posBottom\",\n    \"posHeight\",\n    \"posLeft\",\n    \"posRight\",\n    \"posTop\",\n    \"posWidth\",\n    \"position\",\n    \"positionAlign\",\n    \"postError\",\n    \"postMessage\",\n    \"poster\",\n    \"pow\",\n    \"powerOff\",\n    \"preMultiplySelf\",\n    \"precision\",\n    \"preferredStyleSheetSet\",\n    \"preferredStylesheetSet\",\n    \"prefix\",\n    \"preload\",\n    \"preserveAlpha\",\n    \"preserveAspectRatio\",\n    \"preserveAspectRatioString\",\n    \"pressed\",\n    \"pressure\",\n    \"prevValue\",\n    \"preventDefault\",\n    \"preventExtensions\",\n    \"previousElementSibling\",\n    \"previousNode\",\n    \"previousPage\",\n    \"previousScale\",\n    \"previousSibling\",\n    \"previousTranslate\",\n    \"primaryKey\",\n    \"primitiveType\",\n    \"primitiveUnits\",\n    \"principals\",\n    \"print\",\n    \"privateKey\",\n    \"probablySupportsContext\",\n    \"process\",\n    \"processIceMessage\",\n    \"product\",\n    \"productSub\",\n    \"profile\",\n    \"profileEnd\",\n    \"profiles\",\n    \"prompt\",\n    \"properties\",\n    \"propertyIsEnumerable\",\n    \"propertyName\",\n    \"protocol\",\n    \"protocolLong\",\n    \"prototype\",\n    \"pseudoClass\",\n    \"pseudoElement\",\n    \"publicId\",\n    \"publicKey\",\n    \"published\",\n    \"push\",\n    \"pushNotification\",\n    \"pushState\",\n    \"put\",\n    \"putImageData\",\n    \"quadraticCurveTo\",\n    \"qualifier\",\n    \"queryCommandEnabled\",\n    \"queryCommandIndeterm\",\n    \"queryCommandState\",\n    \"queryCommandSupported\",\n    \"queryCommandText\",\n    \"queryCommandValue\",\n    \"querySelector\",\n    \"querySelectorAll\",\n    \"quote\",\n    \"quotes\",\n    \"r\",\n    \"r1\",\n    \"r2\",\n    \"race\",\n    \"radiogroup\",\n    \"radiusX\",\n    \"radiusY\",\n    \"random\",\n    \"range\",\n    \"rangeCount\",\n    \"rangeMax\",\n    \"rangeMin\",\n    \"rangeOffset\",\n    \"rangeOverflow\",\n    \"rangeParent\",\n    \"rangeUnderflow\",\n    \"rate\",\n    \"ratio\",\n    \"raw\",\n    \"read\",\n    \"readAsArrayBuffer\",\n    \"readAsBinaryString\",\n    \"readAsBlob\",\n    \"readAsDataURL\",\n    \"readAsText\",\n    \"readOnly\",\n    \"readPixels\",\n    \"readReportRequested\",\n    \"readyState\",\n    \"reason\",\n    \"reboot\",\n    \"receiver\",\n    \"receivers\",\n    \"recordNumber\",\n    \"recordset\",\n    \"rect\",\n    \"red\",\n    \"redirectCount\",\n    \"redirectEnd\",\n    \"redirectStart\",\n    \"reduce\",\n    \"reduceRight\",\n    \"reduction\",\n    \"refDistance\",\n    \"refX\",\n    \"refY\",\n    \"referenceNode\",\n    \"referrer\",\n    \"refresh\",\n    \"region\",\n    \"regionAnchorX\",\n    \"regionAnchorY\",\n    \"regionId\",\n    \"regions\",\n    \"register\",\n    \"registerContentHandler\",\n    \"registerElement\",\n    \"registerProtocolHandler\",\n    \"reject\",\n    \"rel\",\n    \"relList\",\n    \"relatedNode\",\n    \"relatedTarget\",\n    \"release\",\n    \"releaseCapture\",\n    \"releaseEvents\",\n    \"releasePointerCapture\",\n    \"releaseShaderCompiler\",\n    \"reliable\",\n    \"reload\",\n    \"remainingSpace\",\n    \"remoteDescription\",\n    \"remove\",\n    \"removeAllRanges\",\n    \"removeAttribute\",\n    \"removeAttributeNS\",\n    \"removeAttributeNode\",\n    \"removeBehavior\",\n    \"removeChild\",\n    \"removeCue\",\n    \"removeEventListener\",\n    \"removeFilter\",\n    \"removeImport\",\n    \"removeItem\",\n    \"removeListener\",\n    \"removeNamedItem\",\n    \"removeNamedItemNS\",\n    \"removeNode\",\n    \"removeParameter\",\n    \"removeProperty\",\n    \"removeRange\",\n    \"removeRegion\",\n    \"removeRule\",\n    \"removeSiteSpecificTrackingException\",\n    \"removeSourceBuffer\",\n    \"removeStream\",\n    \"removeTrack\",\n    \"removeVariable\",\n    \"removeWakeLockListener\",\n    \"removeWebWideTrackingException\",\n    \"removedNodes\",\n    \"renderbufferStorage\",\n    \"renderedBuffer\",\n    \"renderingMode\",\n    \"repeat\",\n    \"replace\",\n    \"replaceAdjacentText\",\n    \"replaceChild\",\n    \"replaceData\",\n    \"replaceId\",\n    \"replaceItem\",\n    \"replaceNode\",\n    \"replaceState\",\n    \"replaceTrack\",\n    \"replaceWholeText\",\n    \"reportValidity\",\n    \"requestAnimationFrame\",\n    \"requestAutocomplete\",\n    \"requestData\",\n    \"requestFullscreen\",\n    \"requestMediaKeySystemAccess\",\n    \"requestPermission\",\n    \"requestPointerLock\",\n    \"requestStart\",\n    \"requestingWindow\",\n    \"required\",\n    \"requiredExtensions\",\n    \"requiredFeatures\",\n    \"reset\",\n    \"resetTransform\",\n    \"resize\",\n    \"resizeBy\",\n    \"resizeTo\",\n    \"resolve\",\n    \"response\",\n    \"responseBody\",\n    \"responseEnd\",\n    \"responseStart\",\n    \"responseText\",\n    \"responseType\",\n    \"responseURL\",\n    \"responseXML\",\n    \"restore\",\n    \"result\",\n    \"resultType\",\n    \"resume\",\n    \"returnValue\",\n    \"rev\",\n    \"reverse\",\n    \"reversed\",\n    \"revocable\",\n    \"revokeObjectURL\",\n    \"rgbColor\",\n    \"right\",\n    \"rightContext\",\n    \"rightMargin\",\n    \"rolloffFactor\",\n    \"root\",\n    \"rootElement\",\n    \"rotate\",\n    \"rotateAxisAngle\",\n    \"rotateAxisAngleSelf\",\n    \"rotateFromVector\",\n    \"rotateFromVectorSelf\",\n    \"rotateSelf\",\n    \"rotation\",\n    \"rotationRate\",\n    \"round\",\n    \"rowIndex\",\n    \"rowSpan\",\n    \"rows\",\n    \"rubyAlign\",\n    \"rubyOverhang\",\n    \"rubyPosition\",\n    \"rules\",\n    \"runtime\",\n    \"runtimeStyle\",\n    \"rx\",\n    \"ry\",\n    \"safari\",\n    \"sampleCoverage\",\n    \"sampleRate\",\n    \"sandbox\",\n    \"save\",\n    \"scale\",\n    \"scale3d\",\n    \"scale3dSelf\",\n    \"scaleNonUniform\",\n    \"scaleNonUniformSelf\",\n    \"scaleSelf\",\n    \"scheme\",\n    \"scissor\",\n    \"scope\",\n    \"scopeName\",\n    \"scoped\",\n    \"screen\",\n    \"screenBrightness\",\n    \"screenEnabled\",\n    \"screenLeft\",\n    \"screenPixelToMillimeterX\",\n    \"screenPixelToMillimeterY\",\n    \"screenTop\",\n    \"screenX\",\n    \"screenY\",\n    \"scripts\",\n    \"scroll\",\n    \"scroll-behavior\",\n    \"scrollAmount\",\n    \"scrollBehavior\",\n    \"scrollBy\",\n    \"scrollByLines\",\n    \"scrollByPages\",\n    \"scrollDelay\",\n    \"scrollHeight\",\n    \"scrollIntoView\",\n    \"scrollIntoViewIfNeeded\",\n    \"scrollLeft\",\n    \"scrollLeftMax\",\n    \"scrollMaxX\",\n    \"scrollMaxY\",\n    \"scrollTo\",\n    \"scrollTop\",\n    \"scrollTopMax\",\n    \"scrollWidth\",\n    \"scrollX\",\n    \"scrollY\",\n    \"scrollbar3dLightColor\",\n    \"scrollbarArrowColor\",\n    \"scrollbarBaseColor\",\n    \"scrollbarDarkShadowColor\",\n    \"scrollbarFaceColor\",\n    \"scrollbarHighlightColor\",\n    \"scrollbarShadowColor\",\n    \"scrollbarTrackColor\",\n    \"scrollbars\",\n    \"scrolling\",\n    \"sdp\",\n    \"sdpMLineIndex\",\n    \"sdpMid\",\n    \"seal\",\n    \"search\",\n    \"searchBox\",\n    \"searchBoxJavaBridge_\",\n    \"searchParams\",\n    \"sectionRowIndex\",\n    \"secureConnectionStart\",\n    \"security\",\n    \"seed\",\n    \"seekable\",\n    \"seeking\",\n    \"select\",\n    \"selectAllChildren\",\n    \"selectNode\",\n    \"selectNodeContents\",\n    \"selectNodes\",\n    \"selectSingleNode\",\n    \"selectSubString\",\n    \"selected\",\n    \"selectedIndex\",\n    \"selectedOptions\",\n    \"selectedStyleSheetSet\",\n    \"selectedStylesheetSet\",\n    \"selection\",\n    \"selectionDirection\",\n    \"selectionEnd\",\n    \"selectionStart\",\n    \"selector\",\n    \"selectorText\",\n    \"self\",\n    \"send\",\n    \"sendAsBinary\",\n    \"sendBeacon\",\n    \"sender\",\n    \"sentTimestamp\",\n    \"separator\",\n    \"serializeToString\",\n    \"serviceWorker\",\n    \"sessionId\",\n    \"sessionStorage\",\n    \"set\",\n    \"setActive\",\n    \"setAlpha\",\n    \"setAttribute\",\n    \"setAttributeNS\",\n    \"setAttributeNode\",\n    \"setAttributeNodeNS\",\n    \"setBaseAndExtent\",\n    \"setBingCurrentSearchDefault\",\n    \"setCapture\",\n    \"setColor\",\n    \"setCompositeOperation\",\n    \"setCurrentTime\",\n    \"setCustomValidity\",\n    \"setData\",\n    \"setDate\",\n    \"setDragImage\",\n    \"setEnd\",\n    \"setEndAfter\",\n    \"setEndBefore\",\n    \"setEndPoint\",\n    \"setFillColor\",\n    \"setFilterRes\",\n    \"setFloat32\",\n    \"setFloat64\",\n    \"setFloatValue\",\n    \"setFullYear\",\n    \"setHours\",\n    \"setImmediate\",\n    \"setInt16\",\n    \"setInt32\",\n    \"setInt8\",\n    \"setInterval\",\n    \"setItem\",\n    \"setLineCap\",\n    \"setLineDash\",\n    \"setLineJoin\",\n    \"setLineWidth\",\n    \"setLocalDescription\",\n    \"setMatrix\",\n    \"setMatrixValue\",\n    \"setMediaKeys\",\n    \"setMilliseconds\",\n    \"setMinutes\",\n    \"setMiterLimit\",\n    \"setMonth\",\n    \"setNamedItem\",\n    \"setNamedItemNS\",\n    \"setNonUserCodeExceptions\",\n    \"setOrientToAngle\",\n    \"setOrientToAuto\",\n    \"setOrientation\",\n    \"setOverrideHistoryNavigationMode\",\n    \"setPaint\",\n    \"setParameter\",\n    \"setPeriodicWave\",\n    \"setPointerCapture\",\n    \"setPosition\",\n    \"setPreference\",\n    \"setProperty\",\n    \"setPrototypeOf\",\n    \"setRGBColor\",\n    \"setRGBColorICCColor\",\n    \"setRadius\",\n    \"setRangeText\",\n    \"setRemoteDescription\",\n    \"setRequestHeader\",\n    \"setResizable\",\n    \"setResourceTimingBufferSize\",\n    \"setRotate\",\n    \"setScale\",\n    \"setSeconds\",\n    \"setSelectionRange\",\n    \"setServerCertificate\",\n    \"setShadow\",\n    \"setSkewX\",\n    \"setSkewY\",\n    \"setStart\",\n    \"setStartAfter\",\n    \"setStartBefore\",\n    \"setStdDeviation\",\n    \"setStringValue\",\n    \"setStrokeColor\",\n    \"setSuggestResult\",\n    \"setTargetAtTime\",\n    \"setTargetValueAtTime\",\n    \"setTime\",\n    \"setTimeout\",\n    \"setTransform\",\n    \"setTranslate\",\n    \"setUTCDate\",\n    \"setUTCFullYear\",\n    \"setUTCHours\",\n    \"setUTCMilliseconds\",\n    \"setUTCMinutes\",\n    \"setUTCMonth\",\n    \"setUTCSeconds\",\n    \"setUint16\",\n    \"setUint32\",\n    \"setUint8\",\n    \"setUri\",\n    \"setValueAtTime\",\n    \"setValueCurveAtTime\",\n    \"setVariable\",\n    \"setVelocity\",\n    \"setVersion\",\n    \"setYear\",\n    \"settingName\",\n    \"settingValue\",\n    \"sex\",\n    \"shaderSource\",\n    \"shadowBlur\",\n    \"shadowColor\",\n    \"shadowOffsetX\",\n    \"shadowOffsetY\",\n    \"shadowRoot\",\n    \"shape\",\n    \"shape-rendering\",\n    \"shapeRendering\",\n    \"sheet\",\n    \"shift\",\n    \"shiftKey\",\n    \"shiftLeft\",\n    \"show\",\n    \"showHelp\",\n    \"showModal\",\n    \"showModalDialog\",\n    \"showModelessDialog\",\n    \"showNotification\",\n    \"sidebar\",\n    \"sign\",\n    \"signalingState\",\n    \"sin\",\n    \"singleNodeValue\",\n    \"sinh\",\n    \"size\",\n    \"sizeToContent\",\n    \"sizes\",\n    \"skewX\",\n    \"skewXSelf\",\n    \"skewY\",\n    \"skewYSelf\",\n    \"slice\",\n    \"slope\",\n    \"small\",\n    \"smil\",\n    \"smoothingTimeConstant\",\n    \"snapToLines\",\n    \"snapshotItem\",\n    \"snapshotLength\",\n    \"some\",\n    \"sort\",\n    \"source\",\n    \"sourceBuffer\",\n    \"sourceBuffers\",\n    \"sourceIndex\",\n    \"spacing\",\n    \"span\",\n    \"speakAs\",\n    \"speaking\",\n    \"specified\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"speechSynthesis\",\n    \"speed\",\n    \"speedOfSound\",\n    \"spellcheck\",\n    \"splice\",\n    \"split\",\n    \"splitText\",\n    \"spreadMethod\",\n    \"sqrt\",\n    \"src\",\n    \"srcElement\",\n    \"srcFilter\",\n    \"srcUrn\",\n    \"srcdoc\",\n    \"srclang\",\n    \"srcset\",\n    \"stack\",\n    \"stackTraceLimit\",\n    \"stacktrace\",\n    \"standalone\",\n    \"standby\",\n    \"start\",\n    \"startContainer\",\n    \"startIce\",\n    \"startOffset\",\n    \"startRendering\",\n    \"startTime\",\n    \"startsWith\",\n    \"state\",\n    \"status\",\n    \"statusMessage\",\n    \"statusText\",\n    \"statusbar\",\n    \"stdDeviationX\",\n    \"stdDeviationY\",\n    \"stencilFunc\",\n    \"stencilFuncSeparate\",\n    \"stencilMask\",\n    \"stencilMaskSeparate\",\n    \"stencilOp\",\n    \"stencilOpSeparate\",\n    \"step\",\n    \"stepDown\",\n    \"stepMismatch\",\n    \"stepUp\",\n    \"sticky\",\n    \"stitchTiles\",\n    \"stop\",\n    \"stop-color\",\n    \"stop-opacity\",\n    \"stopColor\",\n    \"stopImmediatePropagation\",\n    \"stopOpacity\",\n    \"stopPropagation\",\n    \"storageArea\",\n    \"storageName\",\n    \"storageStatus\",\n    \"storeSiteSpecificTrackingException\",\n    \"storeWebWideTrackingException\",\n    \"stpVersion\",\n    \"stream\",\n    \"strike\",\n    \"stringValue\",\n    \"stringify\",\n    \"stroke\",\n    \"stroke-dasharray\",\n    \"stroke-dashoffset\",\n    \"stroke-linecap\",\n    \"stroke-linejoin\",\n    \"stroke-miterlimit\",\n    \"stroke-opacity\",\n    \"stroke-width\",\n    \"strokeDasharray\",\n    \"strokeDashoffset\",\n    \"strokeLinecap\",\n    \"strokeLinejoin\",\n    \"strokeMiterlimit\",\n    \"strokeOpacity\",\n    \"strokeRect\",\n    \"strokeStyle\",\n    \"strokeText\",\n    \"strokeWidth\",\n    \"style\",\n    \"styleFloat\",\n    \"styleMedia\",\n    \"styleSheet\",\n    \"styleSheetSets\",\n    \"styleSheets\",\n    \"sub\",\n    \"subarray\",\n    \"subject\",\n    \"submit\",\n    \"subscribe\",\n    \"substr\",\n    \"substring\",\n    \"substringData\",\n    \"subtle\",\n    \"suffix\",\n    \"suffixes\",\n    \"summary\",\n    \"sup\",\n    \"supports\",\n    \"surfaceScale\",\n    \"surroundContents\",\n    \"suspend\",\n    \"suspendRedraw\",\n    \"swapCache\",\n    \"swapNode\",\n    \"sweepFlag\",\n    \"symbols\",\n    \"system\",\n    \"systemCode\",\n    \"systemId\",\n    \"systemLanguage\",\n    \"systemXDPI\",\n    \"systemYDPI\",\n    \"tBodies\",\n    \"tFoot\",\n    \"tHead\",\n    \"tabIndex\",\n    \"table\",\n    \"table-layout\",\n    \"tableLayout\",\n    \"tableValues\",\n    \"tag\",\n    \"tagName\",\n    \"tagUrn\",\n    \"tags\",\n    \"taintEnabled\",\n    \"takeRecords\",\n    \"tan\",\n    \"tanh\",\n    \"target\",\n    \"targetElement\",\n    \"targetTouches\",\n    \"targetX\",\n    \"targetY\",\n    \"tel\",\n    \"terminate\",\n    \"test\",\n    \"texImage2D\",\n    \"texParameterf\",\n    \"texParameteri\",\n    \"texSubImage2D\",\n    \"text\",\n    \"text-align\",\n    \"text-anchor\",\n    \"text-decoration\",\n    \"text-decoration-color\",\n    \"text-decoration-line\",\n    \"text-decoration-style\",\n    \"text-indent\",\n    \"text-overflow\",\n    \"text-rendering\",\n    \"text-shadow\",\n    \"text-transform\",\n    \"textAlign\",\n    \"textAlignLast\",\n    \"textAnchor\",\n    \"textAutospace\",\n    \"textBaseline\",\n    \"textContent\",\n    \"textDecoration\",\n    \"textDecorationBlink\",\n    \"textDecorationColor\",\n    \"textDecorationLine\",\n    \"textDecorationLineThrough\",\n    \"textDecorationNone\",\n    \"textDecorationOverline\",\n    \"textDecorationStyle\",\n    \"textDecorationUnderline\",\n    \"textIndent\",\n    \"textJustify\",\n    \"textJustifyTrim\",\n    \"textKashida\",\n    \"textKashidaSpace\",\n    \"textLength\",\n    \"textOverflow\",\n    \"textRendering\",\n    \"textShadow\",\n    \"textTracks\",\n    \"textTransform\",\n    \"textUnderlinePosition\",\n    \"then\",\n    \"threadId\",\n    \"threshold\",\n    \"tiltX\",\n    \"tiltY\",\n    \"time\",\n    \"timeEnd\",\n    \"timeStamp\",\n    \"timeout\",\n    \"timestamp\",\n    \"timestampOffset\",\n    \"timing\",\n    \"title\",\n    \"toArray\",\n    \"toBlob\",\n    \"toDataURL\",\n    \"toDateString\",\n    \"toElement\",\n    \"toExponential\",\n    \"toFixed\",\n    \"toFloat32Array\",\n    \"toFloat64Array\",\n    \"toGMTString\",\n    \"toISOString\",\n    \"toJSON\",\n    \"toLocaleDateString\",\n    \"toLocaleFormat\",\n    \"toLocaleLowerCase\",\n    \"toLocaleString\",\n    \"toLocaleTimeString\",\n    \"toLocaleUpperCase\",\n    \"toLowerCase\",\n    \"toMethod\",\n    \"toPrecision\",\n    \"toSdp\",\n    \"toSource\",\n    \"toStaticHTML\",\n    \"toString\",\n    \"toStringTag\",\n    \"toTimeString\",\n    \"toUTCString\",\n    \"toUpperCase\",\n    \"toggle\",\n    \"toggleLongPressEnabled\",\n    \"tooLong\",\n    \"toolbar\",\n    \"top\",\n    \"topMargin\",\n    \"total\",\n    \"totalFrameDelay\",\n    \"totalVideoFrames\",\n    \"touchAction\",\n    \"touches\",\n    \"trace\",\n    \"track\",\n    \"transaction\",\n    \"transactions\",\n    \"transform\",\n    \"transform-origin\",\n    \"transform-style\",\n    \"transformOrigin\",\n    \"transformPoint\",\n    \"transformString\",\n    \"transformStyle\",\n    \"transformToDocument\",\n    \"transformToFragment\",\n    \"transition\",\n    \"transition-delay\",\n    \"transition-duration\",\n    \"transition-property\",\n    \"transition-timing-function\",\n    \"transitionDelay\",\n    \"transitionDuration\",\n    \"transitionProperty\",\n    \"transitionTimingFunction\",\n    \"translate\",\n    \"translateSelf\",\n    \"translationX\",\n    \"translationY\",\n    \"trim\",\n    \"trimLeft\",\n    \"trimRight\",\n    \"trueSpeed\",\n    \"trunc\",\n    \"truncate\",\n    \"type\",\n    \"typeDetail\",\n    \"typeMismatch\",\n    \"typeMustMatch\",\n    \"types\",\n    \"ubound\",\n    \"undefined\",\n    \"unescape\",\n    \"uneval\",\n    \"unicode-bidi\",\n    \"unicodeBidi\",\n    \"uniform1f\",\n    \"uniform1fv\",\n    \"uniform1i\",\n    \"uniform1iv\",\n    \"uniform2f\",\n    \"uniform2fv\",\n    \"uniform2i\",\n    \"uniform2iv\",\n    \"uniform3f\",\n    \"uniform3fv\",\n    \"uniform3i\",\n    \"uniform3iv\",\n    \"uniform4f\",\n    \"uniform4fv\",\n    \"uniform4i\",\n    \"uniform4iv\",\n    \"uniformMatrix2fv\",\n    \"uniformMatrix3fv\",\n    \"uniformMatrix4fv\",\n    \"unique\",\n    \"uniqueID\",\n    \"uniqueNumber\",\n    \"unitType\",\n    \"units\",\n    \"unloadEventEnd\",\n    \"unloadEventStart\",\n    \"unlock\",\n    \"unmount\",\n    \"unobserve\",\n    \"unpause\",\n    \"unpauseAnimations\",\n    \"unreadCount\",\n    \"unregister\",\n    \"unregisterContentHandler\",\n    \"unregisterProtocolHandler\",\n    \"unscopables\",\n    \"unselectable\",\n    \"unshift\",\n    \"unsubscribe\",\n    \"unsuspendRedraw\",\n    \"unsuspendRedrawAll\",\n    \"unwatch\",\n    \"unwrapKey\",\n    \"update\",\n    \"updateCommands\",\n    \"updateIce\",\n    \"updateInterval\",\n    \"updateSettings\",\n    \"updated\",\n    \"updating\",\n    \"upload\",\n    \"upper\",\n    \"upperBound\",\n    \"upperOpen\",\n    \"uri\",\n    \"url\",\n    \"urn\",\n    \"urns\",\n    \"usages\",\n    \"useCurrentView\",\n    \"useMap\",\n    \"useProgram\",\n    \"usedSpace\",\n    \"userAgent\",\n    \"userLanguage\",\n    \"username\",\n    \"v8BreakIterator\",\n    \"vAlign\",\n    \"vLink\",\n    \"valid\",\n    \"validateProgram\",\n    \"validationMessage\",\n    \"validity\",\n    \"value\",\n    \"valueAsDate\",\n    \"valueAsNumber\",\n    \"valueAsString\",\n    \"valueInSpecifiedUnits\",\n    \"valueMissing\",\n    \"valueOf\",\n    \"valueText\",\n    \"valueType\",\n    \"values\",\n    \"vector-effect\",\n    \"vectorEffect\",\n    \"velocityAngular\",\n    \"velocityExpansion\",\n    \"velocityX\",\n    \"velocityY\",\n    \"vendor\",\n    \"vendorSub\",\n    \"verify\",\n    \"version\",\n    \"vertexAttrib1f\",\n    \"vertexAttrib1fv\",\n    \"vertexAttrib2f\",\n    \"vertexAttrib2fv\",\n    \"vertexAttrib3f\",\n    \"vertexAttrib3fv\",\n    \"vertexAttrib4f\",\n    \"vertexAttrib4fv\",\n    \"vertexAttribDivisorANGLE\",\n    \"vertexAttribPointer\",\n    \"vertical\",\n    \"vertical-align\",\n    \"verticalAlign\",\n    \"verticalOverflow\",\n    \"vibrate\",\n    \"videoHeight\",\n    \"videoTracks\",\n    \"videoWidth\",\n    \"view\",\n    \"viewBox\",\n    \"viewBoxString\",\n    \"viewTarget\",\n    \"viewTargetString\",\n    \"viewport\",\n    \"viewportAnchorX\",\n    \"viewportAnchorY\",\n    \"viewportElement\",\n    \"visibility\",\n    \"visibilityState\",\n    \"visible\",\n    \"vlinkColor\",\n    \"voice\",\n    \"volume\",\n    \"vrml\",\n    \"vspace\",\n    \"w\",\n    \"wand\",\n    \"warn\",\n    \"wasClean\",\n    \"watch\",\n    \"watchPosition\",\n    \"webdriver\",\n    \"webkitAddKey\",\n    \"webkitAnimation\",\n    \"webkitAnimationDelay\",\n    \"webkitAnimationDirection\",\n    \"webkitAnimationDuration\",\n    \"webkitAnimationFillMode\",\n    \"webkitAnimationIterationCount\",\n    \"webkitAnimationName\",\n    \"webkitAnimationPlayState\",\n    \"webkitAnimationTimingFunction\",\n    \"webkitAppearance\",\n    \"webkitAudioContext\",\n    \"webkitAudioDecodedByteCount\",\n    \"webkitAudioPannerNode\",\n    \"webkitBackfaceVisibility\",\n    \"webkitBackground\",\n    \"webkitBackgroundAttachment\",\n    \"webkitBackgroundClip\",\n    \"webkitBackgroundColor\",\n    \"webkitBackgroundImage\",\n    \"webkitBackgroundOrigin\",\n    \"webkitBackgroundPosition\",\n    \"webkitBackgroundPositionX\",\n    \"webkitBackgroundPositionY\",\n    \"webkitBackgroundRepeat\",\n    \"webkitBackgroundSize\",\n    \"webkitBackingStorePixelRatio\",\n    \"webkitBorderImage\",\n    \"webkitBorderImageOutset\",\n    \"webkitBorderImageRepeat\",\n    \"webkitBorderImageSlice\",\n    \"webkitBorderImageSource\",\n    \"webkitBorderImageWidth\",\n    \"webkitBoxAlign\",\n    \"webkitBoxDirection\",\n    \"webkitBoxFlex\",\n    \"webkitBoxOrdinalGroup\",\n    \"webkitBoxOrient\",\n    \"webkitBoxPack\",\n    \"webkitBoxSizing\",\n    \"webkitCancelAnimationFrame\",\n    \"webkitCancelFullScreen\",\n    \"webkitCancelKeyRequest\",\n    \"webkitCancelRequestAnimationFrame\",\n    \"webkitClearResourceTimings\",\n    \"webkitClosedCaptionsVisible\",\n    \"webkitConvertPointFromNodeToPage\",\n    \"webkitConvertPointFromPageToNode\",\n    \"webkitCreateShadowRoot\",\n    \"webkitCurrentFullScreenElement\",\n    \"webkitCurrentPlaybackTargetIsWireless\",\n    \"webkitDirectionInvertedFromDevice\",\n    \"webkitDisplayingFullscreen\",\n    \"webkitEnterFullScreen\",\n    \"webkitEnterFullscreen\",\n    \"webkitExitFullScreen\",\n    \"webkitExitFullscreen\",\n    \"webkitExitPointerLock\",\n    \"webkitFullScreenKeyboardInputAllowed\",\n    \"webkitFullscreenElement\",\n    \"webkitFullscreenEnabled\",\n    \"webkitGenerateKeyRequest\",\n    \"webkitGetAsEntry\",\n    \"webkitGetDatabaseNames\",\n    \"webkitGetEntries\",\n    \"webkitGetEntriesByName\",\n    \"webkitGetEntriesByType\",\n    \"webkitGetFlowByName\",\n    \"webkitGetGamepads\",\n    \"webkitGetImageDataHD\",\n    \"webkitGetNamedFlows\",\n    \"webkitGetRegionFlowRanges\",\n    \"webkitGetUserMedia\",\n    \"webkitHasClosedCaptions\",\n    \"webkitHidden\",\n    \"webkitIDBCursor\",\n    \"webkitIDBDatabase\",\n    \"webkitIDBDatabaseError\",\n    \"webkitIDBDatabaseException\",\n    \"webkitIDBFactory\",\n    \"webkitIDBIndex\",\n    \"webkitIDBKeyRange\",\n    \"webkitIDBObjectStore\",\n    \"webkitIDBRequest\",\n    \"webkitIDBTransaction\",\n    \"webkitImageSmoothingEnabled\",\n    \"webkitIndexedDB\",\n    \"webkitInitMessageEvent\",\n    \"webkitIsFullScreen\",\n    \"webkitKeys\",\n    \"webkitLineDashOffset\",\n    \"webkitLockOrientation\",\n    \"webkitMatchesSelector\",\n    \"webkitMediaStream\",\n    \"webkitNotifications\",\n    \"webkitOfflineAudioContext\",\n    \"webkitOrientation\",\n    \"webkitPeerConnection00\",\n    \"webkitPersistentStorage\",\n    \"webkitPointerLockElement\",\n    \"webkitPostMessage\",\n    \"webkitPreservesPitch\",\n    \"webkitPutImageDataHD\",\n    \"webkitRTCPeerConnection\",\n    \"webkitRegionOverset\",\n    \"webkitRequestAnimationFrame\",\n    \"webkitRequestFileSystem\",\n    \"webkitRequestFullScreen\",\n    \"webkitRequestFullscreen\",\n    \"webkitRequestPointerLock\",\n    \"webkitResolveLocalFileSystemURL\",\n    \"webkitSetMediaKeys\",\n    \"webkitSetResourceTimingBufferSize\",\n    \"webkitShadowRoot\",\n    \"webkitShowPlaybackTargetPicker\",\n    \"webkitSlice\",\n    \"webkitSpeechGrammar\",\n    \"webkitSpeechGrammarList\",\n    \"webkitSpeechRecognition\",\n    \"webkitSpeechRecognitionError\",\n    \"webkitSpeechRecognitionEvent\",\n    \"webkitStorageInfo\",\n    \"webkitSupportsFullscreen\",\n    \"webkitTemporaryStorage\",\n    \"webkitTextSizeAdjust\",\n    \"webkitTransform\",\n    \"webkitTransformOrigin\",\n    \"webkitTransition\",\n    \"webkitTransitionDelay\",\n    \"webkitTransitionDuration\",\n    \"webkitTransitionProperty\",\n    \"webkitTransitionTimingFunction\",\n    \"webkitURL\",\n    \"webkitUnlockOrientation\",\n    \"webkitUserSelect\",\n    \"webkitVideoDecodedByteCount\",\n    \"webkitVisibilityState\",\n    \"webkitWirelessVideoPlaybackDisabled\",\n    \"webkitdropzone\",\n    \"webstore\",\n    \"weight\",\n    \"whatToShow\",\n    \"wheelDelta\",\n    \"wheelDeltaX\",\n    \"wheelDeltaY\",\n    \"which\",\n    \"white-space\",\n    \"whiteSpace\",\n    \"wholeText\",\n    \"widows\",\n    \"width\",\n    \"will-change\",\n    \"willChange\",\n    \"willValidate\",\n    \"window\",\n    \"withCredentials\",\n    \"word-break\",\n    \"word-spacing\",\n    \"word-wrap\",\n    \"wordBreak\",\n    \"wordSpacing\",\n    \"wordWrap\",\n    \"wrap\",\n    \"wrapKey\",\n    \"write\",\n    \"writeln\",\n    \"writingMode\",\n    \"x\",\n    \"x1\",\n    \"x2\",\n    \"xChannelSelector\",\n    \"xmlEncoding\",\n    \"xmlStandalone\",\n    \"xmlVersion\",\n    \"xmlbase\",\n    \"xmllang\",\n    \"xmlspace\",\n    \"y\",\n    \"y1\",\n    \"y2\",\n    \"yChannelSelector\",\n    \"yandex\",\n    \"z\",\n    \"z-index\",\n    \"zIndex\",\n    \"zoom\",\n    \"zoomAndPan\",\n    \"zoomRectScreen\"\n]\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction characters(str) {\n    return str.split(\"\");\n}\n\nfunction member(name, array) {\n    return array.indexOf(name) >= 0;\n}\n\nfunction find_if(func, array) {\n    for (var i = 0, n = array.length; i < n; ++i) {\n        if (func(array[i]))\n            return array[i];\n    }\n}\n\nfunction repeat_string(str, i) {\n    if (i <= 0) return \"\";\n    if (i == 1) return str;\n    var d = repeat_string(str, i >> 1);\n    d += d;\n    if (i & 1) d += str;\n    return d;\n}\n\nfunction configure_error_stack(fn) {\n    Object.defineProperty(fn.prototype, \"stack\", {\n        get: function() {\n            var err = new Error(this.message);\n            err.name = this.name;\n            try {\n                throw err;\n            } catch(e) {\n                return e.stack;\n            }\n        }\n    });\n}\n\nfunction DefaultsError(msg, defs) {\n    this.message = msg;\n    this.defs = defs;\n}\nDefaultsError.prototype = Object.create(Error.prototype);\nDefaultsError.prototype.constructor = DefaultsError;\nDefaultsError.prototype.name = \"DefaultsError\";\nconfigure_error_stack(DefaultsError);\n\nDefaultsError.croak = function(msg, defs) {\n    throw new DefaultsError(msg, defs);\n};\n\nfunction defaults(args, defs, croak) {\n    if (args === true)\n        args = {};\n    var ret = args || {};\n    if (croak) for (var i in ret) if (HOP(ret, i) && !HOP(defs, i))\n        DefaultsError.croak(\"`\" + i + \"` is not a supported option\", defs);\n    for (var i in defs) if (HOP(defs, i)) {\n        ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];\n    }\n    return ret;\n}\n\nfunction merge(obj, ext) {\n    var count = 0;\n    for (var i in ext) if (HOP(ext, i)) {\n        obj[i] = ext[i];\n        count++;\n    }\n    return count;\n}\n\nfunction noop() {}\nfunction return_false() { return false; }\nfunction return_true() { return true; }\nfunction return_this() { return this; }\nfunction return_null() { return null; }\n\nvar MAP = (function() {\n    function MAP(a, f, backwards) {\n        var ret = [], top = [], i;\n        function doit() {\n            var val = f(a[i], i);\n            var is_last = val instanceof Last;\n            if (is_last) val = val.v;\n            if (val instanceof AtTop) {\n                val = val.v;\n                if (val instanceof Splice) {\n                    top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);\n                } else {\n                    top.push(val);\n                }\n            } else if (val !== skip) {\n                if (val instanceof Splice) {\n                    ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);\n                } else {\n                    ret.push(val);\n                }\n            }\n            return is_last;\n        }\n        if (a instanceof Array) {\n            if (backwards) {\n                for (i = a.length; --i >= 0;) if (doit()) break;\n                ret.reverse();\n                top.reverse();\n            } else {\n                for (i = 0; i < a.length; ++i) if (doit()) break;\n            }\n        } else {\n            for (i in a) if (HOP(a, i)) if (doit()) break;\n        }\n        return top.concat(ret);\n    }\n    MAP.at_top = function(val) { return new AtTop(val); };\n    MAP.splice = function(val) { return new Splice(val); };\n    MAP.last = function(val) { return new Last(val); };\n    var skip = MAP.skip = {};\n    function AtTop(val) { this.v = val; }\n    function Splice(val) { this.v = val; }\n    function Last(val) { this.v = val; }\n    return MAP;\n})();\n\nfunction push_uniq(array, el) {\n    if (array.indexOf(el) < 0)\n        array.push(el);\n}\n\nfunction string_template(text, props) {\n    return text.replace(/\\{(.+?)\\}/g, function(str, p) {\n        return props && props[p];\n    });\n}\n\nfunction remove(array, el) {\n    for (var i = array.length; --i >= 0;) {\n        if (array[i] === el) array.splice(i, 1);\n    }\n}\n\nfunction mergeSort(array, cmp) {\n    if (array.length < 2) return array.slice();\n    function merge(a, b) {\n        var r = [], ai = 0, bi = 0, i = 0;\n        while (ai < a.length && bi < b.length) {\n            cmp(a[ai], b[bi]) <= 0\n                ? r[i++] = a[ai++]\n                : r[i++] = b[bi++];\n        }\n        if (ai < a.length) r.push.apply(r, a.slice(ai));\n        if (bi < b.length) r.push.apply(r, b.slice(bi));\n        return r;\n    }\n    function _ms(a) {\n        if (a.length <= 1)\n            return a;\n        var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);\n        left = _ms(left);\n        right = _ms(right);\n        return merge(left, right);\n    }\n    return _ms(array);\n}\n\n// this function is taken from Acorn [1], written by Marijn Haverbeke\n// [1] https://github.com/marijnh/acorn\nfunction makePredicate(words) {\n    if (!(words instanceof Array)) words = words.split(\" \");\n    var f = \"\", cats = [];\n    out: for (var i = 0; i < words.length; ++i) {\n        for (var j = 0; j < cats.length; ++j)\n            if (cats[j][0].length == words[i].length) {\n                cats[j].push(words[i]);\n                continue out;\n            }\n        cats.push([words[i]]);\n    }\n    function quote(word) {\n        return JSON.stringify(word).replace(/[\\u2028\\u2029]/g, function(s) {\n            switch (s) {\n                case \"\\u2028\": return \"\\\\u2028\";\n                case \"\\u2029\": return \"\\\\u2029\";\n            }\n            return s;\n        });\n    }\n    function compareTo(arr) {\n        if (arr.length == 1) return f += \"return str === \" + quote(arr[0]) + \";\";\n        f += \"switch(str){\";\n        for (var i = 0; i < arr.length; ++i) f += \"case \" + quote(arr[i]) + \":\";\n        f += \"return true}return false;\";\n    }\n    // When there are more than three length categories, an outer\n    // switch first dispatches on the lengths, to save on comparisons.\n    if (cats.length > 3) {\n        cats.sort(function(a, b) {return b.length - a.length;});\n        f += \"switch(str.length){\";\n        for (var i = 0; i < cats.length; ++i) {\n            var cat = cats[i];\n            f += \"case \" + cat[0].length + \":\";\n            compareTo(cat);\n        }\n        f += \"}\";\n        // Otherwise, simply generate a flat `switch` statement.\n    } else {\n        compareTo(words);\n    }\n    return new Function(\"str\", f);\n}\n\nfunction all(array, predicate) {\n    for (var i = array.length; --i >= 0;)\n        if (!predicate(array[i]))\n            return false;\n    return true;\n}\n\nfunction Dictionary() {\n    this._values = Object.create(null);\n    this._size = 0;\n}\nDictionary.prototype = {\n    set: function(key, val) {\n        if (!this.has(key)) ++this._size;\n        this._values[\"$\" + key] = val;\n        return this;\n    },\n    add: function(key, val) {\n        if (this.has(key)) {\n            this.get(key).push(val);\n        } else {\n            this.set(key, [ val ]);\n        }\n        return this;\n    },\n    get: function(key) { return this._values[\"$\" + key]; },\n    del: function(key) {\n        if (this.has(key)) {\n            --this._size;\n            delete this._values[\"$\" + key];\n        }\n        return this;\n    },\n    has: function(key) { return (\"$\" + key) in this._values; },\n    each: function(f) {\n        for (var i in this._values)\n            f(this._values[i], i.substr(1));\n    },\n    size: function() {\n        return this._size;\n    },\n    map: function(f) {\n        var ret = [];\n        for (var i in this._values)\n            ret.push(f(this._values[i], i.substr(1)));\n        return ret;\n    },\n    clone: function() {\n        var ret = new Dictionary();\n        for (var i in this._values)\n            ret._values[i] = this._values[i];\n        ret._size = this._size;\n        return ret;\n    },\n    toObject: function() { return this._values; }\n};\nDictionary.fromObject = function(obj) {\n    var dict = new Dictionary();\n    dict._size = merge(dict._values, obj);\n    return dict;\n};\nexports.Dictionary = Dictionary;\n\nfunction HOP(obj, prop) {\n    return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// return true if the node at the top of the stack (that means the\n// innermost node in the current output) is lexically the first in\n// a statement.\nfunction first_in_statement(stack) {\n    var node = stack.parent(-1);\n    for (var i = 0, p; p = stack.parent(i); i++) {\n        if (p instanceof AST_Statement && p.body === node)\n            return true;\n        if ((p instanceof AST_Sequence      && p.expressions[0] === node) ||\n            (p.TYPE == \"Call\"               && p.expression === node ) ||\n            (p instanceof AST_Dot           && p.expression === node ) ||\n            (p instanceof AST_Sub           && p.expression === node ) ||\n            (p instanceof AST_Conditional   && p.condition === node  ) ||\n            (p instanceof AST_Binary        && p.left === node       ) ||\n            (p instanceof AST_UnaryPostfix  && p.expression === node )\n        ) {\n            node = p;\n        } else {\n            return false;\n        }\n    }\n}\n\nfunction keep_name(keep_setting, name) {\n    return keep_setting === true\n        || (keep_setting instanceof RegExp && keep_setting.test(name));\n}\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction DEFNODE(type, props, methods, base) {\n    if (arguments.length < 4) base = AST_Node;\n    if (!props) props = [];\n    else props = props.split(/\\s+/);\n    var self_props = props;\n    if (base && base.PROPS)\n        props = props.concat(base.PROPS);\n    var code = \"return function AST_\" + type + \"(props){ if (props) { \";\n    for (var i = props.length; --i >= 0;) {\n        code += \"this.\" + props[i] + \" = props.\" + props[i] + \";\";\n    }\n    var proto = base && new base;\n    if (proto && proto.initialize || (methods && methods.initialize))\n        code += \"this.initialize();\";\n    code += \"}}\";\n    var ctor = new Function(code)();\n    if (proto) {\n        ctor.prototype = proto;\n        ctor.BASE = base;\n    }\n    if (base) base.SUBCLASSES.push(ctor);\n    ctor.prototype.CTOR = ctor;\n    ctor.PROPS = props || null;\n    ctor.SELF_PROPS = self_props;\n    ctor.SUBCLASSES = [];\n    if (type) {\n        ctor.prototype.TYPE = ctor.TYPE = type;\n    }\n    if (methods) for (i in methods) if (HOP(methods, i)) {\n        if (/^\\$/.test(i)) {\n            ctor[i.substr(1)] = methods[i];\n        } else {\n            ctor.prototype[i] = methods[i];\n        }\n    }\n    ctor.DEFMETHOD = function(name, method) {\n        this.prototype[name] = method;\n    };\n    if (typeof exports !== \"undefined\") {\n        exports[\"AST_\" + type] = ctor;\n    }\n    return ctor;\n}\n\nvar AST_Token = DEFNODE(\"Token\", \"type value line col pos endline endcol endpos nlb comments_before comments_after file raw\", {\n}, null);\n\nvar AST_Node = DEFNODE(\"Node\", \"start end\", {\n    _clone: function(deep) {\n        if (deep) {\n            var self = this.clone();\n            return self.transform(new TreeTransformer(function(node) {\n                if (node !== self) {\n                    return node.clone(true);\n                }\n            }));\n        }\n        return new this.CTOR(this);\n    },\n    clone: function(deep) {\n        return this._clone(deep);\n    },\n    $documentation: \"Base class of all AST nodes\",\n    $propdoc: {\n        start: \"[AST_Token] The first token of this node\",\n        end: \"[AST_Token] The last token of this node\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this);\n    },\n    walk: function(visitor) {\n        return this._walk(visitor); // not sure the indirection will be any help\n    }\n}, null);\n\nAST_Node.warn_function = null;\nAST_Node.warn = function(txt, props) {\n    if (AST_Node.warn_function)\n        AST_Node.warn_function(string_template(txt, props));\n};\n\n/* -----[ statements ]----- */\n\nvar AST_Statement = DEFNODE(\"Statement\", null, {\n    $documentation: \"Base class of all statements\",\n});\n\nvar AST_Debugger = DEFNODE(\"Debugger\", null, {\n    $documentation: \"Represents a debugger statement\",\n}, AST_Statement);\n\nvar AST_Directive = DEFNODE(\"Directive\", \"value quote\", {\n    $documentation: \"Represents a directive, like \\\"use strict\\\";\",\n    $propdoc: {\n        value: \"[string] The value of this directive as a plain string (it's not an AST_String!)\",\n        quote: \"[string] the original quote character\"\n    },\n}, AST_Statement);\n\nvar AST_SimpleStatement = DEFNODE(\"SimpleStatement\", \"body\", {\n    $documentation: \"A statement consisting of an expression, i.e. a = 1 + 2\",\n    $propdoc: {\n        body: \"[AST_Node] an expression node (should not be instanceof AST_Statement)\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.body._walk(visitor);\n        });\n    }\n}, AST_Statement);\n\nfunction walk_body(node, visitor) {\n    var body = node.body;\n    if (body instanceof AST_Node) {\n        body._walk(visitor);\n    } else for (var i = 0, len = body.length; i < len; i++) {\n        body[i]._walk(visitor);\n    }\n}\n\nfunction clone_block_scope(deep) {\n    var clone = this._clone(deep);\n    if (this.block_scope) {\n        // TODO this is sometimes undefined during compression.\n        // But it should always have a value!\n        clone.block_scope = this.block_scope.clone();\n    }\n    return clone;\n}\n\nvar AST_Block = DEFNODE(\"Block\", \"body block_scope\", {\n    $documentation: \"A body of statements (usually braced)\",\n    $propdoc: {\n        body: \"[AST_Statement*] an array of statements\",\n        block_scope: \"[AST_Scope] the block scope\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            walk_body(this, visitor);\n        });\n    },\n    clone: clone_block_scope\n}, AST_Statement);\n\nvar AST_BlockStatement = DEFNODE(\"BlockStatement\", null, {\n    $documentation: \"A block statement\",\n}, AST_Block);\n\nvar AST_EmptyStatement = DEFNODE(\"EmptyStatement\", null, {\n    $documentation: \"The empty statement (empty block or simply a semicolon)\"\n}, AST_Statement);\n\nvar AST_StatementWithBody = DEFNODE(\"StatementWithBody\", \"body\", {\n    $documentation: \"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`\",\n    $propdoc: {\n        body: \"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement\"\n    }\n}, AST_Statement);\n\nvar AST_LabeledStatement = DEFNODE(\"LabeledStatement\", \"label\", {\n    $documentation: \"Statement with a label\",\n    $propdoc: {\n        label: \"[AST_Label] a label definition\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.label._walk(visitor);\n            this.body._walk(visitor);\n        });\n    },\n    clone: function(deep) {\n        var node = this._clone(deep);\n        if (deep) {\n            var label = node.label;\n            var def = this.label;\n            node.walk(new TreeWalker(function(node) {\n                if (node instanceof AST_LoopControl\n                    && node.label && node.label.thedef === def) {\n                    node.label.thedef = label;\n                    label.references.push(node);\n                }\n            }));\n        }\n        return node;\n    }\n}, AST_StatementWithBody);\n\nvar AST_IterationStatement = DEFNODE(\"IterationStatement\", \"block_scope\", {\n    $documentation: \"Internal class.  All loops inherit from it.\",\n    $propdoc: {\n        block_scope: \"[AST_Scope] the block scope for this iteration statement.\"\n    },\n    clone: clone_block_scope\n}, AST_StatementWithBody);\n\nvar AST_DWLoop = DEFNODE(\"DWLoop\", \"condition\", {\n    $documentation: \"Base class for do/while statements\",\n    $propdoc: {\n        condition: \"[AST_Node] the loop condition.  Should not be instanceof AST_Statement\"\n    }\n}, AST_IterationStatement);\n\nvar AST_Do = DEFNODE(\"Do\", null, {\n    $documentation: \"A `do` statement\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.body._walk(visitor);\n            this.condition._walk(visitor);\n        });\n    }\n}, AST_DWLoop);\n\nvar AST_While = DEFNODE(\"While\", null, {\n    $documentation: \"A `while` statement\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.condition._walk(visitor);\n            this.body._walk(visitor);\n        });\n    }\n}, AST_DWLoop);\n\nvar AST_For = DEFNODE(\"For\", \"init condition step\", {\n    $documentation: \"A `for` statement\",\n    $propdoc: {\n        init: \"[AST_Node?] the `for` initialization code, or null if empty\",\n        condition: \"[AST_Node?] the `for` termination clause, or null if empty\",\n        step: \"[AST_Node?] the `for` update clause, or null if empty\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.init) this.init._walk(visitor);\n            if (this.condition) this.condition._walk(visitor);\n            if (this.step) this.step._walk(visitor);\n            this.body._walk(visitor);\n        });\n    }\n}, AST_IterationStatement);\n\nvar AST_ForIn = DEFNODE(\"ForIn\", \"init object\", {\n    $documentation: \"A `for ... in` statement\",\n    $propdoc: {\n        init: \"[AST_Node] the `for/in` initialization code\",\n        object: \"[AST_Node] the object that we're looping through\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.init._walk(visitor);\n            this.object._walk(visitor);\n            this.body._walk(visitor);\n        });\n    }\n}, AST_IterationStatement);\n\nvar AST_ForOf = DEFNODE(\"ForOf\", \"await\", {\n    $documentation: \"A `for ... of` statement\",\n}, AST_ForIn);\n\nvar AST_With = DEFNODE(\"With\", \"expression\", {\n    $documentation: \"A `with` statement\",\n    $propdoc: {\n        expression: \"[AST_Node] the `with` expression\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            this.body._walk(visitor);\n        });\n    }\n}, AST_StatementWithBody);\n\n/* -----[ scope and functions ]----- */\n\nvar AST_Scope = DEFNODE(\"Scope\", \"variables functions uses_with uses_eval parent_scope enclosed cname\", {\n    $documentation: \"Base class for all statements introducing a lexical scope\",\n    $propdoc: {\n        variables: \"[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope\",\n        functions: \"[Object/S] like `variables`, but only lists function declarations\",\n        uses_with: \"[boolean/S] tells whether this scope uses the `with` statement\",\n        uses_eval: \"[boolean/S] tells whether this scope contains a direct call to the global `eval`\",\n        parent_scope: \"[AST_Scope?/S] link to the parent scope\",\n        enclosed: \"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes\",\n        cname: \"[integer/S] current index for mangling variables (used internally by the mangler)\",\n    },\n    get_defun_scope: function() {\n        var self = this;\n        while (self.is_block_scope()) {\n            self = self.parent_scope;\n        }\n        return self;\n    },\n    clone: function(deep) {\n        var node = this._clone(deep);\n        if (this.variables) node.variables = this.variables.clone();\n        if (this.functions) node.functions = this.functions.clone();\n        if (this.enclosed) node.enclosed = this.enclosed.slice();\n        return node;\n    },\n    pinned: function() {\n        return this.uses_eval || this.uses_with;\n    }\n}, AST_Block);\n\nvar AST_Toplevel = DEFNODE(\"Toplevel\", \"globals\", {\n    $documentation: \"The toplevel scope\",\n    $propdoc: {\n        globals: \"[Object/S] a map of name -> SymbolDef for all undeclared names\",\n    },\n    wrap_commonjs: function(name) {\n        var body = this.body;\n        var wrapped_tl = \"(function(exports){'$ORIG';})(typeof \" + name + \"=='undefined'?(\" + name + \"={}):\" + name + \");\";\n        wrapped_tl = parse(wrapped_tl);\n        wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) {\n            if (node instanceof AST_Directive && node.value == \"$ORIG\") {\n                return MAP.splice(body);\n            }\n        }));\n        return wrapped_tl;\n    },\n    wrap_enclose: function(args_values) {\n        if (typeof args_values != \"string\") args_values = \"\";\n        var index = args_values.indexOf(\":\");\n        if (index < 0) index = args_values.length;\n        var body = this.body;\n        return parse([\n            \"(function(\",\n            args_values.slice(0, index),\n            '){\"$ORIG\"})(',\n            args_values.slice(index + 1),\n            \")\"\n        ].join(\"\")).transform(new TreeTransformer(function(node) {\n            if (node instanceof AST_Directive && node.value == \"$ORIG\") {\n                return MAP.splice(body);\n            }\n        }));\n    }\n}, AST_Scope);\n\nvar AST_Expansion = DEFNODE(\"Expansion\", \"expression\", {\n    $documentation: \"An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list\",\n    $propdoc: {\n        expression: \"[AST_Node] the thing to be expanded\"\n    },\n    _walk: function(visitor) {\n        var self = this;\n        return visitor._visit(this, function() {\n            self.expression.walk(visitor);\n        });\n    }\n});\n\nvar AST_Lambda = DEFNODE(\"Lambda\", \"name argnames uses_arguments is_generator async\", {\n    $documentation: \"Base class for functions\",\n    $propdoc: {\n        name: \"[AST_SymbolDeclaration?] the name of this function\",\n        argnames: \"[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments\",\n        uses_arguments: \"[boolean/S] tells whether this function accesses the arguments array\",\n        is_generator: \"[boolean] is this a generator method\",\n        async: \"[boolean] is this method async\",\n    },\n    args_as_names: function () {\n        var out = [];\n        for (var i = 0; i < this.argnames.length; i++) {\n            if (this.argnames[i] instanceof AST_Destructuring) {\n                out = out.concat(this.argnames[i].all_symbols());\n            } else {\n                out.push(this.argnames[i]);\n            }\n        }\n        return out;\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.name) this.name._walk(visitor);\n            var argnames = this.argnames;\n            for (var i = 0, len = argnames.length; i < len; i++) {\n                argnames[i]._walk(visitor);\n            }\n            walk_body(this, visitor);\n        });\n    }\n}, AST_Scope);\n\nvar AST_Accessor = DEFNODE(\"Accessor\", null, {\n    $documentation: \"A setter/getter function.  The `name` property is always null.\"\n}, AST_Lambda);\n\nvar AST_Function = DEFNODE(\"Function\", \"inlined\", {\n    $documentation: \"A function expression\"\n}, AST_Lambda);\n\nvar AST_Arrow = DEFNODE(\"Arrow\", \"inlined\", {\n    $documentation: \"An ES6 Arrow function ((a) => b)\"\n}, AST_Lambda);\n\nvar AST_Defun = DEFNODE(\"Defun\", \"inlined\", {\n    $documentation: \"A function definition\"\n}, AST_Lambda);\n\n/* -----[ DESTRUCTURING ]----- */\nvar AST_Destructuring = DEFNODE(\"Destructuring\", \"names is_array\", {\n    $documentation: \"A destructuring of several names. Used in destructuring assignment and with destructuring function argument names\",\n    $propdoc: {\n        \"names\": \"[AST_Node*] Array of properties or elements\",\n        \"is_array\": \"[Boolean] Whether the destructuring represents an object or array\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.names.forEach(function(name) {\n                name._walk(visitor);\n            });\n        });\n    },\n    all_symbols: function() {\n        var out = [];\n        this.walk(new TreeWalker(function (node) {\n            if (node instanceof AST_Symbol) {\n                out.push(node);\n            }\n            if (node instanceof AST_Expansion) {\n                out.push(node.expression);\n            }\n        }));\n        return out;\n    }\n});\n\nvar AST_PrefixedTemplateString = DEFNODE(\"PrefixedTemplateString\", \"template_string prefix\", {\n    $documentation: \"A templatestring with a prefix, such as String.raw`foobarbaz`\",\n    $propdoc: {\n        template_string: \"[AST_TemplateString] The template string\",\n        prefix: \"[AST_SymbolRef|AST_PropAccess] The prefix, which can be a symbol such as `foo` or a dotted expression such as `String.raw`.\"\n    },\n    _walk: function(visitor) {\n        this.prefix._walk(visitor);\n        this.template_string._walk(visitor);\n    }\n});\n\nvar AST_TemplateString = DEFNODE(\"TemplateString\", \"segments\", {\n    $documentation: \"A template string literal\",\n    $propdoc: {\n        segments: \"[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment.\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.segments.forEach(function(seg) {\n                seg._walk(visitor);\n            });\n        });\n    }\n});\n\nvar AST_TemplateSegment = DEFNODE(\"TemplateSegment\", \"value raw\", {\n    $documentation: \"A segment of a template string literal\",\n    $propdoc: {\n        value: \"Content of the segment\",\n        raw: \"Raw content of the segment\"\n    }\n});\n\n/* -----[ JUMPS ]----- */\n\nvar AST_Jump = DEFNODE(\"Jump\", null, {\n    $documentation: \"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)\"\n}, AST_Statement);\n\nvar AST_Exit = DEFNODE(\"Exit\", \"value\", {\n    $documentation: \"Base class for “exits” (`return` and `throw`)\",\n    $propdoc: {\n        value: \"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, this.value && function() {\n            this.value._walk(visitor);\n        });\n    }\n}, AST_Jump);\n\nvar AST_Return = DEFNODE(\"Return\", null, {\n    $documentation: \"A `return` statement\"\n}, AST_Exit);\n\nvar AST_Throw = DEFNODE(\"Throw\", null, {\n    $documentation: \"A `throw` statement\"\n}, AST_Exit);\n\nvar AST_LoopControl = DEFNODE(\"LoopControl\", \"label\", {\n    $documentation: \"Base class for loop control statements (`break` and `continue`)\",\n    $propdoc: {\n        label: \"[AST_LabelRef?] the label, or null if none\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, this.label && function() {\n            this.label._walk(visitor);\n        });\n    }\n}, AST_Jump);\n\nvar AST_Break = DEFNODE(\"Break\", null, {\n    $documentation: \"A `break` statement\"\n}, AST_LoopControl);\n\nvar AST_Continue = DEFNODE(\"Continue\", null, {\n    $documentation: \"A `continue` statement\"\n}, AST_LoopControl);\n\n/* -----[ IF ]----- */\n\nvar AST_If = DEFNODE(\"If\", \"condition alternative\", {\n    $documentation: \"A `if` statement\",\n    $propdoc: {\n        condition: \"[AST_Node] the `if` condition\",\n        alternative: \"[AST_Statement?] the `else` part, or null if not present\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.condition._walk(visitor);\n            this.body._walk(visitor);\n            if (this.alternative) this.alternative._walk(visitor);\n        });\n    }\n}, AST_StatementWithBody);\n\n/* -----[ SWITCH ]----- */\n\nvar AST_Switch = DEFNODE(\"Switch\", \"expression\", {\n    $documentation: \"A `switch` statement\",\n    $propdoc: {\n        expression: \"[AST_Node] the `switch` “discriminant”\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            walk_body(this, visitor);\n        });\n    }\n}, AST_Block);\n\nvar AST_SwitchBranch = DEFNODE(\"SwitchBranch\", null, {\n    $documentation: \"Base class for `switch` branches\",\n}, AST_Block);\n\nvar AST_Default = DEFNODE(\"Default\", null, {\n    $documentation: \"A `default` switch branch\",\n}, AST_SwitchBranch);\n\nvar AST_Case = DEFNODE(\"Case\", \"expression\", {\n    $documentation: \"A `case` switch branch\",\n    $propdoc: {\n        expression: \"[AST_Node] the `case` expression\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            walk_body(this, visitor);\n        });\n    }\n}, AST_SwitchBranch);\n\n/* -----[ EXCEPTIONS ]----- */\n\nvar AST_Try = DEFNODE(\"Try\", \"bcatch bfinally\", {\n    $documentation: \"A `try` statement\",\n    $propdoc: {\n        bcatch: \"[AST_Catch?] the catch block, or null if not present\",\n        bfinally: \"[AST_Finally?] the finally block, or null if not present\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            walk_body(this, visitor);\n            if (this.bcatch) this.bcatch._walk(visitor);\n            if (this.bfinally) this.bfinally._walk(visitor);\n        });\n    }\n}, AST_Block);\n\nvar AST_Catch = DEFNODE(\"Catch\", \"argname\", {\n    $documentation: \"A `catch` node; only makes sense as part of a `try` statement\",\n    $propdoc: {\n        argname: \"[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.argname) this.argname._walk(visitor);\n            walk_body(this, visitor);\n        });\n    }\n}, AST_Block);\n\nvar AST_Finally = DEFNODE(\"Finally\", null, {\n    $documentation: \"A `finally` node; only makes sense as part of a `try` statement\"\n}, AST_Block);\n\n/* -----[ VAR/CONST ]----- */\n\nvar AST_Definitions = DEFNODE(\"Definitions\", \"definitions\", {\n    $documentation: \"Base class for `var` or `const` nodes (variable declarations/initializations)\",\n    $propdoc: {\n        definitions: \"[AST_VarDef*] array of variable definitions\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var definitions = this.definitions;\n            for (var i = 0, len = definitions.length; i < len; i++) {\n                definitions[i]._walk(visitor);\n            }\n        });\n    }\n}, AST_Statement);\n\nvar AST_Var = DEFNODE(\"Var\", null, {\n    $documentation: \"A `var` statement\"\n}, AST_Definitions);\n\nvar AST_Let = DEFNODE(\"Let\", null, {\n    $documentation: \"A `let` statement\"\n}, AST_Definitions);\n\nvar AST_Const = DEFNODE(\"Const\", null, {\n    $documentation: \"A `const` statement\"\n}, AST_Definitions);\n\nvar AST_NameMapping = DEFNODE(\"NameMapping\", \"foreign_name name\", {\n    $documentation: \"The part of the export/import statement that declare names from a module.\",\n    $propdoc: {\n        foreign_name: \"[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)\",\n        name: \"[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module.\"\n    },\n    _walk: function (visitor) {\n        return visitor._visit(this, function() {\n            this.foreign_name._walk(visitor);\n            this.name._walk(visitor);\n        });\n    }\n});\n\nvar AST_Import = DEFNODE(\"Import\", \"imported_name imported_names module_name\", {\n    $documentation: \"An `import` statement\",\n    $propdoc: {\n        imported_name: \"[AST_SymbolImport] The name of the variable holding the module's default export.\",\n        imported_names: \"[AST_NameMapping*] The names of non-default imported variables\",\n        module_name: \"[AST_String] String literal describing where this module came from\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.imported_name) {\n                this.imported_name._walk(visitor);\n            }\n            if (this.imported_names) {\n                this.imported_names.forEach(function(name_import) {\n                    name_import._walk(visitor);\n                });\n            }\n            this.module_name._walk(visitor);\n        });\n    }\n});\n\nvar AST_Export = DEFNODE(\"Export\", \"exported_definition exported_value is_default exported_names module_name\", {\n    $documentation: \"An `export` statement\",\n    $propdoc: {\n        exported_definition: \"[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition\",\n        exported_value: \"[AST_Node?] An exported value\",\n        exported_names: \"[AST_NameMapping*?] List of exported names\",\n        module_name: \"[AST_String?] Name of the file to load exports from\",\n        is_default: \"[Boolean] Whether this is the default exported value of this module\"\n    },\n    _walk: function (visitor) {\n        visitor._visit(this, function () {\n            if (this.exported_definition) {\n                this.exported_definition._walk(visitor);\n            }\n            if (this.exported_value) {\n                this.exported_value._walk(visitor);\n            }\n            if (this.exported_names) {\n                this.exported_names.forEach(function(name_export) {\n                    name_export._walk(visitor);\n                });\n            }\n            if (this.module_name) {\n                this.module_name._walk(visitor);\n            }\n        });\n    }\n}, AST_Statement);\n\nvar AST_VarDef = DEFNODE(\"VarDef\", \"name value\", {\n    $documentation: \"A variable declaration; only appears in a AST_Definitions node\",\n    $propdoc: {\n        name: \"[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable\",\n        value: \"[AST_Node?] initializer, or null of there's no initializer\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.name._walk(visitor);\n            if (this.value) this.value._walk(visitor);\n        });\n    }\n});\n\n/* -----[ OTHER ]----- */\n\nvar AST_Call = DEFNODE(\"Call\", \"expression args\", {\n    $documentation: \"A function call expression\",\n    $propdoc: {\n        expression: \"[AST_Node] expression to invoke as function\",\n        args: \"[AST_Node*] array of arguments\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var args = this.args;\n            for (var i = 0, len = args.length; i < len; i++) {\n                args[i]._walk(visitor);\n            }\n            this.expression._walk(visitor);\n        });\n    }\n});\n\nvar AST_New = DEFNODE(\"New\", null, {\n    $documentation: \"An object instantiation.  Derives from a function call since it has exactly the same properties\"\n}, AST_Call);\n\nvar AST_Sequence = DEFNODE(\"Sequence\", \"expressions\", {\n    $documentation: \"A sequence expression (comma-separated expressions)\",\n    $propdoc: {\n        expressions: \"[AST_Node*] array of expressions (at least two)\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expressions.forEach(function(node) {\n                node._walk(visitor);\n            });\n        });\n    }\n});\n\nvar AST_PropAccess = DEFNODE(\"PropAccess\", \"expression property\", {\n    $documentation: \"Base class for property access expressions, i.e. `a.foo` or `a[\\\"foo\\\"]`\",\n    $propdoc: {\n        expression: \"[AST_Node] the “container” expression\",\n        property: \"[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node\"\n    }\n});\n\nvar AST_Dot = DEFNODE(\"Dot\", null, {\n    $documentation: \"A dotted property access expression\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n        });\n    }\n}, AST_PropAccess);\n\nvar AST_Sub = DEFNODE(\"Sub\", null, {\n    $documentation: \"Index-style property access, i.e. `a[\\\"foo\\\"]`\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            this.property._walk(visitor);\n        });\n    }\n}, AST_PropAccess);\n\nvar AST_Unary = DEFNODE(\"Unary\", \"operator expression\", {\n    $documentation: \"Base class for unary expressions\",\n    $propdoc: {\n        operator: \"[string] the operator\",\n        expression: \"[AST_Node] expression that this unary operator applies to\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n        });\n    }\n});\n\nvar AST_UnaryPrefix = DEFNODE(\"UnaryPrefix\", null, {\n    $documentation: \"Unary prefix expression, i.e. `typeof i` or `++i`\"\n}, AST_Unary);\n\nvar AST_UnaryPostfix = DEFNODE(\"UnaryPostfix\", null, {\n    $documentation: \"Unary postfix expression, i.e. `i++`\"\n}, AST_Unary);\n\nvar AST_Binary = DEFNODE(\"Binary\", \"operator left right\", {\n    $documentation: \"Binary expression, i.e. `a + b`\",\n    $propdoc: {\n        left: \"[AST_Node] left-hand side expression\",\n        operator: \"[string] the operator\",\n        right: \"[AST_Node] right-hand side expression\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.left._walk(visitor);\n            this.right._walk(visitor);\n        });\n    }\n});\n\nvar AST_Conditional = DEFNODE(\"Conditional\", \"condition consequent alternative\", {\n    $documentation: \"Conditional expression using the ternary operator, i.e. `a ? b : c`\",\n    $propdoc: {\n        condition: \"[AST_Node]\",\n        consequent: \"[AST_Node]\",\n        alternative: \"[AST_Node]\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.condition._walk(visitor);\n            this.consequent._walk(visitor);\n            this.alternative._walk(visitor);\n        });\n    }\n});\n\nvar AST_Assign = DEFNODE(\"Assign\", null, {\n    $documentation: \"An assignment expression — `a = b + 5`\",\n}, AST_Binary);\n\nvar AST_DefaultAssign = DEFNODE(\"DefaultAssign\", null, {\n    $documentation: \"A default assignment expression like in `(a = 3) => a`\"\n}, AST_Binary);\n\n/* -----[ LITERALS ]----- */\n\nvar AST_Array = DEFNODE(\"Array\", \"elements\", {\n    $documentation: \"An array literal\",\n    $propdoc: {\n        elements: \"[AST_Node*] array of elements\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var elements = this.elements;\n            for (var i = 0, len = elements.length; i < len; i++) {\n                elements[i]._walk(visitor);\n            }\n        });\n    }\n});\n\nvar AST_Object = DEFNODE(\"Object\", \"properties\", {\n    $documentation: \"An object literal\",\n    $propdoc: {\n        properties: \"[AST_ObjectProperty*] array of properties\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var properties = this.properties;\n            for (var i = 0, len = properties.length; i < len; i++) {\n                properties[i]._walk(visitor);\n            }\n        });\n    }\n});\n\nvar AST_ObjectProperty = DEFNODE(\"ObjectProperty\", \"key value\", {\n    $documentation: \"Base class for literal object properties\",\n    $propdoc: {\n        key: \"[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.\",\n        value: \"[AST_Node] property value.  For getters and setters this is an AST_Accessor.\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.key instanceof AST_Node)\n                this.key._walk(visitor);\n            this.value._walk(visitor);\n        });\n    }\n});\n\nvar AST_ObjectKeyVal = DEFNODE(\"ObjectKeyVal\", \"quote\", {\n    $documentation: \"A key: value object property\",\n    $propdoc: {\n        quote: \"[string] the original quote character\"\n    }\n}, AST_ObjectProperty);\n\nvar AST_ObjectSetter = DEFNODE(\"ObjectSetter\", \"quote static\", {\n    $propdoc: {\n        quote: \"[string|undefined] the original quote character, if any\",\n        static: \"[boolean] whether this is a static setter (classes only)\"\n    },\n    $documentation: \"An object setter property\",\n}, AST_ObjectProperty);\n\nvar AST_ObjectGetter = DEFNODE(\"ObjectGetter\", \"quote static\", {\n    $propdoc: {\n        quote: \"[string|undefined] the original quote character, if any\",\n        static: \"[boolean] whether this is a static getter (classes only)\"\n    },\n    $documentation: \"An object getter property\",\n}, AST_ObjectProperty);\n\nvar AST_ConciseMethod = DEFNODE(\"ConciseMethod\", \"quote static is_generator async\", {\n    $propdoc: {\n        quote: \"[string|undefined] the original quote character, if any\",\n        static: \"[boolean] is this method static (classes only)\",\n        is_generator: \"[boolean] is this a generator method\",\n        async: \"[boolean] is this method async\",\n    },\n    $documentation: \"An ES6 concise method inside an object or class\"\n}, AST_ObjectProperty);\n\nvar AST_Class = DEFNODE(\"Class\", \"name extends properties inlined\", {\n    $propdoc: {\n        name: \"[AST_SymbolClass|AST_SymbolDefClass?] optional class name.\",\n        extends: \"[AST_Node]? optional parent class\",\n        properties: \"[AST_ObjectProperty*] array of properties\"\n    },\n    $documentation: \"An ES6 class\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.name) {\n                this.name._walk(visitor);\n            }\n            if (this.extends) {\n                this.extends._walk(visitor);\n            }\n            this.properties.forEach(function(prop) {\n                prop._walk(visitor);\n            });\n        });\n    },\n}, AST_Scope);\n\nvar AST_DefClass = DEFNODE(\"DefClass\", null, {\n    $documentation: \"A class definition\",\n}, AST_Class);\n\nvar AST_ClassExpression = DEFNODE(\"ClassExpression\", null, {\n    $documentation: \"A class expression.\"\n}, AST_Class);\n\nvar AST_Symbol = DEFNODE(\"Symbol\", \"scope name thedef\", {\n    $propdoc: {\n        name: \"[string] name of this symbol\",\n        scope: \"[AST_Scope/S] the current scope (not necessarily the definition scope)\",\n        thedef: \"[SymbolDef/S] the definition of this symbol\"\n    },\n    $documentation: \"Base class for all symbols\"\n});\n\nvar AST_NewTarget = DEFNODE(\"NewTarget\", null, {\n    $documentation: \"A reference to new.target\"\n});\n\nvar AST_SymbolDeclaration = DEFNODE(\"SymbolDeclaration\", \"init\", {\n    $documentation: \"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)\",\n}, AST_Symbol);\n\nvar AST_SymbolVar = DEFNODE(\"SymbolVar\", null, {\n    $documentation: \"Symbol defining a variable\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolBlockDeclaration = DEFNODE(\"SymbolBlockDeclaration\", null, {\n    $documentation: \"Base class for block-scoped declaration symbols\"\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolConst = DEFNODE(\"SymbolConst\", null, {\n    $documentation: \"A constant declaration\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolLet = DEFNODE(\"SymbolLet\", null, {\n    $documentation: \"A block-scoped `let` declaration\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolFunarg = DEFNODE(\"SymbolFunarg\", null, {\n    $documentation: \"Symbol naming a function argument\",\n}, AST_SymbolVar);\n\nvar AST_SymbolDefun = DEFNODE(\"SymbolDefun\", null, {\n    $documentation: \"Symbol defining a function\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolMethod = DEFNODE(\"SymbolMethod\", null, {\n    $documentation: \"Symbol in an object defining a method\",\n}, AST_Symbol);\n\nvar AST_SymbolLambda = DEFNODE(\"SymbolLambda\", null, {\n    $documentation: \"Symbol naming a function expression\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolDefClass = DEFNODE(\"SymbolDefClass\", null, {\n    $documentation: \"Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class.\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolClass = DEFNODE(\"SymbolClass\", null, {\n    $documentation: \"Symbol naming a class's name. Lexically scoped to the class.\"\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolCatch = DEFNODE(\"SymbolCatch\", null, {\n    $documentation: \"Symbol naming the exception in catch\",\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolImport = DEFNODE(\"SymbolImport\", null, {\n    $documentation: \"Symbol referring to an imported name\",\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolImportForeign = DEFNODE(\"SymbolImportForeign\", null, {\n    $documentation: \"A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes\",\n}, AST_Symbol);\n\nvar AST_Label = DEFNODE(\"Label\", \"references\", {\n    $documentation: \"Symbol naming a label (declaration)\",\n    $propdoc: {\n        references: \"[AST_LoopControl*] a list of nodes referring to this label\"\n    },\n    initialize: function() {\n        this.references = [];\n        this.thedef = this;\n    }\n}, AST_Symbol);\n\nvar AST_SymbolRef = DEFNODE(\"SymbolRef\", null, {\n    $documentation: \"Reference to some symbol (not definition/declaration)\",\n}, AST_Symbol);\n\nvar AST_SymbolExport = DEFNODE(\"SymbolExport\", null, {\n    $documentation: \"Symbol referring to a name to export\",\n}, AST_SymbolRef);\n\nvar AST_SymbolExportForeign = DEFNODE(\"SymbolExportForeign\", null, {\n    $documentation: \"A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes\",\n}, AST_Symbol);\n\nvar AST_LabelRef = DEFNODE(\"LabelRef\", null, {\n    $documentation: \"Reference to a label symbol\",\n}, AST_Symbol);\n\nvar AST_This = DEFNODE(\"This\", null, {\n    $documentation: \"The `this` symbol\",\n}, AST_Symbol);\n\nvar AST_Super = DEFNODE(\"Super\", null, {\n    $documentation: \"The `super` symbol\",\n}, AST_This);\n\nvar AST_Constant = DEFNODE(\"Constant\", null, {\n    $documentation: \"Base class for all constants\",\n    getValue: function() {\n        return this.value;\n    }\n});\n\nvar AST_String = DEFNODE(\"String\", \"value quote\", {\n    $documentation: \"A string literal\",\n    $propdoc: {\n        value: \"[string] the contents of this string\",\n        quote: \"[string] the original quote character\"\n    }\n}, AST_Constant);\n\nvar AST_Number = DEFNODE(\"Number\", \"value literal\", {\n    $documentation: \"A number literal\",\n    $propdoc: {\n        value: \"[number] the numeric value\",\n        literal: \"[string] numeric value as string (optional)\"\n    }\n}, AST_Constant);\n\nvar AST_RegExp = DEFNODE(\"RegExp\", \"value\", {\n    $documentation: \"A regexp literal\",\n    $propdoc: {\n        value: \"[RegExp] the actual regexp\",\n    }\n}, AST_Constant);\n\nvar AST_Atom = DEFNODE(\"Atom\", null, {\n    $documentation: \"Base class for atoms\",\n}, AST_Constant);\n\nvar AST_Null = DEFNODE(\"Null\", null, {\n    $documentation: \"The `null` atom\",\n    value: null\n}, AST_Atom);\n\nvar AST_NaN = DEFNODE(\"NaN\", null, {\n    $documentation: \"The impossible value\",\n    value: 0/0\n}, AST_Atom);\n\nvar AST_Undefined = DEFNODE(\"Undefined\", null, {\n    $documentation: \"The `undefined` value\",\n    value: (function() {}())\n}, AST_Atom);\n\nvar AST_Hole = DEFNODE(\"Hole\", null, {\n    $documentation: \"A hole in an array\",\n    value: (function() {}())\n}, AST_Atom);\n\nvar AST_Infinity = DEFNODE(\"Infinity\", null, {\n    $documentation: \"The `Infinity` value\",\n    value: 1/0\n}, AST_Atom);\n\nvar AST_Boolean = DEFNODE(\"Boolean\", null, {\n    $documentation: \"Base class for booleans\",\n}, AST_Atom);\n\nvar AST_False = DEFNODE(\"False\", null, {\n    $documentation: \"The `false` atom\",\n    value: false\n}, AST_Boolean);\n\nvar AST_True = DEFNODE(\"True\", null, {\n    $documentation: \"The `true` atom\",\n    value: true\n}, AST_Boolean);\n\nvar AST_Await = DEFNODE(\"Await\", \"expression\", {\n    $documentation: \"An `await` statement\",\n    $propdoc: {\n        expression: \"[AST_Node] the mandatory expression being awaited\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n        });\n    }\n});\n\nvar AST_Yield = DEFNODE(\"Yield\", \"expression is_star\", {\n    $documentation: \"A `yield` statement\",\n    $propdoc: {\n        expression: \"[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false\",\n        is_star: \"[Boolean] Whether this is a yield or yield* statement\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, this.expression && function() {\n            this.expression._walk(visitor);\n        });\n    }\n});\n\n/* -----[ TreeWalker ]----- */\n\nfunction TreeWalker(callback) {\n    this.visit = callback;\n    this.stack = [];\n    this.directives = Object.create(null);\n}\nTreeWalker.prototype = {\n    _visit: function(node, descend) {\n        this.push(node);\n        var ret = this.visit(node, descend ? function() {\n            descend.call(node);\n        } : noop);\n        if (!ret && descend) {\n            descend.call(node);\n        }\n        this.pop();\n        return ret;\n    },\n    parent: function(n) {\n        return this.stack[this.stack.length - 2 - (n || 0)];\n    },\n    push: function(node) {\n        if (node instanceof AST_Lambda) {\n            this.directives = Object.create(this.directives);\n        } else if (node instanceof AST_Directive && !this.directives[node.value]) {\n            this.directives[node.value] = node;\n        } else if (node instanceof AST_Class) {\n            this.directives = Object.create(this.directives);\n            if (!this.directives[\"use strict\"]) {\n                this.directives[\"use strict\"] = node;\n            }\n        }\n        this.stack.push(node);\n    },\n    pop: function() {\n        var node = this.stack.pop();\n        if (node instanceof AST_Lambda || node instanceof AST_Class) {\n            this.directives = Object.getPrototypeOf(this.directives);\n        }\n    },\n    self: function() {\n        return this.stack[this.stack.length - 1];\n    },\n    find_parent: function(type) {\n        var stack = this.stack;\n        for (var i = stack.length; --i >= 0;) {\n            var x = stack[i];\n            if (x instanceof type) return x;\n        }\n    },\n    has_directive: function(type) {\n        var dir = this.directives[type];\n        if (dir) return dir;\n        var node = this.stack[this.stack.length - 1];\n        if (node instanceof AST_Scope && node.body) {\n            for (var i = 0; i < node.body.length; ++i) {\n                var st = node.body[i];\n                if (!(st instanceof AST_Directive)) break;\n                if (st.value == type) return st;\n            }\n        }\n    },\n    loopcontrol_target: function(node) {\n        var stack = this.stack;\n        if (node.label) for (var i = stack.length; --i >= 0;) {\n            var x = stack[i];\n            if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)\n                return x.body;\n        } else for (var i = stack.length; --i >= 0;) {\n            var x = stack[i];\n            if (x instanceof AST_IterationStatement\n                || node instanceof AST_Break && x instanceof AST_Switch)\n                return x;\n        }\n    }\n};\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n    Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nvar KEYWORDS = \"break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with\";\nvar KEYWORDS_ATOM = \"false null true\";\nvar RESERVED_WORDS = \"enum implements import interface package private protected public static super this \" + KEYWORDS_ATOM + \" \" + KEYWORDS;\nvar KEYWORDS_BEFORE_EXPRESSION = \"return new delete throw else case yield await\";\n\nKEYWORDS = makePredicate(KEYWORDS);\nRESERVED_WORDS = makePredicate(RESERVED_WORDS);\nKEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);\nKEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);\n\nvar OPERATOR_CHARS = makePredicate(characters(\"+-*&%=<>!?|~^\"));\n\nvar RE_NUM_LITERAL = /[0-9a-f]/i;\nvar RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;\nvar RE_OCT_NUMBER = /^0[0-7]+$/;\nvar RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i;\nvar RE_BIN_NUMBER = /^0b[01]+$/i;\nvar RE_DEC_NUMBER = /^\\d*\\.?\\d*(?:e[+-]?\\d*(?:\\d\\.?|\\.?\\d)\\d*)?$/i;\n\nvar OPERATORS = makePredicate([\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"new\",\n    \"void\",\n    \"delete\",\n    \"++\",\n    \"--\",\n    \"+\",\n    \"-\",\n    \"!\",\n    \"~\",\n    \"&\",\n    \"|\",\n    \"^\",\n    \"*\",\n    \"**\",\n    \"/\",\n    \"%\",\n    \">>\",\n    \"<<\",\n    \">>>\",\n    \"<\",\n    \">\",\n    \"<=\",\n    \">=\",\n    \"==\",\n    \"===\",\n    \"!=\",\n    \"!==\",\n    \"?\",\n    \"=\",\n    \"+=\",\n    \"-=\",\n    \"/=\",\n    \"*=\",\n    \"**=\",\n    \"%=\",\n    \">>=\",\n    \"<<=\",\n    \">>>=\",\n    \"|=\",\n    \"^=\",\n    \"&=\",\n    \"&&\",\n    \"||\"\n]);\n\nvar WHITESPACE_CHARS = makePredicate(characters(\" \\u00a0\\n\\r\\t\\f\\u000b\\u200b\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\uFEFF\"));\n\nvar NEWLINE_CHARS = makePredicate(characters(\"\\n\\r\\u2028\\u2029\"));\n\nvar PUNC_AFTER_EXPRESSION = makePredicate(characters(\";]),:\"));\n\nvar PUNC_BEFORE_EXPRESSION = makePredicate(characters(\"[{(,;:\"));\n\nvar PUNC_CHARS = makePredicate(characters(\"[]{}(),;:\"));\n\n/* -----[ Tokenizer ]----- */\n\n// surrogate safe regexps adapted from https://github.com/mathiasbynens/unicode-8.0.0/tree/89b412d8a71ecca9ed593d9e9fa073ab64acfebe/Binary_Property\nvar UNICODE = {\n    ID_Start: /[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n    ID_Continue: /[0-9A-Z_a-z\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/,\n};\n\nfunction get_full_char(str, pos) {\n    var char = str.charAt(pos);\n    if (is_surrogate_pair_head(char)) {\n        var next = str.charAt(pos + 1);\n        if (is_surrogate_pair_tail(next)) {\n            return char + next;\n        }\n    }\n    if (is_surrogate_pair_tail(char)) {\n        var prev = str.charAt(pos - 1);\n        if (is_surrogate_pair_head(prev)) {\n            return prev + char;\n        }\n    }\n    return char;\n}\n\nfunction get_full_char_code(str, pos) {\n    // https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates\n    if (is_surrogate_pair_head(str.charAt(pos))) {\n        return 0x10000 + (str.charCodeAt(pos) - 0xd800 << 10) + str.charCodeAt(pos + 1) - 0xdc00;\n    }\n    return str.charCodeAt(pos);\n}\n\nfunction get_full_char_length(str) {\n    var surrogates = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        if (is_surrogate_pair_head(str.charCodeAt(i))) {\n            if (is_surrogate_pair_tail(str.charCodeAt(i + 1))) {\n                surrogates++;\n                i++;\n            }\n        }\n    }\n\n    return str.length - surrogates;\n}\n\nfunction from_char_code(code) {\n    // Based on https://github.com/mathiasbynens/String.fromCodePoint/blob/master/fromcodepoint.js\n    if (code > 0xFFFF) {\n        code -= 0x10000;\n        return (String.fromCharCode((code >> 10) + 0xD800) +\n            String.fromCharCode((code % 0x400) + 0xDC00));\n    }\n    return String.fromCharCode(code);\n}\n\nfunction is_surrogate_pair_head(code) {\n    if (typeof code === \"string\")\n        code = code.charCodeAt(0);\n\n    return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction is_surrogate_pair_tail(code) {\n    if (typeof code === \"string\")\n        code = code.charCodeAt(0);\n    return code >= 0xdc00 && code <= 0xdfff;\n}\n\nfunction is_digit(code) {\n    return code >= 48 && code <= 57;\n}\n\nfunction is_identifier(name) {\n    if (typeof name !== \"string\" || RESERVED_WORDS(name))\n        return false;\n\n    return true;\n}\n\nfunction is_identifier_start(ch) {\n    var code = ch.charCodeAt(0);\n    return UNICODE.ID_Start.test(ch) || code == 36 || code == 95;\n}\n\nfunction is_identifier_char(ch) {\n    var code = ch.charCodeAt(0);\n    return UNICODE.ID_Continue.test(ch)\n        || code == 36\n        || code == 95\n        || code == 8204 // \\u200c: zero-width non-joiner <ZWNJ>\n        || code == 8205 // \\u200d: zero-width joiner <ZWJ> (in my ECMA-262 PDF, this is also 200c)\n    ;\n}\n\nfunction is_identifier_string(str) {\n    return /^[a-z_$][a-z0-9_$]*$/i.test(str);\n}\n\nfunction parse_js_number(num) {\n    if (RE_HEX_NUMBER.test(num)) {\n        return parseInt(num.substr(2), 16);\n    } else if (RE_OCT_NUMBER.test(num)) {\n        return parseInt(num.substr(1), 8);\n    } else if (RE_ES6_OCT_NUMBER.test(num)) {\n        return parseInt(num.substr(2), 8);\n    } else if (RE_BIN_NUMBER.test(num)) {\n        return parseInt(num.substr(2), 2);\n    } else if (RE_DEC_NUMBER.test(num)) {\n        return parseFloat(num);\n    } else {\n        var val = parseFloat(num);\n        if (val == num) return val;\n    }\n}\n\nfunction JS_Parse_Error(message, filename, line, col, pos) {\n    this.message = message;\n    this.filename = filename;\n    this.line = line;\n    this.col = col;\n    this.pos = pos;\n}\nJS_Parse_Error.prototype = Object.create(Error.prototype);\nJS_Parse_Error.prototype.constructor = JS_Parse_Error;\nJS_Parse_Error.prototype.name = \"SyntaxError\";\nconfigure_error_stack(JS_Parse_Error);\n\nfunction js_error(message, filename, line, col, pos) {\n    throw new JS_Parse_Error(message, filename, line, col, pos);\n}\n\nfunction is_token(token, type, val) {\n    return token.type == type && (val == null || token.value == val);\n}\n\nvar EX_EOF = {};\n\nfunction tokenizer($TEXT, filename, html5_comments, shebang) {\n\n    var S = {\n        text            : $TEXT,\n        filename        : filename,\n        pos             : 0,\n        tokpos          : 0,\n        line            : 1,\n        tokline         : 0,\n        col             : 0,\n        tokcol          : 0,\n        newline_before  : false,\n        regex_allowed   : false,\n        brace_counter   : 0,\n        template_braces : [],\n        comments_before : [],\n        directives      : {},\n        directive_stack : []\n    };\n\n    function peek() { return get_full_char(S.text, S.pos); }\n\n    function next(signal_eof, in_string) {\n        var ch = get_full_char(S.text, S.pos++);\n        if (signal_eof && !ch)\n            throw EX_EOF;\n        if (NEWLINE_CHARS(ch)) {\n            S.newline_before = S.newline_before || !in_string;\n            ++S.line;\n            S.col = 0;\n            if (!in_string && ch == \"\\r\" && peek() == \"\\n\") {\n                // treat a \\r\\n sequence as a single \\n\n                ++S.pos;\n                ch = \"\\n\";\n            }\n        } else {\n            if (ch.length > 1) {\n                ++S.pos;\n                ++S.col;\n            }\n            ++S.col;\n        }\n        return ch;\n    }\n\n    function forward(i) {\n        while (i-- > 0) next();\n    }\n\n    function looking_at(str) {\n        return S.text.substr(S.pos, str.length) == str;\n    }\n\n    function find_eol() {\n        var text = S.text;\n        for (var i = S.pos, n = S.text.length; i < n; ++i) {\n            var ch = text[i];\n            if (NEWLINE_CHARS(ch))\n                return i;\n        }\n        return -1;\n    }\n\n    function find(what, signal_eof) {\n        var pos = S.text.indexOf(what, S.pos);\n        if (signal_eof && pos == -1) throw EX_EOF;\n        return pos;\n    }\n\n    function start_token() {\n        S.tokline = S.line;\n        S.tokcol = S.col;\n        S.tokpos = S.pos;\n    }\n\n    var prev_was_dot = false;\n    var previous_token = null;\n    function token(type, value, is_comment) {\n        S.regex_allowed = ((type == \"operator\" && !UNARY_POSTFIX(value)) ||\n                           (type == \"keyword\" && KEYWORDS_BEFORE_EXPRESSION(value)) ||\n                           (type == \"punc\" && PUNC_BEFORE_EXPRESSION(value))) ||\n                           (type == \"arrow\");\n        if (type == \"punc\" && value == \".\") {\n            prev_was_dot = true;\n        } else if (!is_comment) {\n            prev_was_dot = false;\n        }\n        var ret = {\n            type    : type,\n            value   : value,\n            line    : S.tokline,\n            col     : S.tokcol,\n            pos     : S.tokpos,\n            endline : S.line,\n            endcol  : S.col,\n            endpos  : S.pos,\n            nlb     : S.newline_before,\n            file    : filename\n        };\n        if (/^(?:num|string|regexp)$/i.test(type)) {\n            ret.raw = $TEXT.substring(ret.pos, ret.endpos);\n        }\n        if (!is_comment) {\n            ret.comments_before = S.comments_before;\n            ret.comments_after = S.comments_before = [];\n        }\n        S.newline_before = false;\n        ret = new AST_Token(ret);\n        if (!is_comment) previous_token = ret;\n        return ret;\n    }\n\n    function skip_whitespace() {\n        while (WHITESPACE_CHARS(peek()))\n            next();\n    }\n\n    function read_while(pred) {\n        var ret = \"\", ch, i = 0;\n        while ((ch = peek()) && pred(ch, i++))\n            ret += next();\n        return ret;\n    }\n\n    function parse_error(err) {\n        js_error(err, filename, S.tokline, S.tokcol, S.tokpos);\n    }\n\n    function read_num(prefix) {\n        var has_e = false, after_e = false, has_x = false, has_dot = prefix == \".\";\n        var num = read_while(function(ch, i) {\n            var code = ch.charCodeAt(0);\n            switch (code) {\n              case 98: case 66: // bB\n                return (has_x = true); // Can occur in hex sequence, don't return false yet\n              case 111: case 79: // oO\n              case 120: case 88: // xX\n                return has_x ? false : (has_x = true);\n              case 101: case 69: // eE\n                return has_x ? true : has_e ? false : (has_e = after_e = true);\n              case 45: // -\n                return after_e || (i == 0 && !prefix);\n              case 43: // +\n                return after_e;\n              case (after_e = false, 46): // .\n                return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;\n            }\n            return RE_NUM_LITERAL.test(ch);\n        });\n        if (prefix) num = prefix + num;\n        if (RE_OCT_NUMBER.test(num) && next_token.has_directive(\"use strict\")) {\n            parse_error(\"Legacy octal literals are not allowed in strict mode\");\n        }\n        var valid = parse_js_number(num);\n        if (!isNaN(valid)) {\n            return token(\"num\", valid);\n        } else {\n            parse_error(\"Invalid syntax: \" + num);\n        }\n    }\n\n    function read_escaped_char(in_string, strict_hex, template_string) {\n        var ch = next(true, in_string);\n        switch (ch.charCodeAt(0)) {\n          case 110 : return \"\\n\";\n          case 114 : return \"\\r\";\n          case 116 : return \"\\t\";\n          case 98  : return \"\\b\";\n          case 118 : return \"\\u000b\"; // \\v\n          case 102 : return \"\\f\";\n          case 120 : return String.fromCharCode(hex_bytes(2, strict_hex)); // \\x\n          case 117 : // \\u\n            if (peek() == \"{\") {\n                next(true);\n                if (peek() === \"}\")\n                    parse_error(\"Expecting hex-character between {}\");\n                while (peek() == \"0\") next(true); // No significance\n                var result, length = find(\"}\", true) - S.pos;\n                // Avoid 32 bit integer overflow (1 << 32 === 1)\n                // We know first character isn't 0 and thus out of range anyway\n                if (length > 6 || (result = hex_bytes(length, strict_hex)) > 0x10FFFF) {\n                    parse_error(\"Unicode reference out of bounds\");\n                }\n                next(true);\n                return from_char_code(result);\n            }\n            return String.fromCharCode(hex_bytes(4, strict_hex));\n          case 10  : return \"\"; // newline\n          case 13  :            // \\r\n            if (peek() == \"\\n\") { // DOS newline\n                next(true, in_string);\n                return \"\";\n            }\n        }\n        if (ch >= \"0\" && ch <= \"7\") {\n            if (template_string && strict_hex) {\n                parse_error(\"Octal escape sequences are not allowed in template strings\");\n            }\n            return read_octal_escape_sequence(ch, strict_hex);\n        }\n        return ch;\n    }\n\n    function read_octal_escape_sequence(ch, strict_octal) {\n        // Read\n        var p = peek();\n        if (p >= \"0\" && p <= \"7\") {\n            ch += next(true);\n            if (ch[0] <= \"3\" && (p = peek()) >= \"0\" && p <= \"7\")\n                ch += next(true);\n        }\n\n        // Parse\n        if (ch === \"0\") return \"\\0\";\n        if (ch.length > 0 && next_token.has_directive(\"use strict\") && strict_octal)\n            parse_error(\"Legacy octal escape sequences are not allowed in strict mode\");\n        return String.fromCharCode(parseInt(ch, 8));\n    }\n\n    function hex_bytes(n, strict_hex) {\n        var num = 0;\n        for (; n > 0; --n) {\n            if (!strict_hex && isNaN(parseInt(peek(), 16))) {\n                return parseInt(num, 16) || \"\";\n            }\n            var digit = next(true);\n            if (isNaN(parseInt(digit, 16)))\n                parse_error(\"Invalid hex-character pattern in string\");\n            num += digit;\n        }\n        return parseInt(num, 16);\n    }\n\n    var read_string = with_eof_error(\"Unterminated string constant\", function(quote_char) {\n        var quote = next(), ret = \"\";\n        for (;;) {\n            var ch = next(true, true);\n            if (ch == \"\\\\\") ch = read_escaped_char(true, true);\n            else if (NEWLINE_CHARS(ch)) parse_error(\"Unterminated string constant\");\n            else if (ch == quote) break;\n            ret += ch;\n        }\n        var tok = token(\"string\", ret);\n        tok.quote = quote_char;\n        return tok;\n    });\n\n    var read_template_characters = with_eof_error(\"Unterminated template\", function(begin) {\n        if (begin) {\n            S.template_braces.push(S.brace_counter);\n        }\n        var content = \"\", raw = \"\", ch, tok;\n        next(true, true);\n        while ((ch = next(true, true)) != \"`\") {\n            if (ch == \"\\r\") {\n                if (peek() == \"\\n\") ++S.pos;\n                ch = \"\\n\";\n            } else if (ch == \"$\" && peek() == \"{\") {\n                next(true, true);\n                S.brace_counter++;\n                tok = token(begin ? \"template_head\" : \"template_substitution\", content);\n                tok.begin = begin;\n                tok.raw = raw;\n                tok.end = false;\n                return tok;\n            }\n\n            raw += ch;\n            if (ch == \"\\\\\") {\n                var tmp = S.pos;\n                var prev_is_tag = previous_token.type === \"name\" || previous_token.type === \"punc\" && (previous_token.value === \")\" || previous_token.value === \"]\");\n                ch = read_escaped_char(true, !prev_is_tag, true);\n                raw += S.text.substr(tmp, S.pos - tmp);\n            }\n\n            content += ch;\n        }\n        S.template_braces.pop();\n        tok = token(begin ? \"template_head\" : \"template_substitution\", content);\n        tok.begin = begin;\n        tok.raw = raw;\n        tok.end = true;\n        return tok;\n    });\n\n    function skip_line_comment(type) {\n        var regex_allowed = S.regex_allowed;\n        var i = find_eol(), ret;\n        if (i == -1) {\n            ret = S.text.substr(S.pos);\n            S.pos = S.text.length;\n        } else {\n            ret = S.text.substring(S.pos, i);\n            S.pos = i;\n        }\n        S.col = S.tokcol + (S.pos - S.tokpos);\n        S.comments_before.push(token(type, ret, true));\n        S.regex_allowed = regex_allowed;\n        return next_token;\n    }\n\n    var skip_multiline_comment = with_eof_error(\"Unterminated multiline comment\", function() {\n        var regex_allowed = S.regex_allowed;\n        var i = find(\"*/\", true);\n        var text = S.text.substring(S.pos, i).replace(/\\r\\n|\\r|\\u2028|\\u2029/g, \"\\n\");\n        // update stream position\n        forward(get_full_char_length(text) /* text length doesn't count \\r\\n as 2 char while S.pos - i does */ + 2);\n        S.comments_before.push(token(\"comment2\", text, true));\n        S.newline_before = S.newline_before || text.indexOf(\"\\n\") >= 0;\n        S.regex_allowed = regex_allowed;\n        return next_token;\n    });\n\n    var read_name = with_eof_error(\"Unterminated identifier name\", function() {\n        var name = \"\", ch, escaped = false, hex;\n        var read_escaped_identifier_char = function() {\n            escaped = true;\n            next();\n            if (peek() !== \"u\") {\n                parse_error(\"Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}\");\n            }\n            return read_escaped_char(false, true);\n        };\n\n        // Read first character (ID_Start)\n        if ((name = peek()) === \"\\\\\") {\n            name = read_escaped_identifier_char();\n            if (!is_identifier_start(name)) {\n                parse_error(\"First identifier char is an invalid identifier char\");\n            }\n        } else if (is_identifier_start(name)) {\n            next();\n        } else {\n            return \"\";\n        }\n\n        // Read ID_Continue\n        while ((ch = peek()) != null) {\n            if ((ch = peek()) === \"\\\\\") {\n                ch = read_escaped_identifier_char();\n                if (!is_identifier_char(ch)) {\n                    parse_error(\"Invalid escaped identifier char\");\n                }\n            } else {\n                if (!is_identifier_char(ch)) {\n                    break;\n                }\n                next();\n            }\n            name += ch;\n        }\n        if (RESERVED_WORDS(name) && escaped) {\n            parse_error(\"Escaped characters are not allowed in keywords\");\n        }\n        return name;\n    });\n\n    var read_regexp = with_eof_error(\"Unterminated regular expression\", function(source) {\n        var prev_backslash = false, ch, in_class = false;\n        while ((ch = next(true))) if (NEWLINE_CHARS(ch)) {\n            parse_error(\"Unexpected line terminator\");\n        } else if (prev_backslash) {\n            source += \"\\\\\" + ch;\n            prev_backslash = false;\n        } else if (ch == \"[\") {\n            in_class = true;\n            source += ch;\n        } else if (ch == \"]\" && in_class) {\n            in_class = false;\n            source += ch;\n        } else if (ch == \"/\" && !in_class) {\n            break;\n        } else if (ch == \"\\\\\") {\n            prev_backslash = true;\n        } else {\n            source += ch;\n        }\n        var mods = read_name();\n        try {\n            var regexp = new RegExp(source, mods);\n            regexp.raw_source = \"/\" + source + \"/\" + mods;\n            return token(\"regexp\", regexp);\n        } catch(e) {\n            parse_error(e.message);\n        }\n    });\n\n    function read_operator(prefix) {\n        function grow(op) {\n            if (!peek()) return op;\n            var bigger = op + peek();\n            if (OPERATORS(bigger)) {\n                next();\n                return grow(bigger);\n            } else {\n                return op;\n            }\n        }\n        return token(\"operator\", grow(prefix || next()));\n    }\n\n    function handle_slash() {\n        next();\n        switch (peek()) {\n          case \"/\":\n            next();\n            return skip_line_comment(\"comment1\");\n          case \"*\":\n            next();\n            return skip_multiline_comment();\n        }\n        return S.regex_allowed ? read_regexp(\"\") : read_operator(\"/\");\n    }\n\n    function handle_eq_sign() {\n        next();\n        if (peek() === \">\") {\n            next();\n            return token(\"arrow\", \"=>\");\n        } else {\n            return read_operator(\"=\");\n        }\n    }\n\n    function handle_dot() {\n        next();\n        if (is_digit(peek().charCodeAt(0))) {\n            return read_num(\".\");\n        }\n        if (peek() === \".\") {\n            next();  // Consume second dot\n            next();  // Consume third dot\n            return token(\"expand\", \"...\");\n        }\n\n        return token(\"punc\", \".\");\n    }\n\n    function read_word() {\n        var word = read_name();\n        if (prev_was_dot) return token(\"name\", word);\n        return KEYWORDS_ATOM(word) ? token(\"atom\", word)\n            : !KEYWORDS(word) ? token(\"name\", word)\n            : OPERATORS(word) ? token(\"operator\", word)\n            : token(\"keyword\", word);\n    }\n\n    function with_eof_error(eof_error, cont) {\n        return function(x) {\n            try {\n                return cont(x);\n            } catch(ex) {\n                if (ex === EX_EOF) parse_error(eof_error);\n                else throw ex;\n            }\n        };\n    }\n\n    function next_token(force_regexp) {\n        if (force_regexp != null)\n            return read_regexp(force_regexp);\n        if (shebang && S.pos == 0 && looking_at(\"#!\")) {\n            start_token();\n            forward(2);\n            skip_line_comment(\"comment5\");\n        }\n        for (;;) {\n            skip_whitespace();\n            start_token();\n            if (html5_comments) {\n                if (looking_at(\"<!--\")) {\n                    forward(4);\n                    skip_line_comment(\"comment3\");\n                    continue;\n                }\n                if (looking_at(\"-->\") && S.newline_before) {\n                    forward(3);\n                    skip_line_comment(\"comment4\");\n                    continue;\n                }\n            }\n            var ch = peek();\n            if (!ch) return token(\"eof\");\n            var code = ch.charCodeAt(0);\n            switch (code) {\n              case 34: case 39: return read_string(ch);\n              case 46: return handle_dot();\n              case 47: {\n                  var tok = handle_slash();\n                  if (tok === next_token) continue;\n                  return tok;\n              }\n              case 61: return handle_eq_sign();\n              case 96: return read_template_characters(true);\n              case 123:\n                S.brace_counter++;\n                break;\n              case 125:\n                S.brace_counter--;\n                if (S.template_braces.length > 0\n                    && S.template_braces[S.template_braces.length - 1] === S.brace_counter)\n                    return read_template_characters(false);\n                break;\n            }\n            if (is_digit(code)) return read_num();\n            if (PUNC_CHARS(ch)) return token(\"punc\", next());\n            if (OPERATOR_CHARS(ch)) return read_operator();\n            if (code == 92 || is_identifier_start(ch)) return read_word();\n            break;\n        }\n        parse_error(\"Unexpected character '\" + ch + \"'\");\n    }\n\n    next_token.next = next;\n    next_token.peek = peek;\n\n    next_token.context = function(nc) {\n        if (nc) S = nc;\n        return S;\n    };\n\n    next_token.add_directive = function(directive) {\n        S.directive_stack[S.directive_stack.length - 1].push(directive);\n\n        if (S.directives[directive] === undefined) {\n            S.directives[directive] = 1;\n        } else {\n            S.directives[directive]++;\n        }\n    };\n\n    next_token.push_directives_stack = function() {\n        S.directive_stack.push([]);\n    };\n\n    next_token.pop_directives_stack = function() {\n        var directives = S.directive_stack[S.directive_stack.length - 1];\n\n        for (var i = 0; i < directives.length; i++) {\n            S.directives[directives[i]]--;\n        }\n\n        S.directive_stack.pop();\n    };\n\n    next_token.has_directive = function(directive) {\n        return S.directives[directive] > 0;\n    };\n\n    return next_token;\n\n}\n\n/* -----[ Parser (constants) ]----- */\n\nvar UNARY_PREFIX = makePredicate([\n    \"typeof\",\n    \"void\",\n    \"delete\",\n    \"--\",\n    \"++\",\n    \"!\",\n    \"~\",\n    \"-\",\n    \"+\"\n]);\n\nvar UNARY_POSTFIX = makePredicate([ \"--\", \"++\" ]);\n\nvar ASSIGNMENT = makePredicate([ \"=\", \"+=\", \"-=\", \"/=\", \"*=\", \"**=\", \"%=\", \">>=\", \"<<=\", \">>>=\", \"|=\", \"^=\", \"&=\" ]);\n\nvar PRECEDENCE = (function(a, ret) {\n    for (var i = 0; i < a.length; ++i) {\n        var b = a[i];\n        for (var j = 0; j < b.length; ++j) {\n            ret[b[j]] = i + 1;\n        }\n    }\n    return ret;\n})(\n    [\n        [\"||\"],\n        [\"&&\"],\n        [\"|\"],\n        [\"^\"],\n        [\"&\"],\n        [\"==\", \"===\", \"!=\", \"!==\"],\n        [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n        [\">>\", \"<<\", \">>>\"],\n        [\"+\", \"-\"],\n        [\"*\", \"/\", \"%\"],\n        [\"**\"]\n    ],\n    {}\n);\n\nvar ATOMIC_START_TOKEN = makePredicate([ \"atom\", \"num\", \"string\", \"regexp\", \"name\" ]);\n\n/* -----[ Parser ]----- */\n\nfunction parse($TEXT, options) {\n\n    options = defaults(options, {\n        bare_returns   : false,\n        ecma           : 8,\n        expression     : false,\n        filename       : null,\n        html5_comments : true,\n        module         : false,\n        shebang        : true,\n        strict         : false,\n        toplevel       : null,\n    }, true);\n\n    var S = {\n        input         : (typeof $TEXT == \"string\"\n                         ? tokenizer($TEXT, options.filename,\n                                     options.html5_comments, options.shebang)\n                         : $TEXT),\n        token         : null,\n        prev          : null,\n        peeked        : null,\n        in_function   : 0,\n        in_async      : -1,\n        in_generator  : -1,\n        in_directives : true,\n        in_loop       : 0,\n        labels        : []\n    };\n\n    S.token = next();\n\n    function is(type, value) {\n        return is_token(S.token, type, value);\n    }\n\n    function peek() { return S.peeked || (S.peeked = S.input()); }\n\n    function next() {\n        S.prev = S.token;\n\n        if (!S.peeked) peek();\n        S.token = S.peeked;\n        S.peeked = null;\n        S.in_directives = S.in_directives && (\n            S.token.type == \"string\" || is(\"punc\", \";\")\n        );\n        return S.token;\n    }\n\n    function prev() {\n        return S.prev;\n    }\n\n    function croak(msg, line, col, pos) {\n        var ctx = S.input.context();\n        js_error(msg,\n                 ctx.filename,\n                 line != null ? line : ctx.tokline,\n                 col != null ? col : ctx.tokcol,\n                 pos != null ? pos : ctx.tokpos);\n    }\n\n    function token_error(token, msg) {\n        croak(msg, token.line, token.col);\n    }\n\n    function unexpected(token) {\n        if (token == null)\n            token = S.token;\n        token_error(token, \"Unexpected token: \" + token.type + \" (\" + token.value + \")\");\n    }\n\n    function expect_token(type, val) {\n        if (is(type, val)) {\n            return next();\n        }\n        token_error(S.token, \"Unexpected token \" + S.token.type + \" «\" + S.token.value + \"»\" + \", expected \" + type + \" «\" + val + \"»\");\n    }\n\n    function expect(punc) { return expect_token(\"punc\", punc); }\n\n    function has_newline_before(token) {\n        return token.nlb || !all(token.comments_before, function(comment) {\n            return !comment.nlb;\n        });\n    }\n\n    function can_insert_semicolon() {\n        return !options.strict\n            && (is(\"eof\") || is(\"punc\", \"}\") || has_newline_before(S.token));\n    }\n\n    function is_in_generator() {\n        return S.in_generator === S.in_function;\n    }\n\n    function is_in_async() {\n        return S.in_async === S.in_function;\n    }\n\n    function semicolon(optional) {\n        if (is(\"punc\", \";\")) next();\n        else if (!optional && !can_insert_semicolon()) unexpected();\n    }\n\n    function parenthesised() {\n        expect(\"(\");\n        var exp = expression(true);\n        expect(\")\");\n        return exp;\n    }\n\n    function embed_tokens(parser) {\n        return function() {\n            var start = S.token;\n            var expr = parser.apply(null, arguments);\n            var end = prev();\n            expr.start = start;\n            expr.end = end;\n            return expr;\n        };\n    }\n\n    function handle_regexp() {\n        if (is(\"operator\", \"/\") || is(\"operator\", \"/=\")) {\n            S.peeked = null;\n            S.token = S.input(S.token.value.substr(1)); // force regexp\n        }\n    }\n\n    var statement = embed_tokens(function(is_export_default, is_for_body, is_if_body) {\n        handle_regexp();\n        switch (S.token.type) {\n          case \"string\":\n            if (S.in_directives) {\n                var token = peek();\n                if (S.token.raw.indexOf(\"\\\\\") == -1\n                    && (is_token(token, \"punc\", \";\")\n                        || is_token(token, \"punc\", \"}\")\n                        || has_newline_before(token)\n                        || is_token(token, \"eof\"))) {\n                    S.input.add_directive(S.token.value);\n                } else {\n                    S.in_directives = false;\n                }\n            }\n            var dir = S.in_directives, stat = simple_statement();\n            return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat;\n          case \"template_head\":\n          case \"num\":\n          case \"regexp\":\n          case \"operator\":\n          case \"atom\":\n            return simple_statement();\n\n          case \"name\":\n            if (S.token.value == \"async\" && is_token(peek(), \"keyword\", \"function\")) {\n                next();\n                next();\n                if (is_for_body) {\n                    croak(\"functions are not allowed as the body of a loop\");\n                }\n                return function_(AST_Defun, false, true, is_export_default);\n            }\n            if (S.token.value == \"import\" && !is_token(peek(), \"punc\", \"(\")) {\n                next();\n                var node = import_();\n                semicolon();\n                return node;\n            }\n            return is_token(peek(), \"punc\", \":\")\n                ? labeled_statement()\n                : simple_statement();\n\n          case \"punc\":\n            switch (S.token.value) {\n              case \"{\":\n                return new AST_BlockStatement({\n                    start : S.token,\n                    body  : block_(),\n                    end   : prev()\n                });\n              case \"[\":\n              case \"(\":\n                return simple_statement();\n              case \";\":\n                S.in_directives = false;\n                next();\n                return new AST_EmptyStatement();\n              default:\n                unexpected();\n            }\n\n          case \"keyword\":\n            switch (S.token.value) {\n              case \"break\":\n                next();\n                return break_cont(AST_Break);\n\n              case \"continue\":\n                next();\n                return break_cont(AST_Continue);\n\n              case \"debugger\":\n                next();\n                semicolon();\n                return new AST_Debugger();\n\n              case \"do\":\n                next();\n                var body = in_loop(statement);\n                expect_token(\"keyword\", \"while\");\n                var condition = parenthesised();\n                semicolon(true);\n                return new AST_Do({\n                    body      : body,\n                    condition : condition\n                });\n\n              case \"while\":\n                next();\n                return new AST_While({\n                    condition : parenthesised(),\n                    body      : in_loop(function() { return statement(false, true); })\n                });\n\n              case \"for\":\n                next();\n                return for_();\n\n              case \"class\":\n                next();\n                if (is_for_body) {\n                    croak(\"classes are not allowed as the body of a loop\");\n                }\n                if (is_if_body) {\n                    croak(\"classes are not allowed as the body of an if\");\n                }\n                return class_(AST_DefClass);\n\n              case \"function\":\n                next();\n                if (is_for_body) {\n                    croak(\"functions are not allowed as the body of a loop\");\n                }\n                return function_(AST_Defun, false, false, is_export_default);\n\n              case \"if\":\n                next();\n                return if_();\n\n              case \"return\":\n                if (S.in_function == 0 && !options.bare_returns)\n                    croak(\"'return' outside of function\");\n                next();\n                var value = null;\n                if (is(\"punc\", \";\")) {\n                    next();\n                } else if (!can_insert_semicolon()) {\n                    value = expression(true);\n                    semicolon();\n                }\n                return new AST_Return({\n                    value: value\n                });\n\n              case \"switch\":\n                next();\n                return new AST_Switch({\n                    expression : parenthesised(),\n                    body       : in_loop(switch_body_)\n                });\n\n              case \"throw\":\n                next();\n                if (has_newline_before(S.token))\n                    croak(\"Illegal newline after 'throw'\");\n                var value = expression(true);\n                semicolon();\n                return new AST_Throw({\n                    value: value\n                });\n\n              case \"try\":\n                next();\n                return try_();\n\n              case \"var\":\n                next();\n                var node = var_();\n                semicolon();\n                return node;\n\n              case \"let\":\n                next();\n                var node = let_();\n                semicolon();\n                return node;\n\n              case \"const\":\n                next();\n                var node = const_();\n                semicolon();\n                return node;\n\n              case \"with\":\n                if (S.input.has_directive(\"use strict\")) {\n                    croak(\"Strict mode may not include a with statement\");\n                }\n                next();\n                return new AST_With({\n                    expression : parenthesised(),\n                    body       : statement()\n                });\n\n              case \"export\":\n                if (!is_token(peek(), \"punc\", \"(\")) {\n                    next();\n                    var node = export_();\n                    if (is(\"punc\", \";\")) semicolon();\n                    return node;\n                }\n            }\n        }\n        unexpected();\n    });\n\n    function labeled_statement() {\n        var label = as_symbol(AST_Label);\n        if (label.name === \"await\" && is_in_async()) {\n            token_error(S.prev, \"await cannot be used as label inside async function\");\n        }\n        if (find_if(function(l) { return l.name == label.name; }, S.labels)) {\n            // ECMA-262, 12.12: An ECMAScript program is considered\n            // syntactically incorrect if it contains a\n            // LabelledStatement that is enclosed by a\n            // LabelledStatement with the same Identifier as label.\n            croak(\"Label \" + label.name + \" defined twice\");\n        }\n        expect(\":\");\n        S.labels.push(label);\n        var stat = statement();\n        S.labels.pop();\n        if (!(stat instanceof AST_IterationStatement)) {\n            // check for `continue` that refers to this label.\n            // those should be reported as syntax errors.\n            // https://github.com/mishoo/UglifyJS2/issues/287\n            label.references.forEach(function(ref) {\n                if (ref instanceof AST_Continue) {\n                    ref = ref.label.start;\n                    croak(\"Continue label `\" + label.name + \"` refers to non-IterationStatement.\",\n                          ref.line, ref.col, ref.pos);\n                }\n            });\n        }\n        return new AST_LabeledStatement({ body: stat, label: label });\n    }\n\n    function simple_statement(tmp) {\n        return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });\n    }\n\n    function break_cont(type) {\n        var label = null, ldef;\n        if (!can_insert_semicolon()) {\n            label = as_symbol(AST_LabelRef, true);\n        }\n        if (label != null) {\n            ldef = find_if(function(l) { return l.name == label.name; }, S.labels);\n            if (!ldef)\n                croak(\"Undefined label \" + label.name);\n            label.thedef = ldef;\n        } else if (S.in_loop == 0)\n            croak(type.TYPE + \" not inside a loop or switch\");\n        semicolon();\n        var stat = new type({ label: label });\n        if (ldef) ldef.references.push(stat);\n        return stat;\n    }\n\n    function for_() {\n        var for_await_error = \"`for await` invalid in this context\";\n        var await_tok = S.token;\n        if (await_tok.type == \"name\" && await_tok.value == \"await\") {\n            if (!is_in_async()) {\n                token_error(await_tok, for_await_error);\n            }\n            next();\n        } else {\n            await_tok = false;\n        }\n        expect(\"(\");\n        var init = null;\n        if (!is(\"punc\", \";\")) {\n            init =\n                is(\"keyword\", \"var\") ? (next(), var_(true)) :\n                is(\"keyword\", \"let\") ? (next(), let_(true)) :\n                is(\"keyword\", \"const\") ? (next(), const_(true)) :\n                                       expression(true, true);\n            var is_in = is(\"operator\", \"in\");\n            var is_of = is(\"name\", \"of\");\n            if (await_tok && !is_of) {\n                token_error(await_tok, for_await_error);\n            }\n            if (is_in || is_of) {\n                if (init instanceof AST_Definitions) {\n                    if (init.definitions.length > 1)\n                        token_error(init.start, \"Only one variable declaration allowed in for..in loop\");\n                } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) {\n                    token_error(init.start, \"Invalid left-hand side in for..in loop\");\n                }\n                next();\n                if (is_in) {\n                    return for_in(init);\n                } else {\n                    return for_of(init, !!await_tok);\n                }\n            }\n        } else if (await_tok) {\n            token_error(await_tok, for_await_error);\n        }\n        return regular_for(init);\n    }\n\n    function regular_for(init) {\n        expect(\";\");\n        var test = is(\"punc\", \";\") ? null : expression(true);\n        expect(\";\");\n        var step = is(\"punc\", \")\") ? null : expression(true);\n        expect(\")\");\n        return new AST_For({\n            init      : init,\n            condition : test,\n            step      : step,\n            body      : in_loop(function() { return statement(false, true); })\n        });\n    }\n\n    function for_of(init, is_await) {\n        var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null;\n        var obj = expression(true);\n        expect(\")\");\n        return new AST_ForOf({\n            await  : is_await,\n            init   : init,\n            name   : lhs,\n            object : obj,\n            body   : in_loop(function() { return statement(false, true); })\n        });\n    }\n\n    function for_in(init) {\n        var obj = expression(true);\n        expect(\")\");\n        return new AST_ForIn({\n            init   : init,\n            object : obj,\n            body   : in_loop(function() { return statement(false, true); })\n        });\n    }\n\n    var arrow_function = function(start, argnames, is_async) {\n        if (has_newline_before(S.token)) {\n            croak(\"Unexpected newline before arrow (=>)\");\n        }\n\n        expect_token(\"arrow\", \"=>\");\n\n        var body = _function_body(is(\"punc\", \"{\"), false, is_async);\n\n        var end =\n            body instanceof Array && body.length ? body[body.length - 1].end :\n            body instanceof Array ? start :\n                body.end;\n\n        return new AST_Arrow({\n            start    : start,\n            end      : end,\n            async    : is_async,\n            argnames : argnames,\n            body     : body\n        });\n    };\n\n    var function_ = function(ctor, is_generator_property, is_async, is_export_default) {\n        var start = S.token;\n\n        var in_statement = ctor === AST_Defun;\n        var is_generator = is(\"operator\", \"*\");\n        if (is_generator) {\n            next();\n        }\n\n        var name = is(\"name\") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;\n        if (in_statement && !name) {\n            if (is_export_default) {\n                ctor = AST_Function;\n            } else {\n                unexpected();\n            }\n        }\n\n        if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))\n            unexpected(prev());\n\n        var args = [];\n        var body = _function_body(true, is_generator || is_generator_property, is_async, name, args);\n        return new ctor({\n            start : args.start,\n            end   : body.end,\n            is_generator: is_generator,\n            async : is_async,\n            name  : name,\n            argnames: args,\n            body  : body\n        });\n    };\n\n    function track_used_binding_identifiers(is_parameter, strict) {\n        var parameters = {};\n        var duplicate = false;\n        var default_assignment = false;\n        var spread = false;\n        var strict_mode = !!strict;\n        var tracker = {\n            add_parameter: function(token) {\n                if (parameters[\"$\" + token.value] !== undefined) {\n                    if (duplicate === false) {\n                        duplicate = token;\n                    }\n                    tracker.check_strict();\n                } else {\n                    parameters[\"$\" + token.value] = true;\n                    if (is_parameter) {\n                        switch (token.value) {\n                          case \"arguments\":\n                          case \"eval\":\n                          case \"yield\":\n                            if (strict_mode) {\n                                token_error(token, \"Unexpected \" + token.value + \" identifier as parameter inside strict mode\");\n                            }\n                            break;\n                          default:\n                            if (RESERVED_WORDS(token.value)) {\n                                unexpected();\n                            }\n                        }\n                    }\n                }\n            },\n            mark_default_assignment: function(token) {\n                if (default_assignment === false) {\n                    default_assignment = token;\n                }\n            },\n            mark_spread: function(token) {\n                if (spread === false) {\n                    spread = token;\n                }\n            },\n            mark_strict_mode: function() {\n                strict_mode = true;\n            },\n            is_strict: function() {\n                return default_assignment !== false || spread !== false || strict_mode;\n            },\n            check_strict: function() {\n                if (tracker.is_strict() && duplicate !== false) {\n                    token_error(duplicate, \"Parameter \" + duplicate.value + \" was used already\");\n                }\n            }\n        };\n\n        return tracker;\n    }\n\n    function parameters(params) {\n        var start = S.token;\n        var used_parameters = track_used_binding_identifiers(true, S.input.has_directive(\"use strict\"));\n\n        expect(\"(\");\n\n        while (!is(\"punc\", \")\")) {\n            var param = parameter(used_parameters);\n            params.push(param);\n\n            if (!is(\"punc\", \")\")) {\n                expect(\",\");\n                if (is(\"punc\", \")\") && options.ecma < 8) unexpected();\n            }\n\n            if (param instanceof AST_Expansion) {\n                break;\n            }\n        }\n\n        next();\n    }\n\n    function parameter(used_parameters, symbol_type) {\n        var param;\n        var expand = false;\n        if (used_parameters === undefined) {\n            used_parameters = track_used_binding_identifiers(true, S.input.has_directive(\"use strict\"));\n        }\n        if (is(\"expand\", \"...\")) {\n            expand = S.token;\n            used_parameters.mark_spread(S.token);\n            next();\n        }\n        param = binding_element(used_parameters, symbol_type);\n\n        if (is(\"operator\", \"=\") && expand === false) {\n            used_parameters.mark_default_assignment(S.token);\n            next();\n            param = new AST_DefaultAssign({\n                start: param.start,\n                left: param,\n                operator: \"=\",\n                right: expression(false),\n                end: S.token\n            });\n        }\n\n        if (expand !== false) {\n            if (!is(\"punc\", \")\")) {\n                unexpected();\n            }\n            param = new AST_Expansion({\n                start: expand,\n                expression: param,\n                end: expand\n            });\n        }\n        used_parameters.check_strict();\n\n        return param;\n    }\n\n    function binding_element(used_parameters, symbol_type) {\n        var elements = [];\n        var first = true;\n        var is_expand = false;\n        var expand_token;\n        var first_token = S.token;\n        if (used_parameters === undefined) {\n            used_parameters = track_used_binding_identifiers(false, S.input.has_directive(\"use strict\"));\n        }\n        symbol_type = symbol_type === undefined ? AST_SymbolFunarg : symbol_type;\n        if (is(\"punc\", \"[\")) {\n            next();\n            while (!is(\"punc\", \"]\")) {\n                if (first) {\n                    first = false;\n                } else {\n                    expect(\",\");\n                }\n\n                if (is(\"expand\", \"...\")) {\n                    is_expand = true;\n                    expand_token = S.token;\n                    used_parameters.mark_spread(S.token);\n                    next();\n                }\n                if (is(\"punc\")) {\n                    switch (S.token.value) {\n                      case \",\":\n                        elements.push(new AST_Hole({\n                            start: S.token,\n                            end: S.token\n                        }));\n                        continue;\n                      case \"]\": // Trailing comma after last element\n                        break;\n                      case \"[\":\n                      case \"{\":\n                        elements.push(binding_element(used_parameters, symbol_type));\n                        break;\n                      default:\n                        unexpected();\n                    }\n                } else if (is(\"name\")) {\n                    used_parameters.add_parameter(S.token);\n                    elements.push(as_symbol(symbol_type));\n                } else {\n                    croak(\"Invalid function parameter\");\n                }\n                if (is(\"operator\", \"=\") && is_expand === false) {\n                    used_parameters.mark_default_assignment(S.token);\n                    next();\n                    elements[elements.length - 1] = new AST_DefaultAssign({\n                        start: elements[elements.length - 1].start,\n                        left: elements[elements.length - 1],\n                        operator: \"=\",\n                        right: expression(false),\n                        end: S.token\n                    });\n                }\n                if (is_expand) {\n                    if (!is(\"punc\", \"]\")) {\n                        croak(\"Rest element must be last element\");\n                    }\n                    elements[elements.length - 1] = new AST_Expansion({\n                        start: expand_token,\n                        expression: elements[elements.length - 1],\n                        end: expand_token\n                    });\n                }\n            }\n            expect(\"]\");\n            used_parameters.check_strict();\n            return new AST_Destructuring({\n                start: first_token,\n                names: elements,\n                is_array: true,\n                end: prev()\n            });\n        } else if (is(\"punc\", \"{\")) {\n            next();\n            while (!is(\"punc\", \"}\")) {\n                if (first) {\n                    first = false;\n                } else {\n                    expect(\",\");\n                }\n                if (is(\"expand\", \"...\")) {\n                    is_expand = true;\n                    expand_token = S.token;\n                    used_parameters.mark_spread(S.token);\n                    next();\n                }\n                if (is(\"name\") && (is_token(peek(), \"punc\") || is_token(peek(), \"operator\")) && [\",\", \"}\", \"=\"].indexOf(peek().value) !== -1) {\n                    used_parameters.add_parameter(S.token);\n                    var start = prev();\n                    var value = as_symbol(symbol_type);\n                    if (is_expand) {\n                        elements.push(new AST_Expansion({\n                            start: expand_token,\n                            expression: value,\n                            end: value.end,\n                        }));\n                    } else {\n                        elements.push(new AST_ObjectKeyVal({\n                            start: start,\n                            key: value.name,\n                            value: value,\n                            end: value.end,\n                        }));\n                    }\n                } else if (is(\"punc\", \"}\")) {\n                    continue; // Allow trailing hole\n                } else {\n                    var property_token = S.token;\n                    var property = as_property_name();\n                    if (property === null) {\n                        unexpected(prev());\n                    } else if (prev().type === \"name\" && !is(\"punc\", \":\")) {\n                        elements.push(new AST_ObjectKeyVal({\n                            start: prev(),\n                            key: property,\n                            value: new symbol_type({\n                                start: prev(),\n                                name: property,\n                                end: prev()\n                            }),\n                            end: prev()\n                        }));\n                    } else {\n                        expect(\":\");\n                        elements.push(new AST_ObjectKeyVal({\n                            start: property_token,\n                            quote: property_token.quote,\n                            key: property,\n                            value: binding_element(used_parameters, symbol_type),\n                            end: prev()\n                        }));\n                    }\n                }\n                if (is_expand) {\n                    if (!is(\"punc\", \"}\")) {\n                        croak(\"Rest element must be last element\");\n                    }\n                } else if (is(\"operator\", \"=\")) {\n                    used_parameters.mark_default_assignment(S.token);\n                    next();\n                    elements[elements.length - 1].value = new AST_DefaultAssign({\n                        start: elements[elements.length - 1].value.start,\n                        left: elements[elements.length - 1].value,\n                        operator: \"=\",\n                        right: expression(false),\n                        end: S.token\n                    });\n                }\n            }\n            expect(\"}\");\n            used_parameters.check_strict();\n            return new AST_Destructuring({\n                start: first_token,\n                names: elements,\n                is_array: false,\n                end: prev()\n            });\n        } else if (is(\"name\")) {\n            used_parameters.add_parameter(S.token);\n            return as_symbol(symbol_type);\n        } else {\n            croak(\"Invalid function parameter\");\n        }\n    }\n\n    function params_or_seq_(allow_arrows, maybe_sequence) {\n        var spread_token;\n        var invalid_sequence;\n        var trailing_comma;\n        var a = [];\n        expect(\"(\");\n        while (!is(\"punc\", \")\")) {\n            if (spread_token) unexpected(spread_token);\n            if (is(\"expand\", \"...\")) {\n                spread_token = S.token;\n                if (maybe_sequence) invalid_sequence = S.token;\n                next();\n                a.push(new AST_Expansion({\n                    start: prev(),\n                    expression: expression(),\n                    end: S.token,\n                }));\n            } else {\n                a.push(expression());\n            }\n            if (!is(\"punc\", \")\")) {\n                expect(\",\");\n                if (is(\"punc\", \")\")) {\n                    if (options.ecma < 8) unexpected();\n                    trailing_comma = prev();\n                    if (maybe_sequence) invalid_sequence = trailing_comma;\n                }\n            }\n        }\n        expect(\")\");\n        if (allow_arrows && is(\"arrow\", \"=>\")) {\n            if (spread_token && trailing_comma) unexpected(trailing_comma);\n        } else if (invalid_sequence) {\n            unexpected(invalid_sequence);\n        }\n        return a;\n    }\n\n    function _function_body(block, generator, is_async, name, args) {\n        var loop = S.in_loop;\n        var labels = S.labels;\n        var current_generator = S.in_generator;\n        var current_async = S.in_async;\n        ++S.in_function;\n        if (generator)\n            S.in_generator = S.in_function;\n        if (is_async)\n            S.in_async = S.in_function;\n        if (args) parameters(args);\n        if (block)\n            S.in_directives = true;\n        S.in_loop = 0;\n        S.labels = [];\n        if (block) {\n            S.input.push_directives_stack();\n            var a = block_();\n            if (name) _verify_symbol(name);\n            if (args) args.forEach(_verify_symbol);\n            S.input.pop_directives_stack();\n        } else {\n            var a = expression(false);\n        }\n        --S.in_function;\n        S.in_loop = loop;\n        S.labels = labels;\n        S.in_generator = current_generator;\n        S.in_async = current_async;\n        return a;\n    }\n\n    function _await_expression() {\n        // Previous token must be \"await\" and not be interpreted as an identifier\n        if (!is_in_async()) {\n            croak(\"Unexpected await expression outside async function\",\n                S.prev.line, S.prev.col, S.prev.pos);\n        }\n        // the await expression is parsed as a unary expression in Babel\n        return new AST_Await({\n            start: prev(),\n            end: S.token,\n            expression : maybe_unary(true),\n        });\n    }\n\n    function _yield_expression() {\n        // Previous token must be keyword yield and not be interpret as an identifier\n        if (!is_in_generator()) {\n            croak(\"Unexpected yield expression outside generator function\",\n                S.prev.line, S.prev.col, S.prev.pos);\n        }\n        var start = S.token;\n        var star = false;\n        var has_expression = true;\n\n        // Attempt to get expression or star (and then the mandatory expression)\n        // behind yield on the same line.\n        //\n        // If nothing follows on the same line of the yieldExpression,\n        // it should default to the value `undefined` for yield to return.\n        // In that case, the `undefined` stored as `null` in ast.\n        //\n        // Note 1: It isn't allowed for yield* to close without an expression\n        // Note 2: If there is a nlb between yield and star, it is interpret as\n        //         yield <explicit undefined> <inserted automatic semicolon> *\n        if (can_insert_semicolon() ||\n            (is(\"punc\") && PUNC_AFTER_EXPRESSION(S.token.value))) {\n            has_expression = false;\n\n        } else if (is(\"operator\", \"*\")) {\n            star = true;\n            next();\n        }\n\n        return new AST_Yield({\n            start      : start,\n            is_star    : star,\n            expression : has_expression ? expression() : null,\n            end        : prev()\n        });\n    }\n\n    function if_() {\n        var cond = parenthesised(), body = statement(false, false, true), belse = null;\n        if (is(\"keyword\", \"else\")) {\n            next();\n            belse = statement(false, false, true);\n        }\n        return new AST_If({\n            condition   : cond,\n            body        : body,\n            alternative : belse\n        });\n    }\n\n    function block_() {\n        expect(\"{\");\n        var a = [];\n        while (!is(\"punc\", \"}\")) {\n            if (is(\"eof\")) unexpected();\n            a.push(statement());\n        }\n        next();\n        return a;\n    }\n\n    function switch_body_() {\n        expect(\"{\");\n        var a = [], cur = null, branch = null, tmp;\n        while (!is(\"punc\", \"}\")) {\n            if (is(\"eof\")) unexpected();\n            if (is(\"keyword\", \"case\")) {\n                if (branch) branch.end = prev();\n                cur = [];\n                branch = new AST_Case({\n                    start      : (tmp = S.token, next(), tmp),\n                    expression : expression(true),\n                    body       : cur\n                });\n                a.push(branch);\n                expect(\":\");\n            } else if (is(\"keyword\", \"default\")) {\n                if (branch) branch.end = prev();\n                cur = [];\n                branch = new AST_Default({\n                    start : (tmp = S.token, next(), expect(\":\"), tmp),\n                    body  : cur\n                });\n                a.push(branch);\n            } else {\n                if (!cur) unexpected();\n                cur.push(statement());\n            }\n        }\n        if (branch) branch.end = prev();\n        next();\n        return a;\n    }\n\n    function try_() {\n        var body = block_(), bcatch = null, bfinally = null;\n        if (is(\"keyword\", \"catch\")) {\n            var start = S.token;\n            next();\n            if (is(\"punc\", \"{\")) {\n                var name = null;\n            } else {\n                expect(\"(\");\n                var name = parameter(undefined, AST_SymbolCatch);\n                expect(\")\");\n            }\n            bcatch = new AST_Catch({\n                start   : start,\n                argname : name,\n                body    : block_(),\n                end     : prev()\n            });\n        }\n        if (is(\"keyword\", \"finally\")) {\n            var start = S.token;\n            next();\n            bfinally = new AST_Finally({\n                start : start,\n                body  : block_(),\n                end   : prev()\n            });\n        }\n        if (!bcatch && !bfinally)\n            croak(\"Missing catch/finally blocks\");\n        return new AST_Try({\n            body     : body,\n            bcatch   : bcatch,\n            bfinally : bfinally\n        });\n    }\n\n    function vardefs(no_in, kind) {\n        var a = [];\n        var def;\n        for (;;) {\n            var sym_type =\n                kind === \"var\" ? AST_SymbolVar :\n                kind === \"const\" ? AST_SymbolConst :\n                kind === \"let\" ? AST_SymbolLet : null;\n            if (is(\"punc\", \"{\") || is(\"punc\", \"[\")) {\n                def = new AST_VarDef({\n                    start: S.token,\n                    name: binding_element(undefined ,sym_type),\n                    value: is(\"operator\", \"=\") ? (expect_token(\"operator\", \"=\"), expression(false, no_in)) : null,\n                    end: prev()\n                });\n            } else {\n                def = new AST_VarDef({\n                    start : S.token,\n                    name  : as_symbol(sym_type),\n                    value : is(\"operator\", \"=\")\n                        ? (next(), expression(false, no_in))\n                        : !no_in && kind === \"const\"\n                            ? croak(\"Missing initializer in const declaration\") : null,\n                    end   : prev()\n                });\n                if (def.name.name == \"import\") croak(\"Unexpected token: import\");\n            }\n            a.push(def);\n            if (!is(\"punc\", \",\"))\n                break;\n            next();\n        }\n        return a;\n    }\n\n    var var_ = function(no_in) {\n        return new AST_Var({\n            start       : prev(),\n            definitions : vardefs(no_in, \"var\"),\n            end         : prev()\n        });\n    };\n\n    var let_ = function(no_in) {\n        return new AST_Let({\n            start       : prev(),\n            definitions : vardefs(no_in, \"let\"),\n            end         : prev()\n        });\n    };\n\n    var const_ = function(no_in) {\n        return new AST_Const({\n            start       : prev(),\n            definitions : vardefs(no_in, \"const\"),\n            end         : prev()\n        });\n    };\n\n    var new_ = function(allow_calls) {\n        var start = S.token;\n        expect_token(\"operator\", \"new\");\n        if (is(\"punc\", \".\")) {\n            next();\n            expect_token(\"name\", \"target\");\n            return subscripts(new AST_NewTarget({\n                start : start,\n                end   : prev()\n            }), allow_calls);\n        }\n        var newexp = expr_atom(false), args;\n        if (is(\"punc\", \"(\")) {\n            next();\n            args = expr_list(\")\", options.ecma >= 8);\n        } else {\n            args = [];\n        }\n        var call = new AST_New({\n            start      : start,\n            expression : newexp,\n            args       : args,\n            end        : prev()\n        });\n        mark_pure(call);\n        return subscripts(call, allow_calls);\n    };\n\n    function as_atom_node() {\n        var tok = S.token, ret;\n        switch (tok.type) {\n          case \"name\":\n            ret = _make_symbol(AST_SymbolRef);\n            break;\n          case \"num\":\n            ret = new AST_Number({ start: tok, end: tok, value: tok.value });\n            break;\n          case \"string\":\n            ret = new AST_String({\n                start : tok,\n                end   : tok,\n                value : tok.value,\n                quote : tok.quote\n            });\n            break;\n          case \"regexp\":\n            ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });\n            break;\n          case \"atom\":\n            switch (tok.value) {\n              case \"false\":\n                ret = new AST_False({ start: tok, end: tok });\n                break;\n              case \"true\":\n                ret = new AST_True({ start: tok, end: tok });\n                break;\n              case \"null\":\n                ret = new AST_Null({ start: tok, end: tok });\n                break;\n            }\n            break;\n        }\n        next();\n        return ret;\n    }\n\n    function to_fun_args(ex, _, __, default_seen_above) {\n        var insert_default = function(ex, default_value) {\n            if (default_value) {\n                return new AST_DefaultAssign({\n                    start: ex.start,\n                    left: ex,\n                    operator: \"=\",\n                    right: default_value,\n                    end: default_value.end\n                });\n            }\n            return ex;\n        };\n        if (ex instanceof AST_Object) {\n            return insert_default(new AST_Destructuring({\n                start: ex.start,\n                end: ex.end,\n                is_array: false,\n                names: ex.properties.map(to_fun_args)\n            }), default_seen_above);\n        } else if (ex instanceof AST_ObjectKeyVal) {\n            ex.value = to_fun_args(ex.value, 0, [ex.key]);\n            return insert_default(ex, default_seen_above);\n        } else if (ex instanceof AST_Hole) {\n            return ex;\n        } else if (ex instanceof AST_Destructuring) {\n            ex.names = ex.names.map(to_fun_args);\n            return insert_default(ex, default_seen_above);\n        } else if (ex instanceof AST_SymbolRef) {\n            return insert_default(new AST_SymbolFunarg({\n                name: ex.name,\n                start: ex.start,\n                end: ex.end\n            }), default_seen_above);\n        } else if (ex instanceof AST_Expansion) {\n            ex.expression = to_fun_args(ex.expression);\n            return insert_default(ex, default_seen_above);\n        } else if (ex instanceof AST_Array) {\n            return insert_default(new AST_Destructuring({\n                start: ex.start,\n                end: ex.end,\n                is_array: true,\n                names: ex.elements.map(to_fun_args)\n            }), default_seen_above);\n        } else if (ex instanceof AST_Assign) {\n            return insert_default(to_fun_args(ex.left, undefined, undefined, ex.right), default_seen_above);\n        } else if (ex instanceof AST_DefaultAssign) {\n            ex.left = to_fun_args(ex.left, 0, [ex.left]);\n            return ex;\n        } else {\n            croak(\"Invalid function parameter\", ex.start.line, ex.start.col);\n        }\n    }\n\n    var expr_atom = function(allow_calls, allow_arrows) {\n        if (is(\"operator\", \"new\")) {\n            return new_(allow_calls);\n        }\n        var start = S.token;\n        var peeked;\n        var async = is(\"name\", \"async\")\n            && (peeked = peek()).value != \"[\"\n            && peeked.type != \"arrow\"\n            && as_atom_node();\n        if (is(\"punc\")) {\n            switch (S.token.value) {\n              case \"(\":\n                if (async && !allow_calls) break;\n                var exprs = params_or_seq_(allow_arrows, !async);\n                if (allow_arrows && is(\"arrow\", \"=>\")) {\n                    return arrow_function(start, exprs.map(to_fun_args), !!async);\n                }\n                var ex = async ? new AST_Call({\n                    expression: async,\n                    args: exprs\n                }) : exprs.length == 1 ? exprs[0] : new AST_Sequence({\n                    expressions: exprs\n                });\n                if (ex.start) {\n                    var len = start.comments_before.length;\n                    [].unshift.apply(ex.start.comments_before, start.comments_before);\n                    start.comments_before = ex.start.comments_before;\n                    start.comments_before_length = len;\n                    if (len == 0 && start.comments_before.length > 0) {\n                        var comment = start.comments_before[0];\n                        if (!comment.nlb) {\n                            comment.nlb = start.nlb;\n                            start.nlb = false;\n                        }\n                    }\n                    start.comments_after = ex.start.comments_after;\n                }\n                ex.start = start;\n                var end = prev();\n                if (ex.end) {\n                    end.comments_before = ex.end.comments_before;\n                    [].push.apply(ex.end.comments_after, end.comments_after);\n                    end.comments_after = ex.end.comments_after;\n                }\n                ex.end = end;\n                if (ex instanceof AST_Call) mark_pure(ex);\n                return subscripts(ex, allow_calls);\n              case \"[\":\n                return subscripts(array_(), allow_calls);\n              case \"{\":\n                return subscripts(object_or_destructuring_(), allow_calls);\n            }\n            if (!async) unexpected();\n        }\n        if (allow_arrows && is(\"name\") && is_token(peek(), \"arrow\")) {\n            var param = new AST_SymbolFunarg({\n                name: S.token.value,\n                start: start,\n                end: start,\n            });\n            next();\n            return arrow_function(start, [param], !!async);\n        }\n        if (is(\"keyword\", \"function\")) {\n            next();\n            var func = function_(AST_Function, false, !!async);\n            func.start = start;\n            func.end = prev();\n            return subscripts(func, allow_calls);\n        }\n        if (async) return subscripts(async, allow_calls);\n        if (is(\"keyword\", \"class\")) {\n            next();\n            var cls = class_(AST_ClassExpression);\n            cls.start = start;\n            cls.end = prev();\n            return subscripts(cls, allow_calls);\n        }\n        if (is(\"template_head\")) {\n            return subscripts(template_string(false), allow_calls);\n        }\n        if (ATOMIC_START_TOKEN(S.token.type)) {\n            return subscripts(as_atom_node(), allow_calls);\n        }\n        unexpected();\n    };\n\n    function template_string(tagged) {\n        var segments = [], start = S.token;\n\n        segments.push(new AST_TemplateSegment({\n            start: S.token,\n            raw: S.token.raw,\n            value: S.token.value,\n            end: S.token\n        }));\n        while (S.token.end === false) {\n            next();\n            handle_regexp();\n            segments.push(expression(true));\n\n            if (!is_token(\"template_substitution\")) {\n                unexpected();\n            }\n\n            segments.push(new AST_TemplateSegment({\n                start: S.token,\n                raw: S.token.raw,\n                value: S.token.value,\n                end: S.token\n            }));\n        }\n        next();\n\n        return new AST_TemplateString({\n            start: start,\n            segments: segments,\n            end: S.token\n        });\n    }\n\n    function expr_list(closing, allow_trailing_comma, allow_empty) {\n        var first = true, a = [];\n        while (!is(\"punc\", closing)) {\n            if (first) first = false; else expect(\",\");\n            if (allow_trailing_comma && is(\"punc\", closing)) break;\n            if (is(\"punc\", \",\") && allow_empty) {\n                a.push(new AST_Hole({ start: S.token, end: S.token }));\n            } else if (is(\"expand\", \"...\")) {\n                next();\n                a.push(new AST_Expansion({start: prev(), expression: expression(),end: S.token}));\n            } else {\n                a.push(expression(false));\n            }\n        }\n        next();\n        return a;\n    }\n\n    var array_ = embed_tokens(function() {\n        expect(\"[\");\n        return new AST_Array({\n            elements: expr_list(\"]\", !options.strict, true)\n        });\n    });\n\n    var create_accessor = embed_tokens(function(is_generator, is_async) {\n        return function_(AST_Accessor, is_generator, is_async);\n    });\n\n    var object_or_destructuring_ = embed_tokens(function object_or_destructuring_() {\n        var start = S.token, first = true, a = [];\n        expect(\"{\");\n        while (!is(\"punc\", \"}\")) {\n            if (first) first = false; else expect(\",\");\n            if (!options.strict && is(\"punc\", \"}\"))\n                // allow trailing comma\n                break;\n\n            start = S.token;\n            if (start.type == \"expand\") {\n                next();\n                a.push(new AST_Expansion({\n                    start: start,\n                    expression: expression(false),\n                    end: prev(),\n                }));\n                continue;\n            }\n\n            var name = as_property_name();\n            var value;\n\n            // Check property and fetch value\n            if (!is(\"punc\", \":\")) {\n                var concise = concise_method_or_getset(name, start);\n                if (concise) {\n                    a.push(concise);\n                    continue;\n                }\n\n                value = new AST_SymbolRef({\n                    start: prev(),\n                    name: name,\n                    end: prev()\n                });\n            } else if (name === null) {\n                unexpected(prev());\n            } else {\n                next(); // `:` - see first condition\n                value = expression(false);\n            }\n\n            // Check for default value and alter value accordingly if necessary\n            if (is(\"operator\", \"=\")) {\n                next();\n                value = new AST_Assign({\n                    start: start,\n                    left: value,\n                    operator: \"=\",\n                    right: expression(false),\n                    end: prev()\n                });\n            }\n\n            // Create property\n            a.push(new AST_ObjectKeyVal({\n                start: start,\n                quote: start.quote,\n                key: name instanceof AST_Node ? name : \"\" + name,\n                value: value,\n                end: prev()\n            }));\n        }\n        next();\n        return new AST_Object({ properties: a });\n    });\n\n    function class_(KindOfClass) {\n        var start, method, class_name, extends_, a = [];\n\n        S.input.push_directives_stack(); // Push directive stack, but not scope stack\n        S.input.add_directive(\"use strict\");\n\n        if (S.token.type == \"name\" && S.token.value != \"extends\") {\n            class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);\n        }\n\n        if (KindOfClass === AST_DefClass && !class_name) {\n            unexpected();\n        }\n\n        if (S.token.value == \"extends\") {\n            next();\n            extends_ = expression(true);\n        }\n\n        expect(\"{\");\n\n        if (is(\"punc\", \";\")) { next(); }  // Leading semicolons are okay in class bodies.\n        while (!is(\"punc\", \"}\")) {\n            start = S.token;\n            method = concise_method_or_getset(as_property_name(), start, true);\n            if (!method) { unexpected(); }\n            a.push(method);\n            if (is(\"punc\", \";\")) { next(); }\n        }\n\n        S.input.pop_directives_stack();\n\n        next();\n\n        return new KindOfClass({\n            start: start,\n            name: class_name,\n            extends: extends_,\n            properties: a,\n            end: prev(),\n        });\n    }\n\n    function concise_method_or_getset(name, start, is_class) {\n        var get_ast = function(name, token) {\n            if (typeof name === \"string\" || typeof name === \"number\") {\n                return new AST_SymbolMethod({\n                    start: token,\n                    name: \"\" + name,\n                    end: prev()\n                });\n            } else if (name === null) {\n                unexpected();\n            }\n            return name;\n        };\n        var is_async = false;\n        var is_static = false;\n        var is_generator = false;\n        var property_token = start;\n        if (is_class && name === \"static\" && !is(\"punc\", \"(\")) {\n            is_static = true;\n            property_token = S.token;\n            name = as_property_name();\n        }\n        if (name === \"async\" && !is(\"punc\", \"(\") && !is(\"punc\", \",\") && !is(\"punc\", \"}\")) {\n            is_async = true;\n            property_token = S.token;\n            name = as_property_name();\n        }\n        if (name === null) {\n            is_generator = true;\n            property_token = S.token;\n            name = as_property_name();\n            if (name === null) {\n                unexpected();\n            }\n        }\n        if (is(\"punc\", \"(\")) {\n            name = get_ast(name, start);\n            var node = new AST_ConciseMethod({\n                start       : start,\n                static      : is_static,\n                is_generator: is_generator,\n                async       : is_async,\n                key         : name,\n                quote       : name instanceof AST_SymbolMethod ?\n                              property_token.quote : undefined,\n                value       : create_accessor(is_generator, is_async),\n                end         : prev()\n            });\n            return node;\n        }\n        property_token = S.token;\n        if (name == \"get\") {\n            if (!is(\"punc\") || is(\"punc\", \"[\")) {\n                name = get_ast(as_property_name(), start);\n                return new AST_ObjectGetter({\n                    start : start,\n                    static: is_static,\n                    key   : name,\n                    quote : name instanceof AST_SymbolMethod ?\n                            property_token.quote : undefined,\n                    value : create_accessor(),\n                    end   : prev()\n                });\n            }\n        } else if (name == \"set\") {\n            if (!is(\"punc\") || is(\"punc\", \"[\")) {\n                name = get_ast(as_property_name(), start);\n                return new AST_ObjectSetter({\n                    start : start,\n                    static: is_static,\n                    key   : name,\n                    quote : name instanceof AST_SymbolMethod ?\n                            property_token.quote : undefined,\n                    value : create_accessor(),\n                    end   : prev()\n                });\n            }\n        }\n    }\n\n    function import_() {\n        var start = prev();\n        var imported_name;\n        var imported_names;\n        if (is(\"name\")) {\n            imported_name = as_symbol(AST_SymbolImport);\n        }\n\n        if (is(\"punc\", \",\")) {\n            next();\n        }\n\n        imported_names = map_names(true);\n\n        if (imported_names || imported_name) {\n            expect_token(\"name\", \"from\");\n        }\n        var mod_str = S.token;\n        if (mod_str.type !== \"string\") {\n            unexpected();\n        }\n        next();\n        return new AST_Import({\n            start: start,\n            imported_name: imported_name,\n            imported_names: imported_names,\n            module_name: new AST_String({\n                start: mod_str,\n                value: mod_str.value,\n                quote: mod_str.quote,\n                end: mod_str,\n            }),\n            end: S.token,\n        });\n    }\n\n    function map_name(is_import) {\n        function make_symbol(type) {\n            return new type({\n                name: as_property_name(),\n                start: prev(),\n                end: prev()\n            });\n        }\n\n        var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;\n        var type = is_import ? AST_SymbolImport : AST_SymbolExport;\n        var start = S.token;\n        var foreign_name;\n        var name;\n\n        if (is_import) {\n            foreign_name = make_symbol(foreign_type);\n        } else {\n            name = make_symbol(type);\n        }\n        if (is(\"name\", \"as\")) {\n            next();  // The \"as\" word\n            if (is_import) {\n                name = make_symbol(type);\n            } else {\n                foreign_name = make_symbol(foreign_type);\n            }\n        } else if (is_import) {\n            name = new type(foreign_name);\n        } else {\n            foreign_name = new foreign_type(name);\n        }\n\n        return new AST_NameMapping({\n            start: start,\n            foreign_name: foreign_name,\n            name: name,\n            end: prev(),\n        });\n    }\n\n    function map_nameAsterisk(is_import, name) {\n        var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;\n        var type = is_import ? AST_SymbolImport : AST_SymbolExport;\n        var start = S.token;\n        var foreign_name;\n        var end = prev();\n\n        name = name || new type({\n            name: \"*\",\n            start: start,\n            end: end,\n        });\n\n        foreign_name = new foreign_type({\n            name: \"*\",\n            start: start,\n            end: end,\n        });\n\n        return new AST_NameMapping({\n            start: start,\n            foreign_name: foreign_name,\n            name: name,\n            end: end,\n        });\n    }\n\n    function map_names(is_import) {\n        var names;\n        if (is(\"punc\", \"{\")) {\n            next();\n            names = [];\n            while (!is(\"punc\", \"}\")) {\n                names.push(map_name(is_import));\n                if (is(\"punc\", \",\")) {\n                    next();\n                }\n            }\n            next();\n        } else if (is(\"operator\", \"*\")) {\n            var name;\n            next();\n            if (is_import && is(\"name\", \"as\")) {\n                next();  // The \"as\" word\n                name = as_symbol(is_import ? AST_SymbolImport : AST_SymbolExportForeign);\n            }\n            names = [map_nameAsterisk(is_import, name)];\n        }\n        return names;\n    }\n\n    function export_() {\n        var start = S.token;\n        var is_default;\n        var exported_names;\n\n        if (is(\"keyword\", \"default\")) {\n            is_default = true;\n            next();\n        } else if (exported_names = map_names(false)) {\n            if (is(\"name\", \"from\")) {\n                next();\n\n                var mod_str = S.token;\n                if (mod_str.type !== \"string\") {\n                    unexpected();\n                }\n                next();\n\n                return new AST_Export({\n                    start: start,\n                    is_default: is_default,\n                    exported_names: exported_names,\n                    module_name: new AST_String({\n                        start: mod_str,\n                        value: mod_str.value,\n                        quote: mod_str.quote,\n                        end: mod_str,\n                    }),\n                    end: prev(),\n                });\n            } else {\n                return new AST_Export({\n                    start: start,\n                    is_default: is_default,\n                    exported_names: exported_names,\n                    end: prev(),\n                });\n            }\n        }\n\n        var node;\n        var exported_value;\n        var exported_definition;\n        if (is(\"punc\", \"{\")\n            || is_default\n                && (is(\"keyword\", \"class\") || is(\"keyword\", \"function\"))\n                && is_token(peek(), \"punc\")) {\n            exported_value = expression(false);\n            semicolon();\n        } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) {\n            unexpected(node.start);\n        } else if (node instanceof AST_Definitions || node instanceof AST_Lambda || node instanceof AST_DefClass) {\n            exported_definition = node;\n        } else if (node instanceof AST_SimpleStatement) {\n            exported_value = node.body;\n        } else {\n            unexpected(node.start);\n        }\n\n        return new AST_Export({\n            start: start,\n            is_default: is_default,\n            exported_value: exported_value,\n            exported_definition: exported_definition,\n            end: prev(),\n        });\n    }\n\n    function as_property_name() {\n        var tmp = S.token;\n        switch (tmp.type) {\n          case \"punc\":\n            if (tmp.value === \"[\") {\n                next();\n                var ex = expression(false);\n                expect(\"]\");\n                return ex;\n            } else unexpected(tmp);\n          case \"operator\":\n            if (tmp.value === \"*\") {\n                next();\n                return null;\n            }\n            if ([\"delete\", \"in\", \"instanceof\", \"new\", \"typeof\", \"void\"].indexOf(tmp.value) === -1) {\n                unexpected(tmp);\n            }\n          case \"name\":\n            if (tmp.value == \"yield\") {\n                if (is_in_generator()) {\n                    token_error(tmp, \"Yield cannot be used as identifier inside generators\");\n                } else if (!is_token(peek(), \"punc\", \":\")\n                    && !is_token(peek(), \"punc\", \"(\")\n                    && S.input.has_directive(\"use strict\")) {\n                    token_error(tmp, \"Unexpected yield identifier inside strict mode\");\n                }\n            }\n          case \"string\":\n          case \"num\":\n          case \"keyword\":\n          case \"atom\":\n            next();\n            return tmp.value;\n          default:\n            unexpected(tmp);\n        }\n    }\n\n    function as_name() {\n        var tmp = S.token;\n        if (tmp.type != \"name\") unexpected();\n        next();\n        return tmp.value;\n    }\n\n    function _make_symbol(type) {\n        var name = S.token.value;\n        return new (name == \"this\" ? AST_This :\n                    name == \"super\" ? AST_Super :\n                    type)({\n            name  : String(name),\n            start : S.token,\n            end   : S.token\n        });\n    }\n\n    function _verify_symbol(sym) {\n        var name = sym.name;\n        if (is_in_generator() && name == \"yield\") {\n            token_error(sym.start, \"Yield cannot be used as identifier inside generators\");\n        }\n        if (S.input.has_directive(\"use strict\")) {\n            if (name == \"yield\") {\n                token_error(sym.start, \"Unexpected yield identifier inside strict mode\");\n            }\n            if (sym instanceof AST_SymbolDeclaration && (name == \"arguments\" || name == \"eval\")) {\n                token_error(sym.start, \"Unexpected \" + name + \" in strict mode\");\n            }\n        }\n    }\n\n    function as_symbol(type, noerror) {\n        if (!is(\"name\")) {\n            if (!noerror) croak(\"Name expected\");\n            return null;\n        }\n        var sym = _make_symbol(type);\n        _verify_symbol(sym);\n        next();\n        return sym;\n    }\n\n    function mark_pure(call) {\n        var start = call.start;\n        var comments = start.comments_before;\n        var i = HOP(start, \"comments_before_length\") ? start.comments_before_length : comments.length;\n        while (--i >= 0) {\n            var comment = comments[i];\n            if (/[@#]__PURE__/.test(comment.value)) {\n                call.pure = comment;\n                break;\n            }\n        }\n    }\n\n    var subscripts = function(expr, allow_calls) {\n        var start = expr.start;\n        if (is(\"punc\", \".\")) {\n            next();\n            return subscripts(new AST_Dot({\n                start      : start,\n                expression : expr,\n                property   : as_name(),\n                end        : prev()\n            }), allow_calls);\n        }\n        if (is(\"punc\", \"[\")) {\n            next();\n            var prop = expression(true);\n            expect(\"]\");\n            return subscripts(new AST_Sub({\n                start      : start,\n                expression : expr,\n                property   : prop,\n                end        : prev()\n            }), allow_calls);\n        }\n        if (allow_calls && is(\"punc\", \"(\")) {\n            next();\n            var call = new AST_Call({\n                start      : start,\n                expression : expr,\n                args       : call_args(),\n                end        : prev()\n            });\n            mark_pure(call);\n            return subscripts(call, true);\n        }\n        if (is(\"template_head\")) {\n            return subscripts(new AST_PrefixedTemplateString({\n                start: start,\n                prefix: expr,\n                template_string: template_string(true),\n                end: prev()\n            }), allow_calls);\n        }\n        return expr;\n    };\n\n    var call_args = embed_tokens(function _call_args() {\n        var args = [];\n        while (!is(\"punc\", \")\")) {\n            if (is(\"expand\", \"...\")) {\n                next();\n                args.push(new AST_Expansion({\n                    start: prev(),\n                    expression: expression(false),\n                    end: prev()\n                }));\n            } else {\n                args.push(expression(false));\n            }\n            if (!is(\"punc\", \")\")) {\n                expect(\",\");\n                if (is(\"punc\", \")\") && options.ecma < 8) unexpected();\n            }\n        }\n        next();\n        return args;\n    });\n\n    var maybe_unary = function(allow_calls, allow_arrows) {\n        var start = S.token;\n        if (start.type == \"name\" && start.value == \"await\") {\n            if (is_in_async()) {\n                next();\n                return _await_expression();\n            } else if (S.input.has_directive(\"use strict\")) {\n                token_error(S.token, \"Unexpected await identifier inside strict mode\");\n            }\n        }\n        if (is(\"operator\") && UNARY_PREFIX(start.value)) {\n            next();\n            handle_regexp();\n            var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls));\n            ex.start = start;\n            ex.end = prev();\n            return ex;\n        }\n        var val = expr_atom(allow_calls, allow_arrows);\n        while (is(\"operator\") && UNARY_POSTFIX(S.token.value) && !has_newline_before(S.token)) {\n            if (val instanceof AST_Arrow) unexpected();\n            val = make_unary(AST_UnaryPostfix, S.token, val);\n            val.start = start;\n            val.end = S.token;\n            next();\n        }\n        return val;\n    };\n\n    function make_unary(ctor, token, expr) {\n        var op = token.value;\n        switch (op) {\n          case \"++\":\n          case \"--\":\n            if (!is_assignable(expr))\n                croak(\"Invalid use of \" + op + \" operator\", token.line, token.col, token.pos);\n            break;\n          case \"delete\":\n            if (expr instanceof AST_SymbolRef && S.input.has_directive(\"use strict\"))\n                croak(\"Calling delete on expression not allowed in strict mode\", expr.start.line, expr.start.col, expr.start.pos);\n            break;\n        }\n        return new ctor({ operator: op, expression: expr });\n    }\n\n    var expr_op = function(left, min_prec, no_in) {\n        var op = is(\"operator\") ? S.token.value : null;\n        if (op == \"in\" && no_in) op = null;\n        if (op == \"**\" && left instanceof AST_UnaryPrefix\n            /* unary token in front not allowed - parenthesis required */\n            && !is_token(left.start, \"punc\", \"(\")\n            && left.operator !== \"--\" && left.operator !== \"++\")\n                unexpected(left.start);\n        var prec = op != null ? PRECEDENCE[op] : null;\n        if (prec != null && (prec > min_prec || (op === \"**\" && min_prec === prec))) {\n            next();\n            var right = expr_op(maybe_unary(true), prec, no_in);\n            return expr_op(new AST_Binary({\n                start    : left.start,\n                left     : left,\n                operator : op,\n                right    : right,\n                end      : right.end\n            }), min_prec, no_in);\n        }\n        return left;\n    };\n\n    function expr_ops(no_in) {\n        return expr_op(maybe_unary(true, true), 0, no_in);\n    }\n\n    var maybe_conditional = function(no_in) {\n        var start = S.token;\n        var expr = expr_ops(no_in);\n        if (is(\"operator\", \"?\")) {\n            next();\n            var yes = expression(false);\n            expect(\":\");\n            return new AST_Conditional({\n                start       : start,\n                condition   : expr,\n                consequent  : yes,\n                alternative : expression(false, no_in),\n                end         : prev()\n            });\n        }\n        return expr;\n    };\n\n    function is_assignable(expr) {\n        return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;\n    }\n\n    function to_destructuring(node) {\n        if (node instanceof AST_Object) {\n            node = new AST_Destructuring({\n                start: node.start,\n                names: node.properties.map(to_destructuring),\n                is_array: false,\n                end: node.end\n            });\n        } else if (node instanceof AST_Array) {\n            var names = [];\n\n            for (var i = 0; i < node.elements.length; i++) {\n                // Only allow expansion as last element\n                if (node.elements[i] instanceof AST_Expansion) {\n                    if (i + 1 !== node.elements.length) {\n                        token_error(node.elements[i].start, \"Spread must the be last element in destructuring array\");\n                    }\n                    node.elements[i].expression = to_destructuring(node.elements[i].expression);\n                }\n\n                names.push(to_destructuring(node.elements[i]));\n            }\n\n            node = new AST_Destructuring({\n                start: node.start,\n                names: names,\n                is_array: true,\n                end: node.end\n            });\n        } else if (node instanceof AST_ObjectProperty) {\n            node.value = to_destructuring(node.value);\n        } else if (node instanceof AST_Assign) {\n            node = new AST_DefaultAssign({\n                start: node.start,\n                left: node.left,\n                operator: \"=\",\n                right: node.right,\n                end: node.end\n            });\n        }\n        return node;\n    }\n\n    // In ES6, AssignmentExpression can also be an ArrowFunction\n    var maybe_assign = function(no_in) {\n        handle_regexp();\n        var start = S.token;\n\n        if (start.type == \"name\" && start.value == \"yield\") {\n            if (is_in_generator()) {\n                next();\n                return _yield_expression();\n            } else if (S.input.has_directive(\"use strict\")) {\n                token_error(S.token, \"Unexpected yield identifier inside strict mode\");\n            }\n        }\n\n        var left = maybe_conditional(no_in);\n        var val = S.token.value;\n\n        if (is(\"operator\") && ASSIGNMENT(val)) {\n            if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {\n                next();\n                return new AST_Assign({\n                    start    : start,\n                    left     : left,\n                    operator : val,\n                    right    : maybe_assign(no_in),\n                    end      : prev()\n                });\n            }\n            croak(\"Invalid assignment\");\n        }\n        return left;\n    };\n\n    var expression = function(commas, no_in) {\n        var start = S.token;\n        var exprs = [];\n        while (true) {\n            exprs.push(maybe_assign(no_in));\n            if (!commas || !is(\"punc\", \",\")) break;\n            next();\n            commas = true;\n        }\n        return exprs.length == 1 ? exprs[0] : new AST_Sequence({\n            start       : start,\n            expressions : exprs,\n            end         : peek()\n        });\n    };\n\n    function in_loop(cont) {\n        ++S.in_loop;\n        var ret = cont();\n        --S.in_loop;\n        return ret;\n    }\n\n    if (options.expression) {\n        return expression(true);\n    }\n\n    return (function() {\n        var start = S.token;\n        var body = [];\n        S.input.push_directives_stack();\n        if (options.module) S.input.add_directive(\"use strict\");\n        while (!is(\"eof\"))\n            body.push(statement());\n        S.input.pop_directives_stack();\n        var end = prev();\n        var toplevel = options.toplevel;\n        if (toplevel) {\n            toplevel.body = toplevel.body.concat(body);\n            toplevel.end = end;\n        } else {\n            toplevel = new AST_Toplevel({ start: start, body: body, end: end });\n        }\n        return toplevel;\n    })();\n\n}\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\n// Tree transformer helpers.\n\nfunction TreeTransformer(before, after) {\n    TreeWalker.call(this);\n    this.before = before;\n    this.after = after;\n}\nTreeTransformer.prototype = new TreeWalker;\n\n(function(undefined) {\n\n    function _(node, descend) {\n        node.DEFMETHOD(\"transform\", function(tw, in_list) {\n            var x, y;\n            tw.push(this);\n            if (tw.before) x = tw.before(this, descend, in_list);\n            if (x === undefined) {\n                x = this;\n                descend(x, tw);\n                if (tw.after) {\n                    y = tw.after(x, in_list);\n                    if (y !== undefined) x = y;\n                }\n            }\n            tw.pop();\n            return x;\n        });\n    }\n\n    function do_list(list, tw) {\n        return MAP(list, function(node) {\n            return node.transform(tw, true);\n        });\n    }\n\n    _(AST_Node, noop);\n\n    _(AST_LabeledStatement, function(self, tw) {\n        self.label = self.label.transform(tw);\n        self.body = self.body.transform(tw);\n    });\n\n    _(AST_SimpleStatement, function(self, tw) {\n        self.body = self.body.transform(tw);\n    });\n\n    _(AST_Block, function(self, tw) {\n        self.body = do_list(self.body, tw);\n    });\n\n    _(AST_Do, function(self, tw) {\n        self.body = self.body.transform(tw);\n        self.condition = self.condition.transform(tw);\n    });\n\n    _(AST_While, function(self, tw) {\n        self.condition = self.condition.transform(tw);\n        self.body = self.body.transform(tw);\n    });\n\n    _(AST_For, function(self, tw) {\n        if (self.init) self.init = self.init.transform(tw);\n        if (self.condition) self.condition = self.condition.transform(tw);\n        if (self.step) self.step = self.step.transform(tw);\n        self.body = self.body.transform(tw);\n    });\n\n    _(AST_ForIn, function(self, tw) {\n        self.init = self.init.transform(tw);\n        self.object = self.object.transform(tw);\n        self.body = self.body.transform(tw);\n    });\n\n    _(AST_With, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n        self.body = self.body.transform(tw);\n    });\n\n    _(AST_Exit, function(self, tw) {\n        if (self.value) self.value = self.value.transform(tw);\n    });\n\n    _(AST_LoopControl, function(self, tw) {\n        if (self.label) self.label = self.label.transform(tw);\n    });\n\n    _(AST_If, function(self, tw) {\n        self.condition = self.condition.transform(tw);\n        self.body = self.body.transform(tw);\n        if (self.alternative) self.alternative = self.alternative.transform(tw);\n    });\n\n    _(AST_Switch, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n        self.body = do_list(self.body, tw);\n    });\n\n    _(AST_Case, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n        self.body = do_list(self.body, tw);\n    });\n\n    _(AST_Try, function(self, tw) {\n        self.body = do_list(self.body, tw);\n        if (self.bcatch) self.bcatch = self.bcatch.transform(tw);\n        if (self.bfinally) self.bfinally = self.bfinally.transform(tw);\n    });\n\n    _(AST_Catch, function(self, tw) {\n        if (self.argname) self.argname = self.argname.transform(tw);\n        self.body = do_list(self.body, tw);\n    });\n\n    _(AST_Definitions, function(self, tw) {\n        self.definitions = do_list(self.definitions, tw);\n    });\n\n    _(AST_VarDef, function(self, tw) {\n        self.name = self.name.transform(tw);\n        if (self.value) self.value = self.value.transform(tw);\n    });\n\n    _(AST_Destructuring, function(self, tw) {\n        self.names = do_list(self.names, tw);\n    });\n\n    _(AST_Lambda, function(self, tw) {\n        if (self.name) self.name = self.name.transform(tw);\n        self.argnames = do_list(self.argnames, tw);\n        if (self.body instanceof AST_Node) {\n            self.body = self.body.transform(tw);\n        } else {\n            self.body = do_list(self.body, tw);\n        }\n    });\n\n    _(AST_Call, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n        self.args = do_list(self.args, tw);\n    });\n\n    _(AST_Sequence, function(self, tw) {\n        self.expressions = do_list(self.expressions, tw);\n    });\n\n    _(AST_Dot, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n    });\n\n    _(AST_Sub, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n        self.property = self.property.transform(tw);\n    });\n\n    _(AST_Yield, function(self, tw) {\n        if (self.expression) self.expression = self.expression.transform(tw);\n    });\n\n    _(AST_Await, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n    });\n\n    _(AST_Unary, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n    });\n\n    _(AST_Binary, function(self, tw) {\n        self.left = self.left.transform(tw);\n        self.right = self.right.transform(tw);\n    });\n\n    _(AST_Conditional, function(self, tw) {\n        self.condition = self.condition.transform(tw);\n        self.consequent = self.consequent.transform(tw);\n        self.alternative = self.alternative.transform(tw);\n    });\n\n    _(AST_Array, function(self, tw) {\n        self.elements = do_list(self.elements, tw);\n    });\n\n    _(AST_Object, function(self, tw) {\n        self.properties = do_list(self.properties, tw);\n    });\n\n    _(AST_ObjectProperty, function(self, tw) {\n        if (self.key instanceof AST_Node) {\n            self.key = self.key.transform(tw);\n        }\n        self.value = self.value.transform(tw);\n    });\n\n    _(AST_Class, function(self, tw) {\n        if (self.name) self.name = self.name.transform(tw);\n        if (self.extends) self.extends = self.extends.transform(tw);\n        self.properties = do_list(self.properties, tw);\n    });\n\n    _(AST_Expansion, function(self, tw) {\n        self.expression = self.expression.transform(tw);\n    });\n\n    _(AST_NameMapping, function(self, tw) {\n        self.foreign_name = self.foreign_name.transform(tw);\n        self.name = self.name.transform(tw);\n    });\n\n    _(AST_Import, function(self, tw) {\n        if (self.imported_name) self.imported_name = self.imported_name.transform(tw);\n        if (self.imported_names) do_list(self.imported_names, tw);\n        self.module_name = self.module_name.transform(tw);\n    });\n\n    _(AST_Export, function(self, tw) {\n        if (self.exported_definition) self.exported_definition = self.exported_definition.transform(tw);\n        if (self.exported_value) self.exported_value = self.exported_value.transform(tw);\n        if (self.exported_names) do_list(self.exported_names, tw);\n        if (self.module_name) self.module_name = self.module_name.transform(tw);\n    });\n\n    _(AST_TemplateString, function(self, tw) {\n        self.segments = do_list(self.segments, tw);\n    });\n\n    _(AST_PrefixedTemplateString, function(self, tw) {\n        self.prefix = self.prefix.transform(tw);\n        self.template_string = self.template_string.transform(tw);\n    });\n\n})();\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction SymbolDef(scope, orig, init) {\n    this.name = orig.name;\n    this.orig = [ orig ];\n    this.init = init;\n    this.eliminated = 0;\n    this.scope = scope;\n    this.references = [];\n    this.replaced = 0;\n    this.global = false;\n    this.export = false;\n    this.mangled_name = null;\n    this.undeclared = false;\n    this.id = SymbolDef.next_id++;\n}\n\nSymbolDef.next_id = 1;\n\nvar MASK_EXPORT_DONT_MANGLE = 1 << 0;\nvar MASK_EXPORT_WANT_MANGLE = 1 << 1;\n\nSymbolDef.prototype = {\n    unmangleable: function(options) {\n        if (!options) options = {};\n\n        return this.global && !options.toplevel\n            || (this.export & MASK_EXPORT_DONT_MANGLE)\n            || this.undeclared\n            || !options.eval && this.scope.pinned()\n            || (this.orig[0] instanceof AST_SymbolLambda\n                  || this.orig[0] instanceof AST_SymbolDefun) && keep_name(options.keep_fnames, this.orig[0].name)\n            || this.orig[0] instanceof AST_SymbolMethod\n            || (this.orig[0] instanceof AST_SymbolClass\n                  || this.orig[0] instanceof AST_SymbolDefClass) && keep_name(options.keep_classnames, this.orig[0].name);\n    },\n    mangle: function(options) {\n        var cache = options.cache && options.cache.props;\n        if (this.global && cache && cache.has(this.name)) {\n            this.mangled_name = cache.get(this.name);\n        } else if (!this.mangled_name && !this.unmangleable(options)) {\n            var s = this.scope;\n            var sym = this.orig[0];\n            if (options.ie8 && sym instanceof AST_SymbolLambda)\n                s = s.parent_scope;\n            var def;\n            if (def = this.redefined()) {\n                this.mangled_name = def.mangled_name || def.name;\n            } else\n                this.mangled_name = s.next_mangled(options, this);\n            if (this.global && cache) {\n                cache.set(this.name, this.mangled_name);\n            }\n        }\n    },\n    redefined: function() {\n        return this.defun && this.defun.variables.get(this.name);\n    }\n};\n\nAST_Toplevel.DEFMETHOD(\"figure_out_scope\", function(options) {\n    options = defaults(options, {\n        cache: null,\n        ie8: false,\n        safari10: false,\n    });\n\n    // pass 1: setup scope chaining and handle definitions\n    var self = this;\n    var scope = self.parent_scope = null;\n    var labels = new Dictionary();\n    var defun = null;\n    var in_destructuring = null;\n    var for_scopes = [];\n    var tw = new TreeWalker(function(node, descend) {\n        if (node.is_block_scope()) {\n            var save_scope = scope;\n            node.block_scope = scope = new AST_Scope(node);\n            scope.init_scope_vars(save_scope);\n            if (!(node instanceof AST_Scope)) {\n                scope.uses_with = save_scope.uses_with;\n                scope.uses_eval = save_scope.uses_eval;\n                scope.directives = save_scope.directives;\n            }\n            if (options.safari10) {\n                if (node instanceof AST_For || node instanceof AST_ForIn) {\n                    for_scopes.push(scope);\n                }\n            }\n            descend();\n            scope = save_scope;\n            return true;\n        }\n        if (node instanceof AST_Destructuring) {\n            in_destructuring = node;  // These don't nest\n            descend();\n            in_destructuring = null;\n            return true;\n        }\n        if (node instanceof AST_Scope) {\n            node.init_scope_vars(scope);\n            var save_scope = scope;\n            var save_defun = defun;\n            var save_labels = labels;\n            defun = scope = node;\n            labels = new Dictionary();\n            descend();\n            scope = save_scope;\n            defun = save_defun;\n            labels = save_labels;\n            return true;        // don't descend again in TreeWalker\n        }\n        if (node instanceof AST_LabeledStatement) {\n            var l = node.label;\n            if (labels.has(l.name)) {\n                throw new Error(string_template(\"Label {name} defined twice\", l));\n            }\n            labels.set(l.name, l);\n            descend();\n            labels.del(l.name);\n            return true;        // no descend again\n        }\n        if (node instanceof AST_With) {\n            for (var s = scope; s; s = s.parent_scope)\n                s.uses_with = true;\n            return;\n        }\n        if (node instanceof AST_Symbol) {\n            node.scope = scope;\n        }\n        if (node instanceof AST_Label) {\n            node.thedef = node;\n            node.references = [];\n        }\n        if (node instanceof AST_SymbolLambda) {\n            defun.def_function(node, node.name == \"arguments\" ? undefined : defun);\n        } else if (node instanceof AST_SymbolDefun) {\n            // Careful here, the scope where this should be defined is\n            // the parent scope.  The reason is that we enter a new\n            // scope when we encounter the AST_Defun node (which is\n            // instanceof AST_Scope) but we get to the symbol a bit\n            // later.\n            mark_export((node.scope = defun.parent_scope.get_defun_scope()).def_function(node, defun), 1);\n        } else if (node instanceof AST_SymbolClass) {\n            mark_export(defun.def_variable(node, defun), 1);\n        } else if (node instanceof AST_SymbolImport) {\n            scope.def_variable(node);\n        } else if (node instanceof AST_SymbolDefClass) {\n            // This deals with the name of the class being available\n            // inside the class.\n            mark_export((node.scope = defun.parent_scope).def_function(node, defun), 1);\n        } else if (node instanceof AST_SymbolVar\n            || node instanceof AST_SymbolLet\n            || node instanceof AST_SymbolConst) {\n            var def;\n            if (node instanceof AST_SymbolBlockDeclaration) {\n                def = scope.def_variable(node, null);\n            } else {\n                def = defun.def_variable(node, node.TYPE == \"SymbolVar\" ? null : undefined);\n            }\n            if (!all(def.orig, function(sym) {\n                if (sym === node) return true;\n                if (node instanceof AST_SymbolBlockDeclaration) {\n                    return sym instanceof AST_SymbolLambda;\n                }\n                return !(sym instanceof AST_SymbolLet || sym instanceof AST_SymbolConst);\n            })) {\n                js_error(\n                    node.name + \" redeclared\",\n                    node.start.file,\n                    node.start.line,\n                    node.start.col,\n                    node.start.pos\n                );\n            }\n            if (!(node instanceof AST_SymbolFunarg)) mark_export(def, 2);\n            def.destructuring = in_destructuring;\n            if (defun !== scope) {\n                node.mark_enclosed(options);\n                var def = scope.find_variable(node);\n                if (node.thedef !== def) {\n                    node.thedef = def;\n                    node.reference(options);\n                }\n            }\n        } else if (node instanceof AST_SymbolCatch) {\n            scope.def_variable(node).defun = defun;\n        } else if (node instanceof AST_LabelRef) {\n            var sym = labels.get(node.name);\n            if (!sym) throw new Error(string_template(\"Undefined label {name} [{line},{col}]\", {\n                name: node.name,\n                line: node.start.line,\n                col: node.start.col\n            }));\n            node.thedef = sym;\n        }\n        if (!(scope instanceof AST_Toplevel) && (node instanceof AST_Export || node instanceof AST_Import)) {\n            js_error(\n                node.TYPE + \" statement may only appear at top level\",\n                node.start.file,\n                node.start.line,\n                node.start.col,\n                node.start.pos\n            );\n        }\n\n        function mark_export(def, level) {\n            if (in_destructuring) {\n                var i = 0;\n                do {\n                    level++;\n                } while (tw.parent(i++) !== in_destructuring);\n            }\n            var node = tw.parent(level);\n            if (def.export = node instanceof AST_Export && MASK_EXPORT_DONT_MANGLE) {\n                var exported = node.exported_definition;\n                if ((exported instanceof AST_Defun || exported instanceof AST_DefClass) && node.is_default) {\n                    def.export = MASK_EXPORT_WANT_MANGLE;\n                }\n            }\n        }\n    });\n    self.walk(tw);\n\n    // pass 2: find back references and eval\n    self.globals = new Dictionary();\n    var tw = new TreeWalker(function(node, descend) {\n        if (node instanceof AST_LoopControl && node.label) {\n            node.label.thedef.references.push(node);\n            return true;\n        }\n        if (node instanceof AST_SymbolRef) {\n            var name = node.name;\n            if (name == \"eval\" && tw.parent() instanceof AST_Call) {\n                for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {\n                    s.uses_eval = true;\n                }\n            }\n            var sym;\n            if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name\n                || !(sym = node.scope.find_variable(name))) {\n                sym = self.def_global(node);\n                if (node instanceof AST_SymbolExport) sym.export = MASK_EXPORT_DONT_MANGLE;\n            } else if (sym.scope instanceof AST_Lambda && name == \"arguments\") {\n                sym.scope.uses_arguments = true;\n            }\n            node.thedef = sym;\n            node.reference(options);\n            if (node.scope.is_block_scope()\n                && !(sym.orig[0] instanceof AST_SymbolBlockDeclaration)) {\n                node.scope = node.scope.get_defun_scope();\n            }\n            return true;\n        }\n        // ensure mangling works if catch reuses a scope variable\n        var def;\n        if (node instanceof AST_SymbolCatch && (def = node.definition().redefined())) {\n            var s = node.scope;\n            while (s) {\n                push_uniq(s.enclosed, def);\n                if (s === def.scope) break;\n                s = s.parent_scope;\n            }\n        }\n    });\n    self.walk(tw);\n\n    // pass 3: work around IE8 and Safari catch scope bugs\n    if (options.ie8 || options.safari10) {\n        self.walk(new TreeWalker(function(node, descend) {\n            if (node instanceof AST_SymbolCatch) {\n                var name = node.name;\n                var refs = node.thedef.references;\n                var scope = node.thedef.defun;\n                var def = scope.find_variable(name) || self.globals.get(name) || scope.def_variable(node);\n                refs.forEach(function(ref) {\n                    ref.thedef = def;\n                    ref.reference(options);\n                });\n                node.thedef = def;\n                node.reference(options);\n                return true;\n            }\n        }));\n    }\n\n    // pass 4: add symbol definitions to loop scopes\n    // Safari/Webkit bug workaround - loop init let variable shadowing argument.\n    // https://github.com/mishoo/UglifyJS2/issues/1753\n    // https://bugs.webkit.org/show_bug.cgi?id=171041\n    if (options.safari10) {\n        for (var i = 0; i < for_scopes.length; i++) {\n            var scope = for_scopes[i];\n            scope.parent_scope.variables.each(function(def) {\n                push_uniq(scope.enclosed, def);\n            });\n        }\n    }\n});\n\nAST_Toplevel.DEFMETHOD(\"def_global\", function(node) {\n    var globals = this.globals, name = node.name;\n    if (globals.has(name)) {\n        return globals.get(name);\n    } else {\n        var g = new SymbolDef(this, node);\n        g.undeclared = true;\n        g.global = true;\n        globals.set(name, g);\n        return g;\n    }\n});\n\nAST_Scope.DEFMETHOD(\"init_scope_vars\", function(parent_scope) {\n    this.variables = new Dictionary();  // map name to AST_SymbolVar (variables defined in this scope; includes functions)\n    this.functions = new Dictionary();  // map name to AST_SymbolDefun (functions defined in this scope)\n    this.uses_with = false;             // will be set to true if this or some nested scope uses the `with` statement\n    this.uses_eval = false;             // will be set to true if this or nested scope uses the global `eval`\n    this.parent_scope = parent_scope;   // the parent scope\n    this.enclosed = [];                 // a list of variables from this or outer scope(s) that are referenced from this or inner scopes\n    this.cname = -1;                    // the current index for mangling functions/variables\n});\n\nAST_Node.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Class.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Lambda.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Toplevel.DEFMETHOD(\"is_block_scope\", return_false);\nAST_SwitchBranch.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Block.DEFMETHOD(\"is_block_scope\", return_true);\nAST_IterationStatement.DEFMETHOD(\"is_block_scope\", return_true);\n\nAST_Lambda.DEFMETHOD(\"init_scope_vars\", function() {\n    AST_Scope.prototype.init_scope_vars.apply(this, arguments);\n    this.uses_arguments = false;\n    this.def_variable(new AST_SymbolFunarg({\n        name: \"arguments\",\n        start: this.start,\n        end: this.end\n    }));\n});\n\nAST_Arrow.DEFMETHOD(\"init_scope_vars\", function() {\n    AST_Scope.prototype.init_scope_vars.apply(this, arguments);\n    this.uses_arguments = false;\n});\n\nAST_Symbol.DEFMETHOD(\"mark_enclosed\", function(options) {\n    var def = this.definition();\n    var s = this.scope;\n    while (s) {\n        push_uniq(s.enclosed, def);\n        if (options.keep_fnames) {\n            s.functions.each(function(d) {\n                if (keep_name(options.keep_fnames, d.name)) {\n                    push_uniq(def.scope.enclosed, d);\n                }\n            });\n        }\n        if (s === def.scope) break;\n        s = s.parent_scope;\n    }\n});\n\nAST_Symbol.DEFMETHOD(\"reference\", function(options) {\n    this.definition().references.push(this);\n    this.mark_enclosed(options);\n});\n\nAST_Scope.DEFMETHOD(\"find_variable\", function(name) {\n    if (name instanceof AST_Symbol) name = name.name;\n    return this.variables.get(name)\n        || (this.parent_scope && this.parent_scope.find_variable(name));\n});\n\nAST_Scope.DEFMETHOD(\"def_function\", function(symbol, init) {\n    var def = this.def_variable(symbol, init);\n    if (!def.init || def.init instanceof AST_Defun) def.init = init;\n    this.functions.set(symbol.name, def);\n    return def;\n});\n\nAST_Scope.DEFMETHOD(\"def_variable\", function(symbol, init) {\n    var def = this.variables.get(symbol.name);\n    if (def) {\n        def.orig.push(symbol);\n        if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) {\n            def.init = init;\n        }\n    } else {\n        def = new SymbolDef(this, symbol, init);\n        this.variables.set(symbol.name, def);\n        def.global = !this.parent_scope;\n    }\n    return symbol.thedef = def;\n});\n\nfunction next_mangled(scope, options) {\n    var ext = scope.enclosed;\n    out: while (true) {\n        var m = base54(++scope.cname);\n        if (!is_identifier(m)) continue; // skip over \"do\"\n\n        // https://github.com/mishoo/UglifyJS2/issues/242 -- do not\n        // shadow a name reserved from mangling.\n        if (member(m, options.reserved)) continue;\n\n        // we must ensure that the mangled name does not shadow a name\n        // from some parent scope that is referenced in this or in\n        // inner scopes.\n        for (var i = ext.length; --i >= 0;) {\n            var sym = ext[i];\n            var name = sym.mangled_name || (sym.unmangleable(options) && sym.name);\n            if (m == name) continue out;\n        }\n        return m;\n    }\n}\n\nAST_Scope.DEFMETHOD(\"next_mangled\", function(options) {\n    return next_mangled(this, options);\n});\n\nAST_Toplevel.DEFMETHOD(\"next_mangled\", function(options) {\n    var name;\n    do {\n        name = next_mangled(this, options);\n    } while (member(name, this.mangled_names));\n    return name;\n});\n\nAST_Function.DEFMETHOD(\"next_mangled\", function(options, def) {\n    // #179, #326\n    // in Safari strict mode, something like (function x(x){...}) is a syntax error;\n    // a function expression's argument cannot shadow the function expression's name\n\n    var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();\n\n    // the function's mangled_name is null when keep_fnames is true\n    var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;\n\n    while (true) {\n        var name = next_mangled(this, options);\n        if (!tricky_name || tricky_name != name)\n            return name;\n    }\n});\n\nAST_Symbol.DEFMETHOD(\"unmangleable\", function(options) {\n    var def = this.definition();\n    return !def || def.unmangleable(options);\n});\n\n// labels are always mangleable\nAST_Label.DEFMETHOD(\"unmangleable\", return_false);\n\nAST_Symbol.DEFMETHOD(\"unreferenced\", function() {\n    return !this.definition().references.length && !this.scope.pinned();\n});\n\nAST_Symbol.DEFMETHOD(\"definition\", function() {\n    return this.thedef;\n});\n\nAST_Symbol.DEFMETHOD(\"global\", function() {\n    return this.definition().global;\n});\n\nAST_Toplevel.DEFMETHOD(\"_default_mangler_options\", function(options) {\n    options = defaults(options, {\n        eval        : false,\n        ie8         : false,\n        keep_classnames: false,\n        keep_fnames : false,\n        module      : false,\n        reserved    : [],\n        toplevel    : false,\n    });\n    if (options[\"module\"]) {\n        options.toplevel = true;\n    }\n    if (!Array.isArray(options.reserved)) options.reserved = [];\n    // Never mangle arguments\n    push_uniq(options.reserved, \"arguments\");\n    return options;\n});\n\nAST_Toplevel.DEFMETHOD(\"mangle_names\", function(options) {\n    options = this._default_mangler_options(options);\n\n    // We only need to mangle declaration nodes.  Special logic wired\n    // into the code generator will display the mangled name if it's\n    // present (and for AST_SymbolRef-s it'll use the mangled name of\n    // the AST_SymbolDeclaration that it points to).\n    var lname = -1;\n    var to_mangle = [];\n\n    var mangled_names = this.mangled_names = [];\n    if (options.cache) {\n        this.globals.each(collect);\n        if (options.cache.props) {\n            options.cache.props.each(function(mangled_name) {\n                push_uniq(mangled_names, mangled_name);\n            });\n        }\n    }\n\n    var tw = new TreeWalker(function(node, descend) {\n        if (node instanceof AST_LabeledStatement) {\n            // lname is incremented when we get to the AST_Label\n            var save_nesting = lname;\n            descend();\n            lname = save_nesting;\n            return true;        // don't descend again in TreeWalker\n        }\n        if (node instanceof AST_Scope) {\n            node.variables.each(collect);\n            return;\n        }\n        if (node.is_block_scope()) {\n            node.block_scope.variables.each(collect);\n            return;\n        }\n        if (node instanceof AST_Label) {\n            var name;\n            do name = base54(++lname); while (!is_identifier(name));\n            node.mangled_name = name;\n            return true;\n        }\n        if (!(options.ie8 || options.safari10) && node instanceof AST_SymbolCatch) {\n            to_mangle.push(node.definition());\n            return;\n        }\n    });\n    this.walk(tw);\n    to_mangle.forEach(function(def) { def.mangle(options); });\n\n    function collect(symbol) {\n        if (!member(symbol.name, options.reserved)) {\n            if (!(symbol.export & MASK_EXPORT_DONT_MANGLE)) {\n                to_mangle.push(symbol);\n            }\n        }\n    }\n});\n\nAST_Toplevel.DEFMETHOD(\"find_colliding_names\", function(options) {\n    var cache = options.cache && options.cache.props;\n    var avoid = Object.create(null);\n    options.reserved.forEach(to_avoid);\n    this.globals.each(add_def);\n    this.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_Scope) node.variables.each(add_def);\n        if (node instanceof AST_SymbolCatch) add_def(node.definition());\n    }));\n    return avoid;\n\n    function to_avoid(name) {\n        avoid[name] = true;\n    }\n\n    function add_def(def) {\n        var name = def.name;\n        if (def.global && cache && cache.has(name)) name = cache.get(name);\n        else if (!def.unmangleable(options)) return;\n        to_avoid(name);\n    }\n});\n\nAST_Toplevel.DEFMETHOD(\"expand_names\", function(options) {\n    base54.reset();\n    base54.sort();\n    options = this._default_mangler_options(options);\n    var avoid = this.find_colliding_names(options);\n    var cname = 0;\n    this.globals.each(rename);\n    this.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_Scope) node.variables.each(rename);\n        if (node instanceof AST_SymbolCatch) rename(node.definition());\n    }));\n\n    function next_name() {\n        var name;\n        do {\n            name = base54(cname++);\n        } while (avoid[name] || !is_identifier(name));\n        return name;\n    }\n\n    function rename(def) {\n        if (def.global && options.cache) return;\n        if (def.unmangleable(options)) return;\n        if (member(def.name, options.reserved)) return;\n        var d = def.redefined();\n        def.name = d ? d.name : next_name();\n        def.orig.forEach(function(sym) {\n            sym.name = def.name;\n        });\n        def.references.forEach(function(sym) {\n            sym.name = def.name;\n        });\n    }\n});\n\nAST_Node.DEFMETHOD(\"tail_node\", return_this);\nAST_Sequence.DEFMETHOD(\"tail_node\", function() {\n    return this.expressions[this.expressions.length - 1];\n});\n\nAST_Toplevel.DEFMETHOD(\"compute_char_frequency\", function(options) {\n    options = this._default_mangler_options(options);\n    try {\n        AST_Node.prototype.print = function(stream, force_parens) {\n            this._print(stream, force_parens);\n            if (this instanceof AST_Symbol && !this.unmangleable(options)) {\n                base54.consider(this.name, -1);\n            } else if (options.properties) {\n                if (this instanceof AST_Dot) {\n                    base54.consider(this.property, -1);\n                } else if (this instanceof AST_Sub) {\n                    skip_string(this.property);\n                }\n            }\n        };\n        base54.consider(this.print_to_string(), 1);\n    } finally {\n        AST_Node.prototype.print = AST_Node.prototype._print;\n    }\n    base54.sort();\n\n    function skip_string(node) {\n        if (node instanceof AST_String) {\n            base54.consider(node.value, -1);\n        } else if (node instanceof AST_Conditional) {\n            skip_string(node.consequent);\n            skip_string(node.alternative);\n        } else if (node instanceof AST_Sequence) {\n            skip_string(node.tail_node());\n        }\n    }\n});\n\nvar base54 = (function() {\n    var leading = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_\".split(\"\");\n    var digits = \"0123456789\".split(\"\");\n    var chars, frequency;\n    function reset() {\n        frequency = Object.create(null);\n        leading.forEach(function(ch) {\n            frequency[ch] = 0;\n        });\n        digits.forEach(function(ch) {\n            frequency[ch] = 0;\n        });\n    }\n    base54.consider = function(str, delta) {\n        for (var i = str.length; --i >= 0;) {\n            frequency[str[i]] += delta;\n        }\n    };\n    function compare(a, b) {\n        return frequency[b] - frequency[a];\n    }\n    base54.sort = function() {\n        chars = mergeSort(leading, compare).concat(mergeSort(digits, compare));\n    };\n    base54.reset = reset;\n    reset();\n    function base54(num) {\n        var ret = \"\", base = 54;\n        num++;\n        do {\n            num--;\n            ret += chars[num % base];\n            num = Math.floor(num / base);\n            base = 64;\n        } while (num > 0);\n        return ret;\n    }\n    return base54;\n})();\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nvar EXPECT_DIRECTIVE = /^$|[;{][\\s\\n]*$/;\n\nfunction is_some_comments(comment) {\n    // multiline comment\n    return comment.type == \"comment2\" && /@preserve|@license|@cc_on/i.test(comment.value);\n}\n\nfunction OutputStream(options) {\n\n    var readonly = !options;\n    options = defaults(options, {\n        ascii_only       : false,\n        beautify         : false,\n        braces           : false,\n        comments         : false,\n        ecma             : 5,\n        ie8              : false,\n        indent_level     : 4,\n        indent_start     : 0,\n        inline_script    : true,\n        keep_quoted_props: false,\n        max_line_len     : false,\n        preamble         : null,\n        quote_keys       : false,\n        quote_style      : 0,\n        safari10         : false,\n        semicolons       : true,\n        shebang          : true,\n        shorthand        : undefined,\n        source_map       : null,\n        webkit           : false,\n        width            : 80,\n        wrap_iife        : false,\n    }, true);\n\n    if (options.shorthand === undefined)\n        options.shorthand = options.ecma > 5;\n\n    // Convert comment option to RegExp if neccessary and set up comments filter\n    var comment_filter = return_false; // Default case, throw all comments away\n    if (options.comments) {\n        var comments = options.comments;\n        if (typeof options.comments === \"string\" && /^\\/.*\\/[a-zA-Z]*$/.test(options.comments)) {\n            var regex_pos = options.comments.lastIndexOf(\"/\");\n            comments = new RegExp(\n                options.comments.substr(1, regex_pos - 1),\n                options.comments.substr(regex_pos + 1)\n            );\n        }\n        if (comments instanceof RegExp) {\n            comment_filter = function(comment) {\n                return comment.type != \"comment5\" && comments.test(comment.value);\n            };\n        } else if (typeof comments === \"function\") {\n            comment_filter = function(comment) {\n                return comment.type != \"comment5\" && comments(this, comment);\n            };\n        } else if (comments === \"some\") {\n            comment_filter = is_some_comments;\n        } else { // NOTE includes \"all\" option\n            comment_filter = return_true;\n        }\n    }\n\n    var indentation = 0;\n    var current_col = 0;\n    var current_line = 1;\n    var current_pos = 0;\n    var OUTPUT = \"\";\n\n    var to_utf8 = options.ascii_only ? function(str, identifier) {\n        if (options.ecma >= 6) {\n            str = str.replace(/[\\ud800-\\udbff][\\udc00-\\udfff]/g, function(ch) {\n                var code = get_full_char_code(ch, 0).toString(16);\n                return \"\\\\u{\" + code + \"}\";\n            });\n        }\n        return str.replace(/[\\u0000-\\u001f\\u007f-\\uffff]/g, function(ch) {\n            var code = ch.charCodeAt(0).toString(16);\n            if (code.length <= 2 && !identifier) {\n                while (code.length < 2) code = \"0\" + code;\n                return \"\\\\x\" + code;\n            } else {\n                while (code.length < 4) code = \"0\" + code;\n                return \"\\\\u\" + code;\n            }\n        });\n    } : function(str) {\n        var s = \"\";\n        for (var i = 0, len = str.length; i < len; i++) {\n            if (is_surrogate_pair_head(str[i]) && !is_surrogate_pair_tail(str[i + 1])\n                || is_surrogate_pair_tail(str[i]) && !is_surrogate_pair_head(str[i - 1])) {\n                s += \"\\\\u\" + str.charCodeAt(i).toString(16);\n            } else {\n                s += str[i];\n            }\n        }\n        return s;\n    };\n\n    function make_string(str, quote) {\n        var dq = 0, sq = 0;\n        str = str.replace(/[\\\\\\b\\f\\n\\r\\v\\t\\x22\\x27\\u2028\\u2029\\0\\ufeff]/g,\n          function(s, i) {\n            switch (s) {\n              case '\"': ++dq; return '\"';\n              case \"'\": ++sq; return \"'\";\n              case \"\\\\\": return \"\\\\\\\\\";\n              case \"\\n\": return \"\\\\n\";\n              case \"\\r\": return \"\\\\r\";\n              case \"\\t\": return \"\\\\t\";\n              case \"\\b\": return \"\\\\b\";\n              case \"\\f\": return \"\\\\f\";\n              case \"\\x0B\": return options.ie8 ? \"\\\\x0B\" : \"\\\\v\";\n              case \"\\u2028\": return \"\\\\u2028\";\n              case \"\\u2029\": return \"\\\\u2029\";\n              case \"\\ufeff\": return \"\\\\ufeff\";\n              case \"\\0\":\n                  return /[0-9]/.test(get_full_char(str, i+1)) ? \"\\\\x00\" : \"\\\\0\";\n            }\n            return s;\n        });\n        function quote_single() {\n            return \"'\" + str.replace(/\\x27/g, \"\\\\'\") + \"'\";\n        }\n        function quote_double() {\n            return '\"' + str.replace(/\\x22/g, '\\\\\"') + '\"';\n        }\n        function quote_template() {\n            return \"`\" + str.replace(/`/g, \"\\\\`\") + \"`\";\n        }\n        str = to_utf8(str);\n        if (quote === \"`\") return quote_template();\n        switch (options.quote_style) {\n          case 1:\n            return quote_single();\n          case 2:\n            return quote_double();\n          case 3:\n            return quote == \"'\" ? quote_single() : quote_double();\n          default:\n            return dq > sq ? quote_single() : quote_double();\n        }\n    }\n\n    function encode_string(str, quote) {\n        var ret = make_string(str, quote);\n        if (options.inline_script) {\n            ret = ret.replace(/<\\x2f(script)([>\\/\\t\\n\\f\\r ])/gi, \"<\\\\/$1$2\");\n            ret = ret.replace(/\\x3c!--/g, \"\\\\x3c!--\");\n            ret = ret.replace(/--\\x3e/g, \"--\\\\x3e\");\n        }\n        return ret;\n    }\n\n    function make_name(name) {\n        name = name.toString();\n        name = to_utf8(name, true);\n        return name;\n    }\n\n    function make_indent(back) {\n        return repeat_string(\" \", options.indent_start + indentation - back * options.indent_level);\n    }\n\n    /* -----[ beautification/minification ]----- */\n\n    var has_parens = false;\n    var might_need_space = false;\n    var might_need_semicolon = false;\n    var might_add_newline = 0;\n    var need_newline_indented = false;\n    var need_space = false;\n    var newline_insert = -1;\n    var last = \"\";\n    var mapping_token, mapping_name, mappings = options.source_map && [];\n\n    var do_add_mapping = mappings ? function() {\n        mappings.forEach(function(mapping) {\n            try {\n                options.source_map.add(\n                    mapping.token.file,\n                    mapping.line, mapping.col,\n                    mapping.token.line, mapping.token.col,\n                    !mapping.name && mapping.token.type == \"name\" ? mapping.token.value : mapping.name\n                );\n            } catch(ex) {\n                mapping.token.file != null && AST_Node.warn(\"Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]\", {\n                    file: mapping.token.file,\n                    line: mapping.token.line,\n                    col: mapping.token.col,\n                    cline: mapping.line,\n                    ccol: mapping.col,\n                    name: mapping.name || \"\"\n                });\n            }\n        });\n        mappings = [];\n    } : noop;\n\n    var ensure_line_len = options.max_line_len ? function() {\n        if (current_col > options.max_line_len) {\n            if (might_add_newline) {\n                var left = OUTPUT.slice(0, might_add_newline);\n                var right = OUTPUT.slice(might_add_newline);\n                if (mappings) {\n                    var delta = right.length - current_col;\n                    mappings.forEach(function(mapping) {\n                        mapping.line++;\n                        mapping.col += delta;\n                    });\n                }\n                OUTPUT = left + \"\\n\" + right;\n                current_line++;\n                current_pos++;\n                current_col = right.length;\n            }\n            if (current_col > options.max_line_len) {\n                AST_Node.warn(\"Output exceeds {max_line_len} characters\", options);\n            }\n        }\n        if (might_add_newline) {\n            might_add_newline = 0;\n            do_add_mapping();\n        }\n    } : noop;\n\n    var requireSemicolonChars = makePredicate(\"( [ + * / - , . `\");\n\n    function print(str) {\n        str = String(str);\n        var ch = get_full_char(str, 0);\n        var prev = get_full_char(last, last.length - 1);\n        if (need_newline_indented && ch) {\n            need_newline_indented = false;\n            if (ch != \"\\n\") {\n                print(\"\\n\");\n                indent();\n            }\n        }\n        if (need_space && ch) {\n            need_space = false;\n            if (!/[\\s;})]/.test(ch)) {\n                space();\n            }\n        }\n        newline_insert = -1;\n        var prev = last.charAt(last.length - 1);\n        if (might_need_semicolon) {\n            might_need_semicolon = false;\n\n            if (prev == \":\" && ch == \"}\" || (!ch || \";}\".indexOf(ch) < 0) && prev != \";\") {\n                if (options.semicolons || requireSemicolonChars(ch)) {\n                    OUTPUT += \";\";\n                    current_col++;\n                    current_pos++;\n                } else {\n                    ensure_line_len();\n                    OUTPUT += \"\\n\";\n                    current_pos++;\n                    current_line++;\n                    current_col = 0;\n\n                    if (/^\\s+$/.test(str)) {\n                        // reset the semicolon flag, since we didn't print one\n                        // now and might still have to later\n                        might_need_semicolon = true;\n                    }\n                }\n\n                if (!options.beautify)\n                    might_need_space = false;\n            }\n        }\n\n        if (might_need_space) {\n            if ((is_identifier_char(prev)\n                    && (is_identifier_char(ch) || ch == \"\\\\\"))\n                || (ch == \"/\" && ch == prev)\n                || ((ch == \"+\" || ch == \"-\") && ch == last)\n            ) {\n                OUTPUT += \" \";\n                current_col++;\n                current_pos++;\n            }\n            might_need_space = false;\n        }\n\n        if (mapping_token) {\n            mappings.push({\n                token: mapping_token,\n                name: mapping_name,\n                line: current_line,\n                col: current_col\n            });\n            mapping_token = false;\n            if (!might_add_newline) do_add_mapping();\n        }\n\n        OUTPUT += str;\n        has_parens = str[str.length - 1] == \"(\";\n        current_pos += str.length;\n        var a = str.split(/\\r?\\n/), n = a.length - 1;\n        current_line += n;\n        current_col += a[0].length;\n        if (n > 0) {\n            ensure_line_len();\n            current_col = a[n].length;\n        }\n        last = str;\n    }\n\n    var star = function() {\n        print(\"*\");\n    };\n\n    var space = options.beautify ? function() {\n        print(\" \");\n    } : function() {\n        might_need_space = true;\n    };\n\n    var indent = options.beautify ? function(half) {\n        if (options.beautify) {\n            print(make_indent(half ? 0.5 : 0));\n        }\n    } : noop;\n\n    var with_indent = options.beautify ? function(col, cont) {\n        if (col === true) col = next_indent();\n        var save_indentation = indentation;\n        indentation = col;\n        var ret = cont();\n        indentation = save_indentation;\n        return ret;\n    } : function(col, cont) { return cont(); };\n\n    var newline = options.beautify ? function() {\n        if (newline_insert < 0) return print(\"\\n\");\n        if (OUTPUT[newline_insert] != \"\\n\") {\n            OUTPUT = OUTPUT.slice(0, newline_insert) + \"\\n\" + OUTPUT.slice(newline_insert);\n            current_pos++;\n            current_line++;\n        }\n        newline_insert++;\n    } : options.max_line_len ? function() {\n        ensure_line_len();\n        might_add_newline = OUTPUT.length;\n    } : noop;\n\n    var semicolon = options.beautify ? function() {\n        print(\";\");\n    } : function() {\n        might_need_semicolon = true;\n    };\n\n    function force_semicolon() {\n        might_need_semicolon = false;\n        print(\";\");\n    }\n\n    function next_indent() {\n        return indentation + options.indent_level;\n    }\n\n    function with_block(cont) {\n        var ret;\n        print(\"{\");\n        newline();\n        with_indent(next_indent(), function() {\n            ret = cont();\n        });\n        indent();\n        print(\"}\");\n        return ret;\n    }\n\n    function with_parens(cont) {\n        print(\"(\");\n        //XXX: still nice to have that for argument lists\n        //var ret = with_indent(current_col, cont);\n        var ret = cont();\n        print(\")\");\n        return ret;\n    }\n\n    function with_square(cont) {\n        print(\"[\");\n        //var ret = with_indent(current_col, cont);\n        var ret = cont();\n        print(\"]\");\n        return ret;\n    }\n\n    function comma() {\n        print(\",\");\n        space();\n    }\n\n    function colon() {\n        print(\":\");\n        space();\n    }\n\n    var add_mapping = mappings ? function(token, name) {\n        mapping_token = token;\n        mapping_name = name;\n    } : noop;\n\n    function get() {\n        if (might_add_newline) {\n            ensure_line_len();\n        }\n        return OUTPUT;\n    }\n\n    function has_nlb() {\n        var index = OUTPUT.lastIndexOf(\"\\n\");\n        return /^ *$/.test(OUTPUT.slice(index + 1));\n    }\n\n    function prepend_comments(node) {\n        var self = this;\n        var start = node.start;\n        if (!start) return;\n        if (start.comments_before && start.comments_before._dumped === self) return;\n        var comments = start.comments_before;\n        if (!comments) {\n            comments = start.comments_before = [];\n        }\n        comments._dumped = self;\n\n        if (node instanceof AST_Exit && node.value) {\n            var tw = new TreeWalker(function(node) {\n                var parent = tw.parent();\n                if (parent instanceof AST_Exit\n                    || parent instanceof AST_Binary && parent.left === node\n                    || parent.TYPE == \"Call\" && parent.expression === node\n                    || parent instanceof AST_Conditional && parent.condition === node\n                    || parent instanceof AST_Dot && parent.expression === node\n                    || parent instanceof AST_Sequence && parent.expressions[0] === node\n                    || parent instanceof AST_Sub && parent.expression === node\n                    || parent instanceof AST_UnaryPostfix) {\n                    if (!node.start) return;\n                    var text = node.start.comments_before;\n                    if (text && text._dumped !== self) {\n                        text._dumped = self;\n                        comments = comments.concat(text);\n                    }\n                } else {\n                    return true;\n                }\n            });\n            tw.push(node);\n            node.value.walk(tw);\n        }\n\n        if (current_pos == 0) {\n            if (comments.length > 0 && options.shebang && comments[0].type == \"comment5\") {\n                print(\"#!\" + comments.shift().value + \"\\n\");\n                indent();\n            }\n            var preamble = options.preamble;\n            if (preamble) {\n                print(preamble.replace(/\\r\\n?|[\\n\\u2028\\u2029]|\\s*$/g, \"\\n\"));\n            }\n        }\n\n        comments = comments.filter(comment_filter, node);\n        if (comments.length == 0) return;\n        var last_nlb = has_nlb();\n        comments.forEach(function(c, i) {\n            if (!last_nlb) {\n                if (c.nlb) {\n                    print(\"\\n\");\n                    indent();\n                    last_nlb = true;\n                } else if (i > 0) {\n                    space();\n                }\n            }\n            if (/comment[134]/.test(c.type)) {\n                print(\"//\" + c.value.replace(/[@#]__PURE__/g, \" \") + \"\\n\");\n                indent();\n                last_nlb = true;\n            } else if (c.type == \"comment2\") {\n                print(\"/*\" + c.value.replace(/[@#]__PURE__/g, \" \") + \"*/\");\n                last_nlb = false;\n            }\n        });\n        if (!last_nlb) {\n            if (start.nlb) {\n                print(\"\\n\");\n                indent();\n            } else {\n                space();\n            }\n        }\n    }\n\n    function append_comments(node, tail) {\n        var self = this;\n        var token = node.end;\n        if (!token) return;\n        var comments = token[tail ? \"comments_before\" : \"comments_after\"];\n        if (!comments || comments._dumped === self) return;\n        if (!(node instanceof AST_Statement || all(comments, function(c) {\n            return !/comment[134]/.test(c.type);\n        }))) return;\n        comments._dumped = self;\n        var insert = OUTPUT.length;\n        comments.filter(comment_filter, node).forEach(function(c, i) {\n            need_space = false;\n            if (need_newline_indented) {\n                print(\"\\n\");\n                indent();\n                need_newline_indented = false;\n            } else if (c.nlb && (i > 0 || !has_nlb())) {\n                print(\"\\n\");\n                indent();\n            } else if (i > 0 || !tail) {\n                space();\n            }\n            if (/comment[134]/.test(c.type)) {\n                print(\"//\" + c.value.replace(/[@#]__PURE__/g, \" \"));\n                need_newline_indented = true;\n            } else if (c.type == \"comment2\") {\n                print(\"/*\" + c.value.replace(/[@#]__PURE__/g, \" \") + \"*/\");\n                need_space = true;\n            }\n        });\n        if (OUTPUT.length > insert) newline_insert = insert;\n    }\n\n    var stack = [];\n    return {\n        get             : get,\n        toString        : get,\n        indent          : indent,\n        indentation     : function() { return indentation; },\n        current_width   : function() { return current_col - indentation; },\n        should_break    : function() { return options.width && this.current_width() >= options.width; },\n        has_parens      : function() { return has_parens; },\n        newline         : newline,\n        print           : print,\n        star            : star,\n        space           : space,\n        comma           : comma,\n        colon           : colon,\n        last            : function() { return last; },\n        semicolon       : semicolon,\n        force_semicolon : force_semicolon,\n        to_utf8         : to_utf8,\n        print_name      : function(name) { print(make_name(name)); },\n        print_string    : function(str, quote, escape_directive) {\n            var encoded = encode_string(str, quote);\n            if (escape_directive === true && encoded.indexOf(\"\\\\\") === -1) {\n                // Insert semicolons to break directive prologue\n                if (!EXPECT_DIRECTIVE.test(OUTPUT)) {\n                    force_semicolon();\n                }\n                force_semicolon();\n            }\n            print(encoded);\n        },\n        print_template_string_chars: function(str) {\n            var encoded = encode_string(str, \"`\").replace(/\\${/g, \"\\\\${\");\n            return print(encoded.substr(1, encoded.length - 2));\n        },\n        encode_string   : encode_string,\n        next_indent     : next_indent,\n        with_indent     : with_indent,\n        with_block      : with_block,\n        with_parens     : with_parens,\n        with_square     : with_square,\n        add_mapping     : add_mapping,\n        option          : function(opt) { return options[opt]; },\n        prepend_comments: readonly ? noop : prepend_comments,\n        append_comments : readonly || comment_filter === return_false ? noop : append_comments,\n        line            : function() { return current_line; },\n        col             : function() { return current_col; },\n        pos             : function() { return current_pos; },\n        push_node       : function(node) { stack.push(node); },\n        pop_node        : function() { return stack.pop(); },\n        parent          : function(n) {\n            return stack[stack.length - 2 - (n || 0)];\n        }\n    };\n\n}\n\n/* -----[ code generators ]----- */\n\n(function() {\n\n    /* -----[ utils ]----- */\n\n    function DEFPRINT(nodetype, generator) {\n        nodetype.DEFMETHOD(\"_codegen\", generator);\n    }\n\n    var in_directive = false;\n    var active_scope = null;\n    var use_asm = null;\n\n    AST_Node.DEFMETHOD(\"print\", function(stream, force_parens) {\n        var self = this, generator = self._codegen;\n        if (self instanceof AST_Scope) {\n            active_scope = self;\n        } else if (!use_asm && self instanceof AST_Directive && self.value == \"use asm\") {\n            use_asm = active_scope;\n        }\n        function doit() {\n            stream.prepend_comments(self);\n            self.add_source_map(stream);\n            generator(self, stream);\n            stream.append_comments(self);\n        }\n        stream.push_node(self);\n        if (force_parens || self.needs_parens(stream)) {\n            stream.with_parens(doit);\n        } else {\n            doit();\n        }\n        stream.pop_node();\n        if (self === use_asm) {\n            use_asm = null;\n        }\n    });\n    AST_Node.DEFMETHOD(\"_print\", AST_Node.prototype.print);\n\n    AST_Node.DEFMETHOD(\"print_to_string\", function(options) {\n        var s = OutputStream(options);\n        this.print(s);\n        return s.get();\n    });\n\n    /* -----[ PARENTHESES ]----- */\n\n    function PARENS(nodetype, func) {\n        if (Array.isArray(nodetype)) {\n            nodetype.forEach(function(nodetype) {\n                PARENS(nodetype, func);\n            });\n        } else {\n            nodetype.DEFMETHOD(\"needs_parens\", func);\n        }\n    }\n\n    PARENS(AST_Node, return_false);\n\n    // a function expression needs parens around it when it's provably\n    // the first token to appear in a statement.\n    PARENS(AST_Function, function(output) {\n        if (!output.has_parens() && first_in_statement(output)) {\n            return true;\n        }\n\n        if (output.option(\"webkit\")) {\n            var p = output.parent();\n            if (p instanceof AST_PropAccess && p.expression === this) {\n                return true;\n            }\n        }\n\n        if (output.option(\"wrap_iife\")) {\n            var p = output.parent();\n            return p instanceof AST_Call && p.expression === this;\n        }\n\n        return false;\n    });\n\n    PARENS(AST_Arrow, function(output) {\n        var p = output.parent();\n        return p instanceof AST_PropAccess && p.expression === this;\n    });\n\n    // same goes for an object literal, because otherwise it would be\n    // interpreted as a block of code.\n    PARENS(AST_Object, function(output) {\n        return !output.has_parens() && first_in_statement(output);\n    });\n\n    PARENS(AST_ClassExpression, first_in_statement);\n\n    PARENS(AST_Unary, function(output) {\n        var p = output.parent();\n        return p instanceof AST_PropAccess && p.expression === this\n            || p instanceof AST_Call && p.expression === this\n            || p instanceof AST_Binary\n                && p.operator === \"**\"\n                && this instanceof AST_UnaryPrefix\n                && p.left === this\n                && this.operator !== \"++\"\n                && this.operator !== \"--\";\n    });\n\n    PARENS(AST_Await, function(output) {\n        var p = output.parent();\n        return p instanceof AST_PropAccess && p.expression === this\n            || p instanceof AST_Call && p.expression === this\n            || output.option(\"safari10\") && p instanceof AST_UnaryPrefix;\n    });\n\n    PARENS(AST_Sequence, function(output) {\n        var p = output.parent();\n        return p instanceof AST_Call                          // (foo, bar)() or foo(1, (2, 3), 4)\n            || p instanceof AST_Unary                         // !(foo, bar, baz)\n            || p instanceof AST_Binary                        // 1 + (2, 3) + 4 ==> 8\n            || p instanceof AST_VarDef                        // var a = (1, 2), b = a + a; ==> b == 4\n            || p instanceof AST_PropAccess                    // (1, {foo:2}).foo or (1, {foo:2})[\"foo\"] ==> 2\n            || p instanceof AST_Array                         // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]\n            || p instanceof AST_ObjectProperty                // { foo: (1, 2) }.foo ==> 2\n            || p instanceof AST_Conditional                   /* (false, true) ? (a = 10, b = 20) : (c = 30)\n                                                               * ==> 20 (side effect, set a := 10 and b := 20) */\n            || p instanceof AST_Arrow                         // x => (x, x)\n            || p instanceof AST_DefaultAssign                 // x => (x = (0, function(){}))\n            || p instanceof AST_Expansion                     // [...(a, b)]\n            || p instanceof AST_ForOf && this === p.object    // for (e of (foo, bar)) {}\n            || p instanceof AST_Yield                         // yield (foo, bar)\n            || p instanceof AST_Export                        // export default (foo, bar)\n        ;\n    });\n\n    PARENS(AST_Binary, function(output) {\n        var p = output.parent();\n        // (foo && bar)()\n        if (p instanceof AST_Call && p.expression === this)\n            return true;\n        // typeof (foo && bar)\n        if (p instanceof AST_Unary)\n            return true;\n        // (foo && bar)[\"prop\"], (foo && bar).prop\n        if (p instanceof AST_PropAccess && p.expression === this)\n            return true;\n        // this deals with precedence: 3 * (2 + 1)\n        if (p instanceof AST_Binary) {\n            var po = p.operator, pp = PRECEDENCE[po];\n            var so = this.operator, sp = PRECEDENCE[so];\n            if (pp > sp\n                || (pp == sp\n                    && (this === p.right || po == \"**\"))) {\n                return true;\n            }\n        }\n    });\n\n    PARENS(AST_Yield, function(output) {\n        var p = output.parent();\n        // (yield 1) + (yield 2)\n        // a = yield 3\n        if (p instanceof AST_Binary && p.operator !== \"=\")\n            return true;\n        // (yield 1)()\n        // new (yield 1)()\n        if (p instanceof AST_Call && p.expression === this)\n            return true;\n        // (yield 1) ? yield 2 : yield 3\n        if (p instanceof AST_Conditional && p.condition === this)\n            return true;\n        // -(yield 4)\n        if (p instanceof AST_Unary)\n            return true;\n        // (yield x).foo\n        // (yield x)['foo']\n        if (p instanceof AST_PropAccess && p.expression === this)\n            return true;\n    });\n\n    PARENS(AST_PropAccess, function(output) {\n        var p = output.parent();\n        if (p instanceof AST_New && p.expression === this) {\n            // i.e. new (foo.bar().baz)\n            //\n            // if there's one call into this subtree, then we need\n            // parens around it too, otherwise the call will be\n            // interpreted as passing the arguments to the upper New\n            // expression.\n            var parens = false;\n            this.walk(new TreeWalker(function(node) {\n                if (parens || node instanceof AST_Scope) return true;\n                if (node instanceof AST_Call) {\n                    parens = true;\n                    return true;\n                }\n            }));\n            return parens;\n        }\n    });\n\n    PARENS(AST_Call, function(output) {\n        var p = output.parent(), p1;\n        if (p instanceof AST_New && p.expression === this\n            || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function)\n            return true;\n\n        // workaround for Safari bug.\n        // https://bugs.webkit.org/show_bug.cgi?id=123506\n        return this.expression instanceof AST_Function\n            && p instanceof AST_PropAccess\n            && p.expression === this\n            && (p1 = output.parent(1)) instanceof AST_Assign\n            && p1.left === p;\n    });\n\n    PARENS(AST_New, function(output) {\n        var p = output.parent();\n        if (!need_constructor_parens(this, output)\n            && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)[\"getTime\"]()\n                || p instanceof AST_Call && p.expression === this)) // (new foo)(bar)\n            return true;\n    });\n\n    PARENS(AST_Number, function(output) {\n        var p = output.parent();\n        if (p instanceof AST_PropAccess && p.expression === this) {\n            var value = this.getValue();\n            if (value < 0 || /^0/.test(make_num(value))) {\n                return true;\n            }\n        }\n    });\n\n    PARENS([ AST_Assign, AST_Conditional ], function(output) {\n        var p = output.parent();\n        // !(a = false) → true\n        if (p instanceof AST_Unary)\n            return true;\n        // 1 + (a = 2) + 3 → 6, side effect setting a = 2\n        if (p instanceof AST_Binary && !(p instanceof AST_Assign))\n            return true;\n        // (a = func)() —or— new (a = Object)()\n        if (p instanceof AST_Call && p.expression === this)\n            return true;\n        // (a = foo) ? bar : baz\n        if (p instanceof AST_Conditional && p.condition === this)\n            return true;\n        // (a = foo)[\"prop\"] —or— (a = foo).prop\n        if (p instanceof AST_PropAccess && p.expression === this)\n            return true;\n        // ({a, b} = {a: 1, b: 2}), a destructuring assignment\n        if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false)\n            return true;\n    });\n\n    /* -----[ PRINTERS ]----- */\n\n    DEFPRINT(AST_Directive, function(self, output) {\n        output.print_string(self.value, self.quote);\n        output.semicolon();\n    });\n\n    DEFPRINT(AST_Expansion, function (self, output) {\n        output.print(\"...\");\n        self.expression.print(output);\n    });\n\n    DEFPRINT(AST_Destructuring, function (self, output) {\n        output.print(self.is_array ? \"[\" : \"{\");\n        var len = self.names.length;\n        self.names.forEach(function (name, i) {\n            if (i > 0) output.comma();\n            name.print(output);\n            // If the final element is a hole, we need to make sure it\n            // doesn't look like a trailing comma, by inserting an actual\n            // trailing comma.\n            if (i == len - 1 && name instanceof AST_Hole) output.comma();\n        });\n        output.print(self.is_array ? \"]\" : \"}\");\n    });\n\n    DEFPRINT(AST_Debugger, function(self, output) {\n        output.print(\"debugger\");\n        output.semicolon();\n    });\n\n    /* -----[ statements ]----- */\n\n    function display_body(body, is_toplevel, output, allow_directives) {\n        var last = body.length - 1;\n        in_directive = allow_directives;\n        body.forEach(function(stmt, i) {\n            if (in_directive === true && !(stmt instanceof AST_Directive ||\n                stmt instanceof AST_EmptyStatement ||\n                (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)\n            )) {\n                in_directive = false;\n            }\n            if (!(stmt instanceof AST_EmptyStatement)) {\n                output.indent();\n                stmt.print(output);\n                if (!(i == last && is_toplevel)) {\n                    output.newline();\n                    if (is_toplevel) output.newline();\n                }\n            }\n            if (in_directive === true &&\n                stmt instanceof AST_SimpleStatement &&\n                stmt.body instanceof AST_String\n            ) {\n                in_directive = false;\n            }\n        });\n        in_directive = false;\n    }\n\n    AST_StatementWithBody.DEFMETHOD(\"_do_print_body\", function(output) {\n        force_statement(this.body, output);\n    });\n\n    DEFPRINT(AST_Statement, function(self, output) {\n        self.body.print(output);\n        output.semicolon();\n    });\n    DEFPRINT(AST_Toplevel, function(self, output) {\n        display_body(self.body, true, output, true);\n        output.print(\"\");\n    });\n    DEFPRINT(AST_LabeledStatement, function(self, output) {\n        self.label.print(output);\n        output.colon();\n        self.body.print(output);\n    });\n    DEFPRINT(AST_SimpleStatement, function(self, output) {\n        self.body.print(output);\n        output.semicolon();\n    });\n    function print_braced_empty(self, output) {\n        output.print(\"{\");\n        output.with_indent(output.next_indent(), function() {\n            output.append_comments(self, true);\n        });\n        output.print(\"}\");\n    }\n    function print_braced(self, output, allow_directives) {\n        if (self.body.length > 0) {\n            output.with_block(function() {\n                display_body(self.body, false, output, allow_directives);\n            });\n        } else print_braced_empty(self, output);\n    }\n    DEFPRINT(AST_BlockStatement, function(self, output) {\n        print_braced(self, output);\n    });\n    DEFPRINT(AST_EmptyStatement, function(self, output) {\n        output.semicolon();\n    });\n    DEFPRINT(AST_Do, function(self, output) {\n        output.print(\"do\");\n        output.space();\n        make_block(self.body, output);\n        output.space();\n        output.print(\"while\");\n        output.space();\n        output.with_parens(function() {\n            self.condition.print(output);\n        });\n        output.semicolon();\n    });\n    DEFPRINT(AST_While, function(self, output) {\n        output.print(\"while\");\n        output.space();\n        output.with_parens(function() {\n            self.condition.print(output);\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_For, function(self, output) {\n        output.print(\"for\");\n        output.space();\n        output.with_parens(function() {\n            if (self.init) {\n                if (self.init instanceof AST_Definitions) {\n                    self.init.print(output);\n                } else {\n                    parenthesize_for_noin(self.init, output, true);\n                }\n                output.print(\";\");\n                output.space();\n            } else {\n                output.print(\";\");\n            }\n            if (self.condition) {\n                self.condition.print(output);\n                output.print(\";\");\n                output.space();\n            } else {\n                output.print(\";\");\n            }\n            if (self.step) {\n                self.step.print(output);\n            }\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_ForIn, function(self, output) {\n        output.print(\"for\");\n        if (self.await) {\n            output.space();\n            output.print(\"await\");\n        }\n        output.space();\n        output.with_parens(function() {\n            self.init.print(output);\n            output.space();\n            output.print(self instanceof AST_ForOf ? \"of\" : \"in\");\n            output.space();\n            self.object.print(output);\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_With, function(self, output) {\n        output.print(\"with\");\n        output.space();\n        output.with_parens(function() {\n            self.expression.print(output);\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n\n    /* -----[ functions ]----- */\n    AST_Lambda.DEFMETHOD(\"_do_print\", function(output, nokeyword) {\n        var self = this;\n        if (!nokeyword) {\n            if (self.async) {\n                output.print(\"async\");\n                output.space();\n            }\n            output.print(\"function\");\n            if (self.is_generator) {\n                output.star();\n            }\n            if (self.name) {\n                output.space();\n            }\n        }\n        if (self.name instanceof AST_Symbol) {\n            self.name.print(output);\n        } else if (nokeyword && self.name instanceof AST_Node) {\n            output.with_square(function() {\n                self.name.print(output); // Computed method name\n            });\n        }\n        output.with_parens(function() {\n            self.argnames.forEach(function(arg, i) {\n                if (i) output.comma();\n                arg.print(output);\n            });\n        });\n        output.space();\n        print_braced(self, output, true);\n    });\n    DEFPRINT(AST_Lambda, function(self, output) {\n        self._do_print(output);\n    });\n\n    DEFPRINT(AST_PrefixedTemplateString, function(self, output) {\n        var tag = self.prefix;\n        var parenthesize_tag = tag instanceof AST_Arrow\n            || tag instanceof AST_Binary\n            || tag instanceof AST_Conditional\n            || tag instanceof AST_Sequence\n            || tag instanceof AST_Unary;\n        if (parenthesize_tag) output.print(\"(\");\n        self.prefix.print(output);\n        if (parenthesize_tag) output.print(\")\");\n        self.template_string.print(output);\n    });\n    DEFPRINT(AST_TemplateString, function(self, output) {\n        var is_tagged = output.parent() instanceof AST_PrefixedTemplateString;\n\n        output.print(\"`\");\n        for (var i = 0; i < self.segments.length; i++) {\n            if (!(self.segments[i] instanceof AST_TemplateSegment)) {\n                output.print(\"${\");\n                self.segments[i].print(output);\n                output.print(\"}\");\n            } else if (is_tagged) {\n                output.print(self.segments[i].raw);\n            } else {\n                output.print_template_string_chars(self.segments[i].value);\n            }\n        }\n        output.print(\"`\");\n    });\n\n    AST_Arrow.DEFMETHOD(\"_do_print\", function(output) {\n        var self = this;\n        var parent = output.parent();\n        var needs_parens = parent instanceof AST_Binary ||\n            parent instanceof AST_Unary ||\n            (parent instanceof AST_Call && self === parent.expression);\n        if (needs_parens) { output.print(\"(\"); }\n        if (self.async) {\n            output.print(\"async\");\n            output.space();\n        }\n        if (self.argnames.length === 1 && self.argnames[0] instanceof AST_Symbol) {\n            self.argnames[0].print(output);\n        } else {\n            output.with_parens(function() {\n                self.argnames.forEach(function(arg, i) {\n                    if (i) output.comma();\n                    arg.print(output);\n                });\n            });\n        }\n        output.space();\n        output.print(\"=>\");\n        output.space();\n        if (self.body instanceof AST_Node) {\n            self.body.print(output);\n        } else {\n            print_braced(self, output);\n        }\n        if (needs_parens) { output.print(\")\"); }\n    });\n\n    /* -----[ exits ]----- */\n    AST_Exit.DEFMETHOD(\"_do_print\", function(output, kind) {\n        output.print(kind);\n        if (this.value) {\n            output.space();\n            this.value.print(output);\n        }\n        output.semicolon();\n    });\n    DEFPRINT(AST_Return, function(self, output) {\n        self._do_print(output, \"return\");\n    });\n    DEFPRINT(AST_Throw, function(self, output) {\n        self._do_print(output, \"throw\");\n    });\n\n    /* -----[ yield ]----- */\n\n    DEFPRINT(AST_Yield, function(self, output) {\n        var star = self.is_star ? \"*\" : \"\";\n        output.print(\"yield\" + star);\n        if (self.expression) {\n            output.space();\n            self.expression.print(output);\n        }\n    });\n\n    DEFPRINT(AST_Await, function(self, output) {\n        output.print(\"await\");\n        output.space();\n        var e = self.expression;\n        var parens = !(\n               e instanceof AST_Call\n            || e instanceof AST_SymbolRef\n            || e instanceof AST_PropAccess\n            || e instanceof AST_Unary\n            || e instanceof AST_Constant\n        );\n        if (parens) output.print(\"(\");\n        self.expression.print(output);\n        if (parens) output.print(\")\");\n    });\n\n    /* -----[ loop control ]----- */\n    AST_LoopControl.DEFMETHOD(\"_do_print\", function(output, kind) {\n        output.print(kind);\n        if (this.label) {\n            output.space();\n            this.label.print(output);\n        }\n        output.semicolon();\n    });\n    DEFPRINT(AST_Break, function(self, output) {\n        self._do_print(output, \"break\");\n    });\n    DEFPRINT(AST_Continue, function(self, output) {\n        self._do_print(output, \"continue\");\n    });\n\n    /* -----[ if ]----- */\n    function make_then(self, output) {\n        var b = self.body;\n        if (output.option(\"braces\")\n            || output.option(\"ie8\") && b instanceof AST_Do)\n            return make_block(b, output);\n        // The squeezer replaces \"block\"-s that contain only a single\n        // statement with the statement itself; technically, the AST\n        // is correct, but this can create problems when we output an\n        // IF having an ELSE clause where the THEN clause ends in an\n        // IF *without* an ELSE block (then the outer ELSE would refer\n        // to the inner IF).  This function checks for this case and\n        // adds the block braces if needed.\n        if (!b) return output.force_semicolon();\n        while (true) {\n            if (b instanceof AST_If) {\n                if (!b.alternative) {\n                    make_block(self.body, output);\n                    return;\n                }\n                b = b.alternative;\n            } else if (b instanceof AST_StatementWithBody) {\n                b = b.body;\n            } else break;\n        }\n        force_statement(self.body, output);\n    }\n    DEFPRINT(AST_If, function(self, output) {\n        output.print(\"if\");\n        output.space();\n        output.with_parens(function() {\n            self.condition.print(output);\n        });\n        output.space();\n        if (self.alternative) {\n            make_then(self, output);\n            output.space();\n            output.print(\"else\");\n            output.space();\n            if (self.alternative instanceof AST_If)\n                self.alternative.print(output);\n            else\n                force_statement(self.alternative, output);\n        } else {\n            self._do_print_body(output);\n        }\n    });\n\n    /* -----[ switch ]----- */\n    DEFPRINT(AST_Switch, function(self, output) {\n        output.print(\"switch\");\n        output.space();\n        output.with_parens(function() {\n            self.expression.print(output);\n        });\n        output.space();\n        var last = self.body.length - 1;\n        if (last < 0) print_braced_empty(self, output);\n        else output.with_block(function() {\n            self.body.forEach(function(branch, i) {\n                output.indent(true);\n                branch.print(output);\n                if (i < last && branch.body.length > 0)\n                    output.newline();\n            });\n        });\n    });\n    AST_SwitchBranch.DEFMETHOD(\"_do_print_body\", function(output) {\n        output.newline();\n        this.body.forEach(function(stmt) {\n            output.indent();\n            stmt.print(output);\n            output.newline();\n        });\n    });\n    DEFPRINT(AST_Default, function(self, output) {\n        output.print(\"default:\");\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_Case, function(self, output) {\n        output.print(\"case\");\n        output.space();\n        self.expression.print(output);\n        output.print(\":\");\n        self._do_print_body(output);\n    });\n\n    /* -----[ exceptions ]----- */\n    DEFPRINT(AST_Try, function(self, output) {\n        output.print(\"try\");\n        output.space();\n        print_braced(self, output);\n        if (self.bcatch) {\n            output.space();\n            self.bcatch.print(output);\n        }\n        if (self.bfinally) {\n            output.space();\n            self.bfinally.print(output);\n        }\n    });\n    DEFPRINT(AST_Catch, function(self, output) {\n        output.print(\"catch\");\n        if (self.argname) {\n            output.space();\n            output.with_parens(function() {\n                self.argname.print(output);\n            });\n        }\n        output.space();\n        print_braced(self, output);\n    });\n    DEFPRINT(AST_Finally, function(self, output) {\n        output.print(\"finally\");\n        output.space();\n        print_braced(self, output);\n    });\n\n    /* -----[ var/const ]----- */\n    AST_Definitions.DEFMETHOD(\"_do_print\", function(output, kind) {\n        output.print(kind);\n        output.space();\n        this.definitions.forEach(function(def, i) {\n            if (i) output.comma();\n            def.print(output);\n        });\n        var p = output.parent();\n        var in_for = p instanceof AST_For || p instanceof AST_ForIn;\n        var output_semicolon = !in_for || p && p.init !== this;\n        if (output_semicolon)\n            output.semicolon();\n    });\n    DEFPRINT(AST_Let, function(self, output) {\n        self._do_print(output, \"let\");\n    });\n    DEFPRINT(AST_Var, function(self, output) {\n        self._do_print(output, \"var\");\n    });\n    DEFPRINT(AST_Const, function(self, output) {\n        self._do_print(output, \"const\");\n    });\n    DEFPRINT(AST_Import, function(self, output) {\n        output.print(\"import\");\n        output.space();\n        if (self.imported_name) {\n            self.imported_name.print(output);\n        }\n        if (self.imported_name && self.imported_names) {\n            output.print(\",\");\n            output.space();\n        }\n        if (self.imported_names) {\n            if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === \"*\") {\n                self.imported_names[0].print(output);\n            } else {\n                output.print(\"{\");\n                self.imported_names.forEach(function (name_import, i) {\n                    output.space();\n                    name_import.print(output);\n                    if (i < self.imported_names.length - 1) {\n                        output.print(\",\");\n                    }\n                });\n                output.space();\n                output.print(\"}\");\n            }\n        }\n        if (self.imported_name || self.imported_names) {\n            output.space();\n            output.print(\"from\");\n            output.space();\n        }\n        self.module_name.print(output);\n        output.semicolon();\n    });\n\n    DEFPRINT(AST_NameMapping, function(self, output) {\n        var is_import = output.parent() instanceof AST_Import;\n        var definition = self.name.definition();\n        var names_are_different =\n            (definition && definition.mangled_name || self.name.name) !==\n            self.foreign_name.name;\n        if (names_are_different) {\n            if (is_import) {\n                output.print(self.foreign_name.name);\n            } else {\n                self.name.print(output);\n            }\n            output.space();\n            output.print(\"as\");\n            output.space();\n            if (is_import) {\n                self.name.print(output);\n            } else {\n                output.print(self.foreign_name.name);\n            }\n        } else {\n            self.name.print(output);\n        }\n    });\n\n    DEFPRINT(AST_Export, function(self, output) {\n        output.print(\"export\");\n        output.space();\n        if (self.is_default) {\n            output.print(\"default\");\n            output.space();\n        }\n        if (self.exported_names) {\n            if (self.exported_names.length === 1 && self.exported_names[0].name.name === \"*\") {\n                self.exported_names[0].print(output);\n            } else {\n                output.print(\"{\");\n                self.exported_names.forEach(function(name_export, i) {\n                    output.space();\n                    name_export.print(output);\n                    if (i < self.exported_names.length - 1) {\n                        output.print(\",\");\n                    }\n                });\n                output.space();\n                output.print(\"}\");\n            }\n        } else if (self.exported_value) {\n            self.exported_value.print(output);\n        } else if (self.exported_definition) {\n            self.exported_definition.print(output);\n            if (self.exported_definition instanceof AST_Definitions) return;\n        }\n        if (self.module_name) {\n            output.space();\n            output.print(\"from\");\n            output.space();\n            self.module_name.print(output);\n        }\n        if (self.exported_value\n                && !(self.exported_value instanceof AST_Defun ||\n                    self.exported_value instanceof AST_Function ||\n                    self.exported_value instanceof AST_Class)\n            || self.module_name\n            || self.exported_names\n        ) {\n            output.semicolon();\n        }\n    });\n\n    function parenthesize_for_noin(node, output, noin) {\n        var parens = false;\n        // need to take some precautions here:\n        //    https://github.com/mishoo/UglifyJS2/issues/60\n        if (noin) node.walk(new TreeWalker(function(node) {\n            if (parens || node instanceof AST_Scope) return true;\n            if (node instanceof AST_Binary && node.operator == \"in\") {\n                parens = true;\n                return true;\n            }\n        }));\n        node.print(output, parens);\n    }\n\n    DEFPRINT(AST_VarDef, function(self, output) {\n        self.name.print(output);\n        if (self.value) {\n            output.space();\n            output.print(\"=\");\n            output.space();\n            var p = output.parent(1);\n            var noin = p instanceof AST_For || p instanceof AST_ForIn;\n            parenthesize_for_noin(self.value, output, noin);\n        }\n    });\n\n    /* -----[ other expressions ]----- */\n    DEFPRINT(AST_Call, function(self, output) {\n        self.expression.print(output);\n        if (self instanceof AST_New && !need_constructor_parens(self, output))\n            return;\n        if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {\n            output.add_mapping(self.start);\n        }\n        output.with_parens(function() {\n            self.args.forEach(function(expr, i) {\n                if (i) output.comma();\n                expr.print(output);\n            });\n        });\n    });\n    DEFPRINT(AST_New, function(self, output) {\n        output.print(\"new\");\n        output.space();\n        AST_Call.prototype._codegen(self, output);\n    });\n\n    AST_Sequence.DEFMETHOD(\"_do_print\", function(output) {\n        this.expressions.forEach(function(node, index) {\n            if (index > 0) {\n                output.comma();\n                if (output.should_break()) {\n                    output.newline();\n                    output.indent();\n                }\n            }\n            node.print(output);\n        });\n    });\n    DEFPRINT(AST_Sequence, function(self, output) {\n        self._do_print(output);\n        // var p = output.parent();\n        // if (p instanceof AST_Statement) {\n        //     output.with_indent(output.next_indent(), function(){\n        //         self._do_print(output);\n        //     });\n        // } else {\n        //     self._do_print(output);\n        // }\n    });\n    DEFPRINT(AST_Dot, function(self, output) {\n        var expr = self.expression;\n        expr.print(output);\n        var prop = self.property;\n        if (output.option(\"ie8\") && RESERVED_WORDS(prop)) {\n            output.print(\"[\");\n            output.add_mapping(self.end);\n            output.print_string(prop);\n            output.print(\"]\");\n        } else {\n            if (expr instanceof AST_Number && expr.getValue() >= 0) {\n                if (!/[xa-f.)]/i.test(output.last())) {\n                    output.print(\".\");\n                }\n            }\n            output.print(\".\");\n            // the name after dot would be mapped about here.\n            output.add_mapping(self.end);\n            output.print_name(prop);\n        }\n    });\n    DEFPRINT(AST_Sub, function(self, output) {\n        self.expression.print(output);\n        output.print(\"[\");\n        self.property.print(output);\n        output.print(\"]\");\n    });\n    DEFPRINT(AST_UnaryPrefix, function(self, output) {\n        var op = self.operator;\n        output.print(op);\n        if (/^[a-z]/i.test(op)\n            || (/[+-]$/.test(op)\n                && self.expression instanceof AST_UnaryPrefix\n                && /^[+-]/.test(self.expression.operator))) {\n            output.space();\n        }\n        self.expression.print(output);\n    });\n    DEFPRINT(AST_UnaryPostfix, function(self, output) {\n        self.expression.print(output);\n        output.print(self.operator);\n    });\n    DEFPRINT(AST_Binary, function(self, output) {\n        var op = self.operator;\n        self.left.print(output);\n        if (op[0] == \">\" /* \">>\" \">>>\" \">\" \">=\" */\n            && self.left instanceof AST_UnaryPostfix\n            && self.left.operator == \"--\") {\n            // space is mandatory to avoid outputting -->\n            output.print(\" \");\n        } else {\n            // the space is optional depending on \"beautify\"\n            output.space();\n        }\n        output.print(op);\n        if ((op == \"<\" || op == \"<<\")\n            && self.right instanceof AST_UnaryPrefix\n            && self.right.operator == \"!\"\n            && self.right.expression instanceof AST_UnaryPrefix\n            && self.right.expression.operator == \"--\") {\n            // space is mandatory to avoid outputting <!--\n            output.print(\" \");\n        } else {\n            // the space is optional depending on \"beautify\"\n            output.space();\n        }\n        self.right.print(output);\n    });\n    DEFPRINT(AST_Conditional, function(self, output) {\n        self.condition.print(output);\n        output.space();\n        output.print(\"?\");\n        output.space();\n        self.consequent.print(output);\n        output.space();\n        output.colon();\n        self.alternative.print(output);\n    });\n\n    /* -----[ literals ]----- */\n    DEFPRINT(AST_Array, function(self, output) {\n        output.with_square(function() {\n            var a = self.elements, len = a.length;\n            if (len > 0) output.space();\n            a.forEach(function(exp, i) {\n                if (i) output.comma();\n                exp.print(output);\n                // If the final element is a hole, we need to make sure it\n                // doesn't look like a trailing comma, by inserting an actual\n                // trailing comma.\n                if (i === len - 1 && exp instanceof AST_Hole)\n                  output.comma();\n            });\n            if (len > 0) output.space();\n        });\n    });\n    DEFPRINT(AST_Object, function(self, output) {\n        if (self.properties.length > 0) output.with_block(function() {\n            self.properties.forEach(function(prop, i) {\n                if (i) {\n                    output.print(\",\");\n                    output.newline();\n                }\n                output.indent();\n                prop.print(output);\n            });\n            output.newline();\n        });\n        else print_braced_empty(self, output);\n    });\n    DEFPRINT(AST_Class, function(self, output) {\n        output.print(\"class\");\n        output.space();\n        if (self.name) {\n            self.name.print(output);\n            output.space();\n        }\n        if (self.extends) {\n            var parens = (\n                   !(self.extends instanceof AST_SymbolRef)\n                && !(self.extends instanceof AST_PropAccess)\n                && !(self.extends instanceof AST_ClassExpression)\n                && !(self.extends instanceof AST_Function)\n            );\n            output.print(\"extends\");\n            if (parens) {\n                output.print(\"(\");\n            } else {\n                output.space();\n            }\n            self.extends.print(output);\n            if (parens) {\n                output.print(\")\");\n            } else {\n                output.space();\n            }\n        }\n        if (self.properties.length > 0) output.with_block(function() {\n            self.properties.forEach(function(prop, i) {\n                if (i) {\n                    output.newline();\n                }\n                output.indent();\n                prop.print(output);\n            });\n            output.newline();\n        });\n        else output.print(\"{}\");\n    });\n    DEFPRINT(AST_NewTarget, function(self, output) {\n        output.print(\"new.target\");\n    });\n\n    function print_property_name(key, quote, output) {\n        if (output.option(\"quote_keys\")) {\n            output.print_string(key);\n        } else if (\"\" + +key == key && key >= 0) {\n            output.print(make_num(key));\n        } else if (RESERVED_WORDS(key) ? !output.option(\"ie8\") : is_identifier_string(key)) {\n            if (quote && output.option(\"keep_quoted_props\")) {\n                output.print_string(key, quote);\n            } else {\n                output.print_name(key);\n            }\n        } else {\n            output.print_string(key, quote);\n        }\n    }\n\n    DEFPRINT(AST_ObjectKeyVal, function(self, output) {\n        function get_name(self) {\n            var def = self.definition();\n            return def ? def.mangled_name || def.name : self.name;\n        }\n\n        var allowShortHand = output.option(\"shorthand\");\n        if (allowShortHand &&\n            self.value instanceof AST_Symbol &&\n            is_identifier_string(self.key) &&\n            get_name(self.value) === self.key &&\n            is_identifier(self.key)\n        ) {\n            print_property_name(self.key, self.quote, output);\n\n        } else if (allowShortHand &&\n            self.value instanceof AST_DefaultAssign &&\n            self.value.left instanceof AST_Symbol &&\n            is_identifier_string(self.key) &&\n            get_name(self.value.left) === self.key\n        ) {\n            print_property_name(self.key, self.quote, output);\n            output.space();\n            output.print(\"=\");\n            output.space();\n            self.value.right.print(output);\n        } else {\n            if (!(self.key instanceof AST_Node)) {\n                print_property_name(self.key, self.quote, output);\n            } else {\n                output.with_square(function() {\n                    self.key.print(output);\n                });\n            }\n            output.colon();\n            self.value.print(output);\n        }\n    });\n    AST_ObjectProperty.DEFMETHOD(\"_print_getter_setter\", function(type, output) {\n        var self = this;\n        if (self.static) {\n            output.print(\"static\");\n            output.space();\n        }\n        if (type) {\n            output.print(type);\n            output.space();\n        }\n        if (self.key instanceof AST_SymbolMethod) {\n            print_property_name(self.key.name, self.quote, output);\n        } else {\n            output.with_square(function() {\n                self.key.print(output);\n            });\n        }\n        self.value._do_print(output, true);\n    });\n    DEFPRINT(AST_ObjectSetter, function(self, output) {\n        self._print_getter_setter(\"set\", output);\n    });\n    DEFPRINT(AST_ObjectGetter, function(self, output) {\n        self._print_getter_setter(\"get\", output);\n    });\n    DEFPRINT(AST_ConciseMethod, function(self, output) {\n        var type;\n        if (self.is_generator && self.async) {\n            type = \"async*\";\n        } else if (self.is_generator) {\n            type = \"*\";\n        } else if (self.async) {\n            type = \"async\";\n        }\n        self._print_getter_setter(type, output);\n    });\n    AST_Symbol.DEFMETHOD(\"_do_print\", function(output) {\n        var def = this.definition();\n        output.print_name(def ? def.mangled_name || def.name : this.name);\n    });\n    DEFPRINT(AST_Symbol, function (self, output) {\n        self._do_print(output);\n    });\n    DEFPRINT(AST_Hole, noop);\n    DEFPRINT(AST_This, function(self, output) {\n        output.print(\"this\");\n    });\n    DEFPRINT(AST_Super, function(self, output) {\n        output.print(\"super\");\n    });\n    DEFPRINT(AST_Constant, function(self, output) {\n        output.print(self.getValue());\n    });\n    DEFPRINT(AST_String, function(self, output) {\n        output.print_string(self.getValue(), self.quote, in_directive);\n    });\n    DEFPRINT(AST_Number, function(self, output) {\n        if (use_asm && self.start && self.start.raw != null) {\n            output.print(self.start.raw);\n        } else {\n            output.print(make_num(self.getValue()));\n        }\n    });\n\n    DEFPRINT(AST_RegExp, function(self, output) {\n        var regexp = self.getValue();\n        var str = regexp.toString();\n        str = output.to_utf8(str);\n        output.print(str);\n        var p = output.parent();\n        if (p instanceof AST_Binary && /^in/.test(p.operator) && p.left === self)\n            output.print(\" \");\n    });\n\n    function force_statement(stat, output) {\n        if (output.option(\"braces\")) {\n            make_block(stat, output);\n        } else {\n            if (!stat || stat instanceof AST_EmptyStatement)\n                output.force_semicolon();\n            else\n                stat.print(output);\n        }\n    }\n\n    // self should be AST_New.  decide if we want to show parens or not.\n    function need_constructor_parens(self, output) {\n        // Always print parentheses with arguments\n        if (self.args.length > 0) return true;\n\n        return output.option(\"beautify\");\n    }\n\n    function best_of(a) {\n        var best = a[0], len = best.length;\n        for (var i = 1; i < a.length; ++i) {\n            if (a[i].length < len) {\n                best = a[i];\n                len = best.length;\n            }\n        }\n        return best;\n    }\n\n    function make_num(num) {\n        var str = num.toString(10), a = [ str.replace(/^0\\./, \".\").replace(\"e+\", \"e\") ], m;\n        if (Math.floor(num) === num) {\n            if (num >= 0) {\n                a.push(\"0x\" + num.toString(16).toLowerCase(), // probably pointless\n                       \"0\" + num.toString(8)); // same.\n            } else {\n                a.push(\"-0x\" + (-num).toString(16).toLowerCase(), // probably pointless\n                       \"-0\" + (-num).toString(8)); // same.\n            }\n            if ((m = /^(.*?)(0+)$/.exec(num))) {\n                a.push(m[1] + \"e\" + m[2].length);\n            }\n        } else if ((m = /^0?\\.(0+)(.*)$/.exec(num))) {\n            a.push(m[2] + \"e-\" + (m[1].length + m[2].length),\n                   str.substr(str.indexOf(\".\")));\n        }\n        return best_of(a);\n    }\n\n    function make_block(stmt, output) {\n        if (!stmt || stmt instanceof AST_EmptyStatement)\n            output.print(\"{}\");\n        else if (stmt instanceof AST_BlockStatement)\n            stmt.print(output);\n        else output.with_block(function() {\n            output.indent();\n            stmt.print(output);\n            output.newline();\n        });\n    }\n\n    /* -----[ source map generators ]----- */\n\n    function DEFMAP(nodetype, generator) {\n        nodetype.forEach(function(nodetype) {\n            nodetype.DEFMETHOD(\"add_source_map\", generator);\n        });\n    }\n\n    DEFMAP([\n        // We could easily add info for ALL nodes, but it seems to me that\n        // would be quite wasteful, hence this noop in the base class.\n        AST_Node,\n        // since the label symbol will mark it\n        AST_LabeledStatement,\n        AST_Toplevel,\n    ], noop);\n\n    // XXX: I'm not exactly sure if we need it for all of these nodes,\n    // or if we should add even more.\n    DEFMAP([\n        AST_Array,\n        AST_BlockStatement,\n        AST_Catch,\n        AST_Class,\n        AST_Constant,\n        AST_Debugger,\n        AST_Definitions,\n        AST_Directive,\n        AST_Finally,\n        AST_Jump,\n        AST_Lambda,\n        AST_New,\n        AST_Object,\n        AST_StatementWithBody,\n        AST_Symbol,\n        AST_Switch,\n        AST_SwitchBranch,\n        AST_Try,\n    ], function(output) {\n        output.add_mapping(this.start);\n    });\n\n    DEFMAP([\n        AST_ObjectGetter,\n        AST_ObjectSetter,\n    ], function(output) {\n        output.add_mapping(this.start, this.key.name);\n    });\n\n    DEFMAP([ AST_ObjectProperty ], function(output) {\n        output.add_mapping(this.start, this.key);\n    });\n})();\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction Compressor(options, false_by_default) {\n    if (!(this instanceof Compressor))\n        return new Compressor(options, false_by_default);\n    TreeTransformer.call(this, this.before, this.after);\n    if (options.defaults !== undefined && !options.defaults) false_by_default = true;\n    this.options = defaults(options, {\n        arguments     : false,\n        arrows        : !false_by_default,\n        booleans      : !false_by_default,\n        booleans_as_integers : false,\n        collapse_vars : !false_by_default,\n        comparisons   : !false_by_default,\n        computed_props: !false_by_default,\n        conditionals  : !false_by_default,\n        dead_code     : !false_by_default,\n        defaults      : true,\n        directives    : !false_by_default,\n        drop_console  : false,\n        drop_debugger : !false_by_default,\n        ecma          : 5,\n        evaluate      : !false_by_default,\n        expression    : false,\n        global_defs   : false,\n        hoist_funs    : false,\n        hoist_props   : !false_by_default,\n        hoist_vars    : false,\n        ie8           : false,\n        if_return     : !false_by_default,\n        inline        : !false_by_default,\n        join_vars     : !false_by_default,\n        keep_classnames: false,\n        keep_fargs    : true,\n        keep_fnames   : false,\n        keep_infinity : false,\n        loops         : !false_by_default,\n        module        : false,\n        negate_iife   : !false_by_default,\n        passes        : 1,\n        properties    : !false_by_default,\n        pure_getters  : !false_by_default && \"strict\",\n        pure_funcs    : null,\n        reduce_funcs  : !false_by_default,\n        reduce_vars   : !false_by_default,\n        sequences     : !false_by_default,\n        side_effects  : !false_by_default,\n        switches      : !false_by_default,\n        top_retain    : null,\n        toplevel      : !!(options && options[\"top_retain\"]),\n        typeofs       : !false_by_default,\n        unsafe        : false,\n        unsafe_arrows : false,\n        unsafe_comps  : false,\n        unsafe_Function: false,\n        unsafe_math   : false,\n        unsafe_methods: false,\n        unsafe_proto  : false,\n        unsafe_regexp : false,\n        unsafe_undefined: false,\n        unused        : !false_by_default,\n        warnings      : false,\n    }, true);\n    var global_defs = this.options[\"global_defs\"];\n    if (typeof global_defs == \"object\") for (var key in global_defs) {\n        if (/^@/.test(key) && HOP(global_defs, key)) {\n            global_defs[key.slice(1)] = parse(global_defs[key], {\n                expression: true\n            });\n        }\n    }\n    if (this.options[\"inline\"] === true) this.options[\"inline\"] = 3;\n    var pure_funcs = this.options[\"pure_funcs\"];\n    if (typeof pure_funcs == \"function\") {\n        this.pure_funcs = pure_funcs;\n    } else {\n        this.pure_funcs = pure_funcs ? function(node) {\n            return pure_funcs.indexOf(node.expression.print_to_string()) < 0;\n        } : return_true;\n    }\n    var top_retain = this.options[\"top_retain\"];\n    if (top_retain instanceof RegExp) {\n        this.top_retain = function(def) {\n            return top_retain.test(def.name);\n        };\n    } else if (typeof top_retain == \"function\") {\n        this.top_retain = top_retain;\n    } else if (top_retain) {\n        if (typeof top_retain == \"string\") {\n            top_retain = top_retain.split(/,/);\n        }\n        this.top_retain = function(def) {\n            return top_retain.indexOf(def.name) >= 0;\n        };\n    }\n    if (this.options[\"module\"]) {\n        this.directives[\"use strict\"] = true;\n        this.options[\"toplevel\"] = true;\n    }\n    var toplevel = this.options[\"toplevel\"];\n    this.toplevel = typeof toplevel == \"string\" ? {\n        funcs: /funcs/.test(toplevel),\n        vars: /vars/.test(toplevel)\n    } : {\n        funcs: toplevel,\n        vars: toplevel\n    };\n    var sequences = this.options[\"sequences\"];\n    this.sequences_limit = sequences == 1 ? 800 : sequences | 0;\n    this.warnings_produced = {};\n}\n\nCompressor.prototype = new TreeTransformer;\nmerge(Compressor.prototype, {\n    option: function(key) { return this.options[key]; },\n    exposed: function(def) {\n        if (def.export) return true;\n        if (def.global) for (var i = 0, len = def.orig.length; i < len; i++)\n            if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? \"funcs\" : \"vars\"])\n                return true;\n        return false;\n    },\n    in_boolean_context: function() {\n        if (!this.option(\"booleans\")) return false;\n        var self = this.self();\n        for (var i = 0, p; p = this.parent(i); i++) {\n            if (p instanceof AST_SimpleStatement\n                || p instanceof AST_Conditional && p.condition === self\n                || p instanceof AST_DWLoop && p.condition === self\n                || p instanceof AST_For && p.condition === self\n                || p instanceof AST_If && p.condition === self\n                || p instanceof AST_UnaryPrefix && p.operator == \"!\" && p.expression === self) {\n                return true;\n            }\n            if (p instanceof AST_Binary && (p.operator == \"&&\" || p.operator == \"||\")\n                || p instanceof AST_Conditional\n                || p.tail_node() === self) {\n                self = p;\n            } else {\n                return false;\n            }\n        }\n    },\n    compress: function(node) {\n        node = node.resolve_defines(this);\n        if (this.option(\"expression\")) {\n            node.process_expression(true);\n        }\n        var passes = +this.options.passes || 1;\n        var min_count = 1 / 0;\n        var stopping = false;\n        var mangle = { ie8: this.option(\"ie8\") };\n        for (var pass = 0; pass < passes; pass++) {\n            node.figure_out_scope(mangle);\n            if (pass === 0 && this.option(\"drop_console\")) {\n                // must be run before reduce_vars and compress pass\n                node = node.drop_console();\n            }\n            if (pass > 0 || this.option(\"reduce_vars\"))\n                node.reset_opt_flags(this);\n            node = node.transform(this);\n            if (passes > 1) {\n                var count = 0;\n                node.walk(new TreeWalker(function() {\n                    count++;\n                }));\n                this.info(\"pass \" + pass + \": last_count: \" + min_count + \", count: \" + count);\n                if (count < min_count) {\n                    min_count = count;\n                    stopping = false;\n                } else if (stopping) {\n                    break;\n                } else {\n                    stopping = true;\n                }\n            }\n        }\n        if (this.option(\"expression\")) {\n            node.process_expression(false);\n        }\n        return node;\n    },\n    info: function() {\n        if (this.options.warnings == \"verbose\") {\n            AST_Node.warn.apply(AST_Node, arguments);\n        }\n    },\n    warn: function(text, props) {\n        if (this.options.warnings) {\n            // only emit unique warnings\n            var message = string_template(text, props);\n            if (!(message in this.warnings_produced)) {\n                this.warnings_produced[message] = true;\n                AST_Node.warn.apply(AST_Node, arguments);\n            }\n        }\n    },\n    clear_warnings: function() {\n        this.warnings_produced = {};\n    },\n    before: function(node, descend, in_list) {\n        if (node._squeezed) return node;\n        var was_scope = false;\n        if (node instanceof AST_Scope) {\n            node = node.hoist_properties(this);\n            node = node.hoist_declarations(this);\n            was_scope = true;\n        }\n        // Before https://github.com/mishoo/UglifyJS2/pull/1602 AST_Node.optimize()\n        // would call AST_Node.transform() if a different instance of AST_Node is\n        // produced after OPT().\n        // This corrupts TreeWalker.stack, which cause AST look-ups to malfunction.\n        // Migrate and defer all children's AST_Node.transform() to below, which\n        // will now happen after this parent AST_Node has been properly substituted\n        // thus gives a consistent AST snapshot.\n        descend(node, this);\n        // Existing code relies on how AST_Node.optimize() worked, and omitting the\n        // following replacement call would result in degraded efficiency of both\n        // output and performance.\n        descend(node, this);\n        var opt = node.optimize(this);\n        if (was_scope && opt instanceof AST_Scope) {\n            opt.drop_unused(this);\n            descend(opt, this);\n        }\n        if (opt === node) opt._squeezed = true;\n        return opt;\n    }\n});\n\n(function() {\n\n    function OPT(node, optimizer) {\n        node.DEFMETHOD(\"optimize\", function(compressor) {\n            var self = this;\n            if (self._optimized) return self;\n            if (compressor.has_directive(\"use asm\")) return self;\n            var opt = optimizer(self, compressor);\n            opt._optimized = true;\n            return opt;\n        });\n    }\n\n    OPT(AST_Node, function(self, compressor) {\n        return self;\n    });\n\n    AST_Toplevel.DEFMETHOD(\"drop_console\", function() {\n        return this.transform(new TreeTransformer(function(self) {\n            if (self.TYPE == \"Call\") {\n                var exp = self.expression;\n                if (exp instanceof AST_PropAccess) {\n                    var name = exp.expression;\n                    while (name.expression) {\n                        name = name.expression;\n                    }\n                    if (is_undeclared_ref(name) && name.name == \"console\") {\n                        return make_node(AST_Undefined, self);\n                    }\n                }\n            }\n        }));\n    });\n\n    AST_Node.DEFMETHOD(\"equivalent_to\", function(node) {\n        return this.TYPE == node.TYPE && this.print_to_string() == node.print_to_string();\n    });\n\n    AST_Scope.DEFMETHOD(\"process_expression\", function(insert, compressor) {\n        var self = this;\n        var tt = new TreeTransformer(function(node) {\n            if (insert && node instanceof AST_SimpleStatement) {\n                return make_node(AST_Return, node, {\n                    value: node.body\n                });\n            }\n            if (!insert && node instanceof AST_Return) {\n                if (compressor) {\n                    var value = node.value && node.value.drop_side_effect_free(compressor, true);\n                    return value ? make_node(AST_SimpleStatement, node, {\n                        body: value\n                    }) : make_node(AST_EmptyStatement, node);\n                }\n                return make_node(AST_SimpleStatement, node, {\n                    body: node.value || make_node(AST_UnaryPrefix, node, {\n                        operator: \"void\",\n                        expression: make_node(AST_Number, node, {\n                            value: 0\n                        })\n                    })\n                });\n            }\n            if (node instanceof AST_Class || node instanceof AST_Lambda && node !== self) {\n                return node;\n            }\n            if (node instanceof AST_Block) {\n                var index = node.body.length - 1;\n                if (index >= 0) {\n                    node.body[index] = node.body[index].transform(tt);\n                }\n            } else if (node instanceof AST_If) {\n                node.body = node.body.transform(tt);\n                if (node.alternative) {\n                    node.alternative = node.alternative.transform(tt);\n                }\n            } else if (node instanceof AST_With) {\n                node.body = node.body.transform(tt);\n            }\n            return node;\n        });\n        self.transform(tt);\n    });\n\n    function read_property(obj, key) {\n        key = get_value(key);\n        if (key instanceof AST_Node) return;\n        var value;\n        if (obj instanceof AST_Array) {\n            var elements = obj.elements;\n            if (key == \"length\") return make_node_from_constant(elements.length, obj);\n            if (typeof key == \"number\" && key in elements) value = elements[key];\n        } else if (obj instanceof AST_Object) {\n            key = \"\" + key;\n            var props = obj.properties;\n            for (var i = props.length; --i >= 0;) {\n                var prop = props[i];\n                if (!(prop instanceof AST_ObjectKeyVal)) return;\n                if (!value && props[i].key === key) value = props[i].value;\n            }\n        }\n        return value instanceof AST_SymbolRef && value.fixed_value() || value;\n    }\n\n    function is_modified(compressor, tw, node, value, level, immutable) {\n        var parent = tw.parent(level);\n        var lhs = is_lhs(node, parent);\n        if (lhs) return lhs;\n        if (!immutable\n            && parent instanceof AST_Call\n            && parent.expression === node\n            && !(value instanceof AST_Arrow)\n            && !(value instanceof AST_Class)\n            && !parent.is_expr_pure(compressor)\n            && (!(value instanceof AST_Function)\n                || !(parent instanceof AST_New) && value.contains_this())) {\n            return true;\n        }\n        if (parent instanceof AST_Array) {\n            return is_modified(compressor, tw, parent, parent, level + 1);\n        }\n        if (parent instanceof AST_ObjectKeyVal && node === parent.value) {\n            var obj = tw.parent(level + 1);\n            return is_modified(compressor, tw, obj, obj, level + 2);\n        }\n        if (parent instanceof AST_PropAccess && parent.expression === node) {\n            var prop = read_property(value, parent.property);\n            return !immutable && is_modified(compressor, tw, parent, prop, level + 1);\n        }\n    }\n\n    (function(def) {\n        def(AST_Node, noop);\n\n        function reset_def(compressor, def) {\n            def.assignments = 0;\n            def.chained = false;\n            def.direct_access = false;\n            def.escaped = false;\n            if (def.scope.pinned()) {\n                def.fixed = false;\n            } else if (def.orig[0] instanceof AST_SymbolConst || !compressor.exposed(def)) {\n                def.fixed = def.init;\n            } else {\n                def.fixed = false;\n            }\n            def.recursive_refs = 0;\n            def.references = [];\n            def.should_replace = undefined;\n            def.single_use = undefined;\n        }\n\n        function reset_variables(tw, compressor, node) {\n            node.variables.each(function(def) {\n                reset_def(compressor, def);\n                if (def.fixed === null) {\n                    def.safe_ids = tw.safe_ids;\n                    mark(tw, def, true);\n                } else if (def.fixed) {\n                    tw.loop_ids[def.id] = tw.in_loop;\n                    mark(tw, def, true);\n                }\n            });\n        }\n\n        function reset_block_variables(compressor, node) {\n            if (node.block_scope) node.block_scope.variables.each(function(def) {\n                reset_def(compressor, def);\n            });\n        }\n\n        function push(tw) {\n            tw.safe_ids = Object.create(tw.safe_ids);\n        }\n\n        function pop(tw) {\n            tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);\n        }\n\n        function mark(tw, def, safe) {\n            tw.safe_ids[def.id] = safe;\n        }\n\n        function safe_to_read(tw, def) {\n            if (def.single_use == \"m\") return false;\n            if (tw.safe_ids[def.id]) {\n                if (def.fixed == null) {\n                    var orig = def.orig[0];\n                    if (orig instanceof AST_SymbolFunarg || orig.name == \"arguments\") return false;\n                    def.fixed = make_node(AST_Undefined, orig);\n                }\n                return true;\n            }\n            return def.fixed instanceof AST_Defun;\n        }\n\n        function safe_to_assign(tw, def, value) {\n            if (def.fixed === undefined) return true;\n            if (def.fixed === null && def.safe_ids) {\n                def.safe_ids[def.id] = false;\n                delete def.safe_ids;\n                return true;\n            }\n            if (!HOP(tw.safe_ids, def.id)) return false;\n            if (!safe_to_read(tw, def)) return false;\n            if (def.fixed === false) return false;\n            if (def.fixed != null && (!value || def.references.length > def.assignments)) return false;\n            return all(def.orig, function(sym) {\n                return !(sym instanceof AST_SymbolConst\n                    || sym instanceof AST_SymbolDefun\n                    || sym instanceof AST_SymbolLambda);\n            });\n        }\n\n        function ref_once(tw, compressor, def) {\n            return compressor.option(\"unused\")\n                && !def.scope.pinned()\n                && def.references.length - def.recursive_refs == 1\n                && tw.loop_ids[def.id] === tw.in_loop;\n        }\n\n        function is_immutable(value) {\n            if (!value) return false;\n            return value.is_constant()\n                || value instanceof AST_Lambda\n                || value instanceof AST_This;\n        }\n\n        function mark_escaped(tw, d, scope, node, value, level, depth) {\n            var parent = tw.parent(level);\n            if (value) {\n                if (value.is_constant()) return;\n                if (value instanceof AST_ClassExpression) return;\n            }\n            if (parent instanceof AST_Assign && parent.operator == \"=\" && node === parent.right\n                || parent instanceof AST_Call && (node !== parent.expression || parent instanceof AST_New)\n                || parent instanceof AST_Exit && node === parent.value && node.scope !== d.scope\n                || parent instanceof AST_VarDef && node === parent.value\n                || parent instanceof AST_Yield && node === parent.value && node.scope !== d.scope) {\n                if (depth > 1 && !(value && value.is_constant_expression(scope))) depth = 1;\n                if (!d.escaped || d.escaped > depth) d.escaped = depth;\n                return;\n            } else if (parent instanceof AST_Array\n                || parent instanceof AST_Await\n                || parent instanceof AST_Binary && lazy_op(parent.operator)\n                || parent instanceof AST_Conditional && node !== parent.condition\n                || parent instanceof AST_Expansion\n                || parent instanceof AST_Sequence && node === parent.tail_node()) {\n                mark_escaped(tw, d, scope, parent, parent, level + 1, depth);\n            } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {\n                var obj = tw.parent(level + 1);\n                mark_escaped(tw, d, scope, obj, obj, level + 2, depth);\n            } else if (parent instanceof AST_PropAccess && node === parent.expression) {\n                value = read_property(value, parent.property);\n                mark_escaped(tw, d, scope, parent, value, level + 1, depth + 1);\n                if (value) return;\n            }\n            if (level > 0) return;\n            if (parent instanceof AST_Sequence && node !== parent.tail_node()) return;\n            if (parent instanceof AST_SimpleStatement) return;\n            d.direct_access = true;\n        }\n\n        var suppressor = new TreeWalker(function(node) {\n            if (!(node instanceof AST_Symbol)) return;\n            var d = node.definition();\n            if (!d) return;\n            if (node instanceof AST_SymbolRef) d.references.push(node);\n            d.fixed = false;\n        });\n        def(AST_Accessor, function(tw, descend, compressor) {\n            push(tw);\n            reset_variables(tw, compressor, this);\n            descend();\n            pop(tw);\n            return true;\n        });\n        def(AST_Arrow, mark_func_expr);\n        def(AST_Assign, function(tw, descend, compressor) {\n            var node = this;\n            if (node.left instanceof AST_Destructuring) {\n                node.left.walk(suppressor);\n                return;\n            }\n            var sym = node.left;\n            if (!(sym instanceof AST_SymbolRef)) return;\n            var d = sym.definition();\n            var safe = safe_to_assign(tw, d, sym.scope, node.right);\n            d.assignments++;\n            if (!safe) return;\n            var fixed = d.fixed;\n            if (!fixed && node.operator != \"=\") return;\n            var eq = node.operator == \"=\";\n            var value = eq ? node.right : node;\n            if (is_modified(compressor, tw, node, value, 0)) return;\n            d.references.push(sym);\n            if (!eq) d.chained = true;\n            d.fixed = eq ? function() {\n                return node.right;\n            } : function() {\n                return make_node(AST_Binary, node, {\n                    operator: node.operator.slice(0, -1),\n                    left: fixed instanceof AST_Node ? fixed : fixed(),\n                    right: node.right\n                });\n            };\n            mark(tw, d, false);\n            node.right.walk(tw);\n            mark(tw, d, true);\n            mark_escaped(tw, d, sym.scope, node, value, 0, 1);\n            return true;\n        });\n        def(AST_Binary, function(tw) {\n            if (!lazy_op(this.operator)) return;\n            this.left.walk(tw);\n            push(tw);\n            this.right.walk(tw);\n            pop(tw);\n            return true;\n        });\n        def(AST_Block, function(tw, descend, compressor) {\n            reset_block_variables(compressor, this);\n        });\n        def(AST_Case, function(tw) {\n            push(tw);\n            this.expression.walk(tw);\n            pop(tw);\n            push(tw);\n            walk_body(this, tw);\n            pop(tw);\n            return true;\n        });\n        def(AST_ClassExpression, function(tw, descend) {\n            this.inlined = false;\n            push(tw);\n            descend();\n            pop(tw);\n            return true;\n        });\n        def(AST_Conditional, function(tw) {\n            this.condition.walk(tw);\n            push(tw);\n            this.consequent.walk(tw);\n            pop(tw);\n            push(tw);\n            this.alternative.walk(tw);\n            pop(tw);\n            return true;\n        });\n        def(AST_Default, function(tw, descend) {\n            push(tw);\n            descend();\n            pop(tw);\n            return true;\n        });\n\n        function mark_def_node(tw, descend, compressor) {\n            this.inlined = false;\n            var save_ids = tw.safe_ids;\n            tw.safe_ids = Object.create(null);\n            reset_variables(tw, compressor, this);\n            descend();\n            tw.safe_ids = save_ids;\n            return true;\n        }\n\n        def(AST_DefClass, mark_def_node);\n        def(AST_Defun, mark_def_node);\n        def(AST_Do, function(tw, descend, compressor) {\n            reset_block_variables(compressor, this);\n            var saved_loop = tw.in_loop;\n            tw.in_loop = this;\n            push(tw);\n            this.body.walk(tw);\n            if (has_break_or_continue(this)) {\n                pop(tw);\n                push(tw);\n            }\n            this.condition.walk(tw);\n            pop(tw);\n            tw.in_loop = saved_loop;\n            return true;\n        });\n        def(AST_For, function(tw, descend, compressor) {\n            reset_block_variables(compressor, this);\n            if (this.init) this.init.walk(tw);\n            var saved_loop = tw.in_loop;\n            tw.in_loop = this;\n            push(tw);\n            if (this.condition) this.condition.walk(tw);\n            this.body.walk(tw);\n            if (this.step) {\n                if (has_break_or_continue(this)) {\n                    pop(tw);\n                    push(tw);\n                }\n                this.step.walk(tw);\n            }\n            pop(tw);\n            tw.in_loop = saved_loop;\n            return true;\n        });\n        def(AST_ForIn, function(tw, descend, compressor) {\n            reset_block_variables(compressor, this);\n            this.init.walk(suppressor);\n            this.object.walk(tw);\n            var saved_loop = tw.in_loop;\n            tw.in_loop = this;\n            push(tw);\n            this.body.walk(tw);\n            pop(tw);\n            tw.in_loop = saved_loop;\n            return true;\n        });\n\n        function mark_func_expr(tw, descend, compressor) {\n            var node = this;\n            node.inlined = false;\n            push(tw);\n            reset_variables(tw, compressor, node);\n            var iife;\n            if (!node.name\n                && (iife = tw.parent()) instanceof AST_Call\n                && iife.expression === node) {\n                // Virtually turn IIFE parameters into variable definitions:\n                //   (function(a,b) {...})(c,d) => (function() {var a=c,b=d; ...})()\n                // So existing transformation rules can work on them.\n                node.argnames.forEach(function(arg, i) {\n                    if (!arg.definition) return;\n                    var d = arg.definition();\n                    if (d.fixed === undefined && (!node.uses_arguments || tw.has_directive(\"use strict\"))) {\n                        d.fixed = function() {\n                            return iife.args[i] || make_node(AST_Undefined, iife);\n                        };\n                        tw.loop_ids[d.id] = tw.in_loop;\n                        mark(tw, d, true);\n                    } else {\n                        d.fixed = false;\n                    }\n                });\n            }\n            descend();\n            pop(tw);\n            return true;\n        }\n\n        def(AST_Function, mark_func_expr);\n        def(AST_If, function(tw) {\n            this.condition.walk(tw);\n            push(tw);\n            this.body.walk(tw);\n            pop(tw);\n            if (this.alternative) {\n                push(tw);\n                this.alternative.walk(tw);\n                pop(tw);\n            }\n            return true;\n        });\n        def(AST_LabeledStatement, function(tw) {\n            push(tw);\n            this.body.walk(tw);\n            pop(tw);\n            return true;\n        });\n        def(AST_SymbolCatch, function() {\n            this.definition().fixed = false;\n        });\n        def(AST_SymbolRef, function(tw, descend, compressor) {\n            var d = this.definition();\n            d.references.push(this);\n            if (d.references.length == 1\n                && !d.fixed\n                && d.orig[0] instanceof AST_SymbolDefun) {\n                tw.loop_ids[d.id] = tw.in_loop;\n            }\n            var value;\n            if (d.fixed === undefined || !safe_to_read(tw, d)) {\n                d.fixed = false;\n            } else if (d.fixed) {\n                value = this.fixed_value();\n                if (value instanceof AST_Lambda && recursive_ref(tw, d)) {\n                    d.recursive_refs++;\n                } else if (value && !compressor.exposed(d) && ref_once(tw, compressor, d)) {\n                    d.single_use = value instanceof AST_Lambda && !value.pinned()\n                        || value instanceof AST_Class\n                        || d.scope === this.scope && value.is_constant_expression();\n                } else {\n                    d.single_use = false;\n                }\n                if (is_modified(compressor, tw, this, value, 0, is_immutable(value))) {\n                    if (d.single_use) {\n                        d.single_use = \"m\";\n                    } else {\n                        d.fixed = false;\n                    }\n                }\n            }\n            mark_escaped(tw, d, this.scope, this, value, 0, 1);\n        });\n        def(AST_Toplevel, function(tw, descend, compressor) {\n            this.globals.each(function(def) {\n                reset_def(compressor, def);\n            });\n            reset_variables(tw, compressor, this);\n        });\n        def(AST_Try, function(tw, descend, compressor) {\n            reset_block_variables(compressor, this);\n            push(tw);\n            walk_body(this, tw);\n            pop(tw);\n            if (this.bcatch) {\n                push(tw);\n                this.bcatch.walk(tw);\n                pop(tw);\n            }\n            if (this.bfinally) this.bfinally.walk(tw);\n            return true;\n        });\n        def(AST_Unary, function(tw, descend) {\n            var node = this;\n            if (node.operator != \"++\" && node.operator != \"--\") return;\n            var exp = node.expression;\n            if (!(exp instanceof AST_SymbolRef)) return;\n            var d = exp.definition();\n            var safe = safe_to_assign(tw, d, true);\n            d.assignments++;\n            if (!safe) return;\n            var fixed = d.fixed;\n            if (!fixed) return;\n            d.references.push(exp);\n            d.chained = true;\n            d.fixed = function() {\n                return make_node(AST_Binary, node, {\n                    operator: node.operator.slice(0, -1),\n                    left: make_node(AST_UnaryPrefix, node, {\n                        operator: \"+\",\n                        expression: fixed instanceof AST_Node ? fixed : fixed()\n                    }),\n                    right: make_node(AST_Number, node, {\n                        value: 1\n                    })\n                });\n            };\n            mark(tw, d, true);\n            return true;\n        });\n        def(AST_VarDef, function(tw, descend) {\n            var node = this;\n            if (node.name instanceof AST_Destructuring) {\n                node.name.walk(suppressor);\n                return;\n            }\n            var d = node.name.definition();\n            if (node.value) {\n                if (safe_to_assign(tw, d, node.value)) {\n                    d.fixed = function() {\n                        return node.value;\n                    };\n                    tw.loop_ids[d.id] = tw.in_loop;\n                    mark(tw, d, false);\n                    descend();\n                    mark(tw, d, true);\n                    return true;\n                } else {\n                    d.fixed = false;\n                }\n            }\n        });\n        def(AST_While, function(tw, descend, compressor) {\n            reset_block_variables(compressor, this);\n            var saved_loop = tw.in_loop;\n            tw.in_loop = this;\n            push(tw);\n            descend();\n            pop(tw);\n            tw.in_loop = saved_loop;\n            return true;\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"reduce_vars\", func);\n    });\n\n    AST_Toplevel.DEFMETHOD(\"reset_opt_flags\", function(compressor) {\n        var self = this;\n        var reduce_vars = compressor.option(\"reduce_vars\");\n        var tw = new TreeWalker(function(node, descend) {\n            node._squeezed = false;\n            node._optimized = false;\n            if (reduce_vars) {\n                if (compressor.top_retain) {\n                    if (tw.parent() === self)\n                        node._top = true;\n                    else\n                        delete node._top;\n                }\n                return node.reduce_vars(tw, descend, compressor);\n            }\n        });\n        // Stack of look-up tables to keep track of whether a `SymbolDef` has been\n        // properly assigned before use:\n        // - `push()` & `pop()` when visiting conditional branches\n        // - backup & restore via `save_ids` when visiting out-of-order sections\n        tw.safe_ids = Object.create(null);\n        tw.in_loop = null;\n        tw.loop_ids = Object.create(null);\n        self.walk(tw);\n    });\n\n    AST_Symbol.DEFMETHOD(\"fixed_value\", function() {\n        var fixed = this.definition().fixed;\n        if (!fixed || fixed instanceof AST_Node) return fixed;\n        return fixed();\n    });\n\n    AST_SymbolRef.DEFMETHOD(\"is_immutable\", function() {\n        var orig = this.definition().orig;\n        return orig.length == 1 && orig[0] instanceof AST_SymbolLambda;\n    });\n\n    function is_func_expr(node) {\n        return node instanceof AST_Arrow || node instanceof AST_Function;\n    }\n\n    function is_lhs_read_only(lhs) {\n        if (lhs instanceof AST_This) return true;\n        if (lhs instanceof AST_SymbolRef) return lhs.definition().orig[0] instanceof AST_SymbolLambda;\n        if (lhs instanceof AST_PropAccess) {\n            lhs = lhs.expression;\n            if (lhs instanceof AST_SymbolRef) {\n                if (lhs.is_immutable()) return false;\n                lhs = lhs.fixed_value();\n            }\n            if (!lhs) return true;\n            if (lhs instanceof AST_RegExp) return false;\n            if (lhs instanceof AST_Constant) return true;\n            return is_lhs_read_only(lhs);\n        }\n        return false;\n    }\n\n    function is_ref_of(ref, type) {\n        if (!(ref instanceof AST_SymbolRef)) return false;\n        var orig = ref.definition().orig;\n        for (var i = orig.length; --i >= 0;) {\n            if (orig[i] instanceof type) return true;\n        }\n    }\n\n    function find_variable(compressor, name) {\n        var scope, i = 0;\n        while (scope = compressor.parent(i++)) {\n            if (scope instanceof AST_Scope) break;\n            if (scope instanceof AST_Catch && scope.argname) {\n                scope = scope.argname.definition().scope;\n                break;\n            }\n        }\n        return scope.find_variable(name);\n    }\n\n    function make_node(ctor, orig, props) {\n        if (!props) props = {};\n        if (orig) {\n            if (!props.start) props.start = orig.start;\n            if (!props.end) props.end = orig.end;\n        }\n        return new ctor(props);\n    }\n\n    function make_sequence(orig, expressions) {\n        if (expressions.length == 1) return expressions[0];\n        return make_node(AST_Sequence, orig, {\n            expressions: expressions.reduce(merge_sequence, [])\n        });\n    }\n\n    function make_node_from_constant(val, orig) {\n        switch (typeof val) {\n          case \"string\":\n            return make_node(AST_String, orig, {\n                value: val\n            });\n          case \"number\":\n            if (isNaN(val)) return make_node(AST_NaN, orig);\n            if (isFinite(val)) {\n                return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {\n                    operator: \"-\",\n                    expression: make_node(AST_Number, orig, { value: -val })\n                }) : make_node(AST_Number, orig, { value: val });\n            }\n            return val < 0 ? make_node(AST_UnaryPrefix, orig, {\n                operator: \"-\",\n                expression: make_node(AST_Infinity, orig)\n            }) : make_node(AST_Infinity, orig);\n          case \"boolean\":\n            return make_node(val ? AST_True : AST_False, orig);\n          case \"undefined\":\n            return make_node(AST_Undefined, orig);\n          default:\n            if (val === null) {\n                return make_node(AST_Null, orig, { value: null });\n            }\n            if (val instanceof RegExp) {\n                return make_node(AST_RegExp, orig, { value: val });\n            }\n            throw new Error(string_template(\"Can't handle constant of type: {type}\", {\n                type: typeof val\n            }));\n        }\n    }\n\n    // we shouldn't compress (1,func)(something) to\n    // func(something) because that changes the meaning of\n    // the func (becomes lexical instead of global).\n    function maintain_this_binding(parent, orig, val) {\n        if (parent instanceof AST_UnaryPrefix && parent.operator == \"delete\"\n            || parent instanceof AST_Call && parent.expression === orig\n                && (val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == \"eval\")) {\n            return make_sequence(orig, [ make_node(AST_Number, orig, { value: 0 }), val ]);\n        }\n        return val;\n    }\n\n    function merge_sequence(array, node) {\n        if (node instanceof AST_Sequence) {\n            array.push.apply(array, node.expressions);\n        } else {\n            array.push(node);\n        }\n        return array;\n    }\n\n    function as_statement_array(thing) {\n        if (thing === null) return [];\n        if (thing instanceof AST_BlockStatement) return thing.body;\n        if (thing instanceof AST_EmptyStatement) return [];\n        if (thing instanceof AST_Statement) return [ thing ];\n        throw new Error(\"Can't convert thing to statement array\");\n    }\n\n    function is_empty(thing) {\n        if (thing === null) return true;\n        if (thing instanceof AST_EmptyStatement) return true;\n        if (thing instanceof AST_BlockStatement) return thing.body.length == 0;\n        return false;\n    }\n\n    function can_be_evicted_from_block(node) {\n        return !(\n            node instanceof AST_DefClass ||\n            node instanceof AST_Defun ||\n            node instanceof AST_Let ||\n            node instanceof AST_Const ||\n            node instanceof AST_Export ||\n            node instanceof AST_Import\n        );\n    }\n\n    function loop_body(x) {\n        if (x instanceof AST_IterationStatement) {\n            return x.body instanceof AST_BlockStatement ? x.body : x;\n        }\n        return x;\n    }\n\n    function is_iife_call(node) {\n        if (node.TYPE != \"Call\") return false;\n        return node.expression instanceof AST_Function || is_iife_call(node.expression);\n    }\n\n    function is_undeclared_ref(node) {\n        return node instanceof AST_SymbolRef && node.definition().undeclared;\n    }\n\n    var global_names = makePredicate(\"Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError\");\n    AST_SymbolRef.DEFMETHOD(\"is_declared\", function(compressor) {\n        return !this.definition().undeclared\n            || compressor.option(\"unsafe\") && global_names(this.name);\n    });\n\n    var identifier_atom = makePredicate(\"Infinity NaN undefined\");\n    function is_identifier_atom(node) {\n        return node instanceof AST_Infinity\n            || node instanceof AST_NaN\n            || node instanceof AST_Undefined;\n    }\n\n    function tighten_body(statements, compressor) {\n        var in_loop, in_try;\n        var scope = compressor.find_parent(AST_Scope).get_defun_scope();\n        find_loop_scope_try();\n        var CHANGED, max_iter = 10;\n        do {\n            CHANGED = false;\n            eliminate_spurious_blocks(statements);\n            if (compressor.option(\"dead_code\")) {\n                eliminate_dead_code(statements, compressor);\n            }\n            if (compressor.option(\"if_return\")) {\n                handle_if_return(statements, compressor);\n            }\n            if (compressor.sequences_limit > 0) {\n                sequencesize(statements, compressor);\n                sequencesize_2(statements, compressor);\n            }\n            if (compressor.option(\"join_vars\")) {\n                join_consecutive_vars(statements);\n            }\n            if (compressor.option(\"collapse_vars\")) {\n                collapse(statements, compressor);\n            }\n        } while (CHANGED && max_iter-- > 0);\n\n        function find_loop_scope_try() {\n            var node = compressor.self(), level = 0;\n            do {\n                if (node instanceof AST_Catch || node instanceof AST_Finally) {\n                    level++;\n                } else if (node instanceof AST_IterationStatement) {\n                    in_loop = true;\n                } else if (node instanceof AST_Scope) {\n                    scope = node;\n                    break;\n                } else if (node instanceof AST_Try) {\n                    in_try = true;\n                }\n            } while (node = compressor.parent(level++));\n        }\n\n        // Search from right to left for assignment-like expressions:\n        // - `var a = x;`\n        // - `a = x;`\n        // - `++a`\n        // For each candidate, scan from left to right for first usage, then try\n        // to fold assignment into the site for compression.\n        // Will not attempt to collapse assignments into or past code blocks\n        // which are not sequentially executed, e.g. loops and conditionals.\n        function collapse(statements, compressor) {\n            if (scope.pinned()) return statements;\n            var args;\n            var candidates = [];\n            var stat_index = statements.length;\n            var scanner = new TreeTransformer(function(node, descend) {\n                if (abort) return node;\n                // Skip nodes before `candidate` as quickly as possible\n                if (!hit) {\n                    if (node !== hit_stack[hit_index]) return node;\n                    hit_index++;\n                    if (hit_index < hit_stack.length) return handle_custom_scan_order(node);\n                    hit = true;\n                    stop_after = find_stop(node, 0);\n                    if (stop_after === node) abort = true;\n                    return node;\n                }\n                // Stop immediately if these node types are encountered\n                var parent = scanner.parent();\n                if (node instanceof AST_Assign && node.operator != \"=\" && lhs.equivalent_to(node.left)\n                    || node instanceof AST_Await\n                    || node instanceof AST_Call && lhs instanceof AST_PropAccess && lhs.equivalent_to(node.expression)\n                    || node instanceof AST_Debugger\n                    || node instanceof AST_Destructuring\n                    || node instanceof AST_Expansion\n                       && node.expression instanceof AST_Symbol\n                       && node.expression.definition().references.length > 1\n                    || node instanceof AST_IterationStatement && !(node instanceof AST_For)\n                    || node instanceof AST_LoopControl\n                    || node instanceof AST_Try\n                    || node instanceof AST_With\n                    || node instanceof AST_Yield\n                    || parent instanceof AST_For && node !== parent.init\n                    || !replace_all\n                        && (node instanceof AST_SymbolRef && !node.is_declared(compressor))) {\n                    abort = true;\n                    return node;\n                }\n                // Stop only if candidate is found within conditional branches\n                if (!stop_if_hit && (!lhs_local || !replace_all)\n                    && (parent instanceof AST_Binary && lazy_op(parent.operator) && parent.left !== node\n                        || parent instanceof AST_Conditional && parent.condition !== node\n                        || parent instanceof AST_If && parent.condition !== node)) {\n                    stop_if_hit = parent;\n                }\n                // Replace variable with assignment when found\n                if (can_replace\n                    && !(node instanceof AST_SymbolDeclaration)\n                    && lhs.equivalent_to(node)) {\n                    if (stop_if_hit) {\n                        abort = true;\n                        return node;\n                    }\n                    if (is_lhs(node, parent)) {\n                        if (value_def) replaced++;\n                        return node;\n                    }\n                    CHANGED = abort = true;\n                    replaced++;\n                    compressor.info(\"Collapsing {name} [{file}:{line},{col}]\", {\n                        name: node.print_to_string(),\n                        file: node.start.file,\n                        line: node.start.line,\n                        col: node.start.col\n                    });\n                    if (candidate instanceof AST_UnaryPostfix) {\n                        return make_node(AST_UnaryPrefix, candidate, candidate);\n                    }\n                    if (candidate instanceof AST_VarDef) {\n                        if (value_def) {\n                            abort = false;\n                            return node;\n                        }\n                        var def = candidate.name.definition();\n                        var value = candidate.value;\n                        if (def.references.length - def.replaced == 1 && !compressor.exposed(def)) {\n                            def.replaced++;\n                            if (funarg && is_identifier_atom(value)) {\n                                return value.transform(compressor);\n                            } else {\n                                return maintain_this_binding(parent, node, value);\n                            }\n                        }\n                        return make_node(AST_Assign, candidate, {\n                            operator: \"=\",\n                            left: make_node(AST_SymbolRef, candidate.name, candidate.name),\n                            right: value\n                        });\n                    }\n                    candidate.write_only = false;\n                    return candidate;\n                }\n                // These node types have child nodes that execute sequentially,\n                // but are otherwise not safe to scan into or beyond them.\n                var sym;\n                if (node instanceof AST_Call\n                    || node instanceof AST_Exit\n                        && (side_effects || lhs instanceof AST_PropAccess || may_modify(lhs))\n                    || node instanceof AST_PropAccess\n                        && (side_effects || node.expression.may_throw_on_access(compressor))\n                    || node instanceof AST_SymbolRef\n                        && (lvalues[node.name] || side_effects && may_modify(node))\n                    || node instanceof AST_VarDef && node.value\n                        && (node.name.name in lvalues || side_effects && may_modify(node.name))\n                    || (sym = is_lhs(node.left, node))\n                        && (sym instanceof AST_PropAccess || sym.name in lvalues)\n                    || may_throw\n                        && (in_try ? node.has_side_effects(compressor) : side_effects_external(node))) {\n                    stop_after = node;\n                    if (node instanceof AST_Scope) abort = true;\n                }\n                return handle_custom_scan_order(node);\n            }, function(node) {\n                if (abort) return;\n                if (stop_after === node) abort = true;\n                if (stop_if_hit === node) stop_if_hit = null;\n            });\n            var multi_replacer = new TreeTransformer(function(node) {\n                if (abort) return node;\n                // Skip nodes before `candidate` as quickly as possible\n                if (!hit) {\n                    if (node !== hit_stack[hit_index]) return node;\n                    hit_index++;\n                    if (hit_index < hit_stack.length) return;\n                    hit = true;\n                    return node;\n                }\n                // Replace variable when found\n                if (node instanceof AST_SymbolRef\n                    && node.name == def.name) {\n                    if (!--replaced) abort = true;\n                    if (is_lhs(node, multi_replacer.parent())) return node;\n                    def.replaced++;\n                    value_def.replaced--;\n                    return candidate.value;\n                }\n                // Skip (non-executed) functions and (leading) default case in switch statements\n                if (node instanceof AST_Default || node instanceof AST_Scope) return node;\n            });\n            while (--stat_index >= 0) {\n                // Treat parameters as collapsible in IIFE, i.e.\n                //   function(a, b){ ... }(x());\n                // would be translated into equivalent assignments:\n                //   var a = x(), b = undefined;\n                if (stat_index == 0 && compressor.option(\"unused\")) extract_args();\n                // Find collapsible assignments\n                var hit_stack = [];\n                extract_candidates(statements[stat_index]);\n                while (candidates.length > 0) {\n                    hit_stack = candidates.pop();\n                    var hit_index = 0;\n                    var candidate = hit_stack[hit_stack.length - 1];\n                    var value_def = null;\n                    var stop_after = null;\n                    var stop_if_hit = null;\n                    var lhs = get_lhs(candidate);\n                    if (!lhs || is_lhs_read_only(lhs) || lhs.has_side_effects(compressor)) continue;\n                    // Locate symbols which may execute code outside of scanning range\n                    var lvalues = get_lvalues(candidate);\n                    var lhs_local = is_lhs_local(lhs);\n                    if (lhs instanceof AST_SymbolRef) lvalues[lhs.name] = false;\n                    var side_effects = value_has_side_effects(candidate);\n                    var replace_all = replace_all_symbols();\n                    var may_throw = candidate.may_throw(compressor);\n                    var funarg = candidate.name instanceof AST_SymbolFunarg;\n                    var hit = funarg;\n                    var abort = false, replaced = 0, can_replace = !args || !hit;\n                    if (!can_replace) {\n                        for (var j = compressor.self().argnames.lastIndexOf(candidate.name) + 1; !abort && j < args.length; j++) {\n                            args[j].transform(scanner);\n                        }\n                        can_replace = true;\n                    }\n                    for (var i = stat_index; !abort && i < statements.length; i++) {\n                        statements[i].transform(scanner);\n                    }\n                    if (value_def) {\n                        var def = candidate.name.definition();\n                        if (abort && def.references.length - def.replaced > replaced) replaced = false;\n                        else {\n                            abort = false;\n                            hit_index = 0;\n                            hit = funarg;\n                            for (var i = stat_index; !abort && i < statements.length; i++) {\n                                statements[i].transform(multi_replacer);\n                            }\n                            value_def.single_use = false;\n                        }\n                    }\n                    if (replaced && !remove_candidate(candidate)) statements.splice(stat_index, 1);\n                }\n            }\n\n            function handle_custom_scan_order(node) {\n                // Skip (non-executed) functions\n                if (node instanceof AST_Scope) return node;\n                // Scan case expressions first in a switch statement\n                if (node instanceof AST_Switch) {\n                    node.expression = node.expression.transform(scanner);\n                    for (var i = 0, len = node.body.length; !abort && i < len; i++) {\n                        var branch = node.body[i];\n                        if (branch instanceof AST_Case) {\n                            if (!hit) {\n                                if (branch !== hit_stack[hit_index]) continue;\n                                hit_index++;\n                            }\n                            branch.expression = branch.expression.transform(scanner);\n                            if (!replace_all) break;\n                        }\n                    }\n                    abort = true;\n                    return node;\n                }\n            }\n\n            function has_overlapping_symbol(fn, arg, fn_strict) {\n                var found = false, scan_this = !(fn instanceof AST_Arrow);\n                arg.walk(new TreeWalker(function(node, descend) {\n                    if (found) return true;\n                    if (node instanceof AST_SymbolRef && fn.variables.has(node.name)) {\n                        var s = node.definition().scope;\n                        if (s !== scope) while (s = s.parent_scope) {\n                            if (s === scope) return true;\n                        }\n                        return found = true;\n                    }\n                    if ((fn_strict || scan_this) && node instanceof AST_This) {\n                        return found = true;\n                    }\n                    if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {\n                        var prev = scan_this;\n                        scan_this = false;\n                        descend();\n                        scan_this = prev;\n                        return true;\n                    }\n                }));\n                return found;\n            }\n\n            function extract_args() {\n                var iife, fn = compressor.self();\n                if (is_func_expr(fn)\n                    && !fn.name\n                    && !fn.uses_arguments\n                    && !fn.pinned()\n                    && (iife = compressor.parent()) instanceof AST_Call\n                    && iife.expression === fn\n                    && all(iife.args, function(arg) {\n                        return !(arg instanceof AST_Expansion);\n                    })) {\n                    var fn_strict = compressor.has_directive(\"use strict\");\n                    if (fn_strict && !member(fn_strict, fn.body)) fn_strict = false;\n                    var len = fn.argnames.length;\n                    args = iife.args.slice(len);\n                    var names = Object.create(null);\n                    for (var i = len; --i >= 0;) {\n                        var sym = fn.argnames[i];\n                        var arg = iife.args[i];\n                        args.unshift(make_node(AST_VarDef, sym, {\n                            name: sym,\n                            value: arg\n                        }));\n                        if (sym.name in names) continue;\n                        names[sym.name] = true;\n                        if (sym instanceof AST_Expansion) {\n                            var elements = iife.args.slice(i);\n                            if (all(elements, function(arg) {\n                                return !has_overlapping_symbol(fn, arg, fn_strict);\n                            })) {\n                                candidates.unshift([ make_node(AST_VarDef, sym, {\n                                    name: sym.expression,\n                                    value: make_node(AST_Array, iife, {\n                                        elements: elements\n                                    })\n                                }) ]);\n                            }\n                        } else {\n                            if (!arg) {\n                                arg = make_node(AST_Undefined, sym).transform(compressor);\n                            } else if (arg instanceof AST_Lambda && arg.pinned()\n                                || has_overlapping_symbol(fn, arg, fn_strict)) {\n                                arg = null;\n                            }\n                            if (arg) candidates.unshift([ make_node(AST_VarDef, sym, {\n                                name: sym,\n                                value: arg\n                            }) ]);\n                        }\n                    }\n                }\n            }\n\n            function extract_candidates(expr) {\n                hit_stack.push(expr);\n                if (expr instanceof AST_Assign) {\n                    if (!expr.left.has_side_effects(compressor)) {\n                        candidates.push(hit_stack.slice());\n                    }\n                    extract_candidates(expr.right);\n                } else if (expr instanceof AST_Binary) {\n                    extract_candidates(expr.left);\n                    extract_candidates(expr.right);\n                } else if (expr instanceof AST_Call) {\n                    extract_candidates(expr.expression);\n                    expr.args.forEach(extract_candidates);\n                } else if (expr instanceof AST_Case) {\n                    extract_candidates(expr.expression);\n                } else if (expr instanceof AST_Conditional) {\n                    extract_candidates(expr.condition);\n                    extract_candidates(expr.consequent);\n                    extract_candidates(expr.alternative);\n                } else if (expr instanceof AST_Definitions\n                    && (compressor.option(\"unused\") || !(expr instanceof AST_Const))) {\n                    var len = expr.definitions.length;\n                    // limit number of trailing variable definitions for consideration\n                    var i = len - 200;\n                    if (i < 0) i = 0;\n                    for (; i < len; i++) {\n                        extract_candidates(expr.definitions[i]);\n                    }\n                } else if (expr instanceof AST_DWLoop) {\n                    extract_candidates(expr.condition);\n                    if (!(expr.body instanceof AST_Block)) {\n                        extract_candidates(expr.body);\n                    }\n                } else if (expr instanceof AST_Exit) {\n                    if (expr.value) extract_candidates(expr.value);\n                } else if (expr instanceof AST_For) {\n                    if (expr.init) extract_candidates(expr.init);\n                    if (expr.condition) extract_candidates(expr.condition);\n                    if (expr.step) extract_candidates(expr.step);\n                    if (!(expr.body instanceof AST_Block)) {\n                        extract_candidates(expr.body);\n                    }\n                } else if (expr instanceof AST_ForIn) {\n                    extract_candidates(expr.object);\n                    if (!(expr.body instanceof AST_Block)) {\n                        extract_candidates(expr.body);\n                    }\n                } else if (expr instanceof AST_If) {\n                    extract_candidates(expr.condition);\n                    if (!(expr.body instanceof AST_Block)) {\n                        extract_candidates(expr.body);\n                    }\n                    if (expr.alternative && !(expr.alternative instanceof AST_Block)) {\n                        extract_candidates(expr.alternative);\n                    }\n                } else if (expr instanceof AST_Sequence) {\n                    expr.expressions.forEach(extract_candidates);\n                } else if (expr instanceof AST_SimpleStatement) {\n                    extract_candidates(expr.body);\n                } else if (expr instanceof AST_Switch) {\n                    extract_candidates(expr.expression);\n                    expr.body.forEach(extract_candidates);\n                } else if (expr instanceof AST_Unary) {\n                    if (expr.operator == \"++\" || expr.operator == \"--\") {\n                        candidates.push(hit_stack.slice());\n                    }\n                } else if (expr instanceof AST_VarDef) {\n                    if (expr.value) {\n                        candidates.push(hit_stack.slice());\n                        extract_candidates(expr.value);\n                    }\n                }\n                hit_stack.pop();\n            }\n\n            function find_stop(node, level, write_only) {\n                var parent = scanner.parent(level);\n                if (parent instanceof AST_Assign) {\n                    if (write_only\n                        && !(parent.left instanceof AST_PropAccess\n                            || parent.left.name in lvalues)) {\n                        return find_stop(parent, level + 1, write_only);\n                    }\n                    return node;\n                }\n                if (parent instanceof AST_Binary) {\n                    if (write_only && (!lazy_op(parent.operator) || parent.left === node)) {\n                        return find_stop(parent, level + 1, write_only);\n                    }\n                    return node;\n                }\n                if (parent instanceof AST_Call) return node;\n                if (parent instanceof AST_Case) return node;\n                if (parent instanceof AST_Conditional) {\n                    if (write_only && parent.condition === node) {\n                        return find_stop(parent, level + 1, write_only);\n                    }\n                    return node;\n                }\n                if (parent instanceof AST_Definitions) {\n                    return find_stop(parent, level + 1, true);\n                }\n                if (parent instanceof AST_Exit) {\n                    return write_only ? find_stop(parent, level + 1, write_only) : node;\n                }\n                if (parent instanceof AST_If) {\n                    if (write_only && parent.condition === node) {\n                        return find_stop(parent, level + 1, write_only);\n                    }\n                    return node;\n                }\n                if (parent instanceof AST_IterationStatement) return node;\n                if (parent instanceof AST_Sequence) {\n                    return find_stop(parent, level + 1, parent.tail_node() !== node);\n                }\n                if (parent instanceof AST_SimpleStatement) {\n                    return find_stop(parent, level + 1, true);\n                }\n                if (parent instanceof AST_Switch) return node;\n                if (parent instanceof AST_VarDef) return node;\n                return null;\n            }\n\n            function mangleable_var(var_def) {\n                var value = var_def.value;\n                if (!(value instanceof AST_SymbolRef)) return;\n                if (value.name == \"arguments\") return;\n                var def = value.definition();\n                if (def.undeclared) return;\n                return value_def = def;\n            }\n\n            function get_lhs(expr) {\n                if (expr instanceof AST_VarDef && expr.name instanceof AST_SymbolDeclaration) {\n                    var def = expr.name.definition();\n                    if (!member(expr.name, def.orig)) return;\n                    var referenced = def.references.length - def.replaced;\n                    if (!referenced) return;\n                    var declared = def.orig.length - def.eliminated;\n                    if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg)\n                        || (referenced > 1 ? mangleable_var(expr) : !compressor.exposed(def))) {\n                        return make_node(AST_SymbolRef, expr.name, expr.name);\n                    }\n                } else {\n                    var lhs = expr[expr instanceof AST_Assign ? \"left\" : \"expression\"];\n                    return !is_ref_of(lhs, AST_SymbolConst) && lhs;\n                }\n            }\n\n            function get_rvalue(expr) {\n                return expr[expr instanceof AST_Assign ? \"right\" : \"value\"];\n            }\n\n            function get_lvalues(expr) {\n                var lvalues = Object.create(null);\n                if (expr instanceof AST_Unary) return lvalues;\n                var tw = new TreeWalker(function(node, descend) {\n                    var sym = node;\n                    while (sym instanceof AST_PropAccess) sym = sym.expression;\n                    if (sym instanceof AST_SymbolRef || sym instanceof AST_This) {\n                        lvalues[sym.name] = lvalues[sym.name] || is_modified(compressor, tw, node, node, 0);\n                    }\n                });\n                get_rvalue(expr).walk(tw);\n                return lvalues;\n            }\n\n            function remove_candidate(expr) {\n                if (expr.name instanceof AST_SymbolFunarg) {\n                    var iife = compressor.parent(), argnames = compressor.self().argnames;\n                    var index = argnames.indexOf(expr.name);\n                    if (index < 0) {\n                        iife.args.length = Math.min(iife.args.length, argnames.length - 1);\n                    } else {\n                        var args = iife.args;\n                        if (args[index]) args[index] = make_node(AST_Number, args[index], {\n                            value: 0\n                        });\n                    }\n                    return true;\n                }\n                var found = false;\n                return statements[stat_index].transform(new TreeTransformer(function(node, descend, in_list) {\n                    if (found) return node;\n                    if (node === expr || node.body === expr) {\n                        found = true;\n                        if (node instanceof AST_VarDef) {\n                            node.value = null;\n                            return node;\n                        }\n                        return in_list ? MAP.skip : null;\n                    }\n                }, function(node) {\n                    if (node instanceof AST_Sequence) switch (node.expressions.length) {\n                      case 0: return null;\n                      case 1: return node.expressions[0];\n                    }\n                }));\n            }\n\n            function is_lhs_local(lhs) {\n                while (lhs instanceof AST_PropAccess) lhs = lhs.expression;\n                return lhs instanceof AST_SymbolRef\n                    && lhs.definition().scope === scope\n                    && !(in_loop\n                        && (lhs.name in lvalues\n                            || candidate instanceof AST_Unary\n                            || candidate instanceof AST_Assign && candidate.operator != \"=\"));\n            }\n\n            function value_has_side_effects(expr) {\n                if (expr instanceof AST_Unary) return false;\n                return get_rvalue(expr).has_side_effects(compressor);\n            }\n\n            function replace_all_symbols() {\n                if (side_effects) return false;\n                if (value_def) return true;\n                if (lhs instanceof AST_SymbolRef) {\n                    var def = lhs.definition();\n                    if (def.references.length - def.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) {\n                        return true;\n                    }\n                }\n                return false;\n            }\n\n            function may_modify(sym) {\n                if (!sym.definition) return true; // AST_Destructuring\n                var def = sym.definition();\n                if (def.orig.length == 1 && def.orig[0] instanceof AST_SymbolDefun) return false;\n                if (def.scope.get_defun_scope() !== scope) return true;\n                return !all(def.references, function(ref) {\n                    var s = ref.scope.get_defun_scope();\n                    // \"block\" scope within AST_Catch\n                    if (s.TYPE == \"Scope\") s = s.parent_scope;\n                    return s === scope;\n                });\n            }\n\n            function side_effects_external(node, lhs) {\n                if (node instanceof AST_Assign) return side_effects_external(node.left, true);\n                if (node instanceof AST_Unary) return side_effects_external(node.expression, true);\n                if (node instanceof AST_VarDef) return node.value && side_effects_external(node.value);\n                if (lhs) {\n                    if (node instanceof AST_Dot) return side_effects_external(node.expression, true);\n                    if (node instanceof AST_Sub) return side_effects_external(node.expression, true);\n                    if (node instanceof AST_SymbolRef) return node.definition().scope !== scope;\n                }\n                return false;\n            }\n        }\n\n        function eliminate_spurious_blocks(statements) {\n            var seen_dirs = [];\n            for (var i = 0; i < statements.length;) {\n                var stat = statements[i];\n                if (stat instanceof AST_BlockStatement && all(stat.body, can_be_evicted_from_block)) {\n                    CHANGED = true;\n                    eliminate_spurious_blocks(stat.body);\n                    [].splice.apply(statements, [i, 1].concat(stat.body));\n                    i += stat.body.length;\n                } else if (stat instanceof AST_EmptyStatement) {\n                    CHANGED = true;\n                    statements.splice(i, 1);\n                } else if (stat instanceof AST_Directive) {\n                    if (seen_dirs.indexOf(stat.value) < 0) {\n                        i++;\n                        seen_dirs.push(stat.value);\n                    } else {\n                        CHANGED = true;\n                        statements.splice(i, 1);\n                    }\n                } else i++;\n            }\n        }\n\n        function handle_if_return(statements, compressor) {\n            var self = compressor.self();\n            var multiple_if_returns = has_multiple_if_returns(statements);\n            var in_lambda = self instanceof AST_Lambda;\n            for (var i = statements.length; --i >= 0;) {\n                var stat = statements[i];\n                var j = next_index(i);\n                var next = statements[j];\n\n                if (in_lambda && !next && stat instanceof AST_Return) {\n                    if (!stat.value) {\n                        CHANGED = true;\n                        statements.splice(i, 1);\n                        continue;\n                    }\n                    if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == \"void\") {\n                        CHANGED = true;\n                        statements[i] = make_node(AST_SimpleStatement, stat, {\n                            body: stat.value.expression\n                        });\n                        continue;\n                    }\n                }\n\n                if (stat instanceof AST_If) {\n                    var ab = aborts(stat.body);\n                    if (can_merge_flow(ab)) {\n                        if (ab.label) {\n                            remove(ab.label.thedef.references, ab);\n                        }\n                        CHANGED = true;\n                        stat = stat.clone();\n                        stat.condition = stat.condition.negate(compressor);\n                        var body = as_statement_array_with_return(stat.body, ab);\n                        stat.body = make_node(AST_BlockStatement, stat, {\n                            body: as_statement_array(stat.alternative).concat(extract_functions())\n                        });\n                        stat.alternative = make_node(AST_BlockStatement, stat, {\n                            body: body\n                        });\n                        statements[i] = stat.transform(compressor);\n                        continue;\n                    }\n\n                    var ab = aborts(stat.alternative);\n                    if (can_merge_flow(ab)) {\n                        if (ab.label) {\n                            remove(ab.label.thedef.references, ab);\n                        }\n                        CHANGED = true;\n                        stat = stat.clone();\n                        stat.body = make_node(AST_BlockStatement, stat.body, {\n                            body: as_statement_array(stat.body).concat(extract_functions())\n                        });\n                        var body = as_statement_array_with_return(stat.alternative, ab);\n                        stat.alternative = make_node(AST_BlockStatement, stat.alternative, {\n                            body: body\n                        });\n                        statements[i] = stat.transform(compressor);\n                        continue;\n                    }\n                }\n\n                if (stat instanceof AST_If && stat.body instanceof AST_Return) {\n                    var value = stat.body.value;\n                    //---\n                    // pretty silly case, but:\n                    // if (foo()) return; return; ==> foo(); return;\n                    if (!value && !stat.alternative\n                        && (in_lambda && !next || next instanceof AST_Return && !next.value)) {\n                        CHANGED = true;\n                        statements[i] = make_node(AST_SimpleStatement, stat.condition, {\n                            body: stat.condition\n                        });\n                        continue;\n                    }\n                    //---\n                    // if (foo()) return x; return y; ==> return foo() ? x : y;\n                    if (value && !stat.alternative && next instanceof AST_Return && next.value) {\n                        CHANGED = true;\n                        stat = stat.clone();\n                        stat.alternative = next;\n                        statements.splice(i, 1, stat.transform(compressor));\n                        statements.splice(j, 1);\n                        continue;\n                    }\n                    //---\n                    // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined;\n                    if (value && !stat.alternative\n                        && (!next && in_lambda && multiple_if_returns\n                            || next instanceof AST_Return)) {\n                        CHANGED = true;\n                        stat = stat.clone();\n                        stat.alternative = next || make_node(AST_Return, stat, {\n                            value: null\n                        });\n                        statements.splice(i, 1, stat.transform(compressor));\n                        if (next) statements.splice(j, 1);\n                        continue;\n                    }\n                    //---\n                    // if (a) return b; if (c) return d; e; ==> return a ? b : c ? d : void e;\n                    //\n                    // if sequences is not enabled, this can lead to an endless loop (issue #866).\n                    // however, with sequences on this helps producing slightly better output for\n                    // the example code.\n                    var prev = statements[prev_index(i)];\n                    if (compressor.option(\"sequences\") && in_lambda && !stat.alternative\n                        && prev instanceof AST_If && prev.body instanceof AST_Return\n                        && next_index(j) == statements.length && next instanceof AST_SimpleStatement) {\n                        CHANGED = true;\n                        stat = stat.clone();\n                        stat.alternative = make_node(AST_BlockStatement, next, {\n                            body: [\n                                next,\n                                make_node(AST_Return, next, {\n                                    value: null\n                                })\n                            ]\n                        });\n                        statements.splice(i, 1, stat.transform(compressor));\n                        statements.splice(j, 1);\n                        continue;\n                    }\n                }\n            }\n\n            function has_multiple_if_returns(statements) {\n                var n = 0;\n                for (var i = statements.length; --i >= 0;) {\n                    var stat = statements[i];\n                    if (stat instanceof AST_If && stat.body instanceof AST_Return) {\n                        if (++n > 1) return true;\n                    }\n                }\n                return false;\n            }\n\n            function is_return_void(value) {\n                return !value || value instanceof AST_UnaryPrefix && value.operator == \"void\";\n            }\n\n            function can_merge_flow(ab) {\n                if (!ab) return false;\n                for (var j = i + 1, len = statements.length; j < len; j++) {\n                    var stat = statements[j];\n                    if (stat instanceof AST_Const || stat instanceof AST_Let) return false;\n                }\n                var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null;\n                return ab instanceof AST_Return && in_lambda && is_return_void(ab.value)\n                    || ab instanceof AST_Continue && self === loop_body(lct)\n                    || ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct;\n            }\n\n            function extract_functions() {\n                var tail = statements.slice(i + 1);\n                statements.length = i + 1;\n                return tail.filter(function(stat) {\n                    if (stat instanceof AST_Defun) {\n                        statements.push(stat);\n                        return false;\n                    }\n                    return true;\n                });\n            }\n\n            function as_statement_array_with_return(node, ab) {\n                var body = as_statement_array(node).slice(0, -1);\n                if (ab.value) {\n                    body.push(make_node(AST_SimpleStatement, ab.value, {\n                        body: ab.value.expression\n                    }));\n                }\n                return body;\n            }\n\n            function next_index(i) {\n                for (var j = i + 1, len = statements.length; j < len; j++) {\n                    var stat = statements[j];\n                    if (!(stat instanceof AST_Var && declarations_only(stat))) {\n                        break;\n                    }\n                }\n                return j;\n            }\n\n            function prev_index(i) {\n                for (var j = i; --j >= 0;) {\n                    var stat = statements[j];\n                    if (!(stat instanceof AST_Var && declarations_only(stat))) {\n                        break;\n                    }\n                }\n                return j;\n            }\n        }\n\n        function eliminate_dead_code(statements, compressor) {\n            var has_quit;\n            var self = compressor.self();\n            for (var i = 0, n = 0, len = statements.length; i < len; i++) {\n                var stat = statements[i];\n                if (stat instanceof AST_LoopControl) {\n                    var lct = compressor.loopcontrol_target(stat);\n                    if (stat instanceof AST_Break\n                            && !(lct instanceof AST_IterationStatement)\n                            && loop_body(lct) === self\n                        || stat instanceof AST_Continue\n                            && loop_body(lct) === self) {\n                        if (stat.label) {\n                            remove(stat.label.thedef.references, stat);\n                        }\n                    } else {\n                        statements[n++] = stat;\n                    }\n                } else {\n                    statements[n++] = stat;\n                }\n                if (aborts(stat)) {\n                    has_quit = statements.slice(i + 1);\n                    break;\n                }\n            }\n            statements.length = n;\n            CHANGED = n != len;\n            if (has_quit) has_quit.forEach(function(stat) {\n                extract_declarations_from_unreachable_code(compressor, stat, statements);\n            });\n        }\n\n        function declarations_only(node) {\n            return all(node.definitions, function(var_def) {\n                return !var_def.value;\n            });\n        }\n\n        function sequencesize(statements, compressor) {\n            if (statements.length < 2) return;\n            var seq = [], n = 0;\n            function push_seq() {\n                if (!seq.length) return;\n                var body = make_sequence(seq[0], seq);\n                statements[n++] = make_node(AST_SimpleStatement, body, { body: body });\n                seq = [];\n            }\n            for (var i = 0, len = statements.length; i < len; i++) {\n                var stat = statements[i];\n                if (stat instanceof AST_SimpleStatement) {\n                    if (seq.length >= compressor.sequences_limit) push_seq();\n                    var body = stat.body;\n                    if (seq.length > 0) body = body.drop_side_effect_free(compressor);\n                    if (body) merge_sequence(seq, body);\n                } else if (stat instanceof AST_Definitions && declarations_only(stat)\n                    || stat instanceof AST_Defun) {\n                    statements[n++] = stat;\n                } else {\n                    push_seq();\n                    statements[n++] = stat;\n                }\n            }\n            push_seq();\n            statements.length = n;\n            if (n != len) CHANGED = true;\n        }\n\n        function to_simple_statement(block, decls) {\n            if (!(block instanceof AST_BlockStatement)) return block;\n            var stat = null;\n            for (var i = 0, len = block.body.length; i < len; i++) {\n                var line = block.body[i];\n                if (line instanceof AST_Var && declarations_only(line)) {\n                    decls.push(line);\n                } else if (stat) {\n                    return false;\n                } else {\n                    stat = line;\n                }\n            }\n            return stat;\n        }\n\n        function sequencesize_2(statements, compressor) {\n            function cons_seq(right) {\n                n--;\n                CHANGED = true;\n                var left = prev.body;\n                return make_sequence(left, [ left, right ]).transform(compressor);\n            }\n            var n = 0, prev;\n            for (var i = 0; i < statements.length; i++) {\n                var stat = statements[i];\n                if (prev) {\n                    if (stat instanceof AST_Exit) {\n                        stat.value = cons_seq(stat.value || make_node(AST_Undefined, stat).transform(compressor));\n                    } else if (stat instanceof AST_For) {\n                        if (!(stat.init instanceof AST_Definitions)) {\n                            var abort = false;\n                            prev.body.walk(new TreeWalker(function(node) {\n                                if (abort || node instanceof AST_Scope) return true;\n                                if (node instanceof AST_Binary && node.operator == \"in\") {\n                                    abort = true;\n                                    return true;\n                                }\n                            }));\n                            if (!abort) {\n                                if (stat.init) stat.init = cons_seq(stat.init);\n                                else {\n                                    stat.init = prev.body;\n                                    n--;\n                                    CHANGED = true;\n                                }\n                            }\n                        }\n                    } else if (stat instanceof AST_ForIn) {\n                        if (!(stat.init instanceof AST_Const) && !(stat.init instanceof AST_Let)) {\n                            stat.object = cons_seq(stat.object);\n                        }\n                    } else if (stat instanceof AST_If) {\n                        stat.condition = cons_seq(stat.condition);\n                    } else if (stat instanceof AST_Switch) {\n                        stat.expression = cons_seq(stat.expression);\n                    } else if (stat instanceof AST_With) {\n                        stat.expression = cons_seq(stat.expression);\n                    }\n                }\n                if (compressor.option(\"conditionals\") && stat instanceof AST_If) {\n                    var decls = [];\n                    var body = to_simple_statement(stat.body, decls);\n                    var alt = to_simple_statement(stat.alternative, decls);\n                    if (body !== false && alt !== false && decls.length > 0) {\n                        var len = decls.length;\n                        decls.push(make_node(AST_If, stat, {\n                            condition: stat.condition,\n                            body: body || make_node(AST_EmptyStatement, stat.body),\n                            alternative: alt\n                        }));\n                        decls.unshift(n, 1);\n                        [].splice.apply(statements, decls);\n                        i += len;\n                        n += len + 1;\n                        prev = null;\n                        CHANGED = true;\n                        continue;\n                    }\n                }\n                statements[n++] = stat;\n                prev = stat instanceof AST_SimpleStatement ? stat : null;\n            }\n            statements.length = n;\n        }\n\n        function join_object_assignments(defn, body) {\n            if (!(defn instanceof AST_Definitions)) return;\n            var def = defn.definitions[defn.definitions.length - 1];\n            if (!(def.value instanceof AST_Object)) return;\n            var exprs;\n            if (body instanceof AST_Assign) {\n                exprs = [ body ];\n            } else if (body instanceof AST_Sequence) {\n                exprs = body.expressions.slice();\n            }\n            if (!exprs) return;\n            var trimmed = false;\n            do {\n                var node = exprs[0];\n                if (!(node instanceof AST_Assign)) break;\n                if (node.operator != \"=\") break;\n                if (!(node.left instanceof AST_PropAccess)) break;\n                var sym = node.left.expression;\n                if (!(sym instanceof AST_SymbolRef)) break;\n                if (def.name.name != sym.name) break;\n                if (!node.right.is_constant_expression(scope)) break;\n                var prop = node.left.property;\n                if (prop instanceof AST_Node) {\n                    prop = prop.evaluate(compressor);\n                }\n                if (prop instanceof AST_Node) break;\n                prop = \"\" + prop;\n                var diff = compressor.option(\"ecma\") < 6\n                    && compressor.has_directive(\"use strict\") ? function(node) {\n                    return node.key != prop && node.key.name != prop;\n                } : function(node) {\n                    return node.key.name != prop;\n                };\n                if (!all(def.value.properties, diff)) break;\n                var p = def.value.properties.filter(function (p) { return p.key === prop; })[0];\n                if (!p) {\n                    def.value.properties.push(make_node(AST_ObjectKeyVal, node, {\n                        key: prop,\n                        value: node.right\n                    }));\n                } else {\n                    p.value = new AST_Sequence({\n                        start: p.start,\n                        expressions: [p.value.clone(), node.right.clone()],\n                        end: p.end\n                    });\n                }\n                exprs.shift();\n                trimmed = true;\n            } while (exprs.length);\n            return trimmed && exprs;\n        }\n\n        function join_consecutive_vars(statements) {\n            var defs;\n            for (var i = 0, j = -1, len = statements.length; i < len; i++) {\n                var stat = statements[i];\n                var prev = statements[j];\n                if (stat instanceof AST_Definitions) {\n                    if (prev && prev.TYPE == stat.TYPE) {\n                        prev.definitions = prev.definitions.concat(stat.definitions);\n                        CHANGED = true;\n                    } else if (defs && defs.TYPE == stat.TYPE && declarations_only(stat)) {\n                        defs.definitions = defs.definitions.concat(stat.definitions);\n                        CHANGED = true;\n                    } else {\n                        statements[++j] = stat;\n                        defs = stat;\n                    }\n                } else if (stat instanceof AST_Exit) {\n                    stat.value = extract_object_assignments(stat.value);\n                } else if (stat instanceof AST_For) {\n                    var exprs = join_object_assignments(prev, stat.init);\n                    if (exprs) {\n                        CHANGED = true;\n                        stat.init = exprs.length ? make_sequence(stat.init, exprs) : null;\n                        statements[++j] = stat;\n                    } else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {\n                        if (stat.init) {\n                            prev.definitions = prev.definitions.concat(stat.init.definitions);\n                        }\n                        stat.init = prev;\n                        statements[j] = stat;\n                        CHANGED = true;\n                    } else if (defs && stat.init && defs.TYPE == stat.init.TYPE && declarations_only(stat.init)) {\n                        defs.definitions = defs.definitions.concat(stat.init.definitions);\n                        stat.init = null;\n                        statements[++j] = stat;\n                        CHANGED = true;\n                    } else {\n                        statements[++j] = stat;\n                    }\n                } else if (stat instanceof AST_ForIn) {\n                    stat.object = extract_object_assignments(stat.object);\n                } else if (stat instanceof AST_If) {\n                    stat.condition = extract_object_assignments(stat.condition);\n                } else if (stat instanceof AST_SimpleStatement) {\n                    var exprs = join_object_assignments(prev, stat.body);\n                    if (exprs) {\n                        CHANGED = true;\n                        if (!exprs.length) continue;\n                        stat.body = make_sequence(stat.body, exprs);\n                    }\n                    statements[++j] = stat;\n                } else if (stat instanceof AST_Switch) {\n                    stat.expression = extract_object_assignments(stat.expression);\n                } else if (stat instanceof AST_With) {\n                    stat.expression = extract_object_assignments(stat.expression);\n                } else {\n                    statements[++j] = stat;\n                }\n            }\n            statements.length = j + 1;\n\n            function extract_object_assignments(value) {\n                statements[++j] = stat;\n                var exprs = join_object_assignments(prev, value);\n                if (exprs) {\n                    CHANGED = true;\n                    if (exprs.length) {\n                        return make_sequence(value, exprs);\n                    } else if (value instanceof AST_Sequence) {\n                        return value.tail_node().left;\n                    } else {\n                        return value.left;\n                    }\n                }\n                return value;\n            }\n        }\n    }\n\n    function extract_declarations_from_unreachable_code(compressor, stat, target) {\n        if (!(stat instanceof AST_Defun)) {\n            compressor.warn(\"Dropping unreachable code [{file}:{line},{col}]\", stat.start);\n        }\n        stat.walk(new TreeWalker(function(node) {\n            if (node instanceof AST_Var) {\n                compressor.warn(\"Declarations in unreachable code! [{file}:{line},{col}]\", node.start);\n                node.remove_initializers();\n                target.push(node);\n                return true;\n            }\n            if (node instanceof AST_Defun && (node === stat || !compressor.has_directive(\"use strict\"))) {\n                target.push(node === stat ? node : make_node(AST_Var, node, {\n                    definitions: [\n                        make_node(AST_VarDef, node, {\n                            name: make_node(AST_SymbolVar, node.name, node.name),\n                            value: null\n                        })\n                    ]\n                }));\n                return true;\n            }\n            if (node instanceof AST_Scope) {\n                return true;\n            }\n        }));\n    }\n\n    function get_value(key) {\n        if (key instanceof AST_Constant) {\n            return key.getValue();\n        }\n        if (key instanceof AST_UnaryPrefix\n            && key.operator == \"void\"\n            && key.expression instanceof AST_Constant) {\n            return;\n        }\n        return key;\n    }\n\n    function is_undefined(node, compressor) {\n        return node.is_undefined\n            || node instanceof AST_Undefined\n            || node instanceof AST_UnaryPrefix\n                && node.operator == \"void\"\n                && !node.expression.has_side_effects(compressor);\n    }\n\n    // may_throw_on_access()\n    // returns true if this node may be null, undefined or contain `AST_Accessor`\n    (function(def) {\n        AST_Node.DEFMETHOD(\"may_throw_on_access\", function(compressor) {\n            return !compressor.option(\"pure_getters\")\n                || this._dot_throw(compressor);\n        });\n\n        function is_strict(compressor) {\n            return /strict/.test(compressor.option(\"pure_getters\"));\n        }\n\n        def(AST_Node, is_strict);\n        def(AST_Null, return_true);\n        def(AST_Undefined, return_true);\n        def(AST_Constant, return_false);\n        def(AST_Array, return_false);\n        def(AST_Object, function(compressor) {\n            if (!is_strict(compressor)) return false;\n            for (var i = this.properties.length; --i >=0;)\n                if (this.properties[i]._dot_throw(compressor)) return true;\n            return false;\n        });\n        def(AST_ObjectProperty, return_false);\n        def(AST_ObjectGetter, return_true);\n        def(AST_Expansion, function(compressor) {\n            return this.expression._dot_throw(compressor);\n        });\n        def(AST_Function, return_false);\n        def(AST_Arrow, return_false);\n        def(AST_UnaryPostfix, return_false);\n        def(AST_UnaryPrefix, function() {\n            return this.operator == \"void\";\n        });\n        def(AST_Binary, function(compressor) {\n            return (this.operator == \"&&\" || this.operator == \"||\")\n                && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor));\n        });\n        def(AST_Assign, function(compressor) {\n            return this.operator == \"=\"\n                && this.right._dot_throw(compressor);\n        });\n        def(AST_Conditional, function(compressor) {\n            return this.consequent._dot_throw(compressor)\n                || this.alternative._dot_throw(compressor);\n        });\n        def(AST_Dot, function(compressor) {\n            if (!is_strict(compressor)) return false;\n            if (this.expression instanceof AST_Function && this.property == \"prototype\") return false;\n            return true;\n        });\n        def(AST_Sequence, function(compressor) {\n            return this.tail_node()._dot_throw(compressor);\n        });\n        def(AST_SymbolRef, function(compressor) {\n            if (this.is_undefined) return true;\n            if (!is_strict(compressor)) return false;\n            if (is_undeclared_ref(this) && this.is_declared(compressor)) return false;\n            if (this.is_immutable()) return false;\n            var fixed = this.fixed_value();\n            return !fixed || fixed._dot_throw(compressor);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"_dot_throw\", func);\n    });\n\n    /* -----[ boolean/negation helpers ]----- */\n\n    // methods to determine whether an expression has a boolean result type\n    (function(def) {\n        var unary_bool = [ \"!\", \"delete\" ];\n        var binary_bool = [ \"in\", \"instanceof\", \"==\", \"!=\", \"===\", \"!==\", \"<\", \"<=\", \">=\", \">\" ];\n        def(AST_Node, return_false);\n        def(AST_UnaryPrefix, function() {\n            return member(this.operator, unary_bool);\n        });\n        def(AST_Binary, function() {\n            return member(this.operator, binary_bool)\n                || lazy_op(this.operator)\n                    && this.left.is_boolean()\n                    && this.right.is_boolean();\n        });\n        def(AST_Conditional, function() {\n            return this.consequent.is_boolean() && this.alternative.is_boolean();\n        });\n        def(AST_Assign, function() {\n            return this.operator == \"=\" && this.right.is_boolean();\n        });\n        def(AST_Sequence, function() {\n            return this.tail_node().is_boolean();\n        });\n        def(AST_True, return_true);\n        def(AST_False, return_true);\n    })(function(node, func) {\n        node.DEFMETHOD(\"is_boolean\", func);\n    });\n\n    // methods to determine if an expression has a numeric result type\n    (function(def) {\n        def(AST_Node, return_false);\n        def(AST_Number, return_true);\n        var unary = makePredicate(\"+ - ~ ++ --\");\n        def(AST_Unary, function() {\n            return unary(this.operator);\n        });\n        var binary = makePredicate(\"- * / % & | ^ << >> >>>\");\n        def(AST_Binary, function(compressor) {\n            return binary(this.operator) || this.operator == \"+\"\n                && this.left.is_number(compressor)\n                && this.right.is_number(compressor);\n        });\n        def(AST_Assign, function(compressor) {\n            return binary(this.operator.slice(0, -1))\n                || this.operator == \"=\" && this.right.is_number(compressor);\n        });\n        def(AST_Sequence, function(compressor) {\n            return this.tail_node().is_number(compressor);\n        });\n        def(AST_Conditional, function(compressor) {\n            return this.consequent.is_number(compressor) && this.alternative.is_number(compressor);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"is_number\", func);\n    });\n\n    // methods to determine if an expression has a string result type\n    (function(def) {\n        def(AST_Node, return_false);\n        def(AST_String, return_true);\n        def(AST_TemplateString, function() {\n            return this.segments.length === 1;\n        });\n        def(AST_UnaryPrefix, function() {\n            return this.operator == \"typeof\";\n        });\n        def(AST_Binary, function(compressor) {\n            return this.operator == \"+\" &&\n                (this.left.is_string(compressor) || this.right.is_string(compressor));\n        });\n        def(AST_Assign, function(compressor) {\n            return (this.operator == \"=\" || this.operator == \"+=\") && this.right.is_string(compressor);\n        });\n        def(AST_Sequence, function(compressor) {\n            return this.tail_node().is_string(compressor);\n        });\n        def(AST_Conditional, function(compressor) {\n            return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"is_string\", func);\n    });\n\n    var lazy_op = makePredicate(\"&& ||\");\n    var unary_side_effects = makePredicate(\"delete ++ --\");\n\n    function is_lhs(node, parent) {\n        if (parent instanceof AST_Unary && unary_side_effects(parent.operator)) return parent.expression;\n        if (parent instanceof AST_Assign && parent.left === node) return node;\n    }\n\n    (function(def) {\n        function to_node(value, orig) {\n            if (value instanceof AST_Node) return make_node(value.CTOR, orig, value);\n            if (Array.isArray(value)) return make_node(AST_Array, orig, {\n                elements: value.map(function(value) {\n                    return to_node(value, orig);\n                })\n            });\n            if (value && typeof value == \"object\") {\n                var props = [];\n                for (var key in value) if (HOP(value, key)) {\n                    props.push(make_node(AST_ObjectKeyVal, orig, {\n                        key: key,\n                        value: to_node(value[key], orig)\n                    }));\n                }\n                return make_node(AST_Object, orig, {\n                    properties: props\n                });\n            }\n            return make_node_from_constant(value, orig);\n        }\n\n        function warn(compressor, node) {\n            compressor.warn(\"global_defs \" + node.print_to_string() + \" redefined [{file}:{line},{col}]\", node.start);\n        }\n\n        AST_Toplevel.DEFMETHOD(\"resolve_defines\", function(compressor) {\n            if (!compressor.option(\"global_defs\")) return this;\n            this.figure_out_scope({ ie8: compressor.option(\"ie8\") });\n            return this.transform(new TreeTransformer(function(node) {\n                var def = node._find_defs(compressor, \"\");\n                if (!def) return;\n                var level = 0, child = node, parent;\n                while (parent = this.parent(level++)) {\n                    if (!(parent instanceof AST_PropAccess)) break;\n                    if (parent.expression !== child) break;\n                    child = parent;\n                }\n                if (is_lhs(child, parent)) {\n                    warn(compressor, node);\n                    return;\n                }\n                return def;\n            }));\n        });\n        def(AST_Node, noop);\n        def(AST_Dot, function(compressor, suffix) {\n            return this.expression._find_defs(compressor, \".\" + this.property + suffix);\n        });\n        def(AST_SymbolDeclaration, function(compressor) {\n            if (!this.global()) return;\n            if (HOP(compressor.option(\"global_defs\"), this.name)) warn(compressor, this);\n        });\n        def(AST_SymbolRef, function(compressor, suffix) {\n            if (!this.global()) return;\n            var defines = compressor.option(\"global_defs\");\n            var name = this.name + suffix;\n            if (HOP(defines, name)) return to_node(defines[name], this);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"_find_defs\", func);\n    });\n\n    function best_of_expression(ast1, ast2) {\n        return ast1.print_to_string().length >\n            ast2.print_to_string().length\n            ? ast2 : ast1;\n    }\n\n    function best_of_statement(ast1, ast2) {\n        return best_of_expression(make_node(AST_SimpleStatement, ast1, {\n            body: ast1\n        }), make_node(AST_SimpleStatement, ast2, {\n            body: ast2\n        })).body;\n    }\n\n    function best_of(compressor, ast1, ast2) {\n        return (first_in_statement(compressor) ? best_of_statement : best_of_expression)(ast1, ast2);\n    }\n\n    function convert_to_predicate(obj) {\n        for (var key in obj) {\n            obj[key] = makePredicate(obj[key]);\n        }\n    }\n\n    var object_fns = [\n        \"constructor\",\n        \"toString\",\n        \"valueOf\",\n    ];\n    var native_fns = {\n        Array: [\n            \"indexOf\",\n            \"join\",\n            \"lastIndexOf\",\n            \"slice\",\n        ].concat(object_fns),\n        Boolean: object_fns,\n        Function: object_fns,\n        Number: [\n            \"toExponential\",\n            \"toFixed\",\n            \"toPrecision\",\n        ].concat(object_fns),\n        Object: object_fns,\n        RegExp: [\n            \"test\",\n        ].concat(object_fns),\n        String: [\n            \"charAt\",\n            \"charCodeAt\",\n            \"concat\",\n            \"indexOf\",\n            \"italics\",\n            \"lastIndexOf\",\n            \"match\",\n            \"replace\",\n            \"search\",\n            \"slice\",\n            \"split\",\n            \"substr\",\n            \"substring\",\n            \"toLowerCase\",\n            \"toUpperCase\",\n            \"trim\",\n        ].concat(object_fns),\n    };\n    convert_to_predicate(native_fns);\n    var static_fns = {\n        Array: [\n            \"isArray\",\n        ],\n        Math: [\n            \"abs\",\n            \"acos\",\n            \"asin\",\n            \"atan\",\n            \"ceil\",\n            \"cos\",\n            \"exp\",\n            \"floor\",\n            \"log\",\n            \"round\",\n            \"sin\",\n            \"sqrt\",\n            \"tan\",\n            \"atan2\",\n            \"pow\",\n            \"max\",\n            \"min\",\n        ],\n        Number: [\n            \"isFinite\",\n            \"isNaN\",\n        ],\n        Object: [\n            \"create\",\n            \"getOwnPropertyDescriptor\",\n            \"getOwnPropertyNames\",\n            \"getPrototypeOf\",\n            \"isExtensible\",\n            \"isFrozen\",\n            \"isSealed\",\n            \"keys\",\n        ],\n        String: [\n            \"fromCharCode\",\n        ],\n    };\n    convert_to_predicate(static_fns);\n\n    // methods to evaluate a constant expression\n    (function(def) {\n        // If the node has been successfully reduced to a constant,\n        // then its value is returned; otherwise the element itself\n        // is returned.\n        // They can be distinguished as constant value is never a\n        // descendant of AST_Node.\n        AST_Node.DEFMETHOD(\"evaluate\", function(compressor) {\n            if (!compressor.option(\"evaluate\")) return this;\n            var val = this._eval(compressor, 1);\n            if (!val || val instanceof RegExp) return val;\n            if (typeof val == \"function\" || typeof val == \"object\") return this;\n            return val;\n        });\n        var unaryPrefix = makePredicate(\"! ~ - + void\");\n        AST_Node.DEFMETHOD(\"is_constant\", function() {\n            // Accomodate when compress option evaluate=false\n            // as well as the common constant expressions !0 and -1\n            if (this instanceof AST_Constant) {\n                return !(this instanceof AST_RegExp);\n            } else {\n                return this instanceof AST_UnaryPrefix\n                    && this.expression instanceof AST_Constant\n                    && unaryPrefix(this.operator);\n            }\n        });\n        def(AST_Statement, function() {\n            throw new Error(string_template(\"Cannot evaluate a statement [{file}:{line},{col}]\", this.start));\n        });\n        def(AST_Lambda, return_this);\n        def(AST_Class, return_this);\n        def(AST_Node, return_this);\n        def(AST_Constant, function() {\n            return this.getValue();\n        });\n        def(AST_TemplateString, function() {\n            if (this.segments.length !== 1) return this;\n            return this.segments[0].value;\n        });\n        def(AST_Function, function(compressor) {\n            if (compressor.option(\"unsafe\")) {\n                var fn = function() {};\n                fn.node = this;\n                fn.toString = function() {\n                    return this.node.print_to_string();\n                };\n                return fn;\n            }\n            return this;\n        });\n        def(AST_Array, function(compressor, depth) {\n            if (compressor.option(\"unsafe\")) {\n                var elements = [];\n                for (var i = 0, len = this.elements.length; i < len; i++) {\n                    var element = this.elements[i];\n                    var value = element._eval(compressor, depth);\n                    if (element === value) return this;\n                    elements.push(value);\n                }\n                return elements;\n            }\n            return this;\n        });\n        def(AST_Object, function(compressor, depth) {\n            if (compressor.option(\"unsafe\")) {\n                var val = {};\n                for (var i = 0, len = this.properties.length; i < len; i++) {\n                    var prop = this.properties[i];\n                    if (prop instanceof AST_Expansion) return this;\n                    var key = prop.key;\n                    if (key instanceof AST_Symbol) {\n                        key = key.name;\n                    } else if (key instanceof AST_Node) {\n                        key = key._eval(compressor, depth);\n                        if (key === prop.key) return this;\n                    }\n                    if (typeof Object.prototype[key] === \"function\") {\n                        return this;\n                    }\n                    if (prop.value instanceof AST_Function) continue;\n                    val[key] = prop.value._eval(compressor, depth);\n                    if (val[key] === prop.value) return this;\n                }\n                return val;\n            }\n            return this;\n        });\n        var non_converting_unary = makePredicate(\"! typeof void\");\n        def(AST_UnaryPrefix, function(compressor, depth) {\n            var e = this.expression;\n            // Function would be evaluated to an array and so typeof would\n            // incorrectly return 'object'. Hence making is a special case.\n            if (compressor.option(\"typeofs\")\n                && this.operator == \"typeof\"\n                && (e instanceof AST_Lambda\n                    || e instanceof AST_SymbolRef\n                        && e.fixed_value() instanceof AST_Lambda)) {\n                return typeof function() {};\n            }\n            if (!non_converting_unary(this.operator)) depth++;\n            e = e._eval(compressor, depth);\n            if (e === this.expression) return this;\n            switch (this.operator) {\n              case \"!\": return !e;\n              case \"typeof\":\n                // typeof <RegExp> returns \"object\" or \"function\" on different platforms\n                // so cannot evaluate reliably\n                if (e instanceof RegExp) return this;\n                return typeof e;\n              case \"void\": return void e;\n              case \"~\": return ~e;\n              case \"-\": return -e;\n              case \"+\": return +e;\n            }\n            return this;\n        });\n        var non_converting_binary = makePredicate(\"&& || === !==\");\n        def(AST_Binary, function(compressor, depth) {\n            if (!non_converting_binary(this.operator)) depth++;\n            var left = this.left._eval(compressor, depth);\n            if (left === this.left) return this;\n            var right = this.right._eval(compressor, depth);\n            if (right === this.right) return this;\n            var result;\n            switch (this.operator) {\n              case \"&&\"  : result = left &&  right; break;\n              case \"||\"  : result = left ||  right; break;\n              case \"|\"   : result = left |   right; break;\n              case \"&\"   : result = left &   right; break;\n              case \"^\"   : result = left ^   right; break;\n              case \"+\"   : result = left +   right; break;\n              case \"*\"   : result = left *   right; break;\n              case \"**\"  : result = Math.pow(left, right); break;\n              case \"/\"   : result = left /   right; break;\n              case \"%\"   : result = left %   right; break;\n              case \"-\"   : result = left -   right; break;\n              case \"<<\"  : result = left <<  right; break;\n              case \">>\"  : result = left >>  right; break;\n              case \">>>\" : result = left >>> right; break;\n              case \"==\"  : result = left ==  right; break;\n              case \"===\" : result = left === right; break;\n              case \"!=\"  : result = left !=  right; break;\n              case \"!==\" : result = left !== right; break;\n              case \"<\"   : result = left <   right; break;\n              case \"<=\"  : result = left <=  right; break;\n              case \">\"   : result = left >   right; break;\n              case \">=\"  : result = left >=  right; break;\n              default:\n                  return this;\n            }\n            if (isNaN(result) && compressor.find_parent(AST_With)) {\n                // leave original expression as is\n                return this;\n            }\n            return result;\n        });\n        def(AST_Conditional, function(compressor, depth) {\n            var condition = this.condition._eval(compressor, depth);\n            if (condition === this.condition) return this;\n            var node = condition ? this.consequent : this.alternative;\n            var value = node._eval(compressor, depth);\n            return value === node ? this : value;\n        });\n        def(AST_SymbolRef, function(compressor, depth) {\n            var fixed = this.fixed_value();\n            if (!fixed) return this;\n            var value;\n            if (HOP(fixed, \"_eval\")) {\n                value = fixed._eval();\n            } else {\n                this._eval = return_this;\n                value = fixed._eval(compressor, depth);\n                delete this._eval;\n                if (value === fixed) return this;\n                fixed._eval = function() {\n                    return value;\n                };\n            }\n            if (value && typeof value == \"object\") {\n                var escaped = this.definition().escaped;\n                if (escaped && depth > escaped) return this;\n            }\n            return value;\n        });\n        var global_objs = {\n            Array: Array,\n            Math: Math,\n            Number: Number,\n            Object: Object,\n            String: String,\n        };\n        var static_values = {\n            Math: [\n                \"E\",\n                \"LN10\",\n                \"LN2\",\n                \"LOG2E\",\n                \"LOG10E\",\n                \"PI\",\n                \"SQRT1_2\",\n                \"SQRT2\",\n            ],\n            Number: [\n                \"MAX_VALUE\",\n                \"MIN_VALUE\",\n                \"NaN\",\n                \"NEGATIVE_INFINITY\",\n                \"POSITIVE_INFINITY\",\n            ],\n        };\n        convert_to_predicate(static_values);\n        def(AST_PropAccess, function(compressor, depth) {\n            if (compressor.option(\"unsafe\")) {\n                var key = this.property;\n                if (key instanceof AST_Node) {\n                    key = key._eval(compressor, depth);\n                    if (key === this.property) return this;\n                }\n                var exp = this.expression;\n                var val;\n                if (is_undeclared_ref(exp)) {\n\n                    var aa;\n                    var first_arg = exp.name === \"hasOwnProperty\"\n                        && key === \"call\"\n                        && (aa = compressor.parent() && compressor.parent().args)\n                        && (aa && aa[0]\n                        && aa[0].evaluate(compressor));\n                    if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) {\n                        return this.clone();\n                    }\n                    if (!(static_values[exp.name] || return_false)(key)) return this;\n                    val = global_objs[exp.name];\n                } else {\n                    val = exp._eval(compressor, depth + 1);\n                    if (!val || val === exp || !HOP(val, key)) return this;\n                    if (typeof val == \"function\") switch (key) {\n                      case \"name\":\n                        return val.node.name ? val.node.name.name : \"\";\n                      case \"length\":\n                        return val.node.argnames.length;\n                      default:\n                        return this;\n                    }\n                }\n                return val[key];\n            }\n            return this;\n        });\n        def(AST_Call, function(compressor, depth) {\n            var exp = this.expression;\n            if (compressor.option(\"unsafe\") && exp instanceof AST_PropAccess) {\n                var key = exp.property;\n                if (key instanceof AST_Node) {\n                    key = key._eval(compressor, depth);\n                    if (key === exp.property) return this;\n                }\n                var val;\n                var e = exp.expression;\n                if (is_undeclared_ref(e)) {\n                    var first_arg =\n                        e.name === \"hasOwnProperty\" &&\n                        key === \"call\" &&\n                        (this.args[0] && this.args[0].evaluate(compressor));\n                    if ((first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)) {\n                        return this.clone();\n                    }\n                    if (!(static_fns[e.name] || return_false)(key)) return this;\n                    val = global_objs[e.name];\n                } else {\n                    val = e._eval(compressor, depth + 1);\n                    if (val === e || !(val && native_fns[val.constructor.name] || return_false)(key)) return this;\n                }\n                var args = [];\n                for (var i = 0, len = this.args.length; i < len; i++) {\n                    var arg = this.args[i];\n                    var value = arg._eval(compressor, depth);\n                    if (arg === value) return this;\n                    args.push(value);\n                }\n                try {\n                    return val[key].apply(val, args);\n                } catch (ex) {\n                    compressor.warn(\"Error evaluating {code} [{file}:{line},{col}]\", {\n                        code: this.print_to_string(),\n                        file: this.start.file,\n                        line: this.start.line,\n                        col: this.start.col\n                    });\n                }\n            }\n            return this;\n        });\n        def(AST_New, return_this);\n    })(function(node, func) {\n        node.DEFMETHOD(\"_eval\", func);\n    });\n\n    // method to negate an expression\n    (function(def) {\n        function basic_negation(exp) {\n            return make_node(AST_UnaryPrefix, exp, {\n                operator: \"!\",\n                expression: exp\n            });\n        }\n        function best(orig, alt, first_in_statement) {\n            var negated = basic_negation(orig);\n            if (first_in_statement) {\n                var stat = make_node(AST_SimpleStatement, alt, {\n                    body: alt\n                });\n                return best_of_expression(negated, stat) === stat ? alt : negated;\n            }\n            return best_of_expression(negated, alt);\n        }\n        def(AST_Node, function() {\n            return basic_negation(this);\n        });\n        def(AST_Statement, function() {\n            throw new Error(\"Cannot negate a statement\");\n        });\n        def(AST_Function, function() {\n            return basic_negation(this);\n        });\n        def(AST_Arrow, function() {\n            return basic_negation(this);\n        });\n        def(AST_UnaryPrefix, function() {\n            if (this.operator == \"!\")\n                return this.expression;\n            return basic_negation(this);\n        });\n        def(AST_Sequence, function(compressor) {\n            var expressions = this.expressions.slice();\n            expressions.push(expressions.pop().negate(compressor));\n            return make_sequence(this, expressions);\n        });\n        def(AST_Conditional, function(compressor, first_in_statement) {\n            var self = this.clone();\n            self.consequent = self.consequent.negate(compressor);\n            self.alternative = self.alternative.negate(compressor);\n            return best(this, self, first_in_statement);\n        });\n        def(AST_Binary, function(compressor, first_in_statement) {\n            var self = this.clone(), op = this.operator;\n            if (compressor.option(\"unsafe_comps\")) {\n                switch (op) {\n                  case \"<=\" : self.operator = \">\"  ; return self;\n                  case \"<\"  : self.operator = \">=\" ; return self;\n                  case \">=\" : self.operator = \"<\"  ; return self;\n                  case \">\"  : self.operator = \"<=\" ; return self;\n                }\n            }\n            switch (op) {\n              case \"==\" : self.operator = \"!=\"; return self;\n              case \"!=\" : self.operator = \"==\"; return self;\n              case \"===\": self.operator = \"!==\"; return self;\n              case \"!==\": self.operator = \"===\"; return self;\n              case \"&&\":\n                self.operator = \"||\";\n                self.left = self.left.negate(compressor, first_in_statement);\n                self.right = self.right.negate(compressor);\n                return best(this, self, first_in_statement);\n              case \"||\":\n                self.operator = \"&&\";\n                self.left = self.left.negate(compressor, first_in_statement);\n                self.right = self.right.negate(compressor);\n                return best(this, self, first_in_statement);\n            }\n            return basic_negation(this);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"negate\", function(compressor, first_in_statement) {\n            return func.call(this, compressor, first_in_statement);\n        });\n    });\n\n    var global_pure_fns = makePredicate(\"Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError\");\n    AST_Call.DEFMETHOD(\"is_expr_pure\", function(compressor) {\n        if (compressor.option(\"unsafe\")) {\n            var expr = this.expression;\n            var first_arg = (this.args && this.args[0] && this.args[0].evaluate(compressor));\n            if (\n                expr.expression && expr.expression.name === \"hasOwnProperty\" &&\n                (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)\n            ) {\n                return false;\n            }\n            if (is_undeclared_ref(expr) && global_pure_fns(expr.name)) return true;\n            if (expr instanceof AST_Dot\n                && is_undeclared_ref(expr.expression)\n                && (static_fns[expr.expression.name] || return_false)(expr.property)) {\n                return true;\n            }\n        }\n        return this.pure || !compressor.pure_funcs(this);\n    });\n    AST_Node.DEFMETHOD(\"is_call_pure\", return_false);\n    AST_Dot.DEFMETHOD(\"is_call_pure\", function(compressor) {\n        if (!compressor.option(\"unsafe\")) return;\n        var expr = this.expression;\n        var fns = return_false;\n        if (expr instanceof AST_Array) {\n            fns = native_fns.Array;\n        } else if (expr.is_boolean()) {\n            fns = native_fns.Boolean;\n        } else if (expr.is_number(compressor)) {\n            fns = native_fns.Number;\n        } else if (expr instanceof AST_RegExp) {\n            fns = native_fns.RegExp;\n        } else if (expr.is_string(compressor)) {\n            fns = native_fns.String;\n        } else if (!this.may_throw_on_access(compressor)) {\n            fns = native_fns.Object;\n        }\n        return fns(this.property);\n    });\n\n    // determine if expression has side effects\n    (function(def) {\n        def(AST_Node, return_true);\n\n        def(AST_EmptyStatement, return_false);\n        def(AST_Constant, return_false);\n        def(AST_This, return_false);\n\n        function any(list, compressor) {\n            for (var i = list.length; --i >= 0;)\n                if (list[i].has_side_effects(compressor))\n                    return true;\n            return false;\n        }\n\n        def(AST_Block, function(compressor) {\n            return any(this.body, compressor);\n        });\n        def(AST_Call, function(compressor) {\n            if (!this.is_expr_pure(compressor)\n                && (!this.expression.is_call_pure(compressor)\n                    || this.expression.has_side_effects(compressor))) {\n                return true;\n            }\n            return any(this.args, compressor);\n        });\n        def(AST_Switch, function(compressor) {\n            return this.expression.has_side_effects(compressor)\n                || any(this.body, compressor);\n        });\n        def(AST_Case, function(compressor) {\n            return this.expression.has_side_effects(compressor)\n                || any(this.body, compressor);\n        });\n        def(AST_Try, function(compressor) {\n            return any(this.body, compressor)\n                || this.bcatch && this.bcatch.has_side_effects(compressor)\n                || this.bfinally && this.bfinally.has_side_effects(compressor);\n        });\n        def(AST_If, function(compressor) {\n            return this.condition.has_side_effects(compressor)\n                || this.body && this.body.has_side_effects(compressor)\n                || this.alternative && this.alternative.has_side_effects(compressor);\n        });\n        def(AST_LabeledStatement, function(compressor) {\n            return this.body.has_side_effects(compressor);\n        });\n        def(AST_SimpleStatement, function(compressor) {\n            return this.body.has_side_effects(compressor);\n        });\n        def(AST_Lambda, return_false);\n        def(AST_Class, return_false);\n        def(AST_DefClass, return_true);\n        def(AST_Binary, function(compressor) {\n            return this.left.has_side_effects(compressor)\n                || this.right.has_side_effects(compressor);\n        });\n        def(AST_Assign, return_true);\n        def(AST_Conditional, function(compressor) {\n            return this.condition.has_side_effects(compressor)\n                || this.consequent.has_side_effects(compressor)\n                || this.alternative.has_side_effects(compressor);\n        });\n        def(AST_Unary, function(compressor) {\n            return unary_side_effects(this.operator)\n                || this.expression.has_side_effects(compressor);\n        });\n        def(AST_SymbolRef, function(compressor) {\n            return !this.is_declared(compressor);\n        });\n        def(AST_SymbolDeclaration, return_false);\n        def(AST_Object, function(compressor) {\n            return any(this.properties, compressor);\n        });\n        def(AST_ObjectProperty, function(compressor) {\n            if (this.key instanceof AST_ObjectKeyVal &&\n                    this.key.has_side_effects(compressor))\n                return true;\n            return this.value.has_side_effects(compressor);\n        });\n        def(AST_Array, function(compressor) {\n            return any(this.elements, compressor);\n        });\n        def(AST_Dot, function(compressor) {\n            return this.expression.may_throw_on_access(compressor)\n                || this.expression.has_side_effects(compressor);\n        });\n        def(AST_Sub, function(compressor) {\n            return this.expression.may_throw_on_access(compressor)\n                || this.expression.has_side_effects(compressor)\n                || this.property.has_side_effects(compressor);\n        });\n        def(AST_Sequence, function(compressor) {\n            return any(this.expressions, compressor);\n        });\n        def(AST_Definitions, function(compressor) {\n            return any(this.definitions, compressor);\n        });\n        def(AST_VarDef, function(compressor) {\n            return this.value;\n        });\n        def(AST_TemplateSegment, return_false);\n        def(AST_TemplateString, function(compressor) {\n            return any(this.segments, compressor);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"has_side_effects\", func);\n    });\n\n    // determine if expression may throw\n    (function(def) {\n        def(AST_Node, return_true);\n\n        def(AST_Class, return_false);\n        def(AST_Constant, return_false);\n        def(AST_EmptyStatement, return_false);\n        def(AST_Lambda, return_false);\n        def(AST_SymbolDeclaration, return_false);\n        def(AST_This, return_false);\n\n        function any(list, compressor) {\n            for (var i = list.length; --i >= 0;)\n                if (list[i].may_throw(compressor))\n                    return true;\n            return false;\n        }\n\n        def(AST_Array, function(compressor) {\n            return any(this.elements, compressor);\n        });\n        def(AST_Assign, function(compressor) {\n            if (this.right.may_throw(compressor)) return true;\n            if (!compressor.has_directive(\"use strict\")\n                && this.operator == \"=\"\n                && this.left instanceof AST_SymbolRef) {\n                return false;\n            }\n            return this.left.may_throw(compressor);\n        });\n        def(AST_Binary, function(compressor) {\n            return this.left.may_throw(compressor)\n                || this.right.may_throw(compressor);\n        });\n        def(AST_Block, function(compressor) {\n            return any(this.body, compressor);\n        });\n        def(AST_Call, function(compressor) {\n            if (any(this.args, compressor)) return true;\n            if (this.is_expr_pure(compressor)) return false;\n            if (this.expression.may_throw(compressor)) return true;\n            return !(this.expression instanceof AST_Lambda)\n                || any(this.expression.body, compressor);\n        });\n        def(AST_Case, function(compressor) {\n            return this.expression.may_throw(compressor)\n                || any(this.body, compressor);\n        });\n        def(AST_Conditional, function(compressor) {\n            return this.condition.may_throw(compressor)\n                || this.consequent.may_throw(compressor)\n                || this.alternative.may_throw(compressor);\n        });\n        def(AST_Definitions, function(compressor) {\n            return any(this.definitions, compressor);\n        });\n        def(AST_Dot, function(compressor) {\n            return this.expression.may_throw_on_access(compressor)\n                || this.expression.may_throw(compressor);\n        });\n        def(AST_If, function(compressor) {\n            return this.condition.may_throw(compressor)\n                || this.body && this.body.may_throw(compressor)\n                || this.alternative && this.alternative.may_throw(compressor);\n        });\n        def(AST_LabeledStatement, function(compressor) {\n            return this.body.may_throw(compressor);\n        });\n        def(AST_Object, function(compressor) {\n            return any(this.properties, compressor);\n        });\n        def(AST_ObjectProperty, function(compressor) {\n            return this.value.may_throw(compressor);\n        });\n        def(AST_Return, function(compressor) {\n            return this.value && this.value.may_throw(compressor);\n        });\n        def(AST_Sequence, function(compressor) {\n            return any(this.expressions, compressor);\n        });\n        def(AST_SimpleStatement, function(compressor) {\n            return this.body.may_throw(compressor);\n        });\n        def(AST_Sub, function(compressor) {\n            return this.expression.may_throw_on_access(compressor)\n                || this.expression.may_throw(compressor)\n                || this.property.may_throw(compressor);\n        });\n        def(AST_Switch, function(compressor) {\n            return this.expression.may_throw(compressor)\n                || any(this.body, compressor);\n        });\n        def(AST_SymbolRef, function(compressor) {\n            return !this.is_declared(compressor);\n        });\n        def(AST_Try, function(compressor) {\n            return this.bcatch ? this.bcatch.may_throw(compressor) : any(this.body, compressor)\n                || this.bfinally && this.bfinally.may_throw(compressor);\n        });\n        def(AST_Unary, function(compressor) {\n            if (this.operator == \"typeof\" && this.expression instanceof AST_SymbolRef)\n                return false;\n            return this.expression.may_throw(compressor);\n        });\n        def(AST_VarDef, function(compressor) {\n            if (!this.value) return false;\n            return this.value.may_throw(compressor);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"may_throw\", func);\n    });\n\n    // determine if expression is constant\n    (function(def) {\n        function all(list) {\n            for (var i = list.length; --i >= 0;)\n                if (!list[i].is_constant_expression())\n                    return false;\n            return true;\n        }\n\n        function all_refs_local(scope) {\n            var self = this;\n            var result = true;\n            self.walk(new TreeWalker(function(node) {\n                if (!result) return true;\n                if (node instanceof AST_SymbolRef) {\n                    if (self.inlined) {\n                        result = false;\n                        return true;\n                    }\n                    var def = node.definition();\n                    if (member(def, self.enclosed)\n                        && !self.variables.has(def.name)) {\n                        if (scope) {\n                            var scope_def = scope.find_variable(node);\n                            if (def.undeclared ? !scope_def : scope_def === def) {\n                                result = \"f\";\n                                return true;\n                            }\n                        }\n                        result = false;\n                    }\n                    return true;\n                }\n                if (node instanceof AST_This && self instanceof AST_Arrow) {\n                    result = false;\n                    return true;\n                }\n            }));\n            return result;\n        }\n\n        def(AST_Node, return_false);\n        def(AST_Constant, return_true);\n        def(AST_Class, function(scope) {\n            var self = this;\n            if (self.extends && !self.extends.is_constant_expression(scope)) {\n                return false;\n            }\n            return all_refs_local.call(self, scope);\n        });\n        def(AST_Lambda, all_refs_local);\n        def(AST_Unary, function() {\n            return this.expression.is_constant_expression();\n        });\n        def(AST_Binary, function() {\n            return this.left.is_constant_expression() && this.right.is_constant_expression();\n        });\n        def(AST_Array, function() {\n            return all(this.elements);\n        });\n        def(AST_Object, function() {\n            return all(this.properties);\n        });\n        def(AST_ObjectProperty, function() {\n            return !(this.key instanceof AST_Node) && this.value.is_constant_expression();\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"is_constant_expression\", func);\n    });\n\n    // tell me if a statement aborts\n    function aborts(thing) {\n        return thing && thing.aborts();\n    }\n    (function(def) {\n        def(AST_Statement, return_null);\n        def(AST_Jump, return_this);\n        function block_aborts() {\n            for (var i = 0; i < this.body.length; i++) {\n                if (aborts(this.body[i])) {\n                    return this.body[i];\n                }\n            }\n            return null;\n        }\n        def(AST_Import, function() { return null; });\n        def(AST_BlockStatement, block_aborts);\n        def(AST_SwitchBranch, block_aborts);\n        def(AST_If, function() {\n            return this.alternative && aborts(this.body) && aborts(this.alternative) && this;\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"aborts\", func);\n    });\n\n    /* -----[ optimizers ]----- */\n\n    var directives = [\"use asm\", \"use strict\"];\n    OPT(AST_Directive, function(self, compressor) {\n        if (compressor.option(\"directives\")\n            && (!member(self.value, directives) || compressor.has_directive(self.value) !== self)) {\n            return make_node(AST_EmptyStatement, self);\n        }\n        return self;\n    });\n\n    OPT(AST_Debugger, function(self, compressor) {\n        if (compressor.option(\"drop_debugger\"))\n            return make_node(AST_EmptyStatement, self);\n        return self;\n    });\n\n    OPT(AST_LabeledStatement, function(self, compressor) {\n        if (self.body instanceof AST_Break\n            && compressor.loopcontrol_target(self.body) === self.body) {\n            return make_node(AST_EmptyStatement, self);\n        }\n        return self.label.references.length == 0 ? self.body : self;\n    });\n\n    OPT(AST_Block, function(self, compressor) {\n        tighten_body(self.body, compressor);\n        return self;\n    });\n\n    function can_be_extracted_from_if_block(node) {\n        return !(\n            node instanceof AST_Const ||\n            node instanceof AST_Let ||\n            node instanceof AST_Class\n        );\n    }\n\n    OPT(AST_BlockStatement, function(self, compressor) {\n        tighten_body(self.body, compressor);\n        switch (self.body.length) {\n          case 1:\n            if (!compressor.has_directive(\"use strict\")\n                && compressor.parent() instanceof AST_If\n                && can_be_extracted_from_if_block(self.body[0])\n                || can_be_evicted_from_block(self.body[0])) {\n                return self.body[0];\n            }\n            break;\n          case 0: return make_node(AST_EmptyStatement, self);\n        }\n        return self;\n    });\n\n    function opt_AST_Lambda(self, compressor) {\n        tighten_body(self.body, compressor);\n        if (compressor.option(\"side_effects\")\n            && self.body.length == 1\n            && self.body[0] === compressor.has_directive(\"use strict\")) {\n            self.body.length = 0;\n        }\n        return self;\n    }\n    OPT(AST_Lambda, opt_AST_Lambda);\n\n    AST_Scope.DEFMETHOD(\"drop_unused\", function(compressor) {\n        if (!compressor.option(\"unused\")) return;\n        if (compressor.has_directive(\"use asm\")) return;\n        var self = this;\n        if (self.pinned()) return;\n        var drop_funcs = !(self instanceof AST_Toplevel) || compressor.toplevel.funcs;\n        var drop_vars = !(self instanceof AST_Toplevel) || compressor.toplevel.vars;\n        var assign_as_unused = /keep_assign/.test(compressor.option(\"unused\")) ? return_false : function(node) {\n            if (node instanceof AST_Assign && (node.write_only || node.operator == \"=\")) {\n                return node.left;\n            }\n            if (node instanceof AST_Unary && node.write_only) return node.expression;\n        };\n        var in_use = [];\n        var in_use_ids = Object.create(null); // avoid expensive linear scans of in_use\n        var fixed_ids = Object.create(null);\n        if (self instanceof AST_Toplevel && compressor.top_retain) {\n            self.variables.each(function(def) {\n                if (compressor.top_retain(def) && !(def.id in in_use_ids)) {\n                    in_use_ids[def.id] = true;\n                    in_use.push(def);\n                }\n            });\n        }\n        var var_defs_by_id = new Dictionary();\n        var initializations = new Dictionary();\n        var destructuring_value = null;\n        // pass 1: find out which symbols are directly used in\n        // this scope (not in nested scopes).\n        var scope = this;\n        var tw = new TreeWalker(function(node, descend) {\n            if (node instanceof AST_Lambda && node.uses_arguments && !tw.has_directive(\"use strict\")) {\n                node.argnames.forEach(function(argname) {\n                    if (!(argname instanceof AST_SymbolDeclaration)) return;\n                    var def = argname.definition();\n                    if (!(def.id in in_use_ids)) {\n                        in_use_ids[def.id] = true;\n                        in_use.push(def);\n                    }\n                });\n            }\n            if (node === self) return;\n            if (node instanceof AST_Defun || node instanceof AST_DefClass) {\n                var node_def = node.name.definition();\n                var in_export = tw.parent() instanceof AST_Export;\n                if (in_export || !drop_funcs && scope === self) {\n                    if (node_def.global && !(node_def.id in in_use_ids)) {\n                        in_use_ids[node_def.id] = true;\n                        in_use.push(node_def);\n                    }\n                }\n                initializations.add(node_def.id, node);\n                return true; // don't go in nested scopes\n            }\n            if (node instanceof AST_SymbolFunarg && scope === self) {\n                var_defs_by_id.add(node.definition().id, node);\n            }\n            if (node instanceof AST_Definitions && scope === self) {\n                var in_export = tw.parent() instanceof AST_Export;\n                node.definitions.forEach(function(def) {\n                    if (def.name instanceof AST_SymbolVar) {\n                        var_defs_by_id.add(def.name.definition().id, def);\n                    }\n                    if (in_export || !drop_vars) {\n                        def.name.walk(new TreeWalker(function(node) {\n                            if (node instanceof AST_SymbolDeclaration) {\n                                var def = node.definition();\n                                if ((in_export || def.global) && !(def.id in in_use_ids)) {\n                                    in_use_ids[def.id] = true;\n                                    in_use.push(def);\n                                }\n                            }\n                        }));\n                    }\n                    if (def.value) {\n                        if (def.name instanceof AST_Destructuring) {\n                            var destructuring_cache = destructuring_value;\n                            destructuring_value = def.value;\n                            def.walk(tw);\n                            destructuring_value = destructuring_cache;\n                        } else {\n                            var node_def = def.name.definition();\n                            initializations.add(node_def.id, def.value);\n                            if (!node_def.chained && def.name.fixed_value() === def.value) {\n                                fixed_ids[node_def.id] = def;\n                            }\n                        }\n                        if (def.value.has_side_effects(compressor)) {\n                            def.value.walk(tw);\n                        }\n                    }\n                });\n                return true;\n            }\n            if (node.destructuring && destructuring_value) {\n                initializations.add(node.name, destructuring_value);\n            }\n            return scan_ref_scoped(node, descend);\n        });\n        self.walk(tw);\n        // pass 2: for every used symbol we need to walk its\n        // initialization code to figure out if it uses other\n        // symbols (that may not be in_use).\n        tw = new TreeWalker(scan_ref_scoped);\n        for (var i = 0; i < in_use.length; i++) {\n            var init = initializations.get(in_use[i].id);\n            if (init) init.forEach(function(init) {\n                init.walk(tw);\n            });\n        }\n        // pass 3: we should drop declarations not in_use\n        var tt = new TreeTransformer(\n            function before(node, descend, in_list) {\n                var parent = tt.parent();\n                if (drop_vars) {\n                    var sym = assign_as_unused(node);\n                    if (sym instanceof AST_SymbolRef) {\n                        var def = sym.definition();\n                        var in_use = def.id in in_use_ids;\n                        if (node instanceof AST_Assign) {\n                            if (!in_use || def.id in fixed_ids && fixed_ids[def.id] !== node) {\n                                return maintain_this_binding(parent, node, node.right.transform(tt));\n                            }\n                        } else if (!in_use) return make_node(AST_Number, node, {\n                            value: 0\n                        });\n                    }\n                }\n                if (scope !== self) return;\n                var def;\n                if (node.name\n                    && (node instanceof AST_ClassExpression\n                        && !keep_name(compressor.option(\"keep_classnames\"), (def = node.name.definition()).name)\n                    || node instanceof AST_Function\n                        && !keep_name(compressor.option(\"keep_fnames\"), (def = node.name.definition()).name))) {\n                    // any declarations with same name will overshadow\n                    // name of this anonymous function and can therefore\n                    // never be used anywhere\n                    if (!(def.id in in_use_ids) || def.orig.length > 1) node.name = null;\n                }\n                if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) {\n                    var trim = !compressor.option(\"keep_fargs\");\n                    for (var a = node.argnames, i = a.length; --i >= 0;) {\n                        var sym = a[i];\n                        if (sym instanceof AST_Expansion) {\n                            sym = sym.expression;\n                        }\n                        if (sym instanceof AST_DefaultAssign) {\n                            sym = sym.left;\n                        }\n                        // Do not drop destructuring arguments.\n                        // They constitute a type assertion, so dropping\n                        // them would stop that TypeError which would happen\n                        // if someone called it with an incorrectly formatted\n                        // parameter.\n                        if (!(sym instanceof AST_Destructuring) && !(sym.definition().id in in_use_ids)) {\n                            sym.__unused = true;\n                            if (trim) {\n                                a.pop();\n                                compressor[sym.unreferenced() ? \"warn\" : \"info\"](\"Dropping unused function argument {name} [{file}:{line},{col}]\", template(sym));\n                            }\n                        } else {\n                            trim = false;\n                        }\n                    }\n                }\n                if ((node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {\n                    var def = node.name.definition();\n                    var keep = (def.id in in_use_ids) || !drop_funcs && def.global;\n                    if (!keep) {\n                        compressor[node.name.unreferenced() ? \"warn\" : \"info\"](\"Dropping unused function {name} [{file}:{line},{col}]\", template(node.name));\n                        def.eliminated++;\n                        return make_node(AST_EmptyStatement, node);\n                    }\n                }\n                if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) {\n                    var drop_block = !(parent instanceof AST_Toplevel) && !(node instanceof AST_Var);\n                    // place uninitialized names at the start\n                    var body = [], head = [], tail = [];\n                    // for unused names whose initialization has\n                    // side effects, we can cascade the init. code\n                    // into the next one, or next statement.\n                    var side_effects = [];\n                    node.definitions.forEach(function(def) {\n                        if (def.value) def.value = def.value.transform(tt);\n                        var is_destructure = def.name instanceof AST_Destructuring;\n                        var sym = is_destructure\n                            ? new SymbolDef(null, { name: \"<destructure>\" }) /* fake SymbolDef */\n                            : def.name.definition();\n                        if (drop_block && sym.global) return tail.push(def);\n                        if (!(drop_vars || drop_block)\n                            || is_destructure\n                                && (def.name.names.length\n                                    || def.name.is_array\n                                    || compressor.option(\"pure_getters\") != true)\n                            || sym.id in in_use_ids) {\n                            if (def.value && sym.id in fixed_ids && fixed_ids[sym.id] !== def) {\n                                def.value = def.value.drop_side_effect_free(compressor);\n                            }\n                            if (def.name instanceof AST_SymbolVar) {\n                                var var_defs = var_defs_by_id.get(sym.id);\n                                if (var_defs.length > 1 && (!def.value || sym.orig.indexOf(def.name) > sym.eliminated)) {\n                                    compressor.warn(\"Dropping duplicated definition of variable {name} [{file}:{line},{col}]\", template(def.name));\n                                    if (def.value) {\n                                        var ref = make_node(AST_SymbolRef, def.name, def.name);\n                                        sym.references.push(ref);\n                                        var assign = make_node(AST_Assign, def, {\n                                            operator: \"=\",\n                                            left: ref,\n                                            right: def.value\n                                        });\n                                        if (fixed_ids[sym.id] === def) {\n                                            fixed_ids[sym.id] = assign;\n                                        }\n                                        side_effects.push(assign.transform(tt));\n                                    }\n                                    remove(var_defs, def);\n                                    sym.eliminated++;\n                                    return;\n                                }\n                            }\n                            if (def.value) {\n                                if (side_effects.length > 0) {\n                                    if (tail.length > 0) {\n                                        side_effects.push(def.value);\n                                        def.value = make_sequence(def.value, side_effects);\n                                    } else {\n                                        body.push(make_node(AST_SimpleStatement, node, {\n                                            body: make_sequence(node, side_effects)\n                                        }));\n                                    }\n                                    side_effects = [];\n                                }\n                                tail.push(def);\n                            } else {\n                                head.push(def);\n                            }\n                        } else if (sym.orig[0] instanceof AST_SymbolCatch) {\n                            var value = def.value && def.value.drop_side_effect_free(compressor);\n                            if (value) side_effects.push(value);\n                            def.value = null;\n                            head.push(def);\n                        } else {\n                            var value = def.value && def.value.drop_side_effect_free(compressor);\n                            if (value) {\n                                if (!is_destructure) compressor.warn(\"Side effects in initialization of unused variable {name} [{file}:{line},{col}]\", template(def.name));\n                                side_effects.push(value);\n                            } else {\n                                if (!is_destructure) compressor[def.name.unreferenced() ? \"warn\" : \"info\"](\"Dropping unused variable {name} [{file}:{line},{col}]\", template(def.name));\n                            }\n                            sym.eliminated++;\n                        }\n                    });\n                    if (head.length > 0 || tail.length > 0) {\n                        node.definitions = head.concat(tail);\n                        body.push(node);\n                    }\n                    if (side_effects.length > 0) {\n                        body.push(make_node(AST_SimpleStatement, node, {\n                            body: make_sequence(node, side_effects)\n                        }));\n                    }\n                    switch (body.length) {\n                      case 0:\n                        return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);\n                      case 1:\n                        return body[0];\n                      default:\n                        return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {\n                            body: body\n                        });\n                    }\n                }\n                // certain combination of unused name + side effect leads to:\n                //    https://github.com/mishoo/UglifyJS2/issues/44\n                //    https://github.com/mishoo/UglifyJS2/issues/1830\n                //    https://github.com/mishoo/UglifyJS2/issues/1838\n                // that's an invalid AST.\n                // We fix it at this stage by moving the `var` outside the `for`.\n                if (node instanceof AST_For) {\n                    descend(node, this);\n                    var block;\n                    if (node.init instanceof AST_BlockStatement) {\n                        block = node.init;\n                        node.init = block.body.pop();\n                        block.body.push(node);\n                    }\n                    if (node.init instanceof AST_SimpleStatement) {\n                        node.init = node.init.body;\n                    } else if (is_empty(node.init)) {\n                        node.init = null;\n                    }\n                    return !block ? node : in_list ? MAP.splice(block.body) : block;\n                }\n                if (node instanceof AST_LabeledStatement && node.body instanceof AST_For) {\n                    descend(node, this);\n                    if (node.body instanceof AST_BlockStatement) {\n                        var block = node.body;\n                        node.body = block.body.pop();\n                        block.body.push(node);\n                        return in_list ? MAP.splice(block.body) : block;\n                    }\n                    return node;\n                }\n                if (node instanceof AST_BlockStatement) {\n                    descend(node, this);\n                    if (in_list && all(node.body, can_be_evicted_from_block)) {\n                        return MAP.splice(node.body);\n                    }\n                    return node;\n                }\n                if (node instanceof AST_Scope) {\n                    var save_scope = scope;\n                    scope = node;\n                    descend(node, this);\n                    scope = save_scope;\n                    return node;\n                }\n\n                function template(sym) {\n                    return {\n                        name : sym.name,\n                        file : sym.start.file,\n                        line : sym.start.line,\n                        col  : sym.start.col\n                    };\n                }\n            }\n        );\n        self.transform(tt);\n\n        function scan_ref_scoped(node, descend) {\n            var node_def, sym = assign_as_unused(node);\n            if (sym instanceof AST_SymbolRef\n                && !is_ref_of(node.left, AST_SymbolBlockDeclaration)\n                && self.variables.get(sym.name) === (node_def = sym.definition())) {\n                if (node instanceof AST_Assign) {\n                    node.right.walk(tw);\n                    if (!node_def.chained && node.left.fixed_value() === node.right) {\n                        fixed_ids[node_def.id] = node;\n                    }\n                }\n                return true;\n            }\n            if (node instanceof AST_SymbolRef) {\n                node_def = node.definition();\n                if (!(node_def.id in in_use_ids)) {\n                    in_use_ids[node_def.id] = true;\n                    in_use.push(node_def);\n                    if (node_def = node_def.redefined()) {\n                        in_use_ids[node_def.id] = true;\n                        in_use.push(node_def);\n                    }\n                }\n                return true;\n            }\n            if (node instanceof AST_Scope) {\n                var save_scope = scope;\n                scope = node;\n                descend();\n                scope = save_scope;\n                return true;\n            }\n        }\n    });\n\n    AST_Scope.DEFMETHOD(\"hoist_declarations\", function(compressor) {\n        var self = this;\n        if (compressor.has_directive(\"use asm\")) return self;\n        // Hoisting makes no sense in an arrow func\n        if (!Array.isArray(self.body)) return self;\n\n        var hoist_funs = compressor.option(\"hoist_funs\");\n        var hoist_vars = compressor.option(\"hoist_vars\");\n\n        if (hoist_funs || hoist_vars) {\n            var dirs = [];\n            var hoisted = [];\n            var vars = new Dictionary(), vars_found = 0, var_decl = 0;\n            // let's count var_decl first, we seem to waste a lot of\n            // space if we hoist `var` when there's only one.\n            self.walk(new TreeWalker(function(node) {\n                if (node instanceof AST_Scope && node !== self)\n                    return true;\n                if (node instanceof AST_Var) {\n                    ++var_decl;\n                    return true;\n                }\n            }));\n            hoist_vars = hoist_vars && var_decl > 1;\n            var tt = new TreeTransformer(\n                function before(node) {\n                    if (node !== self) {\n                        if (node instanceof AST_Directive) {\n                            dirs.push(node);\n                            return make_node(AST_EmptyStatement, node);\n                        }\n                        if (hoist_funs && node instanceof AST_Defun\n                            && !(tt.parent() instanceof AST_Export)\n                            && tt.parent() === self) {\n                            hoisted.push(node);\n                            return make_node(AST_EmptyStatement, node);\n                        }\n                        if (hoist_vars && node instanceof AST_Var) {\n                            node.definitions.forEach(function(def) {\n                                if (def.name instanceof AST_Destructuring) return;\n                                vars.set(def.name.name, def);\n                                ++vars_found;\n                            });\n                            var seq = node.to_assignments(compressor);\n                            var p = tt.parent();\n                            if (p instanceof AST_ForIn && p.init === node) {\n                                if (seq == null) {\n                                    var def = node.definitions[0].name;\n                                    return make_node(AST_SymbolRef, def, def);\n                                }\n                                return seq;\n                            }\n                            if (p instanceof AST_For && p.init === node) {\n                                return seq;\n                            }\n                            if (!seq) return make_node(AST_EmptyStatement, node);\n                            return make_node(AST_SimpleStatement, node, {\n                                body: seq\n                            });\n                        }\n                        if (node instanceof AST_Scope)\n                            return node; // to avoid descending in nested scopes\n                    }\n                }\n            );\n            self = self.transform(tt);\n            if (vars_found > 0) {\n                // collect only vars which don't show up in self's arguments list\n                var defs = [];\n                vars.each(function(def, name) {\n                    if (self instanceof AST_Lambda\n                        && find_if(function(x) { return x.name == def.name.name; },\n                                   self.args_as_names())) {\n                        vars.del(name);\n                    } else {\n                        def = def.clone();\n                        def.value = null;\n                        defs.push(def);\n                        vars.set(name, def);\n                    }\n                });\n                if (defs.length > 0) {\n                    // try to merge in assignments\n                    for (var i = 0; i < self.body.length;) {\n                        if (self.body[i] instanceof AST_SimpleStatement) {\n                            var expr = self.body[i].body, sym, assign;\n                            if (expr instanceof AST_Assign\n                                && expr.operator == \"=\"\n                                && (sym = expr.left) instanceof AST_Symbol\n                                && vars.has(sym.name)\n                            ) {\n                                var def = vars.get(sym.name);\n                                if (def.value) break;\n                                def.value = expr.right;\n                                remove(defs, def);\n                                defs.push(def);\n                                self.body.splice(i, 1);\n                                continue;\n                            }\n                            if (expr instanceof AST_Sequence\n                                && (assign = expr.expressions[0]) instanceof AST_Assign\n                                && assign.operator == \"=\"\n                                && (sym = assign.left) instanceof AST_Symbol\n                                && vars.has(sym.name)\n                            ) {\n                                var def = vars.get(sym.name);\n                                if (def.value) break;\n                                def.value = assign.right;\n                                remove(defs, def);\n                                defs.push(def);\n                                self.body[i].body = make_sequence(expr, expr.expressions.slice(1));\n                                continue;\n                            }\n                        }\n                        if (self.body[i] instanceof AST_EmptyStatement) {\n                            self.body.splice(i, 1);\n                            continue;\n                        }\n                        if (self.body[i] instanceof AST_BlockStatement) {\n                            var tmp = [ i, 1 ].concat(self.body[i].body);\n                            self.body.splice.apply(self.body, tmp);\n                            continue;\n                        }\n                        break;\n                    }\n                    defs = make_node(AST_Var, self, {\n                        definitions: defs\n                    });\n                    hoisted.push(defs);\n                }\n            }\n            self.body = dirs.concat(hoisted, self.body);\n        }\n        return self;\n    });\n\n    AST_Scope.DEFMETHOD(\"var_names\", function() {\n        var var_names = this._var_names;\n        if (!var_names) {\n            this._var_names = var_names = Object.create(null);\n            this.enclosed.forEach(function(def) {\n                var_names[def.name] = true;\n            });\n            this.variables.each(function(def, name) {\n                var_names[name] = true;\n            });\n        }\n        return var_names;\n    });\n\n    AST_Scope.DEFMETHOD(\"make_var_name\", function(prefix) {\n        var var_names = this.var_names();\n        prefix = prefix.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, \"_\");\n        var name = prefix;\n        for (var i = 0; var_names[name]; i++) name = prefix + \"$\" + i;\n        var_names[name] = true;\n        return name;\n    });\n\n    AST_Scope.DEFMETHOD(\"hoist_properties\", function(compressor) {\n        var self = this;\n        if (!compressor.option(\"hoist_props\") || compressor.has_directive(\"use asm\")) return self;\n        var top_retain = self instanceof AST_Toplevel && compressor.top_retain || return_false;\n        var defs_by_id = Object.create(null);\n        var tt = new TreeTransformer(function(node, descend) {\n            if (node instanceof AST_Definitions && tt.parent() instanceof AST_Export) return node;\n            if (node instanceof AST_VarDef) {\n                var sym = node.name, def, value;\n                if (sym.scope === self\n                    && (def = sym.definition()).escaped != 1\n                    && !def.assignments\n                    && !def.direct_access\n                    && !def.single_use\n                    && !compressor.exposed(def)\n                    && !top_retain(def)\n                    && (value = sym.fixed_value()) === node.value\n                    && value instanceof AST_Object) {\n                    descend(node, this);\n                    var defs = new Dictionary();\n                    var assignments = [];\n                    value.properties.forEach(function(prop) {\n                        assignments.push(make_node(AST_VarDef, node, {\n                            name: make_sym(prop.key),\n                            value: prop.value\n                        }));\n                    });\n                    defs_by_id[def.id] = defs;\n                    return MAP.splice(assignments);\n                }\n            }\n            if (node instanceof AST_PropAccess && node.expression instanceof AST_SymbolRef) {\n                var defs = defs_by_id[node.expression.definition().id];\n                if (defs) {\n                    var def = defs.get(get_value(node.property));\n                    var sym = make_node(AST_SymbolRef, node, {\n                        name: def.name,\n                        scope: node.expression.scope,\n                        thedef: def\n                    });\n                    sym.reference({});\n                    return sym;\n                }\n            }\n\n            function make_sym(key) {\n                var new_var = make_node(sym.CTOR, sym, {\n                    name: self.make_var_name(sym.name + \"_\" + key),\n                    scope: self\n                });\n                var def = self.def_variable(new_var);\n                defs.set(key, def);\n                self.enclosed.push(def);\n                return new_var;\n            }\n        });\n        return self.transform(tt);\n    });\n\n    // drop_side_effect_free()\n    // remove side-effect-free parts which only affects return value\n    (function(def) {\n        // Drop side-effect-free elements from an array of expressions.\n        // Returns an array of expressions with side-effects or null\n        // if all elements were dropped. Note: original array may be\n        // returned if nothing changed.\n        function trim(nodes, compressor, first_in_statement) {\n            var len = nodes.length;\n            if (!len) return null;\n            var ret = [], changed = false;\n            for (var i = 0; i < len; i++) {\n                var node = nodes[i].drop_side_effect_free(compressor, first_in_statement);\n                changed |= node !== nodes[i];\n                if (node) {\n                    ret.push(node);\n                    first_in_statement = false;\n                }\n            }\n            return changed ? ret.length ? ret : null : nodes;\n        }\n\n        def(AST_Node, return_this);\n        def(AST_Constant, return_null);\n        def(AST_This, return_null);\n        def(AST_Call, function(compressor, first_in_statement) {\n            if (!this.is_expr_pure(compressor)) {\n                if (this.expression.is_call_pure(compressor)) {\n                    var exprs = this.args.slice();\n                    exprs.unshift(this.expression.expression);\n                    exprs = trim(exprs, compressor, first_in_statement);\n                    return exprs && make_sequence(this, exprs);\n                }\n                if (is_func_expr(this.expression)\n                    && (!this.expression.name || !this.expression.name.definition().references.length)) {\n                    var node = this.clone();\n                    node.expression.process_expression(false, compressor);\n                    return node;\n                }\n                return this;\n            }\n            if (this.pure) {\n                compressor.warn(\"Dropping __PURE__ call [{file}:{line},{col}]\", this.start);\n            }\n            var args = trim(this.args, compressor, first_in_statement);\n            return args && make_sequence(this, args);\n        });\n        def(AST_Accessor, return_null);\n        def(AST_Function, return_null);\n        def(AST_Arrow, return_null);\n        def(AST_ClassExpression, return_null);\n        def(AST_Binary, function(compressor, first_in_statement) {\n            var right = this.right.drop_side_effect_free(compressor);\n            if (!right) return this.left.drop_side_effect_free(compressor, first_in_statement);\n            if (lazy_op(this.operator)) {\n                if (right === this.right) return this;\n                var node = this.clone();\n                node.right = right;\n                return node;\n            } else {\n                var left = this.left.drop_side_effect_free(compressor, first_in_statement);\n                if (!left) return this.right.drop_side_effect_free(compressor, first_in_statement);\n                return make_sequence(this, [ left, right ]);\n            }\n        });\n        def(AST_Assign, function(compressor) {\n            var left = this.left;\n            if (left.has_side_effects(compressor)\n                || compressor.has_directive(\"use strict\")\n                    && left instanceof AST_PropAccess\n                    && left.expression.is_constant()) {\n                return this;\n            }\n            this.write_only = true;\n            while (left instanceof AST_PropAccess) {\n                left = left.expression;\n            }\n            if (left.is_constant_expression(compressor.find_parent(AST_Scope))) {\n                return this.right.drop_side_effect_free(compressor);\n            }\n            return this;\n        });\n        def(AST_Conditional, function(compressor) {\n            var consequent = this.consequent.drop_side_effect_free(compressor);\n            var alternative = this.alternative.drop_side_effect_free(compressor);\n            if (consequent === this.consequent && alternative === this.alternative) return this;\n            if (!consequent) return alternative ? make_node(AST_Binary, this, {\n                operator: \"||\",\n                left: this.condition,\n                right: alternative\n            }) : this.condition.drop_side_effect_free(compressor);\n            if (!alternative) return make_node(AST_Binary, this, {\n                operator: \"&&\",\n                left: this.condition,\n                right: consequent\n            });\n            var node = this.clone();\n            node.consequent = consequent;\n            node.alternative = alternative;\n            return node;\n        });\n        def(AST_Unary, function(compressor, first_in_statement) {\n            if (unary_side_effects(this.operator)) {\n                this.write_only = !this.expression.has_side_effects(compressor);\n                return this;\n            }\n            if (this.operator == \"typeof\" && this.expression instanceof AST_SymbolRef) return null;\n            var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);\n            if (first_in_statement && expression && is_iife_call(expression)) {\n                if (expression === this.expression && this.operator == \"!\") return this;\n                return expression.negate(compressor, first_in_statement);\n            }\n            return expression;\n        });\n        def(AST_SymbolRef, function(compressor) {\n            return this.is_declared(compressor) ? null : this;\n        });\n        def(AST_Object, function(compressor, first_in_statement) {\n            var values = trim(this.properties, compressor, first_in_statement);\n            return values && make_sequence(this, values);\n        });\n        def(AST_ObjectProperty, function(compressor, first_in_statement) {\n            return this.value.drop_side_effect_free(compressor, first_in_statement);\n        });\n        def(AST_Array, function(compressor, first_in_statement) {\n            var values = trim(this.elements, compressor, first_in_statement);\n            return values && make_sequence(this, values);\n        });\n        def(AST_Dot, function(compressor, first_in_statement) {\n            if (this.expression.may_throw_on_access(compressor)) return this;\n            return this.expression.drop_side_effect_free(compressor, first_in_statement);\n        });\n        def(AST_Sub, function(compressor, first_in_statement) {\n            if (this.expression.may_throw_on_access(compressor)) return this;\n            var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);\n            if (!expression) return this.property.drop_side_effect_free(compressor, first_in_statement);\n            var property = this.property.drop_side_effect_free(compressor);\n            if (!property) return expression;\n            return make_sequence(this, [ expression, property ]);\n        });\n        def(AST_Sequence, function(compressor) {\n            var last = this.tail_node();\n            var expr = last.drop_side_effect_free(compressor);\n            if (expr === last) return this;\n            var expressions = this.expressions.slice(0, -1);\n            if (expr) expressions.push(expr);\n            return make_sequence(this, expressions);\n        });\n        def(AST_Expansion, function(compressor, first_in_statement) {\n            return this.expression.drop_side_effect_free(compressor, first_in_statement);\n        });\n        def(AST_TemplateSegment, return_null);\n        def(AST_TemplateString, function(compressor) {\n            var values = trim(this.segments, compressor, first_in_statement);\n            return values && make_sequence(this, values);\n        });\n    })(function(node, func) {\n        node.DEFMETHOD(\"drop_side_effect_free\", func);\n    });\n\n    OPT(AST_SimpleStatement, function(self, compressor) {\n        if (compressor.option(\"side_effects\")) {\n            var body = self.body;\n            var node = body.drop_side_effect_free(compressor, true);\n            if (!node) {\n                compressor.warn(\"Dropping side-effect-free statement [{file}:{line},{col}]\", self.start);\n                return make_node(AST_EmptyStatement, self);\n            }\n            if (node !== body) {\n                return make_node(AST_SimpleStatement, self, { body: node });\n            }\n        }\n        return self;\n    });\n\n    OPT(AST_While, function(self, compressor) {\n        return compressor.option(\"loops\") ? make_node(AST_For, self, self).optimize(compressor) : self;\n    });\n\n    function has_break_or_continue(loop, parent) {\n        var found = false;\n        var tw = new TreeWalker(function(node) {\n            if (found || node instanceof AST_Scope) return true;\n            if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === loop) {\n                return found = true;\n            }\n        });\n        if (parent instanceof AST_LabeledStatement) tw.push(parent);\n        tw.push(loop);\n        loop.body.walk(tw);\n        return found;\n    }\n\n    OPT(AST_Do, function(self, compressor) {\n        if (!compressor.option(\"loops\")) return self;\n        var cond = self.condition.tail_node().evaluate(compressor);\n        if (!(cond instanceof AST_Node)) {\n            if (cond) return make_node(AST_For, self, {\n                body: make_node(AST_BlockStatement, self.body, {\n                    body: [\n                        self.body,\n                        make_node(AST_SimpleStatement, self.condition, {\n                            body: self.condition\n                        })\n                    ]\n                })\n            }).optimize(compressor);\n            if (!has_break_or_continue(self, compressor.parent())) {\n                return make_node(AST_BlockStatement, self.body, {\n                    body: [\n                        self.body,\n                        make_node(AST_SimpleStatement, self.condition, {\n                            body: self.condition\n                        })\n                    ]\n                }).optimize(compressor);\n            }\n        }\n        return self;\n    });\n\n    function if_break_in_loop(self, compressor) {\n        var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body;\n        if (compressor.option(\"dead_code\") && is_break(first)) {\n            var body = [];\n            if (self.init instanceof AST_Statement) {\n                body.push(self.init);\n            } else if (self.init) {\n                body.push(make_node(AST_SimpleStatement, self.init, {\n                    body: self.init\n                }));\n            }\n            if (self.condition) {\n                body.push(make_node(AST_SimpleStatement, self.condition, {\n                    body: self.condition\n                }));\n            }\n            extract_declarations_from_unreachable_code(compressor, self.body, body);\n            return make_node(AST_BlockStatement, self, {\n                body: body\n            });\n        }\n        if (first instanceof AST_If) {\n            if (is_break(first.body)) {\n                if (self.condition) {\n                    self.condition = make_node(AST_Binary, self.condition, {\n                        left: self.condition,\n                        operator: \"&&\",\n                        right: first.condition.negate(compressor),\n                    });\n                } else {\n                    self.condition = first.condition.negate(compressor);\n                }\n                drop_it(first.alternative);\n            } else if (is_break(first.alternative)) {\n                if (self.condition) {\n                    self.condition = make_node(AST_Binary, self.condition, {\n                        left: self.condition,\n                        operator: \"&&\",\n                        right: first.condition,\n                    });\n                } else {\n                    self.condition = first.condition;\n                }\n                drop_it(first.body);\n            }\n        }\n        return self;\n\n        function is_break(node) {\n            return node instanceof AST_Break\n                && compressor.loopcontrol_target(node) === compressor.self();\n        }\n\n        function drop_it(rest) {\n            rest = as_statement_array(rest);\n            if (self.body instanceof AST_BlockStatement) {\n                self.body = self.body.clone();\n                self.body.body = rest.concat(self.body.body.slice(1));\n                self.body = self.body.transform(compressor);\n            } else {\n                self.body = make_node(AST_BlockStatement, self.body, {\n                    body: rest\n                }).transform(compressor);\n            }\n            self = if_break_in_loop(self, compressor);\n        }\n    }\n\n    OPT(AST_For, function(self, compressor) {\n        if (!compressor.option(\"loops\")) return self;\n        if (compressor.option(\"side_effects\") && self.init) {\n            self.init = self.init.drop_side_effect_free(compressor);\n        }\n        if (self.condition) {\n            var cond = self.condition.evaluate(compressor);\n            if (!(cond instanceof AST_Node)) {\n                if (cond) self.condition = null;\n                else if (!compressor.option(\"dead_code\")) {\n                    var orig = self.condition;\n                    self.condition = make_node_from_constant(cond, self.condition);\n                    self.condition = best_of_expression(self.condition.transform(compressor), orig);\n                }\n            }\n            if (compressor.option(\"dead_code\")) {\n                if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);\n                if (!cond) {\n                    var body = [];\n                    extract_declarations_from_unreachable_code(compressor, self.body, body);\n                    if (self.init instanceof AST_Statement) {\n                        body.push(self.init);\n                    } else if (self.init) {\n                        body.push(make_node(AST_SimpleStatement, self.init, {\n                            body: self.init\n                        }));\n                    }\n                    body.push(make_node(AST_SimpleStatement, self.condition, {\n                        body: self.condition\n                    }));\n                    return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);\n                }\n            }\n        }\n        return if_break_in_loop(self, compressor);\n    });\n\n    OPT(AST_If, function(self, compressor) {\n        if (is_empty(self.alternative)) self.alternative = null;\n\n        if (!compressor.option(\"conditionals\")) return self;\n        // if condition can be statically determined, warn and drop\n        // one of the blocks.  note, statically determined implies\n        // “has no side effects”; also it doesn't work for cases like\n        // `x && true`, though it probably should.\n        var cond = self.condition.evaluate(compressor);\n        if (!compressor.option(\"dead_code\") && !(cond instanceof AST_Node)) {\n            var orig = self.condition;\n            self.condition = make_node_from_constant(cond, orig);\n            self.condition = best_of_expression(self.condition.transform(compressor), orig);\n        }\n        if (compressor.option(\"dead_code\")) {\n            if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);\n            if (!cond) {\n                compressor.warn(\"Condition always false [{file}:{line},{col}]\", self.condition.start);\n                var body = [];\n                extract_declarations_from_unreachable_code(compressor, self.body, body);\n                body.push(make_node(AST_SimpleStatement, self.condition, {\n                    body: self.condition\n                }));\n                if (self.alternative) body.push(self.alternative);\n                return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);\n            } else if (!(cond instanceof AST_Node)) {\n                compressor.warn(\"Condition always true [{file}:{line},{col}]\", self.condition.start);\n                var body = [];\n                if (self.alternative) {\n                    extract_declarations_from_unreachable_code(compressor, self.alternative, body);\n                }\n                body.push(make_node(AST_SimpleStatement, self.condition, {\n                    body: self.condition\n                }));\n                body.push(self.body);\n                return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);\n            }\n        }\n        var negated = self.condition.negate(compressor);\n        var self_condition_length = self.condition.print_to_string().length;\n        var negated_length = negated.print_to_string().length;\n        var negated_is_best = negated_length < self_condition_length;\n        if (self.alternative && negated_is_best) {\n            negated_is_best = false; // because we already do the switch here.\n            // no need to swap values of self_condition_length and negated_length\n            // here because they are only used in an equality comparison later on.\n            self.condition = negated;\n            var tmp = self.body;\n            self.body = self.alternative || make_node(AST_EmptyStatement, self);\n            self.alternative = tmp;\n        }\n        if (is_empty(self.body) && is_empty(self.alternative)) {\n            return make_node(AST_SimpleStatement, self.condition, {\n                body: self.condition.clone()\n            }).optimize(compressor);\n        }\n        if (self.body instanceof AST_SimpleStatement\n            && self.alternative instanceof AST_SimpleStatement) {\n            return make_node(AST_SimpleStatement, self, {\n                body: make_node(AST_Conditional, self, {\n                    condition   : self.condition,\n                    consequent  : self.body.body,\n                    alternative : self.alternative.body\n                })\n            }).optimize(compressor);\n        }\n        if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) {\n            if (self_condition_length === negated_length && !negated_is_best\n                && self.condition instanceof AST_Binary && self.condition.operator == \"||\") {\n                // although the code length of self.condition and negated are the same,\n                // negated does not require additional surrounding parentheses.\n                // see https://github.com/mishoo/UglifyJS2/issues/979\n                negated_is_best = true;\n            }\n            if (negated_is_best) return make_node(AST_SimpleStatement, self, {\n                body: make_node(AST_Binary, self, {\n                    operator : \"||\",\n                    left     : negated,\n                    right    : self.body.body\n                })\n            }).optimize(compressor);\n            return make_node(AST_SimpleStatement, self, {\n                body: make_node(AST_Binary, self, {\n                    operator : \"&&\",\n                    left     : self.condition,\n                    right    : self.body.body\n                })\n            }).optimize(compressor);\n        }\n        if (self.body instanceof AST_EmptyStatement\n            && self.alternative instanceof AST_SimpleStatement) {\n            return make_node(AST_SimpleStatement, self, {\n                body: make_node(AST_Binary, self, {\n                    operator : \"||\",\n                    left     : self.condition,\n                    right    : self.alternative.body\n                })\n            }).optimize(compressor);\n        }\n        if (self.body instanceof AST_Exit\n            && self.alternative instanceof AST_Exit\n            && self.body.TYPE == self.alternative.TYPE) {\n            return make_node(self.body.CTOR, self, {\n                value: make_node(AST_Conditional, self, {\n                    condition   : self.condition,\n                    consequent  : self.body.value || make_node(AST_Undefined, self.body),\n                    alternative : self.alternative.value || make_node(AST_Undefined, self.alternative)\n                }).transform(compressor)\n            }).optimize(compressor);\n        }\n        if (self.body instanceof AST_If\n            && !self.body.alternative\n            && !self.alternative) {\n            self = make_node(AST_If, self, {\n                condition: make_node(AST_Binary, self.condition, {\n                    operator: \"&&\",\n                    left: self.condition,\n                    right: self.body.condition\n                }),\n                body: self.body.body,\n                alternative: null\n            });\n        }\n        if (aborts(self.body)) {\n            if (self.alternative) {\n                var alt = self.alternative;\n                self.alternative = null;\n                return make_node(AST_BlockStatement, self, {\n                    body: [ self, alt ]\n                }).optimize(compressor);\n            }\n        }\n        if (aborts(self.alternative)) {\n            var body = self.body;\n            self.body = self.alternative;\n            self.condition = negated_is_best ? negated : self.condition.negate(compressor);\n            self.alternative = null;\n            return make_node(AST_BlockStatement, self, {\n                body: [ self, body ]\n            }).optimize(compressor);\n        }\n        return self;\n    });\n\n    OPT(AST_Switch, function(self, compressor) {\n        if (!compressor.option(\"switches\")) return self;\n        var branch;\n        var value = self.expression.evaluate(compressor);\n        if (!(value instanceof AST_Node)) {\n            var orig = self.expression;\n            self.expression = make_node_from_constant(value, orig);\n            self.expression = best_of_expression(self.expression.transform(compressor), orig);\n        }\n        if (!compressor.option(\"dead_code\")) return self;\n        if (value instanceof AST_Node) {\n            value = self.expression.tail_node().evaluate(compressor);\n        }\n        var decl = [];\n        var body = [];\n        var default_branch;\n        var exact_match;\n        for (var i = 0, len = self.body.length; i < len && !exact_match; i++) {\n            branch = self.body[i];\n            if (branch instanceof AST_Default) {\n                if (!default_branch) {\n                    default_branch = branch;\n                } else {\n                    eliminate_branch(branch, body[body.length - 1]);\n                }\n            } else if (!(value instanceof AST_Node)) {\n                var exp = branch.expression.evaluate(compressor);\n                if (!(exp instanceof AST_Node) && exp !== value) {\n                    eliminate_branch(branch, body[body.length - 1]);\n                    continue;\n                }\n                if (exp instanceof AST_Node) exp = branch.expression.tail_node().evaluate(compressor);\n                if (exp === value) {\n                    exact_match = branch;\n                    if (default_branch) {\n                        var default_index = body.indexOf(default_branch);\n                        body.splice(default_index, 1);\n                        eliminate_branch(default_branch, body[default_index - 1]);\n                        default_branch = null;\n                    }\n                }\n            }\n            if (aborts(branch)) {\n                var prev = body[body.length - 1];\n                if (aborts(prev) && prev.body.length == branch.body.length\n                    && make_node(AST_BlockStatement, prev, prev).equivalent_to(make_node(AST_BlockStatement, branch, branch))) {\n                    prev.body = [];\n                }\n            }\n            body.push(branch);\n        }\n        while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);\n        if (body.length > 0) {\n            body[0].body = decl.concat(body[0].body);\n        }\n        self.body = body;\n        while (branch = body[body.length - 1]) {\n            var stat = branch.body[branch.body.length - 1];\n            if (stat instanceof AST_Break && compressor.loopcontrol_target(stat) === self)\n                branch.body.pop();\n            if (branch.body.length || branch instanceof AST_Case\n                && (default_branch || branch.expression.has_side_effects(compressor))) break;\n            if (body.pop() === default_branch) default_branch = null;\n        }\n        if (body.length == 0) {\n            return make_node(AST_BlockStatement, self, {\n                body: decl.concat(make_node(AST_SimpleStatement, self.expression, {\n                    body: self.expression\n                }))\n            }).optimize(compressor);\n        }\n        if (body.length == 1 && (body[0] === exact_match || body[0] === default_branch)) {\n            var has_break = false;\n            var tw = new TreeWalker(function(node) {\n                if (has_break\n                    || node instanceof AST_Lambda\n                    || node instanceof AST_SimpleStatement) return true;\n                if (node instanceof AST_Break && tw.loopcontrol_target(node) === self)\n                    has_break = true;\n            });\n            self.walk(tw);\n            if (!has_break) {\n                var statements = body[0].body.slice();\n                var exp = body[0].expression;\n                if (exp) statements.unshift(make_node(AST_SimpleStatement, exp, {\n                    body: exp\n                }));\n                statements.unshift(make_node(AST_SimpleStatement, self.expression, {\n                    body:self.expression\n                }));\n                return make_node(AST_BlockStatement, self, {\n                    body: statements\n                }).optimize(compressor);\n            }\n        }\n        return self;\n\n        function eliminate_branch(branch, prev) {\n            if (prev && !aborts(prev)) {\n                prev.body = prev.body.concat(branch.body);\n            } else {\n                extract_declarations_from_unreachable_code(compressor, branch, decl);\n            }\n        }\n    });\n\n    OPT(AST_Try, function(self, compressor) {\n        tighten_body(self.body, compressor);\n        if (self.bcatch && self.bfinally && all(self.bfinally.body, is_empty)) self.bfinally = null;\n        if (compressor.option(\"dead_code\") && all(self.body, is_empty)) {\n            var body = [];\n            if (self.bcatch) {\n                extract_declarations_from_unreachable_code(compressor, self.bcatch, body);\n                body.forEach(function(stat) {\n                    if (!(stat instanceof AST_Definitions)) return;\n                    stat.definitions.forEach(function(var_def) {\n                        var def = var_def.name.definition().redefined();\n                        if (!def) return;\n                        var_def.name = var_def.name.clone();\n                        var_def.name.thedef = def;\n                    });\n                });\n            }\n            if (self.bfinally) body = body.concat(self.bfinally.body);\n            return make_node(AST_BlockStatement, self, {\n                body: body\n            }).optimize(compressor);\n        }\n        return self;\n    });\n\n    AST_Definitions.DEFMETHOD(\"remove_initializers\", function() {\n        var decls = [];\n        this.definitions.forEach(function(def) {\n            if (def.name instanceof AST_SymbolDeclaration) {\n                def.value = null;\n                decls.push(def);\n            } else def.name.walk(new TreeWalker(function(node) {\n                if (node instanceof AST_SymbolDeclaration) {\n                    decls.push(make_node(AST_VarDef, def, {\n                        name: node,\n                        value: null\n                    }));\n                }\n            }));\n        });\n        this.definitions = decls;\n    });\n\n    AST_Definitions.DEFMETHOD(\"to_assignments\", function(compressor) {\n        var reduce_vars = compressor.option(\"reduce_vars\");\n        var assignments = this.definitions.reduce(function(a, def) {\n            if (def.value && !(def.name instanceof AST_Destructuring)) {\n                var name = make_node(AST_SymbolRef, def.name, def.name);\n                a.push(make_node(AST_Assign, def, {\n                    operator : \"=\",\n                    left     : name,\n                    right    : def.value\n                }));\n                if (reduce_vars) name.definition().fixed = false;\n            } else if (def.value) {\n                // Because it's a destructuring, do not turn into an assignment.\n                var varDef = make_node(AST_VarDef, def, {\n                    name: def.name,\n                    value: def.value\n                });\n                var var_ = make_node(AST_Var, def, {\n                    definitions: [ varDef ]\n                });\n                a.push(var_);\n            }\n            def = def.name.definition();\n            def.eliminated++;\n            def.replaced--;\n            return a;\n        }, []);\n        if (assignments.length == 0) return null;\n        return make_sequence(this, assignments);\n    });\n\n    OPT(AST_Definitions, function(self, compressor) {\n        if (self.definitions.length == 0)\n            return make_node(AST_EmptyStatement, self);\n        return self;\n    });\n\n    OPT(AST_Import, function(self, compressor) {\n        return self;\n    });\n\n    function retain_top_func(fn, compressor) {\n        return compressor.top_retain\n            && fn instanceof AST_Defun\n            && fn._top\n            && fn.name\n            && compressor.top_retain(fn.name);\n    }\n\n    OPT(AST_Call, function(self, compressor) {\n        var exp = self.expression;\n        var fn = exp;\n        var simple_args = all(self.args, function(arg) {\n            return !(arg instanceof AST_Expansion);\n        });\n        if (compressor.option(\"reduce_vars\") && fn instanceof AST_SymbolRef) {\n            fn = fn.fixed_value();\n            if (retain_top_func(fn, compressor)) fn = exp;\n        }\n        var is_func = fn instanceof AST_Lambda;\n        if (compressor.option(\"unused\")\n            && simple_args\n            && is_func\n            && !fn.uses_arguments\n            && !fn.pinned()) {\n            var pos = 0, last = 0;\n            for (var i = 0, len = self.args.length; i < len; i++) {\n                if (fn.argnames[i] instanceof AST_Expansion) {\n                    if (fn.argnames[i].expression.__unused) while (i < len) {\n                        var node = self.args[i++].drop_side_effect_free(compressor);\n                        if (node) {\n                            self.args[pos++] = node;\n                        }\n                    } else while (i < len) {\n                        self.args[pos++] = self.args[i++];\n                    }\n                    last = pos;\n                    break;\n                }\n                var trim = i >= fn.argnames.length;\n                if (trim || fn.argnames[i].__unused) {\n                    var node = self.args[i].drop_side_effect_free(compressor);\n                    if (node) {\n                        self.args[pos++] = node;\n                    } else if (!trim) {\n                        self.args[pos++] = make_node(AST_Number, self.args[i], {\n                            value: 0\n                        });\n                        continue;\n                    }\n                } else {\n                    self.args[pos++] = self.args[i];\n                }\n                last = pos;\n            }\n            self.args.length = last;\n        }\n        if (compressor.option(\"unsafe\")) {\n            if (is_undeclared_ref(exp)) switch (exp.name) {\n              case \"Array\":\n                if (self.args.length != 1) {\n                    return make_node(AST_Array, self, {\n                        elements: self.args\n                    }).optimize(compressor);\n                }\n                break;\n              case \"Object\":\n                if (self.args.length == 0) {\n                    return make_node(AST_Object, self, {\n                        properties: []\n                    });\n                }\n                break;\n              case \"String\":\n                if (self.args.length == 0) return make_node(AST_String, self, {\n                    value: \"\"\n                });\n                if (self.args.length <= 1) return make_node(AST_Binary, self, {\n                    left: self.args[0],\n                    operator: \"+\",\n                    right: make_node(AST_String, self, { value: \"\" })\n                }).optimize(compressor);\n                break;\n              case \"Number\":\n                if (self.args.length == 0) return make_node(AST_Number, self, {\n                    value: 0\n                });\n                if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {\n                    expression: self.args[0],\n                    operator: \"+\"\n                }).optimize(compressor);\n              case \"Boolean\":\n                if (self.args.length == 0) return make_node(AST_False, self);\n                if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {\n                    expression: make_node(AST_UnaryPrefix, self, {\n                        expression: self.args[0],\n                        operator: \"!\"\n                    }),\n                    operator: \"!\"\n                }).optimize(compressor);\n                break;\n              case \"RegExp\":\n                var params = [];\n                if (all(self.args, function(arg) {\n                    var value = arg.evaluate(compressor);\n                    params.unshift(value);\n                    return arg !== value;\n                })) {\n                    try {\n                        return best_of(compressor, self, make_node(AST_RegExp, self, {\n                            value: RegExp.apply(RegExp, params),\n                        }));\n                    } catch (ex) {\n                        compressor.warn(\"Error converting {expr} [{file}:{line},{col}]\", {\n                            expr: self.print_to_string(),\n                            file: self.start.file,\n                            line: self.start.line,\n                            col: self.start.col\n                        });\n                    }\n                }\n                break;\n            } else if (exp instanceof AST_Dot) switch(exp.property) {\n              case \"toString\":\n                if (self.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) {\n                    return make_node(AST_Binary, self, {\n                        left: make_node(AST_String, self, { value: \"\" }),\n                        operator: \"+\",\n                        right: exp.expression\n                    }).optimize(compressor);\n                }\n                break;\n              case \"join\":\n                if (exp.expression instanceof AST_Array) EXIT: {\n                    var separator;\n                    if (self.args.length > 0) {\n                        separator = self.args[0].evaluate(compressor);\n                        if (separator === self.args[0]) break EXIT; // not a constant\n                    }\n                    var elements = [];\n                    var consts = [];\n                    for (var i = 0, len = exp.expression.elements.length; i < len; i++) {\n                        var el = exp.expression.elements[i];\n                        if (el instanceof AST_Expansion) break EXIT;\n                        var value = el.evaluate(compressor);\n                        if (value !== el) {\n                            consts.push(value);\n                        } else {\n                            if (consts.length > 0) {\n                                elements.push(make_node(AST_String, self, {\n                                    value: consts.join(separator)\n                                }));\n                                consts.length = 0;\n                            }\n                            elements.push(el);\n                        }\n                    }\n                    if (consts.length > 0) {\n                        elements.push(make_node(AST_String, self, {\n                            value: consts.join(separator)\n                        }));\n                    }\n                    if (elements.length == 0) return make_node(AST_String, self, { value: \"\" });\n                    if (elements.length == 1) {\n                        if (elements[0].is_string(compressor)) {\n                            return elements[0];\n                        }\n                        return make_node(AST_Binary, elements[0], {\n                            operator : \"+\",\n                            left     : make_node(AST_String, self, { value: \"\" }),\n                            right    : elements[0]\n                        });\n                    }\n                    if (separator == \"\") {\n                        var first;\n                        if (elements[0].is_string(compressor)\n                            || elements[1].is_string(compressor)) {\n                            first = elements.shift();\n                        } else {\n                            first = make_node(AST_String, self, { value: \"\" });\n                        }\n                        return elements.reduce(function(prev, el) {\n                            return make_node(AST_Binary, el, {\n                                operator : \"+\",\n                                left     : prev,\n                                right    : el\n                            });\n                        }, first).optimize(compressor);\n                    }\n                    // need this awkward cloning to not affect original element\n                    // best_of will decide which one to get through.\n                    var node = self.clone();\n                    node.expression = node.expression.clone();\n                    node.expression.expression = node.expression.expression.clone();\n                    node.expression.expression.elements = elements;\n                    return best_of(compressor, self, node);\n                }\n                break;\n              case \"charAt\":\n                if (exp.expression.is_string(compressor)) {\n                    var arg = self.args[0];\n                    var index = arg ? arg.evaluate(compressor) : 0;\n                    if (index !== arg) {\n                        return make_node(AST_Sub, exp, {\n                            expression: exp.expression,\n                            property: make_node_from_constant(index | 0, arg || exp)\n                        }).optimize(compressor);\n                    }\n                }\n                break;\n              case \"apply\":\n                if (self.args.length == 2 && self.args[1] instanceof AST_Array) {\n                    var args = self.args[1].elements.slice();\n                    args.unshift(self.args[0]);\n                    return make_node(AST_Call, self, {\n                        expression: make_node(AST_Dot, exp, {\n                            expression: exp.expression,\n                            property: \"call\"\n                        }),\n                        args: args\n                    }).optimize(compressor);\n                }\n                break;\n              case \"call\":\n                var func = exp.expression;\n                if (func instanceof AST_SymbolRef) {\n                    func = func.fixed_value();\n                }\n                if (func instanceof AST_Lambda && !func.contains_this()) {\n                    return (self.args.length ? make_sequence(this, [\n                        self.args[0],\n                        make_node(AST_Call, self, {\n                            expression: exp.expression,\n                            args: self.args.slice(1)\n                        })\n                    ]) : make_node(AST_Call, self, {\n                        expression: exp.expression,\n                        args: []\n                    })).optimize(compressor);\n                }\n                break;\n            }\n        }\n        if (compressor.option(\"unsafe_Function\")\n            && is_undeclared_ref(exp)\n            && exp.name == \"Function\") {\n            // new Function() => function(){}\n            if (self.args.length == 0) return make_node(AST_Function, self, {\n                argnames: [],\n                body: []\n            }).optimize(compressor);\n            if (all(self.args, function(x) {\n                return x instanceof AST_String;\n            })) {\n                // quite a corner-case, but we can handle it:\n                //   https://github.com/mishoo/UglifyJS2/issues/203\n                // if the code argument is a constant, then we can minify it.\n                try {\n                    var code = \"n(function(\" + self.args.slice(0, -1).map(function(arg) {\n                        return arg.value;\n                    }).join(\",\") + \"){\" + self.args[self.args.length - 1].value + \"})\";\n                    var ast = parse(code);\n                    var mangle = { ie8: compressor.option(\"ie8\") };\n                    ast.figure_out_scope(mangle);\n                    var comp = new Compressor(compressor.options);\n                    ast = ast.transform(comp);\n                    ast.figure_out_scope(mangle);\n                    base54.reset();\n                    ast.compute_char_frequency(mangle);\n                    ast.mangle_names(mangle);\n                    var fun;\n                    ast.walk(new TreeWalker(function(node) {\n                        if (fun) return true;\n                        if (is_func_expr(node)) {\n                            fun = node;\n                            return true;\n                        }\n                    }));\n                    if (fun.body instanceof AST_Node) {\n                        fun.body = [\n                            make_node(AST_Return, fun.body, {\n                                value: fun.body\n                            })\n                        ];\n                    }\n                    var code = OutputStream();\n                    AST_BlockStatement.prototype._codegen.call(fun, fun, code);\n                    self.args = [\n                        make_node(AST_String, self, {\n                            value: fun.argnames.map(function(arg) {\n                                return arg.print_to_string();\n                            }).join(\",\")\n                        }),\n                        make_node(AST_String, self.args[self.args.length - 1], {\n                            value: code.get().replace(/^\\{|\\}$/g, \"\")\n                        })\n                    ];\n                    return self;\n                } catch (ex) {\n                    if (ex instanceof JS_Parse_Error) {\n                        compressor.warn(\"Error parsing code passed to new Function [{file}:{line},{col}]\", self.args[self.args.length - 1].start);\n                        compressor.warn(ex.toString());\n                    } else {\n                        throw ex;\n                    }\n                }\n            }\n        }\n        var stat = is_func && fn.body;\n        if (stat instanceof AST_Node) {\n            stat = make_node(AST_Return, stat, {\n                value: stat\n            });\n        } else if (stat) {\n            stat = stat[0];\n        }\n        var is_regular_func = is_func && !fn.is_generator && !fn.async;\n        var can_inline = compressor.option(\"inline\") && !self.is_expr_pure(compressor);\n        if (can_inline && stat instanceof AST_Return && is_regular_func) {\n            var value = stat.value;\n            if (!value || value.is_constant_expression()) {\n                if (value) {\n                    value = value.clone(true);\n                } else {\n                    value = make_node(AST_Undefined, self);\n                }\n                var args = self.args.concat(value);\n                return make_sequence(self, args).optimize(compressor);\n            }\n        }\n        if (is_regular_func) {\n            var def, value, scope, in_loop, level = -1;\n            if (can_inline\n                && simple_args\n                && !fn.uses_arguments\n                && !fn.pinned()\n                && !(compressor.parent() instanceof AST_Class)\n                && !(fn.name && fn instanceof AST_Function)\n                && (!(compressor.find_parent(AST_Lambda) instanceof AST_Arrow)\n                    || fn.argnames.length == 0\n                        && (fn.body instanceof AST_Node || fn.body.length == 1))\n                && (value = can_flatten_body(stat))\n                && (exp === fn\n                    || compressor.option(\"unused\")\n                        && (def = exp.definition()).references.length == 1\n                        && !recursive_ref(compressor, def)\n                        && fn.is_constant_expression(exp.scope))\n                && !self.pure\n                && !fn.contains_this()\n                && can_inject_symbols()\n                && !(scope instanceof AST_Class)) {\n                fn._squeezed = true;\n                return make_sequence(self, flatten_fn()).optimize(compressor);\n            }\n            if (compressor.option(\"side_effects\") && !(fn.body instanceof AST_Node) && all(fn.body, is_empty)) {\n                var args = self.args.concat(make_node(AST_Undefined, self));\n                return make_sequence(self, args).optimize(compressor);\n            }\n        }\n        if (compressor.option(\"negate_iife\")\n            && compressor.parent() instanceof AST_SimpleStatement\n            && is_iife_call(self)) {\n            return self.negate(compressor, true);\n        }\n        var ev = self.evaluate(compressor);\n        if (ev !== self) {\n            ev = make_node_from_constant(ev, self).optimize(compressor);\n            return best_of(compressor, ev, self);\n        }\n        return self;\n\n        function return_value(stat) {\n            if (!stat) return make_node(AST_Undefined, self);\n            if (stat instanceof AST_Return) {\n                if (!stat.value) return make_node(AST_Undefined, self);\n                return stat.value.clone(true);\n            }\n            if (stat instanceof AST_SimpleStatement) {\n                return make_node(AST_UnaryPrefix, stat, {\n                    operator: \"void\",\n                    expression: stat.body.clone(true)\n                });\n            }\n        }\n\n        function can_flatten_body(stat) {\n            var body = fn.body instanceof AST_Node ? [ fn.body ] : fn.body;\n            var len = body.length;\n            if (compressor.option(\"inline\") < 3) {\n                return len == 1 && return_value(stat);\n            }\n            stat = null;\n            for (var i = 0; i < len; i++) {\n                var line = body[i];\n                if (line instanceof AST_Var) {\n                    if (stat && !all(line.definitions, function(var_def) {\n                        return !var_def.value;\n                    })) {\n                        return false;\n                    }\n                } else if (stat) {\n                    return false;\n                } else {\n                    stat = line;\n                }\n            }\n            return return_value(stat);\n        }\n\n        function can_inject_args(block_scoped, safe_to_inject) {\n            for (var i = 0, len = fn.argnames.length; i < len; i++) {\n                var arg = fn.argnames[i];\n                if (arg instanceof AST_DefaultAssign) {\n                    if (arg.left.__unused) continue;\n                    return false;\n                }\n                if (arg instanceof AST_Destructuring) return false;\n                if (arg instanceof AST_Expansion) {\n                    if (arg.expression.__unused) continue;\n                    return false;\n                }\n                if (arg.__unused) continue;\n                if (!safe_to_inject\n                    || block_scoped[arg.name]\n                    || identifier_atom(arg.name)\n                    || scope.var_names()[arg.name]) {\n                    return false;\n                }\n                if (in_loop) in_loop.push(arg.definition());\n            }\n            return true;\n        }\n\n        function can_inject_vars(block_scoped, safe_to_inject) {\n            var len = fn.body.length;\n            for (var i = 0; i < len; i++) {\n                var stat = fn.body[i];\n                if (!(stat instanceof AST_Var)) continue;\n                if (!safe_to_inject) return false;\n                for (var j = stat.definitions.length; --j >= 0;) {\n                    var name = stat.definitions[j].name;\n                    if (name instanceof AST_Destructuring\n                        || block_scoped[name.name]\n                        || identifier_atom(name.name)\n                        || scope.var_names()[name.name]) {\n                        return false;\n                    }\n                    if (in_loop) in_loop.push(name.definition());\n                }\n            }\n            return true;\n        }\n\n        function can_inject_symbols() {\n            var block_scoped = Object.create(null);\n            do {\n                scope = compressor.parent(++level);\n                if (scope.is_block_scope() && !(compressor.parent(level - 1) instanceof AST_Scope)) {\n                    if (scope.block_scope) {\n                        // TODO this is sometimes undefined during compression.\n                        // But it should always have a value!\n                        scope.block_scope.variables.each(function (variable) {\n                            block_scoped[variable.name] = true;\n                        });\n                    }\n                }\n                if (scope instanceof AST_Catch) {\n                    if (scope.argname) {\n                        block_scoped[scope.argname.name] = true;\n                    }\n                } else if (scope instanceof AST_IterationStatement) {\n                    in_loop = [];\n                } else if (scope instanceof AST_SymbolRef) {\n                    if (scope.fixed_value() instanceof AST_Scope) return false;\n                }\n            } while (!(scope instanceof AST_Scope) || scope instanceof AST_Arrow);\n            var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars;\n            var inline = compressor.option(\"inline\");\n            if (!can_inject_vars(block_scoped, inline >= 3 && safe_to_inject)) return false;\n            if (!can_inject_args(block_scoped, inline >= 2 && safe_to_inject)) return false;\n            return !in_loop || in_loop.length == 0 || !is_reachable(fn, in_loop);\n        }\n\n        function append_var(decls, expressions, name, value) {\n            var def = name.definition();\n            scope.variables.set(name.name, def);\n            scope.enclosed.push(def);\n            if (!scope.var_names()[name.name]) {\n                scope.var_names()[name.name] = true;\n                decls.push(make_node(AST_VarDef, name, {\n                    name: name,\n                    value: null\n                }));\n            }\n            var sym = make_node(AST_SymbolRef, name, name);\n            def.references.push(sym);\n            if (value) expressions.push(make_node(AST_Assign, self, {\n                operator: \"=\",\n                left: sym,\n                right: value.clone()\n            }));\n        }\n\n        function flatten_args(decls, expressions) {\n            var len = fn.argnames.length;\n            for (var i = self.args.length; --i >= len;) {\n                expressions.push(self.args[i]);\n            }\n            for (i = len; --i >= 0;) {\n                var name = fn.argnames[i];\n                var value = self.args[i];\n                if (name.__unused || !name.name || scope.var_names()[name.name]) {\n                    if (value) expressions.push(value);\n                } else {\n                    var symbol = make_node(AST_SymbolVar, name, name);\n                    name.definition().orig.push(symbol);\n                    if (!value && in_loop) value = make_node(AST_Undefined, self);\n                    append_var(decls, expressions, symbol, value);\n                }\n            }\n            decls.reverse();\n            expressions.reverse();\n        }\n\n        function flatten_vars(decls, expressions) {\n            var pos = expressions.length;\n            for (var i = 0, lines = fn.body.length; i < lines; i++) {\n                var stat = fn.body[i];\n                if (!(stat instanceof AST_Var)) continue;\n                for (var j = 0, defs = stat.definitions.length; j < defs; j++) {\n                    var var_def = stat.definitions[j];\n                    var name = var_def.name;\n                    append_var(decls, expressions, name, var_def.value);\n                    if (in_loop && all(fn.argnames, function(argname) {\n                        return argname.name != name.name;\n                    })) {\n                        var def = fn.variables.get(name.name);\n                        var sym = make_node(AST_SymbolRef, name, name);\n                        def.references.push(sym);\n                        expressions.splice(pos++, 0, make_node(AST_Assign, var_def, {\n                            operator: \"=\",\n                            left: sym,\n                            right: make_node(AST_Undefined, name)\n                        }));\n                    }\n                }\n            }\n        }\n\n        function flatten_fn() {\n            var decls = [];\n            var expressions = [];\n            flatten_args(decls, expressions);\n            flatten_vars(decls, expressions);\n            expressions.push(value);\n            if (decls.length) {\n                i = scope.body.indexOf(compressor.parent(level - 1)) + 1;\n                scope.body.splice(i, 0, make_node(AST_Var, fn, {\n                    definitions: decls\n                }));\n            }\n            return expressions;\n        }\n    });\n\n    OPT(AST_New, function(self, compressor) {\n        if (compressor.option(\"unsafe\")) {\n            var exp = self.expression;\n            if (is_undeclared_ref(exp)) {\n                switch (exp.name) {\n                  case \"Object\":\n                  case \"RegExp\":\n                  case \"Function\":\n                  case \"Error\":\n                  case \"Array\":\n                    return make_node(AST_Call, self, self).transform(compressor);\n                }\n            }\n        }\n        return self;\n    });\n\n    OPT(AST_Sequence, function(self, compressor) {\n        if (!compressor.option(\"side_effects\")) return self;\n        var expressions = [];\n        filter_for_side_effects();\n        var end = expressions.length - 1;\n        trim_right_for_undefined();\n        if (end == 0) {\n            self = maintain_this_binding(compressor.parent(), compressor.self(), expressions[0]);\n            if (!(self instanceof AST_Sequence)) self = self.optimize(compressor);\n            return self;\n        }\n        self.expressions = expressions;\n        return self;\n\n        function filter_for_side_effects() {\n            var first = first_in_statement(compressor);\n            var last = self.expressions.length - 1;\n            self.expressions.forEach(function(expr, index) {\n                if (index < last) expr = expr.drop_side_effect_free(compressor, first);\n                if (expr) {\n                    merge_sequence(expressions, expr);\n                    first = false;\n                }\n            });\n        }\n\n        function trim_right_for_undefined() {\n            while (end > 0 && is_undefined(expressions[end], compressor)) end--;\n            if (end < expressions.length - 1) {\n                expressions[end] = make_node(AST_UnaryPrefix, self, {\n                    operator   : \"void\",\n                    expression : expressions[end]\n                });\n                expressions.length = end + 1;\n            }\n        }\n    });\n\n    AST_Unary.DEFMETHOD(\"lift_sequences\", function(compressor) {\n        if (compressor.option(\"sequences\")) {\n            if (this.expression instanceof AST_Sequence) {\n                var x = this.expression.expressions.slice();\n                var e = this.clone();\n                e.expression = x.pop();\n                x.push(e);\n                return make_sequence(this, x).optimize(compressor);\n            }\n        }\n        return this;\n    });\n\n    OPT(AST_UnaryPostfix, function(self, compressor) {\n        return self.lift_sequences(compressor);\n    });\n\n    OPT(AST_UnaryPrefix, function(self, compressor) {\n        var e = self.expression;\n        if (self.operator == \"delete\"\n            && !(e instanceof AST_SymbolRef\n                || e instanceof AST_PropAccess\n                || is_identifier_atom(e))) {\n            if (e instanceof AST_Sequence) {\n                e = e.expressions.slice();\n                e.push(make_node(AST_True, self));\n                return make_sequence(self, e).optimize(compressor);\n            }\n            return make_sequence(self, [ e, make_node(AST_True, self) ]).optimize(compressor);\n        }\n        var seq = self.lift_sequences(compressor);\n        if (seq !== self) {\n            return seq;\n        }\n        if (compressor.option(\"side_effects\") && self.operator == \"void\") {\n            e = e.drop_side_effect_free(compressor);\n            if (e) {\n                self.expression = e;\n                return self;\n            } else {\n                return make_node(AST_Undefined, self).optimize(compressor);\n            }\n        }\n        if (compressor.in_boolean_context()) {\n            switch (self.operator) {\n              case \"!\":\n                if (e instanceof AST_UnaryPrefix && e.operator == \"!\") {\n                    // !!foo ==> foo, if we're in boolean context\n                    return e.expression;\n                }\n                if (e instanceof AST_Binary) {\n                    self = best_of(compressor, self, e.negate(compressor, first_in_statement(compressor)));\n                }\n                break;\n              case \"typeof\":\n                // typeof always returns a non-empty string, thus it's\n                // always true in booleans\n                compressor.warn(\"Boolean expression always true [{file}:{line},{col}]\", self.start);\n                return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_sequence(self, [\n                    e,\n                    make_node(AST_True, self)\n                ])).optimize(compressor);\n            }\n        }\n        if (self.operator == \"-\" && e instanceof AST_Infinity) {\n            e = e.transform(compressor);\n        }\n        if (e instanceof AST_Binary\n            && (self.operator == \"+\" || self.operator == \"-\")\n            && (e.operator == \"*\" || e.operator == \"/\" || e.operator == \"%\")) {\n            return make_node(AST_Binary, self, {\n                operator: e.operator,\n                left: make_node(AST_UnaryPrefix, e.left, {\n                    operator: self.operator,\n                    expression: e.left\n                }),\n                right: e.right\n            });\n        }\n        // avoids infinite recursion of numerals\n        if (self.operator != \"-\"\n            || !(e instanceof AST_Number || e instanceof AST_Infinity)) {\n            var ev = self.evaluate(compressor);\n            if (ev !== self) {\n                ev = make_node_from_constant(ev, self).optimize(compressor);\n                return best_of(compressor, ev, self);\n            }\n        }\n        return self;\n    });\n\n    AST_Binary.DEFMETHOD(\"lift_sequences\", function(compressor) {\n        if (compressor.option(\"sequences\")) {\n            if (this.left instanceof AST_Sequence) {\n                var x = this.left.expressions.slice();\n                var e = this.clone();\n                e.left = x.pop();\n                x.push(e);\n                return make_sequence(this, x).optimize(compressor);\n            }\n            if (this.right instanceof AST_Sequence && !this.left.has_side_effects(compressor)) {\n                var assign = this.operator == \"=\" && this.left instanceof AST_SymbolRef;\n                var x = this.right.expressions;\n                var last = x.length - 1;\n                for (var i = 0; i < last; i++) {\n                    if (!assign && x[i].has_side_effects(compressor)) break;\n                }\n                if (i == last) {\n                    x = x.slice();\n                    var e = this.clone();\n                    e.right = x.pop();\n                    x.push(e);\n                    return make_sequence(this, x).optimize(compressor);\n                } else if (i > 0) {\n                    var e = this.clone();\n                    e.right = make_sequence(this.right, x.slice(i));\n                    x = x.slice(0, i);\n                    x.push(e);\n                    return make_sequence(this, x).optimize(compressor);\n                }\n            }\n        }\n        return this;\n    });\n\n    var commutativeOperators = makePredicate(\"== === != !== * & | ^\");\n    function is_object(node) {\n        return node instanceof AST_Array\n            || node instanceof AST_Lambda\n            || node instanceof AST_Object\n            || node instanceof AST_Class;\n    }\n\n    OPT(AST_Binary, function(self, compressor) {\n        function reversible() {\n            return self.left.is_constant()\n                || self.right.is_constant()\n                || !self.left.has_side_effects(compressor)\n                    && !self.right.has_side_effects(compressor);\n        }\n        function reverse(op) {\n            if (reversible()) {\n                if (op) self.operator = op;\n                var tmp = self.left;\n                self.left = self.right;\n                self.right = tmp;\n            }\n        }\n        if (commutativeOperators(self.operator)) {\n            if (self.right.is_constant()\n                && !self.left.is_constant()) {\n                // if right is a constant, whatever side effects the\n                // left side might have could not influence the\n                // result.  hence, force switch.\n\n                if (!(self.left instanceof AST_Binary\n                      && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {\n                    reverse();\n                }\n            }\n        }\n        self = self.lift_sequences(compressor);\n        if (compressor.option(\"comparisons\")) switch (self.operator) {\n          case \"===\":\n          case \"!==\":\n            var is_strict_comparison = true;\n            if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||\n                (self.left.is_number(compressor) && self.right.is_number(compressor)) ||\n                (self.left.is_boolean() && self.right.is_boolean()) ||\n                self.left.equivalent_to(self.right)) {\n                self.operator = self.operator.substr(0, 2);\n            }\n            // XXX: intentionally falling down to the next case\n          case \"==\":\n          case \"!=\":\n            // void 0 == x => null == x\n            if (!is_strict_comparison && is_undefined(self.left, compressor)) {\n                self.left = make_node(AST_Null, self.left);\n            } else if (compressor.option(\"typeofs\")\n                // \"undefined\" == typeof x => undefined === x\n                && self.left instanceof AST_String\n                && self.left.value == \"undefined\"\n                && self.right instanceof AST_UnaryPrefix\n                && self.right.operator == \"typeof\") {\n                var expr = self.right.expression;\n                if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor)\n                    : !(expr instanceof AST_PropAccess && compressor.option(\"ie8\"))) {\n                    self.right = expr;\n                    self.left = make_node(AST_Undefined, self.left).optimize(compressor);\n                    if (self.operator.length == 2) self.operator += \"=\";\n                }\n            } else if (self.left instanceof AST_SymbolRef\n                // obj !== obj => false\n                && self.right instanceof AST_SymbolRef\n                && self.left.definition() === self.right.definition()\n                && is_object(self.left.fixed_value())) {\n                return make_node(self.operator[0] == \"=\" ? AST_True : AST_False, self);\n            }\n            break;\n          case \"&&\":\n          case \"||\":\n            var lhs = self.left;\n            if (lhs.operator == self.operator) {\n                lhs = lhs.right;\n            }\n            if (lhs instanceof AST_Binary\n                && lhs.operator == (self.operator == \"&&\" ? \"!==\" : \"===\")\n                && self.right instanceof AST_Binary\n                && lhs.operator == self.right.operator\n                && (is_undefined(lhs.left, compressor) && self.right.left instanceof AST_Null\n                    || lhs.left instanceof AST_Null && is_undefined(self.right.left, compressor))\n                && !lhs.right.has_side_effects(compressor)\n                && lhs.right.equivalent_to(self.right.right)) {\n                var combined = make_node(AST_Binary, self, {\n                    operator: lhs.operator.slice(0, -1),\n                    left: make_node(AST_Null, self),\n                    right: lhs.right\n                });\n                if (lhs !== self.left) {\n                    combined = make_node(AST_Binary, self, {\n                        operator: self.operator,\n                        left: self.left.left,\n                        right: combined\n                    });\n                }\n                return combined;\n            }\n            break;\n        }\n        if (self.operator == \"+\" && compressor.in_boolean_context()) {\n            var ll = self.left.evaluate(compressor);\n            var rr = self.right.evaluate(compressor);\n            if (ll && typeof ll == \"string\") {\n                compressor.warn(\"+ in boolean context always true [{file}:{line},{col}]\", self.start);\n                return make_sequence(self, [\n                    self.right,\n                    make_node(AST_True, self)\n                ]).optimize(compressor);\n            }\n            if (rr && typeof rr == \"string\") {\n                compressor.warn(\"+ in boolean context always true [{file}:{line},{col}]\", self.start);\n                return make_sequence(self, [\n                    self.left,\n                    make_node(AST_True, self)\n                ]).optimize(compressor);\n            }\n        }\n        if (compressor.option(\"comparisons\") && self.is_boolean()) {\n            if (!(compressor.parent() instanceof AST_Binary)\n                || compressor.parent() instanceof AST_Assign) {\n                var negated = make_node(AST_UnaryPrefix, self, {\n                    operator: \"!\",\n                    expression: self.negate(compressor, first_in_statement(compressor))\n                });\n                self = best_of(compressor, self, negated);\n            }\n            if (compressor.option(\"unsafe_comps\")) {\n                switch (self.operator) {\n                  case \"<\": reverse(\">\"); break;\n                  case \"<=\": reverse(\">=\"); break;\n                }\n            }\n        }\n        if (self.operator == \"+\") {\n            if (self.right instanceof AST_String\n                && self.right.getValue() == \"\"\n                && self.left.is_string(compressor)) {\n                return self.left;\n            }\n            if (self.left instanceof AST_String\n                && self.left.getValue() == \"\"\n                && self.right.is_string(compressor)) {\n                return self.right;\n            }\n            if (self.left instanceof AST_Binary\n                && self.left.operator == \"+\"\n                && self.left.left instanceof AST_String\n                && self.left.left.getValue() == \"\"\n                && self.right.is_string(compressor)) {\n                self.left = self.left.right;\n                return self.transform(compressor);\n            }\n        }\n        if (compressor.option(\"evaluate\")) {\n            switch (self.operator) {\n              case \"&&\":\n                var ll = self.left.truthy ? true : self.left.falsy ? false : self.left.evaluate(compressor);\n                if (!ll) {\n                    compressor.warn(\"Condition left of && always false [{file}:{line},{col}]\", self.start);\n                    return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);\n                } else if (!(ll instanceof AST_Node)) {\n                    compressor.warn(\"Condition left of && always true [{file}:{line},{col}]\", self.start);\n                    return make_sequence(self, [ self.left, self.right ]).optimize(compressor);\n                }\n                var rr = self.right.evaluate(compressor);\n                if (!rr) {\n                    if (compressor.in_boolean_context()) {\n                        compressor.warn(\"Boolean && always false [{file}:{line},{col}]\", self.start);\n                        return make_sequence(self, [\n                            self.left,\n                            make_node(AST_False, self)\n                        ]).optimize(compressor);\n                    } else self.falsy = true;\n                } else if (!(rr instanceof AST_Node)) {\n                    var parent = compressor.parent();\n                    if (parent.operator == \"&&\" && parent.left === compressor.self() || compressor.in_boolean_context()) {\n                        compressor.warn(\"Dropping side-effect-free && [{file}:{line},{col}]\", self.start);\n                        return self.left.optimize(compressor);\n                    }\n                }\n                // x || false && y ---> x ? y : false\n                if (self.left.operator == \"||\") {\n                    var lr = self.left.right.evaluate(compressor);\n                    if (!lr) return make_node(AST_Conditional, self, {\n                        condition: self.left.left,\n                        consequent: self.right,\n                        alternative: self.left.right\n                    }).optimize(compressor);\n                }\n                break;\n              case \"||\":\n                var ll = self.left.truthy ? true : self.left.falsy ? false : self.left.evaluate(compressor);\n                if (!ll) {\n                    compressor.warn(\"Condition left of || always false [{file}:{line},{col}]\", self.start);\n                    return make_sequence(self, [ self.left, self.right ]).optimize(compressor);\n                } else if (!(ll instanceof AST_Node)) {\n                    compressor.warn(\"Condition left of || always true [{file}:{line},{col}]\", self.start);\n                    return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);\n                }\n                var rr = self.right.evaluate(compressor);\n                if (!rr) {\n                    var parent = compressor.parent();\n                    if (parent.operator == \"||\" && parent.left === compressor.self() || compressor.in_boolean_context()) {\n                        compressor.warn(\"Dropping side-effect-free || [{file}:{line},{col}]\", self.start);\n                        return self.left.optimize(compressor);\n                    }\n                } else if (!(rr instanceof AST_Node)) {\n                    if (compressor.in_boolean_context()) {\n                        compressor.warn(\"Boolean || always true [{file}:{line},{col}]\", self.start);\n                        return make_sequence(self, [\n                            self.left,\n                            make_node(AST_True, self)\n                        ]).optimize(compressor);\n                    } else self.truthy = true;\n                }\n                if (self.left.operator == \"&&\") {\n                    var lr = self.left.right.evaluate(compressor);\n                    if (lr && !(lr instanceof AST_Node)) return make_node(AST_Conditional, self, {\n                        condition: self.left.left,\n                        consequent: self.left.right,\n                        alternative: self.right\n                    }).optimize(compressor);\n                }\n                break;\n            }\n            var associative = true;\n            switch (self.operator) {\n              case \"+\":\n                // \"foo\" + (\"bar\" + x) => \"foobar\" + x\n                if (self.left instanceof AST_Constant\n                    && self.right instanceof AST_Binary\n                    && self.right.operator == \"+\"\n                    && self.right.left instanceof AST_Constant\n                    && self.right.is_string(compressor)) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"+\",\n                        left: make_node(AST_String, self.left, {\n                            value: \"\" + self.left.getValue() + self.right.left.getValue(),\n                            start: self.left.start,\n                            end: self.right.left.end\n                        }),\n                        right: self.right.right\n                    });\n                }\n                // (x + \"foo\") + \"bar\" => x + \"foobar\"\n                if (self.right instanceof AST_Constant\n                    && self.left instanceof AST_Binary\n                    && self.left.operator == \"+\"\n                    && self.left.right instanceof AST_Constant\n                    && self.left.is_string(compressor)) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"+\",\n                        left: self.left.left,\n                        right: make_node(AST_String, self.right, {\n                            value: \"\" + self.left.right.getValue() + self.right.getValue(),\n                            start: self.left.right.start,\n                            end: self.right.end\n                        })\n                    });\n                }\n                // (x + \"foo\") + (\"bar\" + y) => (x + \"foobar\") + y\n                if (self.left instanceof AST_Binary\n                    && self.left.operator == \"+\"\n                    && self.left.is_string(compressor)\n                    && self.left.right instanceof AST_Constant\n                    && self.right instanceof AST_Binary\n                    && self.right.operator == \"+\"\n                    && self.right.left instanceof AST_Constant\n                    && self.right.is_string(compressor)) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"+\",\n                        left: make_node(AST_Binary, self.left, {\n                            operator: \"+\",\n                            left: self.left.left,\n                            right: make_node(AST_String, self.left.right, {\n                                value: \"\" + self.left.right.getValue() + self.right.left.getValue(),\n                                start: self.left.right.start,\n                                end: self.right.left.end\n                            })\n                        }),\n                        right: self.right.right\n                    });\n                }\n                // a + -b => a - b\n                if (self.right instanceof AST_UnaryPrefix\n                    && self.right.operator == \"-\"\n                    && self.left.is_number(compressor)) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"-\",\n                        left: self.left,\n                        right: self.right.expression\n                    });\n                    break;\n                }\n                // -a + b => b - a\n                if (self.left instanceof AST_UnaryPrefix\n                    && self.left.operator == \"-\"\n                    && reversible()\n                    && self.right.is_number(compressor)) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"-\",\n                        left: self.right,\n                        right: self.left.expression\n                    });\n                    break;\n                }\n              case \"*\":\n                associative = compressor.option(\"unsafe_math\");\n              case \"&\":\n              case \"|\":\n              case \"^\":\n                // a + +b => +b + a\n                if (self.left.is_number(compressor)\n                    && self.right.is_number(compressor)\n                    && reversible()\n                    && !(self.left instanceof AST_Binary\n                        && self.left.operator != self.operator\n                        && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {\n                    var reversed = make_node(AST_Binary, self, {\n                        operator: self.operator,\n                        left: self.right,\n                        right: self.left\n                    });\n                    if (self.right instanceof AST_Constant\n                        && !(self.left instanceof AST_Constant)) {\n                        self = best_of(compressor, reversed, self);\n                    } else {\n                        self = best_of(compressor, self, reversed);\n                    }\n                }\n                if (associative && self.is_number(compressor)) {\n                    // a + (b + c) => (a + b) + c\n                    if (self.right instanceof AST_Binary\n                        && self.right.operator == self.operator) {\n                        self = make_node(AST_Binary, self, {\n                            operator: self.operator,\n                            left: make_node(AST_Binary, self.left, {\n                                operator: self.operator,\n                                left: self.left,\n                                right: self.right.left,\n                                start: self.left.start,\n                                end: self.right.left.end\n                            }),\n                            right: self.right.right\n                        });\n                    }\n                    // (n + 2) + 3 => 5 + n\n                    // (2 * n) * 3 => 6 + n\n                    if (self.right instanceof AST_Constant\n                        && self.left instanceof AST_Binary\n                        && self.left.operator == self.operator) {\n                        if (self.left.left instanceof AST_Constant) {\n                            self = make_node(AST_Binary, self, {\n                                operator: self.operator,\n                                left: make_node(AST_Binary, self.left, {\n                                    operator: self.operator,\n                                    left: self.left.left,\n                                    right: self.right,\n                                    start: self.left.left.start,\n                                    end: self.right.end\n                                }),\n                                right: self.left.right\n                            });\n                        } else if (self.left.right instanceof AST_Constant) {\n                            self = make_node(AST_Binary, self, {\n                                operator: self.operator,\n                                left: make_node(AST_Binary, self.left, {\n                                    operator: self.operator,\n                                    left: self.left.right,\n                                    right: self.right,\n                                    start: self.left.right.start,\n                                    end: self.right.end\n                                }),\n                                right: self.left.left\n                            });\n                        }\n                    }\n                    // (a | 1) | (2 | d) => (3 | a) | b\n                    if (self.left instanceof AST_Binary\n                        && self.left.operator == self.operator\n                        && self.left.right instanceof AST_Constant\n                        && self.right instanceof AST_Binary\n                        && self.right.operator == self.operator\n                        && self.right.left instanceof AST_Constant) {\n                        self = make_node(AST_Binary, self, {\n                            operator: self.operator,\n                            left: make_node(AST_Binary, self.left, {\n                                operator: self.operator,\n                                left: make_node(AST_Binary, self.left.left, {\n                                    operator: self.operator,\n                                    left: self.left.right,\n                                    right: self.right.left,\n                                    start: self.left.right.start,\n                                    end: self.right.left.end\n                                }),\n                                right: self.left.left\n                            }),\n                            right: self.right.right\n                        });\n                    }\n                }\n            }\n        }\n        // x && (y && z)  ==>  x && y && z\n        // x || (y || z)  ==>  x || y || z\n        // x + (\"y\" + z)  ==>  x + \"y\" + z\n        // \"x\" + (y + \"z\")==>  \"x\" + y + \"z\"\n        if (self.right instanceof AST_Binary\n            && self.right.operator == self.operator\n            && (lazy_op(self.operator)\n                || (self.operator == \"+\"\n                    && (self.right.left.is_string(compressor)\n                        || (self.left.is_string(compressor)\n                            && self.right.right.is_string(compressor)))))\n        ) {\n            self.left = make_node(AST_Binary, self.left, {\n                operator : self.operator,\n                left     : self.left,\n                right    : self.right.left\n            });\n            self.right = self.right.right;\n            return self.transform(compressor);\n        }\n        var ev = self.evaluate(compressor);\n        if (ev !== self) {\n            ev = make_node_from_constant(ev, self).optimize(compressor);\n            return best_of(compressor, ev, self);\n        }\n        return self;\n    });\n\n    OPT(AST_SymbolExport, function(self, compressor) {\n        return self;\n    });\n\n    function recursive_ref(compressor, def) {\n        var node;\n        for (var i = 0; node = compressor.parent(i); i++) {\n            if (node instanceof AST_Lambda) {\n                var name = node.name;\n                if (name && name.definition() === def) break;\n            }\n        }\n        return node;\n    }\n\n    function within_array_or_object_literal(compressor) {\n        var node, level = 0;\n        while (node = compressor.parent(level++)) {\n            if (node instanceof AST_Statement) return false;\n            if (node instanceof AST_Array\n                || node instanceof AST_ObjectKeyVal\n                || node instanceof AST_Object) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    OPT(AST_SymbolRef, function(self, compressor) {\n        if (!compressor.option(\"ie8\")\n            && is_undeclared_ref(self)\n            && (!self.scope.uses_with || !compressor.find_parent(AST_With))) {\n            switch (self.name) {\n              case \"undefined\":\n                return make_node(AST_Undefined, self).optimize(compressor);\n              case \"NaN\":\n                return make_node(AST_NaN, self).optimize(compressor);\n              case \"Infinity\":\n                return make_node(AST_Infinity, self).optimize(compressor);\n            }\n        }\n        var parent = compressor.parent();\n        if (compressor.option(\"reduce_vars\") && is_lhs(self, parent) !== self) {\n            var d = self.definition();\n            if (compressor.top_retain && d.global && compressor.top_retain(d)) {\n                d.fixed = false;\n                d.should_replace = false;\n                d.single_use = false;\n                return self;\n            }\n            var fixed = self.fixed_value();\n            var single_use = d.single_use\n                && !(parent instanceof AST_Call && parent.is_expr_pure(compressor));\n            if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {\n                if (retain_top_func(fixed, compressor)) {\n                    single_use = false;\n                } else if (d.scope !== self.scope\n                    && (!compressor.option(\"reduce_funcs\") && fixed instanceof AST_Lambda\n                        || d.escaped == 1\n                        || fixed.inlined\n                        || within_array_or_object_literal(compressor))) {\n                    single_use = false;\n                } else if (recursive_ref(compressor, d)) {\n                    single_use = false;\n                } else if (d.scope !== self.scope || d.orig[0] instanceof AST_SymbolFunarg) {\n                    single_use = fixed.is_constant_expression(self.scope);\n                    if (single_use == \"f\") {\n                        var scope = self.scope;\n                        do {\n                            if (scope instanceof AST_Defun || is_func_expr(scope)) {\n                                scope.inlined = true;\n                            }\n                        } while (scope = scope.parent_scope);\n                    }\n                }\n            }\n            if (single_use && fixed) {\n                if (fixed instanceof AST_DefClass) {\n                    fixed = make_node(AST_ClassExpression, fixed, fixed);\n                }\n                if (fixed instanceof AST_Defun) {\n                    fixed._squeezed = true;\n                    fixed = make_node(AST_Function, fixed, fixed);\n                }\n                var value;\n                if (d.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) {\n                    value = fixed.clone(true);\n                    var defun_def = value.name.definition();\n                    var lambda_def = value.variables.get(value.name.name);\n                    var name = lambda_def && lambda_def.orig[0];\n                    if (!(name instanceof AST_SymbolLambda)) {\n                        name = make_node(AST_SymbolLambda, value.name, value.name);\n                        name.scope = value;\n                        value.name = name;\n                        lambda_def = value.def_function(name);\n                    }\n                    value.walk(new TreeWalker(function(node) {\n                        if (node instanceof AST_SymbolRef && node.definition() === defun_def) {\n                            node.thedef = lambda_def;\n                            lambda_def.references.push(node);\n                        }\n                    }));\n                } else {\n                    value = fixed.optimize(compressor);\n                    if (value === fixed) value = fixed.clone(true);\n                }\n                return value;\n            }\n            if (fixed && d.should_replace === undefined) {\n                var init;\n                if (fixed instanceof AST_This) {\n                    if (!(d.orig[0] instanceof AST_SymbolFunarg)\n                        && all(d.references, function(ref) {\n                            return d.scope === ref.scope;\n                        })) {\n                        init = fixed;\n                    }\n                } else {\n                    var ev = fixed.evaluate(compressor);\n                    if (ev !== fixed && (compressor.option(\"unsafe_regexp\") || !(ev instanceof RegExp))) {\n                        init = make_node_from_constant(ev, fixed);\n                    }\n                }\n                if (init) {\n                    var value_length = init.optimize(compressor).print_to_string().length;\n                    var fn;\n                    if (has_symbol_ref(fixed)) {\n                        fn = function() {\n                            var result = init.optimize(compressor);\n                            return result === init ? result.clone(true) : result;\n                        };\n                    } else {\n                        value_length = Math.min(value_length, fixed.print_to_string().length);\n                        fn = function() {\n                            var result = best_of_expression(init.optimize(compressor), fixed);\n                            return result === init || result === fixed ? result.clone(true) : result;\n                        };\n                    }\n                    var name_length = d.name.length;\n                    var overhead = 0;\n                    if (compressor.option(\"unused\") && !compressor.exposed(d)) {\n                        overhead = (name_length + 2 + value_length) / (d.references.length - d.assignments);\n                    }\n                    d.should_replace = value_length <= name_length + overhead ? fn : false;\n                } else {\n                    d.should_replace = false;\n                }\n            }\n            if (d.should_replace) {\n                return d.should_replace();\n            }\n        }\n        return self;\n\n        function has_symbol_ref(value) {\n            var found;\n            value.walk(new TreeWalker(function(node) {\n                if (node instanceof AST_SymbolRef) found = true;\n                if (found) return true;\n            }));\n            return found;\n        }\n    });\n\n    function is_atomic(lhs, self) {\n        return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;\n    }\n\n    OPT(AST_Undefined, function(self, compressor) {\n        if (compressor.option(\"unsafe_undefined\")) {\n            var undef = find_variable(compressor, \"undefined\");\n            if (undef) {\n                var ref = make_node(AST_SymbolRef, self, {\n                    name   : \"undefined\",\n                    scope  : undef.scope,\n                    thedef : undef\n                });\n                ref.is_undefined = true;\n                return ref;\n            }\n        }\n        var lhs = is_lhs(compressor.self(), compressor.parent());\n        if (lhs && is_atomic(lhs, self)) return self;\n        return make_node(AST_UnaryPrefix, self, {\n            operator: \"void\",\n            expression: make_node(AST_Number, self, {\n                value: 0\n            })\n        });\n    });\n\n    OPT(AST_Infinity, function(self, compressor) {\n        var lhs = is_lhs(compressor.self(), compressor.parent());\n        if (lhs && is_atomic(lhs, self)) return self;\n        if (compressor.option(\"keep_infinity\")\n            && !(lhs && !is_atomic(lhs, self))\n            && !find_variable(compressor, \"Infinity\"))\n            return self;\n        return make_node(AST_Binary, self, {\n            operator: \"/\",\n            left: make_node(AST_Number, self, {\n                value: 1\n            }),\n            right: make_node(AST_Number, self, {\n                value: 0\n            })\n        });\n    });\n\n    OPT(AST_NaN, function(self, compressor) {\n        var lhs = is_lhs(compressor.self(), compressor.parent());\n        if (lhs && !is_atomic(lhs, self)\n            || find_variable(compressor, \"NaN\")) {\n            return make_node(AST_Binary, self, {\n                operator: \"/\",\n                left: make_node(AST_Number, self, {\n                    value: 0\n                }),\n                right: make_node(AST_Number, self, {\n                    value: 0\n                })\n            });\n        }\n        return self;\n    });\n\n    function is_reachable(self, defs) {\n        var reachable = false;\n        var find_ref = new TreeWalker(function(node) {\n            if (reachable) return true;\n            if (node instanceof AST_SymbolRef && member(node.definition(), defs)) {\n                return reachable = true;\n            }\n        });\n        var scan_scope = new TreeWalker(function(node) {\n            if (reachable) return true;\n            if (node instanceof AST_Scope && node !== self) {\n                var parent = scan_scope.parent();\n                if (parent instanceof AST_Call && parent.expression === node) return;\n                node.walk(find_ref);\n                return true;\n            }\n        });\n        self.walk(scan_scope);\n        return reachable;\n    }\n\n    var ASSIGN_OPS = [ \"+\", \"-\", \"/\", \"*\", \"%\", \">>\", \"<<\", \">>>\", \"|\", \"^\", \"&\" ];\n    var ASSIGN_OPS_COMMUTATIVE = [ \"*\", \"|\", \"^\", \"&\" ];\n    OPT(AST_Assign, function(self, compressor) {\n        var def;\n        if (compressor.option(\"dead_code\")\n            && self.left instanceof AST_SymbolRef\n            && (def = self.left.definition()).scope === compressor.find_parent(AST_Lambda)) {\n            var level = 0, node, parent = self;\n            do {\n                node = parent;\n                parent = compressor.parent(level++);\n                if (parent instanceof AST_Exit) {\n                    if (in_try(level, parent)) break;\n                    if (is_reachable(def.scope, [ def ])) break;\n                    if (self.operator == \"=\") return self.right;\n                    def.fixed = false;\n                    return make_node(AST_Binary, self, {\n                        operator: self.operator.slice(0, -1),\n                        left: self.left,\n                        right: self.right\n                    }).optimize(compressor);\n                }\n            } while (parent instanceof AST_Binary && parent.right === node\n                || parent instanceof AST_Sequence && parent.tail_node() === node);\n        }\n        self = self.lift_sequences(compressor);\n        if (self.operator == \"=\" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) {\n            // x = expr1 OP expr2\n            if (self.right.left instanceof AST_SymbolRef\n                && self.right.left.name == self.left.name\n                && member(self.right.operator, ASSIGN_OPS)) {\n                // x = x - 2  --->  x -= 2\n                self.operator = self.right.operator + \"=\";\n                self.right = self.right.right;\n            } else if (self.right.right instanceof AST_SymbolRef\n                && self.right.right.name == self.left.name\n                && member(self.right.operator, ASSIGN_OPS_COMMUTATIVE)\n                && !self.right.left.has_side_effects(compressor)) {\n                // x = 2 & x  --->  x &= 2\n                self.operator = self.right.operator + \"=\";\n                self.right = self.right.left;\n            }\n        }\n        return self;\n\n        function in_try(level, node) {\n            var right = self.right;\n            self.right = make_node(AST_Null, right);\n            var may_throw = node.may_throw(compressor);\n            self.right = right;\n            var scope = self.left.definition().scope;\n            var parent;\n            while ((parent = compressor.parent(level++)) !== scope) {\n                if (parent instanceof AST_Try) {\n                    if (parent.bfinally) return true;\n                    if (may_throw && parent.bcatch) return true;\n                }\n            }\n        }\n    });\n\n    OPT(AST_DefaultAssign, function(self, compressor) {\n        if (!compressor.option(\"evaluate\")) {\n            return self;\n        }\n        var evaluateRight = self.right.evaluate(compressor);\n\n        // `[x = undefined] = foo` ---> `[x] = foo`\n        if (evaluateRight === undefined) {\n            self = self.left;\n        } else if (evaluateRight !== self.right) {\n            evaluateRight = make_node_from_constant(evaluateRight, self.right);\n            self.right = best_of_expression(evaluateRight, self.right);\n        }\n\n        return self;\n    });\n\n    OPT(AST_Conditional, function(self, compressor) {\n        if (!compressor.option(\"conditionals\")) return self;\n        // This looks like lift_sequences(), should probably be under \"sequences\"\n        if (self.condition instanceof AST_Sequence) {\n            var expressions = self.condition.expressions.slice();\n            self.condition = expressions.pop();\n            expressions.push(self);\n            return make_sequence(self, expressions);\n        }\n        var cond = self.condition.evaluate(compressor);\n        if (cond !== self.condition) {\n            if (cond) {\n                compressor.warn(\"Condition always true [{file}:{line},{col}]\", self.start);\n                return maintain_this_binding(compressor.parent(), compressor.self(), self.consequent);\n            } else {\n                compressor.warn(\"Condition always false [{file}:{line},{col}]\", self.start);\n                return maintain_this_binding(compressor.parent(), compressor.self(), self.alternative);\n            }\n        }\n        var negated = cond.negate(compressor, first_in_statement(compressor));\n        if (best_of(compressor, cond, negated) === negated) {\n            self = make_node(AST_Conditional, self, {\n                condition: negated,\n                consequent: self.alternative,\n                alternative: self.consequent\n            });\n        }\n        var condition = self.condition;\n        var consequent = self.consequent;\n        var alternative = self.alternative;\n        // x?x:y --> x||y\n        if (condition instanceof AST_SymbolRef\n            && consequent instanceof AST_SymbolRef\n            && condition.definition() === consequent.definition()) {\n            return make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: condition,\n                right: alternative\n            });\n        }\n        // if (foo) exp = something; else exp = something_else;\n        //                   |\n        //                   v\n        // exp = foo ? something : something_else;\n        if (consequent instanceof AST_Assign\n            && alternative instanceof AST_Assign\n            && consequent.operator == alternative.operator\n            && consequent.left.equivalent_to(alternative.left)\n            && (!self.condition.has_side_effects(compressor)\n                || consequent.operator == \"=\"\n                    && !consequent.left.has_side_effects(compressor))) {\n            return make_node(AST_Assign, self, {\n                operator: consequent.operator,\n                left: consequent.left,\n                right: make_node(AST_Conditional, self, {\n                    condition: self.condition,\n                    consequent: consequent.right,\n                    alternative: alternative.right\n                })\n            });\n        }\n        // x ? y(a) : y(b) --> y(x ? a : b)\n        var arg_index;\n        if (consequent instanceof AST_Call\n            && alternative.TYPE === consequent.TYPE\n            && consequent.args.length > 0\n            && consequent.args.length == alternative.args.length\n            && consequent.expression.equivalent_to(alternative.expression)\n            && !self.condition.has_side_effects(compressor)\n            && !consequent.expression.has_side_effects(compressor)\n            && typeof (arg_index = single_arg_diff()) == \"number\") {\n            var node = consequent.clone();\n            node.args[arg_index] = make_node(AST_Conditional, self, {\n                condition: self.condition,\n                consequent: consequent.args[arg_index],\n                alternative: alternative.args[arg_index]\n            });\n            return node;\n        }\n        // x?y?z:a:a --> x&&y?z:a\n        if (consequent instanceof AST_Conditional\n            && consequent.alternative.equivalent_to(alternative)) {\n            return make_node(AST_Conditional, self, {\n                condition: make_node(AST_Binary, self, {\n                    left: self.condition,\n                    operator: \"&&\",\n                    right: consequent.condition\n                }),\n                consequent: consequent.consequent,\n                alternative: alternative\n            });\n        }\n        // x ? y : y --> x, y\n        if (consequent.equivalent_to(alternative)) {\n            return make_sequence(self, [\n                self.condition,\n                consequent\n            ]).optimize(compressor);\n        }\n        // x ? y || z : z --> x && y || z\n        if (consequent instanceof AST_Binary\n            && consequent.operator == \"||\"\n            && consequent.right.equivalent_to(alternative)) {\n            return make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: make_node(AST_Binary, self, {\n                    operator: \"&&\",\n                    left: self.condition,\n                    right: consequent.left\n                }),\n                right: alternative\n            }).optimize(compressor);\n        }\n        var in_bool = compressor.in_boolean_context();\n        if (is_true(self.consequent)) {\n            if (is_false(self.alternative)) {\n                // c ? true : false ---> !!c\n                return booleanize(self.condition);\n            }\n            // c ? true : x ---> !!c || x\n            return make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: booleanize(self.condition),\n                right: self.alternative\n            });\n        }\n        if (is_false(self.consequent)) {\n            if (is_true(self.alternative)) {\n                // c ? false : true ---> !c\n                return booleanize(self.condition.negate(compressor));\n            }\n            // c ? false : x ---> !c && x\n            return make_node(AST_Binary, self, {\n                operator: \"&&\",\n                left: booleanize(self.condition.negate(compressor)),\n                right: self.alternative\n            });\n        }\n        if (is_true(self.alternative)) {\n            // c ? x : true ---> !c || x\n            return make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: booleanize(self.condition.negate(compressor)),\n                right: self.consequent\n            });\n        }\n        if (is_false(self.alternative)) {\n            // c ? x : false ---> !!c && x\n            return make_node(AST_Binary, self, {\n                operator: \"&&\",\n                left: booleanize(self.condition),\n                right: self.consequent\n            });\n        }\n\n        return self;\n\n        function booleanize(node) {\n            if (node.is_boolean()) return node;\n            // !!expression\n            return make_node(AST_UnaryPrefix, node, {\n                operator: \"!\",\n                expression: node.negate(compressor)\n            });\n        }\n\n        // AST_True or !0\n        function is_true(node) {\n            return node instanceof AST_True\n                || in_bool\n                    && node instanceof AST_Constant\n                    && node.getValue()\n                || (node instanceof AST_UnaryPrefix\n                    && node.operator == \"!\"\n                    && node.expression instanceof AST_Constant\n                    && !node.expression.getValue());\n        }\n        // AST_False or !1\n        function is_false(node) {\n            return node instanceof AST_False\n                || in_bool\n                    && node instanceof AST_Constant\n                    && !node.getValue()\n                || (node instanceof AST_UnaryPrefix\n                    && node.operator == \"!\"\n                    && node.expression instanceof AST_Constant\n                    && node.expression.getValue());\n        }\n\n        function single_arg_diff() {\n            var a = consequent.args;\n            var b = alternative.args;\n            for (var i = 0, len = a.length; i < len; i++) {\n                if (a[i] instanceof AST_Expansion) return;\n                if (!a[i].equivalent_to(b[i])) {\n                    if (b[i] instanceof AST_Expansion) return;\n                    for (var j = i + 1; j < len; j++) {\n                        if (a[j] instanceof AST_Expansion) return;\n                        if (!a[j].equivalent_to(b[j])) return;\n                    }\n                    return i;\n                }\n            }\n        }\n    });\n\n    OPT(AST_Boolean, function(self, compressor) {\n        if (compressor.in_boolean_context()) return make_node(AST_Number, self, {\n            value: +self.value\n        });\n        var p = compressor.parent();\n        if (compressor.option(\"booleans_as_integers\")) {\n            if (p instanceof AST_Binary && (p.operator == \"===\" || p.operator == \"!==\")) {\n                p.operator = p.operator.replace(/=$/, \"\");\n            }\n            return make_node(AST_Number, self, {\n                value: +self.value\n            });\n        }\n        if (compressor.option(\"booleans\")) {\n            if (p instanceof AST_Binary && (p.operator == \"==\"\n                                            || p.operator == \"!=\")) {\n                compressor.warn(\"Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]\", {\n                    operator : p.operator,\n                    value    : self.value,\n                    file     : p.start.file,\n                    line     : p.start.line,\n                    col      : p.start.col,\n                });\n                return make_node(AST_Number, self, {\n                    value: +self.value\n                });\n            }\n            return make_node(AST_UnaryPrefix, self, {\n                operator: \"!\",\n                expression: make_node(AST_Number, self, {\n                    value: 1 - self.value\n                })\n            });\n        }\n        return self;\n    });\n\n    function safe_to_flatten(value, compressor) {\n        if (value instanceof AST_SymbolRef) {\n            value = value.fixed_value();\n        }\n        if (!value) return false;\n        return !(value instanceof AST_Lambda || value instanceof AST_Class)\n            || compressor.parent() instanceof AST_New\n            || !value.contains_this();\n    }\n\n    OPT(AST_Sub, function(self, compressor) {\n        var expr = self.expression;\n        var prop = self.property;\n        if (compressor.option(\"properties\")) {\n            var key = prop.evaluate(compressor);\n            if (key !== prop) {\n                if (typeof key == \"string\") {\n                    if (key == \"undefined\") {\n                        key = undefined;\n                    } else {\n                        var value = parseFloat(key);\n                        if (value.toString() == key) {\n                            key = value;\n                        }\n                    }\n                }\n                prop = self.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor));\n                var property = \"\" + key;\n                if (is_identifier_string(property)\n                    && property.length <= prop.print_to_string().length + 1) {\n                    return make_node(AST_Dot, self, {\n                        expression: expr,\n                        property: property\n                    }).optimize(compressor);\n                }\n            }\n        }\n        var fn;\n        OPT_ARGUMENTS: if (compressor.option(\"arguments\")\n            && expr instanceof AST_SymbolRef\n            && expr.name == \"arguments\"\n            && expr.definition().orig.length == 1\n            && (fn = expr.scope) instanceof AST_Lambda\n            && fn.uses_arguments\n            && !(fn instanceof AST_Arrow)\n            && prop instanceof AST_Number) {\n            var index = prop.getValue();\n            var params = Object.create(null);\n            var argnames = fn.argnames;\n            for (var n = 0; n < argnames.length; n++) {\n                if (!(argnames[n] instanceof AST_SymbolFunarg)) {\n                    break OPT_ARGUMENTS; // destructuring parameter - bail\n                }\n                var param = argnames[n].name;\n                if (param in params) {\n                    break OPT_ARGUMENTS; // duplicate parameter - bail\n                }\n                params[param] = true;\n            }\n            var argname = fn.argnames[index];\n            if (argname && compressor.has_directive(\"use strict\")) {\n                var def = argname.definition();\n                if (!compressor.option(\"reduce_vars\") || def.assignments || def.orig.length > 1) {\n                    argname = null;\n                }\n            } else if (!argname && !compressor.option(\"keep_fargs\") && index < fn.argnames.length + 5) {\n                while (index >= fn.argnames.length) {\n                    argname = make_node(AST_SymbolFunarg, fn, {\n                        name: fn.make_var_name(\"argument_\" + fn.argnames.length),\n                        scope: fn\n                    });\n                    fn.argnames.push(argname);\n                    fn.enclosed.push(fn.def_variable(argname));\n                }\n            }\n            if (argname) {\n                var sym = make_node(AST_SymbolRef, self, argname);\n                sym.reference({});\n                delete argname.__unused;\n                return sym;\n            }\n        }\n        if (is_lhs(self, compressor.parent())) return self;\n        if (key !== prop) {\n            var sub = self.flatten_object(property, compressor);\n            if (sub) {\n                expr = self.expression = sub.expression;\n                prop = self.property = sub.property;\n            }\n        }\n        if (compressor.option(\"properties\") && compressor.option(\"side_effects\")\n            && prop instanceof AST_Number && expr instanceof AST_Array) {\n            var index = prop.getValue();\n            var elements = expr.elements;\n            var retValue = elements[index];\n            FLATTEN: if (safe_to_flatten(retValue, compressor)) {\n                var flatten = true;\n                var values = [];\n                for (var i = elements.length; --i > index;) {\n                    var value = elements[i].drop_side_effect_free(compressor);\n                    if (value) {\n                        values.unshift(value);\n                        if (flatten && value.has_side_effects(compressor)) flatten = false;\n                    }\n                }\n                if (retValue instanceof AST_Expansion) break FLATTEN;\n                retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue;\n                if (!flatten) values.unshift(retValue);\n                while (--i >= 0) {\n                    var value = elements[i];\n                    if (value instanceof AST_Expansion) break FLATTEN;\n                    value = value.drop_side_effect_free(compressor);\n                    if (value) values.unshift(value);\n                    else index--;\n                }\n                if (flatten) {\n                    values.push(retValue);\n                    return make_sequence(self, values).optimize(compressor);\n                } else return make_node(AST_Sub, self, {\n                    expression: make_node(AST_Array, expr, {\n                        elements: values\n                    }),\n                    property: make_node(AST_Number, prop, {\n                        value: index\n                    })\n                });\n            }\n        }\n        var ev = self.evaluate(compressor);\n        if (ev !== self) {\n            ev = make_node_from_constant(ev, self).optimize(compressor);\n            return best_of(compressor, ev, self);\n        }\n        return self;\n    });\n\n    AST_Lambda.DEFMETHOD(\"contains_this\", function() {\n        var result;\n        var self = this;\n        self.walk(new TreeWalker(function(node) {\n            if (result) return true;\n            if (node instanceof AST_This) return result = true;\n            if (node !== self && node instanceof AST_Scope && !(node instanceof AST_Arrow)) return true;\n        }));\n        return result;\n    });\n\n    AST_PropAccess.DEFMETHOD(\"flatten_object\", function(key, compressor) {\n        if (!compressor.option(\"properties\")) return;\n        var arrows = compressor.option(\"unsafe_arrows\") && compressor.option(\"ecma\") >= 6;\n        var expr = this.expression;\n        if (expr instanceof AST_Object) {\n            var props = expr.properties;\n            for (var i = props.length; --i >= 0;) {\n                var prop = props[i];\n                if (\"\" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) {\n                    if (!all(props, function(prop) {\n                        return prop instanceof AST_ObjectKeyVal\n                            || arrows && prop instanceof AST_ConciseMethod && !prop.is_generator;\n                    })) break;\n                    if (!safe_to_flatten(prop.value, compressor)) break;\n                    return make_node(AST_Sub, this, {\n                        expression: make_node(AST_Array, expr, {\n                            elements: props.map(function(prop) {\n                                var v = prop.value;\n                                if (v instanceof AST_Accessor) v = make_node(AST_Function, v, v);\n                                var k = prop.key;\n                                if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) {\n                                    return make_sequence(prop, [ k, v ]);\n                                }\n                                return v;\n                            })\n                        }),\n                        property: make_node(AST_Number, this, {\n                            value: i\n                        })\n                    });\n                }\n            }\n        }\n    });\n\n    OPT(AST_Dot, function(self, compressor) {\n        if (self.property == \"arguments\" || self.property == \"caller\") {\n            compressor.warn(\"Function.protoype.{prop} not supported [{file}:{line},{col}]\", {\n                prop: self.property,\n                file: self.start.file,\n                line: self.start.line,\n                col: self.start.col\n            });\n        }\n        if (is_lhs(self, compressor.parent())) return self;\n        if (compressor.option(\"unsafe_proto\")\n            && self.expression instanceof AST_Dot\n            && self.expression.property == \"prototype\") {\n            var exp = self.expression.expression;\n            if (is_undeclared_ref(exp)) switch (exp.name) {\n              case \"Array\":\n                self.expression = make_node(AST_Array, self.expression, {\n                    elements: []\n                });\n                break;\n              case \"Function\":\n                self.expression = make_node(AST_Function, self.expression, {\n                    argnames: [],\n                    body: []\n                });\n                break;\n              case \"Number\":\n                self.expression = make_node(AST_Number, self.expression, {\n                    value: 0\n                });\n                break;\n              case \"Object\":\n                self.expression = make_node(AST_Object, self.expression, {\n                    properties: []\n                });\n                break;\n              case \"RegExp\":\n                self.expression = make_node(AST_RegExp, self.expression, {\n                    value: /t/\n                });\n                break;\n              case \"String\":\n                self.expression = make_node(AST_String, self.expression, {\n                    value: \"\"\n                });\n                break;\n            }\n        }\n        var sub = self.flatten_object(self.property, compressor);\n        if (sub) return sub.optimize(compressor);\n        var ev = self.evaluate(compressor);\n        if (ev !== self) {\n            ev = make_node_from_constant(ev, self).optimize(compressor);\n            return best_of(compressor, ev, self);\n        }\n        return self;\n    });\n\n    function literals_in_boolean_context(self, compressor) {\n        if (compressor.in_boolean_context()) {\n            return best_of(compressor, self, make_sequence(self, [\n                self,\n                make_node(AST_True, self)\n            ]).optimize(compressor));\n        }\n        return self;\n    }\n    OPT(AST_Array, literals_in_boolean_context);\n    OPT(AST_Object, literals_in_boolean_context);\n    OPT(AST_RegExp, literals_in_boolean_context);\n\n    OPT(AST_Return, function(self, compressor) {\n        if (self.value && is_undefined(self.value, compressor)) {\n            self.value = null;\n        }\n        return self;\n    });\n\n    OPT(AST_Arrow, function(self, compressor) {\n        if (!(self.body instanceof AST_Node)) {\n            self = opt_AST_Lambda(self, compressor);\n        }\n        if (compressor.option(\"arrows\")\n            && self.body.length == 1\n            && self.body[0] instanceof AST_Return) {\n            var value = self.body[0].value;\n            self.body = value ? value : [];\n        }\n        return self;\n    });\n\n    OPT(AST_Function, function(self, compressor) {\n        self = opt_AST_Lambda(self, compressor);\n        if (compressor.option(\"unsafe_arrows\")\n            && compressor.option(\"ecma\") >= 6\n            && !self.name\n            && !self.is_generator\n            && !self.uses_arguments\n            && !self.pinned()) {\n            var has_special_symbol = false;\n            self.walk(new TreeWalker(function(node) {\n                if (has_special_symbol) return true;\n                if (node instanceof AST_This) {\n                    has_special_symbol = true;\n                    return true;\n                }\n            }));\n            if (!has_special_symbol) return make_node(AST_Arrow, self, self).optimize(compressor);\n        }\n        return self;\n    });\n\n    OPT(AST_Class, function(self, compressor) {\n        // HACK to avoid compress failure.\n        // AST_Class is not really an AST_Scope/AST_Block as it lacks a body.\n        return self;\n    });\n\n    OPT(AST_Yield, function(self, compressor) {\n        if (self.expression && !self.is_star && is_undefined(self.expression, compressor)) {\n            self.expression = null;\n        }\n        return self;\n    });\n\n    OPT(AST_TemplateString, function(self, compressor) {\n        if (!compressor.option(\"evaluate\")\n        || compressor.parent() instanceof AST_PrefixedTemplateString)\n            return self;\n\n        var segments = [];\n        for (var i = 0; i < self.segments.length; i++) {\n            var segment = self.segments[i];\n            if (segment instanceof AST_Node) {\n                var result = segment.evaluate(compressor);\n                // Evaluate to constant value\n                // Constant value shorter than ${segment}\n                if (result !== segment && (result + \"\").length <= segment.print_to_string().length + \"${}\".length) {\n                    // There should always be a previous and next segment if segment is a node\n                    segments[segments.length - 1].value = segments[segments.length - 1].value + result + self.segments[++i].value;\n                    continue;\n                }\n            }\n            segments.push(segment);\n        }\n        self.segments = segments;\n\n        return segments.length == 1 ? make_node(AST_String, self, segments[0]) : self;\n    });\n\n    OPT(AST_PrefixedTemplateString, function(self, compressor) {\n        return self;\n    });\n\n    // [\"p\"]:1 ---> p:1\n    // [42]:1 ---> 42:1\n    function lift_key(self, compressor) {\n        if (!compressor.option(\"computed_props\")) return self;\n        // save a comparison in the typical case\n        if (!(self.key instanceof AST_Constant)) return self;\n        // whitelist acceptable props as not all AST_Constants are true constants\n        if (self.key instanceof AST_String || self.key instanceof AST_Number) {\n            if (self.key.value === \"__proto__\") return self;\n            if (self.key.value == \"constructor\"\n                && compressor.parent() instanceof AST_Class) return self;\n            if (self instanceof AST_ObjectKeyVal) {\n                self.key = self.key.value;\n            } else {\n                self.key = make_node(AST_SymbolMethod, self.key, {\n                    name: self.key.value\n                });\n            }\n        }\n        return self;\n    }\n\n    OPT(AST_ObjectProperty, lift_key);\n\n    OPT(AST_ConciseMethod, function(self, compressor) {\n        lift_key(self, compressor);\n        // p(){return x;} ---> p:()=>x\n        if (compressor.option(\"arrows\")\n            && compressor.parent() instanceof AST_Object\n            && !self.is_generator\n            && !self.value.uses_arguments\n            && !self.value.pinned()\n            && self.value.body.length == 1\n            && self.value.body[0] instanceof AST_Return\n            && self.value.body[0].value\n            && !self.value.contains_this()) {\n            var arrow = make_node(AST_Arrow, self.value, self.value);\n            arrow.async = self.async;\n            arrow.is_generator = self.is_generator;\n            return make_node(AST_ObjectKeyVal, self, {\n                key: self.key instanceof AST_SymbolMethod ? self.key.name : self.key,\n                value: arrow,\n                quote: self.quote,\n            });\n        }\n        return self;\n    });\n\n    OPT(AST_ObjectKeyVal, function(self, compressor) {\n        lift_key(self, compressor);\n        // p:function(){} ---> p(){}\n        // p:function*(){} ---> *p(){}\n        // p:async function(){} ---> async p(){}\n        // p:()=>{} ---> p(){}\n        // p:async()=>{} ---> async p(){}\n        var unsafe_methods = compressor.option(\"unsafe_methods\");\n        if (unsafe_methods\n            && compressor.option(\"ecma\") >= 6\n            && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self.key + \"\"))) {\n            var key = self.key;\n            var value = self.value;\n            var is_arrow_with_block = value instanceof AST_Arrow\n                && Array.isArray(value.body)\n                && !value.contains_this();\n            if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) {\n                return make_node(AST_ConciseMethod, self, {\n                    async: value.async,\n                    is_generator: value.is_generator,\n                    key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self, {\n                        name: key,\n                    }),\n                    value: make_node(AST_Accessor, value, value),\n                    quote: self.quote,\n                });\n            }\n        }\n        return self;\n    });\n\n    OPT(AST_Destructuring, function(self, compressor) {\n        if (compressor.option(\"pure_getters\") == true\n            && compressor.option(\"unused\")\n            && !self.is_array\n            && Array.isArray(self.names)\n            && !is_destructuring_export_decl(compressor)) {\n            var keep = [];\n            for (var i = 0; i < self.names.length; i++) {\n                var elem = self.names[i];\n                if (!(elem instanceof AST_ObjectKeyVal\n                    && typeof elem.key == \"string\"\n                    && elem.value instanceof AST_SymbolDeclaration\n                    && !should_retain(compressor, elem.value.definition()))) {\n                    keep.push(elem);\n                }\n            }\n            if (keep.length != self.names.length) {\n                self.names = keep;\n            }\n        }\n        return self;\n\n        function is_destructuring_export_decl(compressor) {\n            var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/];\n            for (var a = 0, p = 0, len = ancestors.length; a < len; p++) {\n                var parent = compressor.parent(p);\n                if (!parent) return false;\n                if (a === 0 && parent.TYPE == \"Destructuring\") continue;\n                if (!ancestors[a].test(parent.TYPE)) {\n                    return false;\n                }\n                a++;\n            }\n            return true;\n        }\n\n        function should_retain(compressor, def) {\n            if (def.references.length) return true;\n            if (!def.global) return false;\n            if (compressor.toplevel.vars) {\n                 if (compressor.top_retain) {\n                     return compressor.top_retain(def);\n                 }\n                 return false;\n            }\n            return true;\n        }\n    });\n})();\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction find_builtins(reserved) {\n    reserved.push.apply(reserved, domprops);\n\n    // Compatibility fix for some standard defined globals not defined on every js environment\n    var new_globals = [\"Symbol\", \"Map\", \"Promise\", \"Proxy\", \"Reflect\", \"Set\", \"WeakMap\", \"WeakSet\"];\n    var objects = {};\n    var global_ref = typeof global === \"object\" ? global : self;\n\n    new_globals.forEach(function (new_global) {\n        objects[new_global] = global_ref[new_global] || new Function();\n    });\n\n    // NaN will be included due to Number.NaN\n    [\n        \"null\",\n        \"true\",\n        \"false\",\n        \"Infinity\",\n        \"-Infinity\",\n        \"undefined\",\n    ].forEach(add);\n    [ Object, Array, Function, Number,\n      String, Boolean, Error, Math,\n      Date, RegExp, objects.Symbol, ArrayBuffer,\n      DataView, decodeURI, decodeURIComponent,\n      encodeURI, encodeURIComponent, eval, EvalError,\n      Float32Array, Float64Array, Int8Array, Int16Array,\n      Int32Array, isFinite, isNaN, JSON, objects.Map, parseFloat,\n      parseInt, objects.Promise, objects.Proxy, RangeError, ReferenceError,\n      objects.Reflect, objects.Set, SyntaxError, TypeError, Uint8Array,\n      Uint8ClampedArray, Uint16Array, Uint32Array, URIError,\n      objects.WeakMap, objects.WeakSet\n    ].forEach(function(ctor) {\n        Object.getOwnPropertyNames(ctor).map(add);\n        if (ctor.prototype) {\n            Object.getOwnPropertyNames(ctor.prototype).map(add);\n        }\n    });\n    function add(name) {\n        push_uniq(reserved, name);\n    }\n}\n\nfunction reserve_quoted_keys(ast, reserved) {\n    function add(name) {\n        push_uniq(reserved, name);\n    }\n\n    ast.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_ObjectKeyVal && node.quote) {\n            add(node.key);\n        } else if (node instanceof AST_ObjectProperty && node.quote) {\n            add(node.key.name);\n        } else if (node instanceof AST_Sub) {\n            addStrings(node.property, add);\n        }\n    }));\n}\n\nfunction addStrings(node, add) {\n    node.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_Sequence) {\n            addStrings(node.tail_node(), add);\n        } else if (node instanceof AST_String) {\n            add(node.value);\n        } else if (node instanceof AST_Conditional) {\n            addStrings(node.consequent, add);\n            addStrings(node.alternative, add);\n        }\n        return true;\n    }));\n}\n\nfunction mangle_properties(ast, options) {\n    options = defaults(options, {\n        builtins: false,\n        cache: null,\n        debug: false,\n        keep_quoted: false,\n        only_cache: false,\n        regex: null,\n        reserved: null,\n    }, true);\n\n    var reserved = options.reserved;\n    if (!Array.isArray(reserved)) reserved = [reserved];\n    if (!options.builtins) find_builtins(reserved);\n\n    var cname = -1;\n    var cache;\n    if (options.cache) {\n        cache = options.cache.props;\n        cache.each(function(mangled_name) {\n            push_uniq(reserved, mangled_name);\n        });\n    } else {\n        cache = new Dictionary();\n    }\n\n    var regex = options.regex;\n\n    // note debug is either false (disabled), or a string of the debug suffix to use (enabled).\n    // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'\n    // the same as passing an empty string.\n    var debug = options.debug !== false;\n    var debug_name_suffix;\n    if (debug) {\n        debug_name_suffix = (options.debug === true ? \"\" : options.debug);\n    }\n\n    var names_to_mangle = [];\n    var unmangleable = [];\n\n    // step 1: find candidates to mangle\n    ast.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_ObjectKeyVal) {\n            if (typeof node.key == \"string\") {\n                add(node.key);\n            }\n        } else if (node instanceof AST_ObjectProperty) {\n            // setter or getter, since KeyVal is handled above\n            add(node.key.name);\n        } else if (node instanceof AST_Dot) {\n            var root = node;\n            while (root.expression) {\n                root = root.expression;\n            }\n            if (!(root.thedef && root.thedef.undeclared)) add(node.property);\n        } else if (node instanceof AST_Sub) {\n            addStrings(node.property, add);\n        } else if (node instanceof AST_Call\n            && node.expression.print_to_string() == \"Object.defineProperty\") {\n            addStrings(node.args[1], add);\n        }\n    }));\n\n    // step 2: transform the tree, renaming properties\n    return ast.transform(new TreeTransformer(function(node) {\n        if (node instanceof AST_ObjectKeyVal) {\n            if (typeof node.key == \"string\") {\n                node.key = mangle(node.key);\n            }\n        } else if (node instanceof AST_ObjectProperty) {\n            // setter or getter\n            node.key.name = mangle(node.key.name);\n        } else if (node instanceof AST_Dot) {\n            node.property = mangle(node.property);\n        } else if (!options.keep_quoted && node instanceof AST_Sub) {\n            node.property = mangleStrings(node.property);\n        } else if (node instanceof AST_Call\n            && node.expression.print_to_string() == \"Object.defineProperty\") {\n            node.args[1] = mangleStrings(node.args[1]);\n        }\n    }));\n\n    // only function declarations after this line\n\n    function can_mangle(name) {\n        if (unmangleable.indexOf(name) >= 0) return false;\n        if (reserved.indexOf(name) >= 0) return false;\n        if (options.only_cache) {\n            return cache.has(name);\n        }\n        if (/^-?[0-9]+(\\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false;\n        return true;\n    }\n\n    function should_mangle(name) {\n        if (regex && !regex.test(name)) return false;\n        if (reserved.indexOf(name) >= 0) return false;\n        return cache.has(name)\n            || names_to_mangle.indexOf(name) >= 0;\n    }\n\n    function add(name) {\n        if (can_mangle(name))\n            push_uniq(names_to_mangle, name);\n\n        if (!should_mangle(name)) {\n            push_uniq(unmangleable, name);\n        }\n    }\n\n    function mangle(name) {\n        if (!should_mangle(name)) {\n            return name;\n        }\n\n        var mangled = cache.get(name);\n        if (!mangled) {\n            if (debug) {\n                // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.\n                var debug_mangled = \"_$\" + name + \"$\" + debug_name_suffix + \"_\";\n\n                if (can_mangle(debug_mangled)) {\n                    mangled = debug_mangled;\n                }\n            }\n\n            // either debug mode is off, or it is on and we could not use the mangled name\n            if (!mangled) {\n                do {\n                    mangled = base54(++cname);\n                } while (!can_mangle(mangled));\n            }\n\n            cache.set(name, mangled);\n        }\n        return mangled;\n    }\n\n    function mangleStrings(node) {\n        return node.transform(new TreeTransformer(function(node) {\n            if (node instanceof AST_Sequence) {\n                var last = node.expressions.length - 1;\n                node.expressions[last] = mangleStrings(node.expressions[last]);\n            } else if (node instanceof AST_String) {\n                node.value = mangle(node.value);\n            } else if (node instanceof AST_Conditional) {\n                node.consequent = mangleStrings(node.consequent);\n                node.alternative = mangleStrings(node.alternative);\n            }\n            return node;\n        }));\n    }\n}\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\n(function() {\n\n    var normalize_directives = function(body) {\n        var in_directive = true;\n\n        for (var i = 0; i < body.length; i++) {\n            if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {\n                body[i] = new AST_Directive({\n                    start: body[i].start,\n                    end: body[i].end,\n                    value: body[i].body.value\n                });\n            } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) {\n                in_directive = false;\n            }\n        }\n\n        return body;\n    };\n\n    var MOZ_TO_ME = {\n        Program: function(M) {\n            return new AST_Toplevel({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                body: normalize_directives(M.body.map(from_moz))\n            });\n        },\n        ArrayPattern: function(M) {\n            return new AST_Destructuring({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                names: M.elements.map(function(elm) {\n                    if (elm === null) {\n                        return new AST_Hole();\n                    }\n                    return from_moz(elm);\n                }),\n                is_array: true\n            });\n        },\n        ObjectPattern: function(M) {\n            return new AST_Destructuring({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                names: M.properties.map(from_moz),\n                is_array: false\n            });\n        },\n        AssignmentPattern: function(M) {\n            return new AST_Binary({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                left: from_moz(M.left),\n                operator: \"=\",\n                right: from_moz(M.right)\n            });\n        },\n        SpreadElement: function(M) {\n            return new AST_Expansion({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                expression: from_moz(M.argument)\n            });\n        },\n        RestElement: function(M) {\n            return new AST_Expansion({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                expression: from_moz(M.argument)\n            });\n        },\n        TemplateElement: function(M) {\n            return new AST_TemplateSegment({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                value: M.value.cooked,\n                raw: M.value.raw\n            });\n        },\n        TemplateLiteral: function(M) {\n            var segments = [];\n            for (var i = 0; i < M.quasis.length; i++) {\n                segments.push(from_moz(M.quasis[i]));\n                if (M.expressions[i]) {\n                    segments.push(from_moz(M.expressions[i]));\n                }\n            }\n            return new AST_TemplateString({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                segments: segments\n            });\n        },\n        TaggedTemplateExpression: function(M) {\n            return new AST_PrefixedTemplateString({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                template_string: from_moz(M.quasi),\n                prefix: from_moz(M.tag)\n            });\n        },\n        FunctionDeclaration: function(M) {\n            return new AST_Defun({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                name: from_moz(M.id),\n                argnames: M.params.map(from_moz),\n                is_generator: M.generator,\n                async: M.async,\n                body: normalize_directives(from_moz(M.body).body)\n            });\n        },\n        FunctionExpression: function(M) {\n            return new AST_Function({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                name: from_moz(M.id),\n                argnames: M.params.map(from_moz),\n                is_generator: M.generator,\n                async: M.async,\n                body: normalize_directives(from_moz(M.body).body)\n            });\n        },\n        ArrowFunctionExpression: function(M) {\n            return new AST_Arrow({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                argnames: M.params.map(from_moz),\n                body: from_moz(M.body),\n                async: M.async,\n            });\n        },\n        ExpressionStatement: function(M) {\n            return new AST_SimpleStatement({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                body: from_moz(M.expression)\n            });\n        },\n        TryStatement: function(M) {\n            var handlers = M.handlers || [M.handler];\n            if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {\n                throw new Error(\"Multiple catch clauses are not supported.\");\n            }\n            return new AST_Try({\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                body     : from_moz(M.block).body,\n                bcatch   : from_moz(handlers[0]),\n                bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null\n            });\n        },\n        Property: function(M) {\n            var key = M.key;\n            var args = {\n                start    : my_start_token(key || M.value),\n                end      : my_end_token(M.value),\n                key      : key.type == \"Identifier\" ? key.name : key.value,\n                value    : from_moz(M.value)\n            };\n            if (M.computed) {\n                args.key = from_moz(M.key);\n            }\n            if (M.method) {\n                args.is_generator = M.value.generator;\n                args.async = M.value.async;\n                if (!M.computed) {\n                    args.key = new AST_SymbolMethod({ name: args.key });\n                } else {\n                    args.key = from_moz(M.key);\n                }\n                return new AST_ConciseMethod(args);\n            }\n            if (M.kind == \"init\") {\n                if (key.type != \"Identifier\" && key.type != \"Literal\") {\n                    args.key = from_moz(key);\n                }\n                return new AST_ObjectKeyVal(args);\n            }\n            if (typeof args.key === \"string\" || typeof args.key === \"number\") {\n                args.key = new AST_SymbolMethod({\n                    name: args.key\n                });\n            }\n            args.value = new AST_Accessor(args.value);\n            if (M.kind == \"get\") return new AST_ObjectGetter(args);\n            if (M.kind == \"set\") return new AST_ObjectSetter(args);\n            if (M.kind == \"method\") {\n                args.async = M.value.async;\n                args.is_generator = M.value.generator;\n                args.quote = M.computed ? \"\\\"\" : null;\n                return new AST_ConciseMethod(args);\n            }\n        },\n        MethodDefinition: function(M) {\n            var args = {\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                key      : M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value }),\n                value    : from_moz(M.value),\n                static   : M.static,\n            };\n            if (M.kind == \"get\") {\n                return new AST_ObjectGetter(args);\n            }\n            if (M.kind == \"set\") {\n                return new AST_ObjectSetter(args);\n            }\n            args.is_generator = M.value.generator;\n            args.async = M.value.async;\n            return new AST_ConciseMethod(args);\n        },\n        ArrayExpression: function(M) {\n            return new AST_Array({\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                elements : M.elements.map(function(elem) {\n                    return elem === null ? new AST_Hole() : from_moz(elem);\n                })\n            });\n        },\n        ObjectExpression: function(M) {\n            return new AST_Object({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                properties : M.properties.map(function(prop) {\n                    if (prop.type === \"SpreadElement\") {\n                        return from_moz(prop);\n                    }\n                    prop.type = \"Property\";\n                    return from_moz(prop);\n                })\n            });\n        },\n        SequenceExpression: function(M) {\n            return new AST_Sequence({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                expressions: M.expressions.map(from_moz)\n            });\n        },\n        MemberExpression: function(M) {\n            return new (M.computed ? AST_Sub : AST_Dot)({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                property   : M.computed ? from_moz(M.property) : M.property.name,\n                expression : from_moz(M.object)\n            });\n        },\n        SwitchCase: function(M) {\n            return new (M.test ? AST_Case : AST_Default)({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                expression : from_moz(M.test),\n                body       : M.consequent.map(from_moz)\n            });\n        },\n        VariableDeclaration: function(M) {\n            return new (M.kind === \"const\" ? AST_Const :\n                        M.kind === \"let\" ? AST_Let : AST_Var)({\n                start       : my_start_token(M),\n                end         : my_end_token(M),\n                definitions : M.declarations.map(from_moz)\n            });\n        },\n        \n        ImportDeclaration: function(M) {\n            var imported_name = null;\n            var imported_names = null;\n            M.specifiers.forEach(function (specifier) {\n                if (specifier.type === \"ImportSpecifier\") {\n                    if (!imported_names) { imported_names = []; }\n                    imported_names.push(new AST_NameMapping({\n                        start: my_start_token(specifier),\n                        end: my_end_token(specifier),\n                        foreign_name: from_moz(specifier.imported),\n                        name: from_moz(specifier.local)\n                    }));\n                } else if (specifier.type === \"ImportDefaultSpecifier\") {\n                    imported_name = from_moz(specifier.local);\n                } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n                    if (!imported_names) { imported_names = []; }\n                    imported_names.push(new AST_NameMapping({\n                        start: my_start_token(specifier),\n                        end: my_end_token(specifier),\n                        foreign_name: new AST_SymbolImportForeign({ name: \"*\" }),\n                        name: from_moz(specifier.local)\n                    }));\n                }\n            });\n            return new AST_Import({\n                start       : my_start_token(M),\n                end         : my_end_token(M),\n                imported_name: imported_name,\n                imported_names : imported_names,\n                module_name : from_moz(M.source)\n            });\n        },\n        ExportAllDeclaration: function(M) {\n            return new AST_Export({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                exported_names: [\n                    new AST_NameMapping({\n                        name: new AST_SymbolExportForeign({ name: \"*\" }),\n                        foreign_name: new AST_SymbolExportForeign({ name: \"*\" })\n                    })\n                ],\n                module_name: from_moz(M.source)\n            });\n        },\n        ExportNamedDeclaration: function(M) {\n            return new AST_Export({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                exported_definition: from_moz(M.declaration),\n                exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function (specifier) {\n                    return new AST_NameMapping({\n                        foreign_name: from_moz(specifier.exported),\n                        name: from_moz(specifier.local)\n                    });\n                }) : null,\n                module_name: from_moz(M.source)\n            });\n        },\n        ExportDefaultDeclaration: function(M) {\n            return new AST_Export({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                exported_value: from_moz(M.declaration),\n                is_default: true\n            });\n        },\n        Literal: function(M) {\n            var val = M.value, args = {\n                start  : my_start_token(M),\n                end    : my_end_token(M)\n            };\n            if (val === null) return new AST_Null(args);\n            var rx = M.regex;\n            if (rx && rx.pattern) {\n                // RegExpLiteral as per ESTree AST spec\n                args.value = new RegExp(rx.pattern, rx.flags);\n                var raw = args.value.toString();\n                args.value.raw_source = rx.flags\n                    ? raw.substring(0, raw.length - rx.flags.length) + rx.flags\n                    : raw;\n                return new AST_RegExp(args);\n            } else if (rx) {\n                // support legacy RegExp\n                args.value = M.regex && M.raw ? M.raw : val;\n                return new AST_RegExp(args);\n            }\n            switch (typeof val) {\n              case \"string\":\n                args.value = val;\n                return new AST_String(args);\n              case \"number\":\n                args.value = val;\n                return new AST_Number(args);\n              case \"boolean\":\n                return new (val ? AST_True : AST_False)(args);\n            }\n        },\n        MetaProperty: function(M) {\n            if (M.meta.name === \"new\" && M.property.name === \"target\") {\n                return new AST_NewTarget({\n                    start: my_start_token(M),\n                    end: my_end_token(M)\n                });\n            }\n        },\n        Identifier: function(M) {\n            var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];\n            return new (  p.type == \"LabeledStatement\" ? AST_Label\n                        : p.type == \"VariableDeclarator\" && p.id === M ? (p.kind == \"const\" ? AST_SymbolConst : p.kind == \"let\" ? AST_SymbolLet : AST_SymbolVar)\n                        : /Import.*Specifier/.test(p.type) ? (p.local === M ? AST_SymbolImport : AST_SymbolImportForeign)\n                        : p.type == \"ExportSpecifier\" ? (p.local === M ? AST_SymbolExport : AST_SymbolExportForeign)\n                        : p.type == \"FunctionExpression\" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)\n                        : p.type == \"FunctionDeclaration\" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)\n                        : p.type == \"ArrowFunctionExpression\" ? (p.params.indexOf(M) !== -1) ? AST_SymbolFunarg : AST_SymbolRef\n                        : p.type == \"ClassExpression\" ? (p.id === M ? AST_SymbolClass : AST_SymbolRef)\n                        : p.type == \"Property\" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod)\n                        : p.type == \"ClassDeclaration\" ? (p.id === M ? AST_SymbolDefClass : AST_SymbolRef)\n                        : p.type == \"MethodDefinition\" ? (p.computed ? AST_SymbolRef : AST_SymbolMethod)\n                        : p.type == \"CatchClause\" ? AST_SymbolCatch\n                        : p.type == \"BreakStatement\" || p.type == \"ContinueStatement\" ? AST_LabelRef\n                        : AST_SymbolRef)({\n                            start : my_start_token(M),\n                            end   : my_end_token(M),\n                            name  : M.name\n                        });\n        }\n    };\n\n    MOZ_TO_ME.UpdateExpression =\n    MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {\n        var prefix = \"prefix\" in M ? M.prefix\n            : M.type == \"UnaryExpression\" ? true : false;\n        return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({\n            start      : my_start_token(M),\n            end        : my_end_token(M),\n            operator   : M.operator,\n            expression : from_moz(M.argument)\n        });\n    };\n\n    MOZ_TO_ME.ClassDeclaration =\n    MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) {\n        return new (M.type === \"ClassDeclaration\" ? AST_DefClass : AST_ClassExpression)({\n            start    : my_start_token(M),\n            end      : my_end_token(M),\n            name     : from_moz(M.id),\n            extends  : from_moz(M.superClass),\n            properties: M.body.body.map(from_moz)\n        });\n    };\n\n    map(\"EmptyStatement\", AST_EmptyStatement);\n    map(\"BlockStatement\", AST_BlockStatement, \"body@body\");\n    map(\"IfStatement\", AST_If, \"test>condition, consequent>body, alternate>alternative\");\n    map(\"LabeledStatement\", AST_LabeledStatement, \"label>label, body>body\");\n    map(\"BreakStatement\", AST_Break, \"label>label\");\n    map(\"ContinueStatement\", AST_Continue, \"label>label\");\n    map(\"WithStatement\", AST_With, \"object>expression, body>body\");\n    map(\"SwitchStatement\", AST_Switch, \"discriminant>expression, cases@body\");\n    map(\"ReturnStatement\", AST_Return, \"argument>value\");\n    map(\"ThrowStatement\", AST_Throw, \"argument>value\");\n    map(\"WhileStatement\", AST_While, \"test>condition, body>body\");\n    map(\"DoWhileStatement\", AST_Do, \"test>condition, body>body\");\n    map(\"ForStatement\", AST_For, \"init>init, test>condition, update>step, body>body\");\n    map(\"ForInStatement\", AST_ForIn, \"left>init, right>object, body>body\");\n    map(\"ForOfStatement\", AST_ForOf, \"left>init, right>object, body>body, await=await\");\n    map(\"AwaitExpression\", AST_Await, \"argument>expression\");\n    map(\"YieldExpression\", AST_Yield, \"argument>expression, delegate=is_star\");\n    map(\"DebuggerStatement\", AST_Debugger);\n    map(\"VariableDeclarator\", AST_VarDef, \"id>name, init>value\");\n    map(\"CatchClause\", AST_Catch, \"param>argname, body%body\");\n\n    map(\"ThisExpression\", AST_This);\n    map(\"Super\", AST_Super);\n    map(\"BinaryExpression\", AST_Binary, \"operator=operator, left>left, right>right\");\n    map(\"LogicalExpression\", AST_Binary, \"operator=operator, left>left, right>right\");\n    map(\"AssignmentExpression\", AST_Assign, \"operator=operator, left>left, right>right\");\n    map(\"ConditionalExpression\", AST_Conditional, \"test>condition, consequent>consequent, alternate>alternative\");\n    map(\"NewExpression\", AST_New, \"callee>expression, arguments@args\");\n    map(\"CallExpression\", AST_Call, \"callee>expression, arguments@args\");\n\n    def_to_moz(AST_Toplevel, function To_Moz_Program(M) {\n        return to_moz_scope(\"Program\", M);\n    });\n\n    def_to_moz(AST_Expansion, function To_Moz_Spread(M, parent) {\n        return {\n            type: to_moz_in_destructuring() ? \"RestElement\" : \"SpreadElement\",\n            argument: to_moz(M.expression)\n        };\n    });\n\n    def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {\n        return {\n            type: \"TaggedTemplateExpression\",\n            tag: to_moz(M.prefix),\n            quasi: to_moz(M.template_string)\n        };\n    });\n\n    def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {\n        var quasis = [];\n        var expressions = [];\n        for (var i = 0; i < M.segments.length; i++) {\n            if (i % 2 !== 0) {\n                expressions.push(to_moz(M.segments[i]));\n            } else {\n                quasis.push({\n                    type: \"TemplateElement\",\n                    value: {\n                        raw: M.segments[i].raw,\n                        cooked: M.segments[i].value\n                    },\n                    tail: i === M.segments.length - 1\n                });\n            }\n        }\n        return {\n            type: \"TemplateLiteral\",\n            quasis: quasis,\n            expressions: expressions\n        };\n    });\n\n    def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {\n        return {\n            type: \"FunctionDeclaration\",\n            id: to_moz(M.name),\n            params: M.argnames.map(to_moz),\n            generator: M.is_generator,\n            async: M.async,\n            body: to_moz_scope(\"BlockStatement\", M)\n        };\n    });\n\n    def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) {\n        var is_generator = parent.is_generator !== undefined ?\n            parent.is_generator : M.is_generator;\n        return {\n            type: \"FunctionExpression\",\n            id: to_moz(M.name),\n            params: M.argnames.map(to_moz),\n            generator: is_generator,\n            async: M.async,\n            body: to_moz_scope(\"BlockStatement\", M)\n        };\n    });\n\n    def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) {\n        var body = M.body instanceof Array ? {\n            type: \"BlockStatement\",\n            body: M.body.map(to_moz)\n        } : to_moz(M.body);\n        return {\n            type: \"ArrowFunctionExpression\",\n            params: M.argnames.map(to_moz),\n            async: M.async,\n            body: body\n        };\n    });\n\n    def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) {\n        if (M.is_array) {\n            return {\n                type: \"ArrayPattern\",\n                elements: M.names.map(to_moz)\n            };\n        }\n        return {\n            type: \"ObjectPattern\",\n            properties: M.names.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Directive, function To_Moz_Directive(M) {\n        return {\n            type: \"ExpressionStatement\",\n            expression: {\n                type: \"Literal\",\n                value: M.value\n            }\n        };\n    });\n\n    def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {\n        return {\n            type: \"ExpressionStatement\",\n            expression: to_moz(M.body)\n        };\n    });\n\n    def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {\n        return {\n            type: \"SwitchCase\",\n            test: to_moz(M.expression),\n            consequent: M.body.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Try, function To_Moz_TryStatement(M) {\n        return {\n            type: \"TryStatement\",\n            block: to_moz_block(M),\n            handler: to_moz(M.bcatch),\n            guardedHandlers: [],\n            finalizer: to_moz(M.bfinally)\n        };\n    });\n\n    def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {\n        return {\n            type: \"CatchClause\",\n            param: to_moz(M.argname),\n            guard: null,\n            body: to_moz_block(M)\n        };\n    });\n\n    def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {\n        return {\n            type: \"VariableDeclaration\",\n            kind:\n                M instanceof AST_Const ? \"const\" :\n                M instanceof AST_Let ? \"let\" : \"var\",\n            declarations: M.definitions.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) {\n        if (M.exported_names) {\n            if (M.exported_names[0].name.name === \"*\") {\n                return {\n                    type: \"ExportAllDeclaration\",\n                    source: to_moz(M.module_name)\n                };\n            }\n            return {\n                type: \"ExportNamedDeclaration\",\n                specifiers: M.exported_names.map(function (name_mapping) {\n                    return {\n                        type: \"ExportSpecifier\",\n                        exported: to_moz(name_mapping.foreign_name),\n                        local: to_moz(name_mapping.name)\n                    };\n                }),\n                declaration: to_moz(M.exported_definition),\n                source: to_moz(M.module_name)\n            };\n        }\n        return {\n            type: M.is_default ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\",\n            declaration: to_moz(M.exported_value || M.exported_definition)\n        };\n    });\n\n    def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) {\n        var specifiers = [];\n        if (M.imported_name) {\n            specifiers.push({\n                type: \"ImportDefaultSpecifier\",\n                local: to_moz(M.imported_name)\n            });\n        }\n        if (M.imported_names && M.imported_names[0].foreign_name.name === \"*\") {\n            specifiers.push({\n                type: \"ImportNamespaceSpecifier\",\n                local: to_moz(M.imported_names[0].name)\n            });\n        } else if (M.imported_names) {\n            M.imported_names.forEach(function(name_mapping) {\n                specifiers.push({\n                    type: \"ImportSpecifier\",\n                    local: to_moz(name_mapping.name),\n                    imported: to_moz(name_mapping.foreign_name)\n                });\n            });\n        }\n        return {\n            type: \"ImportDeclaration\",\n            specifiers: specifiers,\n            source: to_moz(M.module_name)\n        };\n    });\n\n    def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) {\n        return {\n            type: \"SequenceExpression\",\n            expressions: M.expressions.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {\n        var isComputed = M instanceof AST_Sub;\n        return {\n            type: \"MemberExpression\",\n            object: to_moz(M.expression),\n            computed: isComputed,\n            property: isComputed ? to_moz(M.property) : {type: \"Identifier\", name: M.property}\n        };\n    });\n\n    def_to_moz(AST_Unary, function To_Moz_Unary(M) {\n        return {\n            type: M.operator == \"++\" || M.operator == \"--\" ? \"UpdateExpression\" : \"UnaryExpression\",\n            operator: M.operator,\n            prefix: M instanceof AST_UnaryPrefix,\n            argument: to_moz(M.expression)\n        };\n    });\n\n    def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {\n        if (M.operator == \"=\" && to_moz_in_destructuring()) {\n            return {\n                type: \"AssignmentPattern\",\n                left: to_moz(M.left),\n                right: to_moz(M.right)\n            };\n        }\n        return {\n            type: M.operator == \"&&\" || M.operator == \"||\" ? \"LogicalExpression\" : \"BinaryExpression\",\n            left: to_moz(M.left),\n            operator: M.operator,\n            right: to_moz(M.right)\n        };\n    });\n\n    def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {\n        return {\n            type: \"ArrayExpression\",\n            elements: M.elements.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {\n        return {\n            type: \"ObjectExpression\",\n            properties: M.properties.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {\n        var key = M.key instanceof AST_Node ? to_moz(M.key) : {\n            type: \"Identifier\",\n            value: M.key\n        };\n        if (typeof M.key === \"number\") {\n            key = {\n                type: \"Literal\",\n                value: Number(M.key)\n            };\n        }\n        if (typeof M.key === \"string\") {\n            key = {\n                type: \"Identifier\",\n                name: M.key\n            };\n        }\n        var kind;\n        var string_or_num = typeof M.key === \"string\" || typeof M.key === \"number\";\n        var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef;\n        if (M instanceof AST_ObjectKeyVal) {\n            kind = \"init\";\n            computed = !string_or_num;\n        } else\n        if (M instanceof AST_ObjectGetter) {\n            kind = \"get\";\n        } else\n        if (M instanceof AST_ObjectSetter) {\n            kind = \"set\";\n        }\n        if (parent instanceof AST_Class) {\n            return {\n                type: \"MethodDefinition\",\n                computed: computed,\n                kind: kind,\n                static: M.static,\n                key: to_moz(M.key),\n                value: to_moz(M.value)\n            };\n        }\n        return {\n            type: \"Property\",\n            computed: computed,\n            kind: kind,\n            key: key,\n            value: to_moz(M.value)\n        };\n    });\n\n    def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) {\n        if (parent instanceof AST_Object) {\n            return {\n                type: \"Property\",\n                computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,\n                kind: \"init\",\n                method: true,\n                shorthand: false,\n                key: to_moz(M.key),\n                value: to_moz(M.value)\n            };\n        }\n        return {\n            type: \"MethodDefinition\",\n            computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,\n            kind: M.key === \"constructor\" ? \"constructor\" : \"method\",\n            static: M.static,\n            key: to_moz(M.key),\n            value: to_moz(M.value)\n        };\n    });\n\n    def_to_moz(AST_Class, function To_Moz_Class(M) {\n        var type = M instanceof AST_ClassExpression ? \"ClassExpression\" : \"ClassDeclaration\";\n        return {\n            type: type,\n            superClass: to_moz(M.extends),\n            id: M.name ? to_moz(M.name) : null,\n            body: {\n                type: \"ClassBody\",\n                body: M.properties.map(to_moz)\n            }\n        };\n    });\n\n    def_to_moz(AST_NewTarget, function To_Moz_MetaProperty(M) {\n        return {\n            type: \"MetaProperty\",\n            meta: {\n                type: \"Identifier\",\n                name: \"new\"\n            },\n            property: {\n                type: \"Identifier\",\n                name: \"target\"\n            }\n        };\n    });\n\n    def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) {\n        if (M instanceof AST_SymbolMethod && parent.quote) {\n            return {\n                type: \"Literal\",\n                value: M.name\n            };\n        }\n        var def = M.definition();\n        return {\n            type: \"Identifier\",\n            name: def ? def.mangled_name || def.name : M.name\n        };\n    });\n\n    def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {\n        var pattern = M.value.source;\n        var flags = M.value.toString().match(/[gimuys]*$/)[0];\n        return {\n            type: \"Literal\",\n            value: new RegExp(pattern, flags),\n            raw: M.value.raw_source,\n            regex: {\n                pattern: pattern,\n                flags: flags,\n            }\n        };\n    });\n\n    def_to_moz(AST_Constant, function To_Moz_Literal(M) {\n        var value = M.value;\n        if (typeof value === \"number\" && (value < 0 || (value === 0 && 1 / value < 0))) {\n            return {\n                type: \"UnaryExpression\",\n                operator: \"-\",\n                prefix: true,\n                argument: {\n                    type: \"Literal\",\n                    value: -value,\n                    raw: M.start.raw\n                }\n            };\n        }\n        return {\n            type: \"Literal\",\n            value: value,\n            raw: M.start.raw\n        };\n    });\n\n    def_to_moz(AST_Atom, function To_Moz_Atom(M) {\n        return {\n            type: \"Identifier\",\n            name: String(M.value)\n        };\n    });\n\n    AST_Boolean.DEFMETHOD(\"to_mozilla_ast\", AST_Constant.prototype.to_mozilla_ast);\n    AST_Null.DEFMETHOD(\"to_mozilla_ast\", AST_Constant.prototype.to_mozilla_ast);\n    AST_Hole.DEFMETHOD(\"to_mozilla_ast\", function To_Moz_ArrayHole() { return null; });\n\n    AST_Block.DEFMETHOD(\"to_mozilla_ast\", AST_BlockStatement.prototype.to_mozilla_ast);\n    AST_Lambda.DEFMETHOD(\"to_mozilla_ast\", AST_Function.prototype.to_mozilla_ast);\n\n    /* -----[ tools ]----- */\n\n    function raw_token(moznode) {\n        if (moznode.type == \"Literal\") {\n            return moznode.raw != null ? moznode.raw : moznode.value + \"\";\n        }\n    }\n\n    function my_start_token(moznode) {\n        var loc = moznode.loc, start = loc && loc.start;\n        var range = moznode.range;\n        return new AST_Token({\n            file    : loc && loc.source,\n            line    : start && start.line,\n            col     : start && start.column,\n            pos     : range ? range[0] : moznode.start,\n            endline : start && start.line,\n            endcol  : start && start.column,\n            endpos  : range ? range[0] : moznode.start,\n            raw     : raw_token(moznode),\n        });\n    }\n\n    function my_end_token(moznode) {\n        var loc = moznode.loc, end = loc && loc.end;\n        var range = moznode.range;\n        return new AST_Token({\n            file    : loc && loc.source,\n            line    : end && end.line,\n            col     : end && end.column,\n            pos     : range ? range[1] : moznode.end,\n            endline : end && end.line,\n            endcol  : end && end.column,\n            endpos  : range ? range[1] : moznode.end,\n            raw     : raw_token(moznode),\n        });\n    }\n\n    function map(moztype, mytype, propmap) {\n        var moz_to_me = \"function From_Moz_\" + moztype + \"(M){\\n\";\n        moz_to_me += \"return new U2.\" + mytype.name + \"({\\n\" +\n            \"start: my_start_token(M),\\n\" +\n            \"end: my_end_token(M)\";\n\n        var me_to_moz = \"function To_Moz_\" + moztype + \"(M){\\n\";\n        me_to_moz += \"return {\\n\" +\n            \"type: \" + JSON.stringify(moztype);\n\n        if (propmap) propmap.split(/\\s*,\\s*/).forEach(function(prop) {\n            var m = /([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop);\n            if (!m) throw new Error(\"Can't understand property map: \" + prop);\n            var moz = m[1], how = m[2], my = m[3];\n            moz_to_me += \",\\n\" + my + \": \";\n            me_to_moz += \",\\n\" + moz + \": \";\n            switch (how) {\n                case \"@\":\n                    moz_to_me += \"M.\" + moz + \".map(from_moz)\";\n                    me_to_moz += \"M.\" +  my + \".map(to_moz)\";\n                    break;\n                case \">\":\n                    moz_to_me += \"from_moz(M.\" + moz + \")\";\n                    me_to_moz += \"to_moz(M.\" + my + \")\";\n                    break;\n                case \"=\":\n                    moz_to_me += \"M.\" + moz;\n                    me_to_moz += \"M.\" + my;\n                    break;\n                case \"%\":\n                    moz_to_me += \"from_moz(M.\" + moz + \").body\";\n                    me_to_moz += \"to_moz_block(M)\";\n                    break;\n                default:\n                    throw new Error(\"Can't understand operator in propmap: \" + prop);\n            }\n        });\n\n        moz_to_me += \"\\n})\\n}\";\n        me_to_moz += \"\\n}\\n}\";\n\n        //moz_to_me = parse(moz_to_me).print_to_string({ beautify: true });\n        //me_to_moz = parse(me_to_moz).print_to_string({ beautify: true });\n        //console.log(moz_to_me);\n\n        moz_to_me = new Function(\"U2\", \"my_start_token\", \"my_end_token\", \"from_moz\", \"return(\" + moz_to_me + \")\")(\n            exports, my_start_token, my_end_token, from_moz\n        );\n        me_to_moz = new Function(\"to_moz\", \"to_moz_block\", \"to_moz_scope\", \"return(\" + me_to_moz + \")\")(\n            to_moz, to_moz_block, to_moz_scope\n        );\n        MOZ_TO_ME[moztype] = moz_to_me;\n        def_to_moz(mytype, me_to_moz);\n    }\n\n    var FROM_MOZ_STACK = null;\n\n    function from_moz(node) {\n        FROM_MOZ_STACK.push(node);\n        var ret = node != null ? MOZ_TO_ME[node.type](node) : null;\n        FROM_MOZ_STACK.pop();\n        return ret;\n    }\n\n    AST_Node.from_mozilla_ast = function(node) {\n        var save_stack = FROM_MOZ_STACK;\n        FROM_MOZ_STACK = [];\n        var ast = from_moz(node);\n        FROM_MOZ_STACK = save_stack;\n        return ast;\n    };\n\n    function set_moz_loc(mynode, moznode, myparent) {\n        var start = mynode.start;\n        var end = mynode.end;\n        if (start.pos != null && end.endpos != null) {\n            moznode.range = [start.pos, end.endpos];\n        }\n        if (start.line) {\n            moznode.loc = {\n                start: {line: start.line, column: start.col},\n                end: end.endline ? {line: end.endline, column: end.endcol} : null\n            };\n            if (start.file) {\n                moznode.loc.source = start.file;\n            }\n        }\n        return moznode;\n    }\n\n    function def_to_moz(mytype, handler) {\n        mytype.DEFMETHOD(\"to_mozilla_ast\", function(parent) {\n            return set_moz_loc(this, handler(this, parent));\n        });\n    }\n\n    var TO_MOZ_STACK = null;\n\n    function to_moz(node) {\n        if (TO_MOZ_STACK === null) { TO_MOZ_STACK = []; }\n        TO_MOZ_STACK.push(node);\n        var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null;\n        TO_MOZ_STACK.pop();\n        if (TO_MOZ_STACK.length === 0) { TO_MOZ_STACK = null; }\n        return ast;\n    }\n\n    function to_moz_in_destructuring() {\n        var i = TO_MOZ_STACK.length;\n        while (i--) {\n            if (TO_MOZ_STACK[i] instanceof AST_Destructuring) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function to_moz_block(node) {\n        return {\n            type: \"BlockStatement\",\n            body: node.body.map(to_moz)\n        };\n    }\n\n    function to_moz_scope(type, node) {\n        var body = node.body.map(to_moz);\n        if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) {\n            body.unshift(to_moz(new AST_EmptyStatement(node.body[0])));\n        }\n        return {\n            type: type,\n            body: body\n        };\n    }\n})();\n","\"use strict\";\n\nvar to_ascii = typeof atob == \"undefined\" ? function(b64) {\n    if (Buffer.from && Buffer.from !== Uint8Array.from) {\n      // Node >= 4.5.0\n      return Buffer.from(b64, \"base64\").toString();\n    } else {\n      // Node < 4.5.0, old API, manual safeguards\n      if (typeof b64 !== \"string\") throw new Errror(\"\\\"b64\\\" must be a string\");\n      return new Buffer(b64, \"base64\").toString();\n    }\n} : atob;\nvar to_base64 = typeof btoa == \"undefined\" ? function(str) {\n    if (Buffer.from && Buffer.from !== Uint8Array.from) {\n      // Node >= 4.5.0\n      return Buffer.from(str).toString(\"base64\");\n    } else {\n      // Node < 4.5.0, old API, manual safeguards\n      if (typeof str !== \"string\") throw new Errror(\"\\\"str\\\" must be a string\");\n      return new Buffer(str).toString(\"base64\");\n    }\n} : btoa;\n\nfunction read_source_map(code) {\n    var match = /\\n\\/\\/# sourceMappingURL=data:application\\/json(;.*?)?;base64,(.*)/.exec(code);\n    if (!match) {\n        AST_Node.warn(\"inline source map not found\");\n        return null;\n    }\n    return to_ascii(match[2]);\n}\n\nfunction set_shorthand(name, options, keys) {\n    if (options[name]) {\n        keys.forEach(function(key) {\n            if (options[key]) {\n                if (typeof options[key] != \"object\") options[key] = {};\n                if (!(name in options[key])) options[key][name] = options[name];\n            }\n        });\n    }\n}\n\nfunction init_cache(cache) {\n    if (!cache) return;\n    if (!(\"props\" in cache)) {\n        cache.props = new Dictionary();\n    } else if (!(cache.props instanceof Dictionary)) {\n        cache.props = Dictionary.fromObject(cache.props);\n    }\n}\n\nfunction to_json(cache) {\n    return {\n        props: cache.props.toObject()\n    };\n}\n\nfunction minify(files, options) {\n    var warn_function = AST_Node.warn_function;\n    try {\n        options = defaults(options, {\n            compress: {},\n            ecma: undefined,\n            enclose: false,\n            ie8: false,\n            keep_classnames: undefined,\n            keep_fnames: false,\n            mangle: {},\n            module: false,\n            nameCache: null,\n            output: {},\n            parse: {},\n            rename: undefined,\n            safari10: false,\n            sourceMap: false,\n            timings: false,\n            toplevel: false,\n            warnings: false,\n            wrap: false,\n        }, true);\n        var timings = options.timings && {\n            start: Date.now()\n        };\n        if (options.keep_classnames === undefined) {\n            options.keep_classnames = options.keep_fnames;\n        }\n        if (options.rename === undefined) {\n            options.rename = options.compress && options.mangle;\n        }\n        set_shorthand(\"ecma\", options, [ \"parse\", \"compress\", \"output\" ]);\n        set_shorthand(\"ie8\", options, [ \"compress\", \"mangle\", \"output\" ]);\n        set_shorthand(\"keep_classnames\", options, [ \"compress\", \"mangle\" ]);\n        set_shorthand(\"keep_fnames\", options, [ \"compress\", \"mangle\" ]);\n        set_shorthand(\"module\", options, [ \"parse\", \"compress\", \"mangle\" ]);\n        set_shorthand(\"safari10\", options, [ \"mangle\", \"output\" ]);\n        set_shorthand(\"toplevel\", options, [ \"compress\", \"mangle\" ]);\n        set_shorthand(\"warnings\", options, [ \"compress\" ]);\n        var quoted_props;\n        if (options.mangle) {\n            options.mangle = defaults(options.mangle, {\n                cache: options.nameCache && (options.nameCache.vars || {}),\n                eval: false,\n                ie8: false,\n                keep_classnames: false,\n                keep_fnames: false,\n                module: false,\n                properties: false,\n                reserved: [],\n                safari10: false,\n                toplevel: false,\n            }, true);\n            if (options.mangle.properties) {\n                if (typeof options.mangle.properties != \"object\") {\n                    options.mangle.properties = {};\n                }\n                if (options.mangle.properties.keep_quoted) {\n                    quoted_props = options.mangle.properties.reserved;\n                    if (!Array.isArray(quoted_props)) quoted_props = [];\n                    options.mangle.properties.reserved = quoted_props;\n                }\n                if (options.nameCache && !(\"cache\" in options.mangle.properties)) {\n                    options.mangle.properties.cache = options.nameCache.props || {};\n                }\n            }\n            init_cache(options.mangle.cache);\n            init_cache(options.mangle.properties.cache);\n        }\n        if (options.sourceMap) {\n            options.sourceMap = defaults(options.sourceMap, {\n                content: null,\n                filename: null,\n                includeSources: false,\n                root: null,\n                url: null,\n            }, true);\n        }\n        var warnings = [];\n        if (options.warnings && !AST_Node.warn_function) {\n            AST_Node.warn_function = function(warning) {\n                warnings.push(warning);\n            };\n        }\n        if (timings) timings.parse = Date.now();\n        var toplevel;\n        if (files instanceof AST_Toplevel) {\n            toplevel = files;\n        } else {\n            if (typeof files == \"string\") {\n                files = [ files ];\n            }\n            options.parse = options.parse || {};\n            options.parse.toplevel = null;\n            for (var name in files) if (HOP(files, name)) {\n                options.parse.filename = name;\n                options.parse.toplevel = parse(files[name], options.parse);\n                if (options.sourceMap && options.sourceMap.content == \"inline\") {\n                    if (Object.keys(files).length > 1)\n                        throw new Error(\"inline source map only works with singular input\");\n                    options.sourceMap.content = read_source_map(files[name]);\n                }\n            }\n            toplevel = options.parse.toplevel;\n        }\n        if (quoted_props) {\n            reserve_quoted_keys(toplevel, quoted_props);\n        }\n        if (options.wrap) {\n            toplevel = toplevel.wrap_commonjs(options.wrap);\n        }\n        if (options.enclose) {\n            toplevel = toplevel.wrap_enclose(options.enclose);\n        }\n        if (timings) timings.rename = Date.now();\n        // disable rename on harmony due to expand_names bug in for-of loops\n        // https://github.com/mishoo/UglifyJS2/issues/2794\n        if (0 && options.rename) {\n            toplevel.figure_out_scope(options.mangle);\n            toplevel.expand_names(options.mangle);\n        }\n        if (timings) timings.compress = Date.now();\n        if (options.compress) toplevel = new Compressor(options.compress).compress(toplevel);\n        if (timings) timings.scope = Date.now();\n        if (options.mangle) toplevel.figure_out_scope(options.mangle);\n        if (timings) timings.mangle = Date.now();\n        if (options.mangle) {\n            base54.reset();\n            toplevel.compute_char_frequency(options.mangle);\n            toplevel.mangle_names(options.mangle);\n        }\n        if (timings) timings.properties = Date.now();\n        if (options.mangle && options.mangle.properties) {\n            toplevel = mangle_properties(toplevel, options.mangle.properties);\n        }\n        if (timings) timings.output = Date.now();\n        var result = {};\n        if (options.output.ast) {\n            result.ast = toplevel;\n        }\n        if (!HOP(options.output, \"code\") || options.output.code) {\n            if (options.sourceMap) {\n                if (typeof options.sourceMap.content == \"string\") {\n                    options.sourceMap.content = JSON.parse(options.sourceMap.content);\n                }\n                options.output.source_map = SourceMap({\n                    file: options.sourceMap.filename,\n                    orig: options.sourceMap.content,\n                    root: options.sourceMap.root\n                });\n                if (options.sourceMap.includeSources) {\n                    if (files instanceof AST_Toplevel) {\n                        throw new Error(\"original source content unavailable\");\n                    } else for (var name in files) if (HOP(files, name)) {\n                        options.output.source_map.get().setSourceContent(name, files[name]);\n                    }\n                }\n            }\n            delete options.output.ast;\n            delete options.output.code;\n            var stream = OutputStream(options.output);\n            toplevel.print(stream);\n            result.code = stream.get();\n            if (options.sourceMap) {\n                result.map = options.output.source_map.toString();\n                if (options.sourceMap.url == \"inline\") {\n                    result.code += \"\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,\" + to_base64(result.map);\n                } else if (options.sourceMap.url) {\n                    result.code += \"\\n//# sourceMappingURL=\" + options.sourceMap.url;\n                }\n            }\n        }\n        if (options.nameCache && options.mangle) {\n            if (options.mangle.cache) options.nameCache.vars = to_json(options.mangle.cache);\n            if (options.mangle.properties && options.mangle.properties.cache) {\n                options.nameCache.props = to_json(options.mangle.properties.cache);\n            }\n        }\n        if (timings) {\n            timings.end = Date.now();\n            result.timings = {\n                parse: 1e-3 * (timings.rename - timings.parse),\n                rename: 1e-3 * (timings.compress - timings.rename),\n                compress: 1e-3 * (timings.scope - timings.compress),\n                scope: 1e-3 * (timings.mangle - timings.scope),\n                mangle: 1e-3 * (timings.properties - timings.mangle),\n                properties: 1e-3 * (timings.output - timings.properties),\n                output: 1e-3 * (timings.end - timings.output),\n                total: 1e-3 * (timings.end - timings.start)\n            };\n        }\n        if (warnings.length) {\n            result.warnings = warnings;\n        }\n        return result;\n    } catch (ex) {\n        return { error: ex };\n    } finally {\n        AST_Node.warn_function = warn_function;\n    }\n}\n","exports[\"Dictionary\"] = Dictionary;\nexports[\"minify\"] = minify;\nexports[\"parse\"] = parse;\nexports[\"push_uniq\"] = push_uniq;\nexports[\"OutputStream\"] = OutputStream;\nexports[\"TreeTransformer\"] = TreeTransformer;\nexports[\"TreeWalker\"] = TreeWalker;\nexports[\"string_template\"] = string_template;\nexports[\"Compressor\"] = Compressor;\nexports[\"defaults\"] = defaults;\nexports[\"base54\"] = base54;\nexports[\"mangle_properties\"] = mangle_properties;\nexports[\"reserve_quoted_keys\"] = reserve_quoted_keys;\nexports[\"to_ascii\"] = to_ascii;\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\n// a small wrapper around fitzgen's source-map library\nfunction SourceMap(options) {\n    options = defaults(options, {\n        file : null,\n        root : null,\n        orig : null,\n\n        orig_line_diff : 0,\n        dest_line_diff : 0,\n    });\n    var generator = new MOZ_SourceMap.SourceMapGenerator({\n        file       : options.file,\n        sourceRoot : options.root\n    });\n    var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig);\n\n    if (orig_map && Array.isArray(options.orig.sources)) {\n        orig_map._sources.toArray().forEach(function(source) {\n            var sourceContent = orig_map.sourceContentFor(source, true);\n            if (sourceContent) {\n                generator.setSourceContent(source, sourceContent);\n            }\n        });\n    }\n\n    function add(source, gen_line, gen_col, orig_line, orig_col, name) {\n        if (orig_map) {\n            var info = orig_map.originalPositionFor({\n                line: orig_line,\n                column: orig_col\n            });\n            if (info.source === null) {\n                return;\n            }\n            source = info.source;\n            orig_line = info.line;\n            orig_col = info.column;\n            name = info.name || name;\n        }\n        generator.addMapping({\n            generated : { line: gen_line + options.dest_line_diff, column: gen_col },\n            original  : { line: orig_line + options.orig_line_diff, column: orig_col },\n            source    : source,\n            name      : name\n        });\n    }\n    return {\n        add        : add,\n        get        : function() { return generator; },\n        toString   : function() { return JSON.stringify(generator.toJSON()); }\n    };\n}\n",null]}